diff --git a/skyvern-frontend/src/components/ModelSelector.tsx b/skyvern-frontend/src/components/ModelSelector.tsx index e56d30c8..dd3804f1 100644 --- a/skyvern-frontend/src/components/ModelSelector.tsx +++ b/skyvern-frontend/src/components/ModelSelector.tsx @@ -25,6 +25,14 @@ const constants = { SkyvernOptimized: "Skyvern Optimized", } as const; +const deprecatedModelNames = new Set([ + "gemini-2.5-flash-lite", + "azure/gpt-4.1", + "azure/gpt-5", + "azure/o3", + "claude-haiku-4-5-20251001", +]); + function ModelSelector({ clearable = true, value, @@ -41,16 +49,31 @@ function ModelSelector({ }, }); - const models = availableModels?.models ?? {}; - const reverseMap = Object.entries(models).reduce( - (acc, [key, value]) => { - acc[value] = key; + const rawModels = availableModels?.models ?? {}; + const models = Object.fromEntries( + Object.entries(rawModels).map(([modelName, label]) => [ + modelName, + deprecatedModelNames.has(modelName) ? `${label} (deprecated)` : label, + ]), + ); + + const visibleEntries = Object.entries(models).filter( + ([modelName]) => + !deprecatedModelNames.has(modelName) || value?.model_name === modelName, + ); + + const reverseMap = visibleEntries.reduce( + (acc, [modelName, label]) => { + acc[label] = modelName; return acc; }, {} as Record, ); const labels = Object.keys(reverseMap); - const chosen = value ? models[value.model_name] : constants.SkyvernOptimized; + + const chosen = value + ? models[value.model_name] ?? constants.SkyvernOptimized + : constants.SkyvernOptimized; const choices = [constants.SkyvernOptimized, ...labels]; return ( diff --git a/skyvern/config.py b/skyvern/config.py index 4f53c839..bbf1dad7 100644 --- a/skyvern/config.py +++ b/skyvern/config.py @@ -288,6 +288,12 @@ class Settings(BaseSettings): AZURE_GPT5_1_API_KEY: str | None = None AZURE_GPT5_1_API_BASE: str | None = None AZURE_GPT5_1_API_VERSION: str = "2025-04-01-preview" + # AZURE gpt-5.2 + ENABLE_AZURE_GPT5_2: bool = False + AZURE_GPT5_2_DEPLOYMENT: str = "gpt-5.2" + AZURE_GPT5_2_API_KEY: str | None = None + AZURE_GPT5_2_API_BASE: str | None = None + AZURE_GPT5_2_API_VERSION: str = "2025-04-01-preview" # GEMINI GEMINI_API_KEY: str | None = None @@ -432,6 +438,7 @@ class Settings(BaseSettings): }, "azure/gpt-4.1": {"llm_key": "AZURE_OPENAI_GPT4_1", "label": "GPT 4.1"}, "azure/gpt-5": {"llm_key": "AZURE_OPENAI_GPT5", "label": "GPT 5"}, + "azure/gpt-5.2": {"llm_key": "AZURE_OPENAI_GPT5_2", "label": "GPT 5.2"}, "azure/o3": {"llm_key": "AZURE_OPENAI_O3", "label": "GPT O3"}, "us.anthropic.claude-opus-4-20250514-v1:0": { "llm_key": "BEDROCK_ANTHROPIC_CLAUDE4_OPUS_INFERENCE_PROFILE", @@ -469,6 +476,7 @@ class Settings(BaseSettings): }, "azure/gpt-4.1": {"llm_key": "AZURE_OPENAI_GPT4_1", "label": "GPT 4.1"}, "azure/gpt-5": {"llm_key": "AZURE_OPENAI_GPT5", "label": "GPT 5"}, + "azure/gpt-5.2": {"llm_key": "AZURE_OPENAI_GPT5_2", "label": "GPT 5.2"}, "azure/o3": {"llm_key": "AZURE_OPENAI_O3", "label": "GPT O3"}, "us.anthropic.claude-opus-4-20250514-v1:0": { "llm_key": "BEDROCK_ANTHROPIC_CLAUDE4_OPUS_INFERENCE_PROFILE", diff --git a/skyvern/forge/sdk/api/llm/config_registry.py b/skyvern/forge/sdk/api/llm/config_registry.py index f710b45e..90771dfc 100644 --- a/skyvern/forge/sdk/api/llm/config_registry.py +++ b/skyvern/forge/sdk/api/llm/config_registry.py @@ -120,6 +120,18 @@ if settings.ENABLE_OPENAI: reasoning_effort=settings.GPT5_REASONING_EFFORT, ), ) + LLMConfigRegistry.register_config( + "OPENAI_GPT5_2", + LLMConfig( + "gpt-5.2", + ["OPENAI_API_KEY"], + supports_vision=True, + add_assistant_prefix=False, + max_completion_tokens=128000, + temperature=1, # GPT-5 only supports temperature=1 + reasoning_effort=settings.GPT5_REASONING_EFFORT, + ), + ) LLMConfigRegistry.register_config( "OPENAI_GPT4_TURBO", LLMConfig( @@ -698,6 +710,31 @@ if settings.ENABLE_AZURE_GPT5_1: ), ) +if settings.ENABLE_AZURE_GPT5_2: + LLMConfigRegistry.register_config( + "AZURE_OPENAI_GPT5_2", + LLMConfig( + f"azure/{settings.AZURE_GPT5_2_DEPLOYMENT}", + [ + "AZURE_GPT5_2_DEPLOYMENT", + "AZURE_GPT5_2_API_KEY", + "AZURE_GPT5_2_API_BASE", + "AZURE_GPT5_2_API_VERSION", + ], + litellm_params=LiteLLMParams( + api_base=settings.AZURE_GPT5_2_API_BASE, + api_key=settings.AZURE_GPT5_2_API_KEY, + api_version=settings.AZURE_GPT5_2_API_VERSION, + model_info={"model_name": "azure/gpt-5.2"}, + ), + supports_vision=True, + add_assistant_prefix=False, + max_completion_tokens=128000, + temperature=1, # GPT-5 only supports temperature=1 + reasoning_effort=settings.GPT5_REASONING_EFFORT, + ), + ) + if settings.ENABLE_AZURE_O4_MINI: LLMConfigRegistry.register_config( "AZURE_OPENAI_O4_MINI",