Summary
Celeste already supports an extra_body deep-merge mechanism in the core client (ModalityClient._predict(..., extra_body=...)), but it is not consistently exposed across the public namespace APIs. Some calls (notably celeste.text.generate) expose extra_body, while other namespaces/operations do not.
This inconsistency prevents users from setting provider-specific request fields (e.g. Google generationConfig.*, tools, imageConfig, etc.) using the official namespace API, forcing them to call internal/private methods (like _predict) for legitimate provider requirements.
Evidence
-
Core extra_body deep-merge exists:
-
Text namespace exposes extra_body:
-
Other namespaces (e.g. images) do not expose it, and provider clients call _predict(..., **parameters) without a way to pass extra_body:
Why this matters
Providers/models sometimes require model-specific request fields that are not (and cannot realistically all be) represented as typed parameters immediately. Without a supported override mechanism in the public API, users cannot use these provider features safely and must bypass Celeste’s namespace interface, which is brittle for production.
This is currently blocking Google Gemini image workflows (e.g. needing to override generationConfig.responseModalities / imageConfig), but the problem is general and affects all modalities.
Request
Expose a supported extra_body override parameter consistently on all public namespace methods (and all sync/stream variants where applicable), including:
celeste.text.*
celeste.images.* (generate, edit, analyze)
celeste.audio.*
celeste.videos.*
celeste.embeddings.*
The expectation is that extra_body is forwarded to the underlying _predict/stream request builder so users can supply provider-specific fields without relying on internal APIs.
Expected outcome
A uniform, documented way to pass provider-specific request fields through Celeste’s public namespace API across all modalities, consistent with the core client capability.
Summary
Celeste already supports an
extra_bodydeep-merge mechanism in the core client (ModalityClient._predict(..., extra_body=...)), but it is not consistently exposed across the public namespace APIs. Some calls (notablyceleste.text.generate) exposeextra_body, while other namespaces/operations do not.This inconsistency prevents users from setting provider-specific request fields (e.g. Google
generationConfig.*,tools,imageConfig, etc.) using the official namespace API, forcing them to call internal/private methods (like_predict) for legitimate provider requirements.Evidence
Core
extra_bodydeep-merge exists:src/celeste/client.pyText namespace exposes
extra_body:src/celeste/namespaces/domains.pyOther namespaces (e.g. images) do not expose it, and provider clients call
_predict(..., **parameters)without a way to passextra_body:src/celeste/modalities/images/providers/google/gemini.pyWhy this matters
Providers/models sometimes require model-specific request fields that are not (and cannot realistically all be) represented as typed parameters immediately. Without a supported override mechanism in the public API, users cannot use these provider features safely and must bypass Celeste’s namespace interface, which is brittle for production.
This is currently blocking Google Gemini image workflows (e.g. needing to override
generationConfig.responseModalities/imageConfig), but the problem is general and affects all modalities.Request
Expose a supported
extra_bodyoverride parameter consistently on all public namespace methods (and all sync/stream variants where applicable), including:celeste.text.*celeste.images.*(generate,edit,analyze)celeste.audio.*celeste.videos.*celeste.embeddings.*The expectation is that
extra_bodyis forwarded to the underlying_predict/stream request builder so users can supply provider-specific fields without relying on internal APIs.Expected outcome
A uniform, documented way to pass provider-specific request fields through Celeste’s public namespace API across all modalities, consistent with the core client capability.