From 635fa7acc0cf5134f3cb90ce10965a4ac2a7fef1 Mon Sep 17 00:00:00 2001 From: Adir Amsalem Date: Sun, 16 Nov 2025 15:35:52 +0200 Subject: [PATCH 1/2] fix: limit prompts to 1000 characters --- decart/models.py | 32 ++++++++++++++++++++++++++------ tests/test_process.py | 16 ++++++++++++++++ uv.lock | 2 +- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/decart/models.py b/decart/models.py index 2e59c47..7eca043 100644 --- a/decart/models.py +++ b/decart/models.py @@ -32,21 +32,29 @@ class ModelDefinition(DecartBaseModel): class TextToVideoInput(BaseModel): - prompt: str = Field(..., min_length=1) + prompt: str = Field(..., min_length=1, max_length=1000) seed: Optional[int] = None resolution: Optional[str] = None orientation: Optional[str] = None class ImageToVideoInput(DecartBaseModel): - prompt: str = Field(..., min_length=1) + prompt: str = Field( + ..., + min_length=1, + max_length=1000, + ) data: FileInput seed: Optional[int] = None resolution: Optional[str] = None class VideoToVideoInput(DecartBaseModel): - prompt: str = Field(..., min_length=1) + prompt: str = Field( + ..., + min_length=1, + max_length=1000, + ) data: FileInput seed: Optional[int] = None resolution: Optional[str] = None @@ -55,7 +63,11 @@ class VideoToVideoInput(DecartBaseModel): class FirstLastFrameInput(DecartBaseModel): - prompt: str = Field(..., min_length=1) + prompt: str = Field( + ..., + min_length=1, + max_length=1000, + ) start: FileInput end: FileInput seed: Optional[int] = None @@ -70,14 +82,22 @@ class ImageToMotionVideoInput(DecartBaseModel): class TextToImageInput(BaseModel): - prompt: str = Field(..., min_length=1) + prompt: str = Field( + ..., + min_length=1, + max_length=1000, + ) seed: Optional[int] = None resolution: Optional[str] = None orientation: Optional[str] = None class ImageToImageInput(DecartBaseModel): - prompt: str = Field(..., min_length=1) + prompt: str = Field( + ..., + min_length=1, + max_length=1000, + ) data: FileInput seed: Optional[int] = None resolution: Optional[str] = None diff --git a/tests/test_process.py b/tests/test_process.py index fcd6e92..304884f 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -87,6 +87,22 @@ async def test_process_video_to_video() -> None: assert result == b"fake video data" +@pytest.mark.asyncio +async def test_process_max_prompt_length() -> None: + client = DecartClient(api_key="test-key") + prompt = "a" * 1001 + with pytest.raises(DecartSDKError) as exception: + await client.process( + { + "model": models.image("lucy-pro-t2i"), + "prompt": prompt, + } + ) + assert f"Invalid inputs for lucy-pro-t2i: 1 validation error for TextToImageInput" in str( + exception + ) + + @pytest.mark.asyncio async def test_process_image_to_motion_video() -> None: client = DecartClient(api_key="test-key") diff --git a/uv.lock b/uv.lock index a15cbf3..0b2dadf 100644 --- a/uv.lock +++ b/uv.lock @@ -900,7 +900,7 @@ wheels = [ [[package]] name = "decart" -version = "0.0.7" +version = "0.0.8" source = { editable = "." } dependencies = [ { name = "aiofiles" }, From 79a4dbd7e561e58a9893345069bd36c0a0b9b324 Mon Sep 17 00:00:00 2001 From: Adir Amsalem Date: Sun, 16 Nov 2025 15:37:45 +0200 Subject: [PATCH 2/2] fix ruff --- tests/test_process.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_process.py b/tests/test_process.py index 304884f..d717db9 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -98,7 +98,7 @@ async def test_process_max_prompt_length() -> None: "prompt": prompt, } ) - assert f"Invalid inputs for lucy-pro-t2i: 1 validation error for TextToImageInput" in str( + assert "Invalid inputs for lucy-pro-t2i: 1 validation error for TextToImageInput" in str( exception )