refactor(agent): drop the solar-pro rolling alias, default to solar-pro3

Pin the Upstage default to the concrete solar-pro3 instead of the
solar-pro rolling alias:
- plugin fallback_models is now ("solar-pro3",); entry [0] is the setup default
- drop the "solar-pro" context-window fallback entry (solar-pro3 covers it)
- update the reasoning default-on docstring and profile tests accordingly

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Changhyun Min 2026-07-02 13:26:05 +09:00 committed by kshitij
parent 5f3d57400b
commit 35d3fc3b09
3 changed files with 8 additions and 13 deletions

View file

@ -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.

View file

@ -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",
),
)

View file

@ -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"}