diff --git a/agent/model_metadata.py b/agent/model_metadata.py index d3223002eed0..03c05177b1f6 100644 --- a/agent/model_metadata.py +++ b/agent/model_metadata.py @@ -320,14 +320,12 @@ DEFAULT_CONTEXT_LENGTHS = { "kimi": 262144, # Upstage Solar — api.upstage.ai/v1/models does not return context_length, # so these fallbacks keep token budgeting / compression from probing down - # to the 128k default. Substring matching is longest-first, so the versioned - # ids win over the "solar-pro" rolling-alias entry, which in turn covers - # future solar-pro* releases at the Pro context size. + # to the 128k default. Ids are matched longest-first, so dated variants + # (e.g. solar-pro3-250127) resolve via their family prefix. # Sources: Solar Pro 3 = 128K, Solar Pro 2 = 64K, Solar Mini = 32K, # Solar Open 2 = 256K. "solar-open2": 262144, # 256K "solar-pro3": 131072, - "solar-pro": 131072, # rolling alias → latest Solar Pro (currently pro3) "solar-pro2": 65536, "solar-mini": 32768, # Tencent — Hy3 Preview (Hunyuan) with 256K context window. diff --git a/plugins/model-providers/upstage/__init__.py b/plugins/model-providers/upstage/__init__.py index 982e741f9e86..7bc202d4bf6a 100644 --- a/plugins/model-providers/upstage/__init__.py +++ b/plugins/model-providers/upstage/__init__.py @@ -33,8 +33,8 @@ def _model_supports_reasoning(model: str | None) -> bool: other (incl. future) Solar model as reasoning-capable. ``None``/empty model → True: the provider default (``fallback_models[0]``, - the ``solar-pro`` rolling alias) is reasoning-capable, so an unset model - gets the same default-on behaviour. + ``solar-pro3``) is reasoning-capable, so an unset model gets the same + default-on behaviour. """ m = (model or "").strip().lower() return not any(marker in m for marker in _NON_REASONING_MODEL_MARKERS) @@ -103,10 +103,8 @@ upstage = UpstageProfile( base_url="https://api.upstage.ai/v1", auth_type="api_key", # default_aux_model left empty → auxiliary side tasks use the main model. - # entry [0] is the setup default. solar-pro is a rolling alias for the - # latest Solar Pro, so the default tracks the current flagship. + # entry [0] is the setup default — solar-pro3, the current Solar Pro flagship. fallback_models=( - "solar-pro", "solar-pro3", ), ) diff --git a/tests/plugins/model_providers/test_upstage_profile.py b/tests/plugins/model_providers/test_upstage_profile.py index e78c2326ee11..f37971f2f791 100644 --- a/tests/plugins/model_providers/test_upstage_profile.py +++ b/tests/plugins/model_providers/test_upstage_profile.py @@ -50,13 +50,12 @@ class TestUpstageProfile: # catalog — Mini is capable but not agentic, so it's never promoted as a # default. Live /v1/models still surfaces everything when a key is set. assert upstage_profile.fallback_models == ( - "solar-pro", "solar-pro3", ) - def test_default_model_is_solar_pro(self, upstage_profile): + def test_default_model_is_solar_pro3(self, upstage_profile): # Entry [0] is the setup default (get_default_model_for_provider). - assert upstage_profile.fallback_models[0] == "solar-pro" + assert upstage_profile.fallback_models[0] == "solar-pro3" def test_aux_model_left_empty(self, upstage_profile): # Unset → auxiliary side tasks fall back to the user's main model. @@ -163,7 +162,7 @@ class TestUpstageReasoning: def test_none_model_defaults_to_reasoning(self, upstage_profile): # No model in context → treated as reasoning-capable, consistent with - # the provider default (fallback_models[0] == "solar-pro"). + # the provider default (fallback_models[0] == "solar-pro3"). _, top_level = upstage_profile.build_api_kwargs_extras(model=None) assert top_level == {"reasoning_effort": "medium"}