From 7522faaaa7fab7eea5d3dea24f76cd406fa91da9 Mon Sep 17 00:00:00 2001 From: Tomer Shlasky Date: Mon, 14 Sep 2026 15:08:54 +0300 Subject: [PATCH] feat: remove retired lucy-vton-2 and lucy-vton-3 model IDs Claude-Session: https://claude.ai/code/session_01TNMMxPdhY2U2YZpnbKxZEN --- decart/models.py | 54 ---------------------------------------- examples/video_tryon.py | 4 +-- playground/playground.py | 2 +- tests/test_models.py | 46 +++------------------------------- 4 files changed, 6 insertions(+), 100 deletions(-) diff --git a/decart/models.py b/decart/models.py index 97aa076..5a3ede9 100644 --- a/decart/models.py +++ b/decart/models.py @@ -8,24 +8,18 @@ # Canonical names "lucy-2.1", "lucy-2.5", - "lucy-vton-2", - "lucy-vton-3", "lucy-vton-3.5", "lucy-restyle-2", # Latest aliases (server-side resolution) "lucy-latest", "lucy-vton-latest", "lucy-restyle-latest", - # Deprecated names - "lucy-2.1-vton-2", ] VideoModels = Literal[ # Canonical names "lucy-clip", "lucy-2.1", "lucy-2.5", - "lucy-vton-2", - "lucy-vton-3", "lucy-vton-3.5", "lucy-restyle-2", # Latest aliases (server-side resolution) @@ -34,7 +28,6 @@ "lucy-restyle-latest", "lucy-clip-latest", # Deprecated / alias names - "lucy-2.1-vton-2", "lucy-pro-v2v", "lucy-restyle-v2v", ] @@ -52,8 +45,6 @@ # Video aliases "lucy-pro-v2v": "lucy-clip", "lucy-restyle-v2v": "lucy-restyle-2", - # VTON aliases - "lucy-2.1-vton-2": "lucy-vton-2", # Image aliases "lucy-pro-i2i": "lucy-image-2", } @@ -215,20 +206,6 @@ class ImageToImageInput(DecartBaseModel): width=1280, height=720, ), - "lucy-vton-2": ModelDefinition( - name="lucy-vton-2", - url_path="/v1/stream", - fps=30, - width=1088, - height=624, - ), - "lucy-vton-3": ModelDefinition( - name="lucy-vton-3", - url_path="/v1/stream", - fps=30, - width=1088, - height=624, - ), "lucy-vton-3.5": ModelDefinition( name="lucy-vton-3.5", url_path="/v1/stream", @@ -236,13 +213,6 @@ class ImageToImageInput(DecartBaseModel): width=1280, height=720, ), - "lucy-2.1-vton-2": ModelDefinition( - name="lucy-2.1-vton-2", - url_path="/v1/stream", - fps=30, - width=1088, - height=624, - ), "lucy-restyle-latest": ModelDefinition( name="lucy-restyle-latest", url_path="/v1/stream", @@ -277,22 +247,6 @@ class ImageToImageInput(DecartBaseModel): height=720, input_schema=VideoEdit2Input, ), - "lucy-vton-2": ModelDefinition( - name="lucy-vton-2", - url_path="/v1/jobs/lucy-vton-2", - fps=20, - width=1088, - height=624, - input_schema=VideoEdit2Input, - ), - "lucy-vton-3": ModelDefinition( - name="lucy-vton-3", - url_path="/v1/jobs/lucy-vton-3", - fps=20, - width=1088, - height=624, - input_schema=VideoEdit2Input, - ), "lucy-vton-3.5": ModelDefinition( name="lucy-vton-3.5", url_path="/v1/jobs/lucy-vton-3.5", @@ -301,14 +255,6 @@ class ImageToImageInput(DecartBaseModel): height=720, input_schema=VideoEdit2Input, ), - "lucy-2.1-vton-2": ModelDefinition( - name="lucy-2.1-vton-2", - url_path="/v1/jobs/lucy-2.1-vton-2", - fps=20, - width=1088, - height=624, - input_schema=VideoEdit2Input, - ), "lucy-restyle-2": ModelDefinition( name="lucy-restyle-2", url_path="/v1/jobs/lucy-restyle-2", diff --git a/examples/video_tryon.py b/examples/video_tryon.py index 6aaeafa..c2e88c9 100644 --- a/examples/video_tryon.py +++ b/examples/video_tryon.py @@ -1,7 +1,7 @@ """ Virtual Try-On Example -This example demonstrates how to use the lucy-vton-3 model to perform +This example demonstrates how to use the lucy-vton-latest model to perform virtual try-on on a video using a reference garment image. Usage: @@ -69,7 +69,7 @@ async def main(): async with DecartClient(api_key=api_key) as client: options = { - "model": models.video("lucy-vton-3"), + "model": models.video("lucy-vton-latest"), "data": video_path, "prompt": args.prompt, "reference_image": ref_path, diff --git a/playground/playground.py b/playground/playground.py index f8421c8..9d22364 100644 --- a/playground/playground.py +++ b/playground/playground.py @@ -59,8 +59,8 @@ def _check_deps() -> None: REALTIME_MODELS = [ "lucy-2.1", "lucy-2.5", - "lucy-vton-3", "lucy-vton-3.5", + "lucy-vton-latest", "lucy-restyle-2", ] diff --git a/tests/test_models.py b/tests/test_models.py index 1f02afb..73b4c3f 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -25,20 +25,6 @@ def test_canonical_realtime_models() -> None: assert model.width == 1280 assert model.height == 720 - model = models.realtime("lucy-vton-2") - assert model.name == "lucy-vton-2" - assert model.url_path == "/v1/stream" - assert model.fps == 30 - assert model.width == 1088 - assert model.height == 624 - - model = models.realtime("lucy-vton-3") - assert model.name == "lucy-vton-3" - assert model.url_path == "/v1/stream" - assert model.fps == 30 - assert model.width == 1088 - assert model.height == 624 - model = models.realtime("lucy-vton-3.5") assert model.name == "lucy-vton-3.5" assert model.url_path == "/v1/stream" @@ -47,18 +33,6 @@ def test_canonical_realtime_models() -> None: assert model.height == 720 -def test_deprecated_realtime_models() -> None: - _warned_aliases.clear() - - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always") - model = models.realtime("lucy-2.1-vton-2") - assert model.name == "lucy-2.1-vton-2" - assert len(w) == 1 - assert "deprecated" in str(w[0].message).lower() - assert "lucy-vton-2" in str(w[0].message) - - def test_canonical_video_models() -> None: model = models.video("lucy-clip") assert model.name == "lucy-clip" @@ -78,20 +52,6 @@ def test_canonical_video_models() -> None: assert model.width == 1280 assert model.height == 720 - model = models.video("lucy-vton-2") - assert model.name == "lucy-vton-2" - assert model.url_path == "/v1/jobs/lucy-vton-2" - assert model.fps == 20 - assert model.width == 1088 - assert model.height == 624 - - model = models.video("lucy-vton-3") - assert model.name == "lucy-vton-3" - assert model.url_path == "/v1/jobs/lucy-vton-3" - assert model.fps == 20 - assert model.width == 1088 - assert model.height == 624 - model = models.video("lucy-vton-3.5") assert model.name == "lucy-vton-3.5" assert model.url_path == "/v1/jobs/lucy-vton-3.5" @@ -146,9 +106,9 @@ def test_deprecation_warning_only_once() -> None: with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") - models.realtime("lucy-2.1-vton-2") - models.realtime("lucy-2.1-vton-2") - models.realtime("lucy-2.1-vton-2") + models.video("lucy-pro-v2v") + models.video("lucy-pro-v2v") + models.video("lucy-pro-v2v") assert len(w) == 1