From 2cbbe3f8693675a97cf07299d2458dd2747c09c5 Mon Sep 17 00:00:00 2001 From: Tomer Shlasky Date: Wed, 7 Oct 2026 10:31:45 +0000 Subject: [PATCH 1/2] feat: add lucy-vton-3.6 realtime model at 720p Mirrors DecartAI/sdk#217. The model is already served in production; this only makes it reachable through the typed SDK surface. - 1280x720 at 30 fps. - No fastSpeed: lucy-vton-3.6 is not offered on the fast tier, so the withFast set in test_models.cpp is deliberately unchanged. - lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name. kRealtime's std::array size literal goes 7 -> 8. --- include/decart/models.h | 4 ++-- src/models.cpp | 4 +++- tests/test_models.cpp | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/include/decart/models.h b/include/decart/models.h index 1c19690..3551f79 100644 --- a/include/decart/models.h +++ b/include/decart/models.h @@ -34,8 +34,8 @@ namespace models { /// Resolve a realtime model by name. /// /// Accepts canonical names ("lucy-2.1", "lucy-2.5", "lucy-vton-3.5", -/// "lucy-restyle-2") and server-resolved aliases ("lucy-latest", -/// "lucy-vton-latest", "lucy-restyle-latest"). +/// "lucy-vton-3.6", "lucy-restyle-2") and server-resolved aliases +/// ("lucy-latest", "lucy-vton-latest", "lucy-restyle-latest"). /// /// @throws Exception(ErrorCode::ModelNotFound) if the name is unknown. ModelDefinition realtime(std::string_view name); diff --git a/src/models.cpp b/src/models.cpp index 5790132..83b98f2 100644 --- a/src/models.cpp +++ b/src/models.cpp @@ -22,11 +22,13 @@ struct Entry { // Realtime model registry. Kept in sync with the shared model list across the // Decart SDKs. All realtime models stream over `/v1/stream`. -constexpr std::array kRealtime = {{ +constexpr std::array kRealtime = {{ // Canonical {"lucy-2.1", 30, 1088, 624, true}, {"lucy-2.5", 30, 1280, 720, true, /*fastSpeed=*/true}, {"lucy-vton-3.5", 30, 1280, 720, true, /*fastSpeed=*/true}, + // No fastSpeed: lucy-vton-3.6 is not offered on the fast tier. + {"lucy-vton-3.6", 30, 1280, 720, true}, {"lucy-restyle-2", 30, 1280, 704, true}, // Server-resolved "latest" aliases {"lucy-latest", 30, 1088, 624, false, /*fastSpeed=*/true}, diff --git a/tests/test_models.cpp b/tests/test_models.cpp index 49a6962..d27423b 100644 --- a/tests/test_models.cpp +++ b/tests/test_models.cpp @@ -25,6 +25,15 @@ TEST_CASE("realtime() resolves canonical models with correct geometry") { CHECK(vton35.width == 1280); CHECK(vton35.height == 720); + auto vton36 = models::realtime("lucy-vton-3.6"); + CHECK(vton36.name == "lucy-vton-3.6"); + CHECK(vton36.urlPath == "/v1/stream"); + CHECK(vton36.fps == 30); + CHECK(vton36.width == 1280); + CHECK(vton36.height == 720); + // 3.6 is not offered on the fast tier, unlike 3.5. + CHECK(vton36.supportedSpeeds.empty()); + auto lucy25 = models::realtime("lucy-2.5"); CHECK(lucy25.name == "lucy-2.5"); CHECK(lucy25.urlPath == "/v1/stream"); @@ -76,8 +85,10 @@ TEST_CASE("supportedSpeeds advertises fast mode on exactly the lucy-2.5 and lucy CHECK(m.supportedSpeeds.empty()); } } - // Every other realtime model (lucy-2.1, lucy-restyle-2, lucy-restyle-latest) is standard-only. + // Every other realtime model (lucy-2.1, lucy-vton-3.6, lucy-restyle-2, lucy-restyle-latest) + // is standard-only. CHECK(models::realtime("lucy-2.1").supportedSpeeds.empty()); + CHECK(models::realtime("lucy-vton-3.6").supportedSpeeds.empty()); CHECK(models::realtime("lucy-restyle-2").supportedSpeeds.empty()); CHECK(models::realtime("lucy-restyle-latest").supportedSpeeds.empty()); } @@ -85,6 +96,6 @@ TEST_CASE("supportedSpeeds advertises fast mode on exactly the lucy-2.5 and lucy TEST_CASE("listRealtime() honors canonicalOnly") { auto all = models::listRealtime(/*canonicalOnly=*/false); auto canonical = models::listRealtime(/*canonicalOnly=*/true); - CHECK(canonical.size() == 4); + CHECK(canonical.size() == 5); CHECK(all.size() > canonical.size()); } From 594193f771b3ae6f0ae4aede92449d1ffc74c126 Mon Sep 17 00:00:00 2001 From: Tomer Shlasky Date: Wed, 7 Oct 2026 11:40:03 +0000 Subject: [PATCH 2/2] chore: drop the comment explaining an absent field Per review on the JS SDK: fastSpeed is simply not set for lucy-vton-3.6, so a comment saying so is state that can go stale without anything catching it. --- src/models.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/models.cpp b/src/models.cpp index 83b98f2..60dc5cd 100644 --- a/src/models.cpp +++ b/src/models.cpp @@ -27,7 +27,6 @@ constexpr std::array kRealtime = {{ {"lucy-2.1", 30, 1088, 624, true}, {"lucy-2.5", 30, 1280, 720, true, /*fastSpeed=*/true}, {"lucy-vton-3.5", 30, 1280, 720, true, /*fastSpeed=*/true}, - // No fastSpeed: lucy-vton-3.6 is not offered on the fast tier. {"lucy-vton-3.6", 30, 1280, 720, true}, {"lucy-restyle-2", 30, 1280, 704, true}, // Server-resolved "latest" aliases