From 74295aa07d568b156334f99dc29262d7ad78a76b Mon Sep 17 00:00:00 2001 From: kamilbenkirane Date: Fri, 10 Apr 2026 12:11:18 +0200 Subject: [PATCH] fix: add total=False to modality Parameters TypedDicts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per PEP 589, the totality flag only applies to fields defined in the body of the TypedDict definition — it is not inherited from the parent. The five modality Parameters subclasses (Text, Image, Video, Audio, Embeddings) inherited from `class Parameters(TypedDict, total=False)` but redeclared their own fields without the flag, so every field on them was treated as required by mypy. Under PEP 692 `Unpack[...]` this cascaded to downstream consumers: any strict-mypy caller of `celeste.text.generate` (etc.) was forced to pass all ~13 TextParameters keys. Internally silenced by `[[tool.mypy.overrides]] disable_error_code = ["call-arg"]` on the client modules, but leaked to downstream packages like celeste-tools. Also fix the scaffolding template that produced this pattern. Closes #255 --- src/celeste/modalities/audio/parameters.py | 2 +- src/celeste/modalities/embeddings/parameters.py | 2 +- src/celeste/modalities/images/parameters.py | 2 +- src/celeste/modalities/text/parameters.py | 2 +- src/celeste/modalities/videos/parameters.py | 2 +- templates/modalities/{modality_slug}/parameters.py.template | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/celeste/modalities/audio/parameters.py b/src/celeste/modalities/audio/parameters.py index 6589a371..82a5718f 100644 --- a/src/celeste/modalities/audio/parameters.py +++ b/src/celeste/modalities/audio/parameters.py @@ -15,7 +15,7 @@ class AudioParameter(StrEnum): LANGUAGE = "language" -class AudioParameters(Parameters): +class AudioParameters(Parameters, total=False): """Parameters for audio operations.""" voice: str diff --git a/src/celeste/modalities/embeddings/parameters.py b/src/celeste/modalities/embeddings/parameters.py index 86da04ef..fcbad6fd 100644 --- a/src/celeste/modalities/embeddings/parameters.py +++ b/src/celeste/modalities/embeddings/parameters.py @@ -14,7 +14,7 @@ class EmbeddingsParameter(StrEnum): AUDIO = "audio" -class EmbeddingsParameters(Parameters): +class EmbeddingsParameters(Parameters, total=False): """Parameters for embeddings operations.""" dimensions: int | None diff --git a/src/celeste/modalities/images/parameters.py b/src/celeste/modalities/images/parameters.py index 9b60f9b3..655d06f5 100644 --- a/src/celeste/modalities/images/parameters.py +++ b/src/celeste/modalities/images/parameters.py @@ -26,7 +26,7 @@ class ImageParameter(StrEnum): THINKING_LEVEL = "thinking_level" -class ImageParameters(Parameters): +class ImageParameters(Parameters, total=False): """Parameters for images operations.""" aspect_ratio: str diff --git a/src/celeste/modalities/text/parameters.py b/src/celeste/modalities/text/parameters.py index 12787839..93352b08 100644 --- a/src/celeste/modalities/text/parameters.py +++ b/src/celeste/modalities/text/parameters.py @@ -41,7 +41,7 @@ class TextParameter(StrEnum): DOCUMENT = "document" -class TextParameters(Parameters): +class TextParameters(Parameters, total=False): """Parameters for text operations.""" # Common parameters diff --git a/src/celeste/modalities/videos/parameters.py b/src/celeste/modalities/videos/parameters.py index c4680e4b..e69c45f3 100644 --- a/src/celeste/modalities/videos/parameters.py +++ b/src/celeste/modalities/videos/parameters.py @@ -17,7 +17,7 @@ class VideoParameter(StrEnum): LAST_FRAME = "last_frame" -class VideoParameters(Parameters): +class VideoParameters(Parameters, total=False): """Parameters for video generation operations.""" aspect_ratio: str diff --git a/templates/modalities/{modality_slug}/parameters.py.template b/templates/modalities/{modality_slug}/parameters.py.template index a97a721e..2d37b011 100644 --- a/templates/modalities/{modality_slug}/parameters.py.template +++ b/templates/modalities/{modality_slug}/parameters.py.template @@ -32,7 +32,7 @@ class {Modality}Parameter(StrEnum): # AUDIO = "audio" -class {Modality}Parameters(Parameters): +class {Modality}Parameters(Parameters, total=False): """Parameters for {modality} operations.""" # Common parameters