diff --git a/src/celeste/modalities/images/providers/google/models.py b/src/celeste/modalities/images/providers/google/models.py index 1d55c36..6e83f64 100644 --- a/src/celeste/modalities/images/providers/google/models.py +++ b/src/celeste/modalities/images/providers/google/models.py @@ -99,6 +99,30 @@ ImageParameter.REFERENCE_IMAGES: ImagesConstraint(max_count=14), }, ), + Model( + id="gemini-3.1-flash-image-preview", + provider=Provider.GOOGLE, + display_name="Nano Banana 2", + operations={Modality.IMAGES: {Operation.GENERATE, Operation.EDIT}}, + parameter_constraints={ + ImageParameter.ASPECT_RATIO: Choice( + options=[ + "1:1", + "2:3", + "3:2", + "3:4", + "4:3", + "4:5", + "5:4", + "9:16", + "16:9", + "21:9", + ] + ), + ImageParameter.QUALITY: Choice(options=["1K", "2K", "4K"]), + ImageParameter.REFERENCE_IMAGES: ImagesConstraint(max_count=14), + }, + ), ] # Unified model list for registration diff --git a/src/celeste/modalities/text/providers/google/models.py b/src/celeste/modalities/text/providers/google/models.py index eda3dad..2e77a66 100644 --- a/src/celeste/modalities/text/providers/google/models.py +++ b/src/celeste/modalities/text/providers/google/models.py @@ -130,4 +130,23 @@ TextParameter.AUDIO: AudioConstraint(), }, ), + Model( + id="gemini-3.1-flash-lite-preview", + provider=Provider.GOOGLE, + display_name="Gemini 3.1 Flash Lite Preview", + operations={Modality.TEXT: {Operation.GENERATE, Operation.ANALYZE}}, + streaming=True, + parameter_constraints={ + Parameter.TEMPERATURE: Range(min=0.0, max=2.0), + Parameter.MAX_TOKENS: Range(min=1, max=65536), + TextParameter.THINKING_LEVEL: Choice(options=["low", "high"]), + TextParameter.WEB_SEARCH: Bool(), + TextParameter.CODE_EXECUTION: Bool(), + TextParameter.OUTPUT_SCHEMA: Schema(), + # Media input support + TextParameter.IMAGE: ImagesConstraint(), + TextParameter.VIDEO: VideosConstraint(), + TextParameter.AUDIO: AudioConstraint(), + }, + ), ] diff --git a/src/celeste/modalities/text/providers/openai/models.py b/src/celeste/modalities/text/providers/openai/models.py index c9b03e1..6268cf9 100644 --- a/src/celeste/modalities/text/providers/openai/models.py +++ b/src/celeste/modalities/text/providers/openai/models.py @@ -218,6 +218,70 @@ TextParameter.IMAGE: ImagesConstraint(), }, ), + Model( + id="gpt-5.4", + provider=Provider.OPENAI, + display_name="GPT-5.4", + operations={Modality.TEXT: {Operation.GENERATE, Operation.ANALYZE}}, + streaming=True, + parameter_constraints={ + Parameter.MAX_TOKENS: Range(min=1, max=128000), + TextParameter.THINKING_BUDGET: Choice( + options=["minimal", "low", "medium", "high", "xhigh"] + ), + TextParameter.VERBOSITY: Choice(options=["low", "medium", "high"]), + TextParameter.WEB_SEARCH: Bool(), + TextParameter.OUTPUT_SCHEMA: Schema(), + TextParameter.IMAGE: ImagesConstraint(), + }, + ), + Model( + id="gpt-5.4-pro", + provider=Provider.OPENAI, + display_name="GPT-5.4 Pro", + operations={Modality.TEXT: {Operation.GENERATE, Operation.ANALYZE}}, + streaming=True, + parameter_constraints={ + Parameter.MAX_TOKENS: Range(min=1, max=128000), + TextParameter.THINKING_BUDGET: Choice( + options=["minimal", "low", "medium", "high", "xhigh"] + ), + TextParameter.VERBOSITY: Choice(options=["low", "medium", "high"]), + TextParameter.WEB_SEARCH: Bool(), + TextParameter.OUTPUT_SCHEMA: Schema(), + TextParameter.IMAGE: ImagesConstraint(), + }, + ), + Model( + id="gpt-5.4-mini", + provider=Provider.OPENAI, + display_name="GPT-5.4 Mini", + operations={Modality.TEXT: {Operation.GENERATE, Operation.ANALYZE}}, + streaming=True, + parameter_constraints={ + Parameter.MAX_TOKENS: Range(min=1, max=128000), + TextParameter.THINKING_BUDGET: Choice( + options=["minimal", "low", "medium", "high", "xhigh"] + ), + TextParameter.OUTPUT_SCHEMA: Schema(), + TextParameter.IMAGE: ImagesConstraint(), + }, + ), + Model( + id="gpt-5.4-nano", + provider=Provider.OPENAI, + display_name="GPT-5.4 Nano", + operations={Modality.TEXT: {Operation.GENERATE, Operation.ANALYZE}}, + streaming=True, + parameter_constraints={ + Parameter.MAX_TOKENS: Range(min=1, max=128000), + TextParameter.THINKING_BUDGET: Choice( + options=["minimal", "low", "medium", "high", "xhigh"] + ), + TextParameter.OUTPUT_SCHEMA: Schema(), + TextParameter.IMAGE: ImagesConstraint(), + }, + ), Model( id="gpt-4.1", provider=Provider.OPENAI, diff --git a/src/celeste/modalities/text/providers/xai/models.py b/src/celeste/modalities/text/providers/xai/models.py index 8328880..e189f41 100644 --- a/src/celeste/modalities/text/providers/xai/models.py +++ b/src/celeste/modalities/text/providers/xai/models.py @@ -88,6 +88,36 @@ TextParameter.CODE_EXECUTION: Bool(), }, ), + Model( + id="grok-4.20-beta-0309-reasoning", + provider=Provider.XAI, + display_name="Grok 4.20 Beta 0309 Reasoning", + operations={Modality.TEXT: {Operation.GENERATE}}, + streaming=True, + parameter_constraints={ + Parameter.TEMPERATURE: Range(min=0.0, max=2.0), + Parameter.MAX_TOKENS: Range(min=1, max=30000), + TextParameter.WEB_SEARCH: Bool(), + TextParameter.X_SEARCH: Bool(), + TextParameter.CODE_EXECUTION: Bool(), + TextParameter.OUTPUT_SCHEMA: Schema(), + }, + ), + Model( + id="grok-4.20-beta-0309-non-reasoning", + provider=Provider.XAI, + display_name="Grok 4.20 Beta 0309 Non Reasoning", + operations={Modality.TEXT: {Operation.GENERATE}}, + streaming=True, + parameter_constraints={ + Parameter.TEMPERATURE: Range(min=0.0, max=2.0), + Parameter.MAX_TOKENS: Range(min=1, max=30000), + TextParameter.WEB_SEARCH: Bool(), + TextParameter.X_SEARCH: Bool(), + TextParameter.CODE_EXECUTION: Bool(), + TextParameter.OUTPUT_SCHEMA: Schema(), + }, + ), Model( id="grok-3-mini", provider=Provider.XAI,