From 2d850bb8d494a6ed4e260023939386272bbf210c Mon Sep 17 00:00:00 2001 From: Adir Amsalem Date: Mon, 9 Mar 2026 19:09:36 +0200 Subject: [PATCH] fix: make prompt required for lucy-2-v2v (can be empty string) Update VideoEdit2Input to require prompt field (allowing empty strings) to match API spec. Remove model_validator for prompt/reference_image since prompt is always required. --- decart/models.py | 12 +++--------- tests/test_queue.py | 18 ++---------------- 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/decart/models.py b/decart/models.py index 49a52c9..c5b97b5 100644 --- a/decart/models.py +++ b/decart/models.py @@ -129,23 +129,17 @@ def validate_prompt_or_reference_image(self) -> "VideoRestyleInput": class VideoEdit2Input(DecartBaseModel): """Input for lucy-2-v2v model. - Must provide at least one of `prompt` or `reference_image`. - Both can be provided together. + Prompt is required but can be an empty string. + Optional reference_image can also be provided. """ - prompt: Optional[str] = Field(default=None, min_length=1, max_length=1000) + prompt: str = Field(..., max_length=1000) reference_image: Optional[FileInput] = None data: FileInput seed: Optional[int] = None resolution: Optional[str] = None enhance_prompt: Optional[bool] = None - @model_validator(mode="after") - def validate_prompt_or_reference_image(self) -> "VideoEdit2Input": - if self.prompt is None and self.reference_image is None: - raise ValueError("Must provide at least one of 'prompt' or 'reference_image'") - return self - class TextToImageInput(BaseModel): prompt: str = Field( diff --git a/tests/test_queue.py b/tests/test_queue.py index 71d7acb..dd04aac 100644 --- a/tests/test_queue.py +++ b/tests/test_queue.py @@ -289,7 +289,7 @@ async def test_queue_lucy2_v2v_with_prompt() -> None: @pytest.mark.asyncio -async def test_queue_lucy2_v2v_with_reference_image_only() -> None: +async def test_queue_lucy2_v2v_with_empty_prompt_and_reference_image() -> None: client = DecartClient(api_key="test-key") with patch("decart.queue.client.submit_job") as mock_submit: @@ -298,6 +298,7 @@ async def test_queue_lucy2_v2v_with_reference_image_only() -> None: job = await client.queue.submit( { "model": models.video("lucy-2-v2v"), + "prompt": "", "reference_image": b"fake image data", "data": b"fake video data", } @@ -330,21 +331,6 @@ async def test_queue_lucy2_v2v_with_both_prompt_and_reference_image() -> None: mock_submit.assert_called_once() -@pytest.mark.asyncio -async def test_queue_lucy2_v2v_rejects_neither_prompt_nor_reference_image() -> None: - client = DecartClient(api_key="test-key") - - with pytest.raises(DecartSDKError) as exc_info: - await client.queue.submit( - { - "model": models.video("lucy-2-v2v"), - "data": b"fake video data", - } - ) - - assert "at least one of 'prompt' or 'reference_image'" in str(exc_info.value).lower() - - # Tests for lucy-restyle-v2v with reference_image