Skip to content

fix(upstage): default to solar-pro4 before solar-pro3 retires; send xhigh/max - #140057

Open
fjvbn2003 wants to merge 1 commit into
NousResearch:mainfrom
fjvbn2003:fix-upstage-solar-pro4-default
Open

fjvbn2003 wants to merge 1 commit into
NousResearch:mainfrom
fjvbn2003:fix-upstage-solar-pro4-default

Conversation

@fjvbn2003

Copy link
Copy Markdown

What does this PR do?

Two small updates to the Upstage Solar provider:

  1. Default model solar-pro3 -> solar-pro4. Upstage retires solar-pro3 on 2026-10-30 (KST) and names solar-pro4 as the replacement (model history). fallback_models[0] is the setup default, so new hermes model setups would otherwise land on a model that stops working in two weeks. The pickers already list solar-pro4/solar-mini4 (Add solar-pro4 and solar-mini4 to model pickers #131645); this moves the provider default and the offline catalog.
  2. SOLAR_EFFORTS gains xhigh and max. The API accepts none, minimal, low, medium, high, xhigh, max (chat API); xhigh/max were being clamped down to high. With the wider set, Hermes' ultra clamps to max (nearest weaker level) instead of high. Unknown non-ladder values still collapse to high as before (feat(reasoning): add max and ultra effort levels #62650 behavior unchanged).

Related Issue

None found. #64747 (open) also edits this plugin and its tests, for none handling; the two should merge cleanly, and I am happy to rebase on top of it if it lands first.

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)

Changes Made

  • plugins/model-providers/upstage/__init__.py: fallback_models=("solar-pro4",), docstring
  • agent/reasoning_effort.py: SOLAR_EFFORTS = ("low", "medium", "high", "xhigh", "max")
  • tests/plugins/model_providers/test_upstage_profile.py: pass-through cases for xhigh/max, new ultra -> max case, model ids moved to solar-pro4
  • tests/fixtures/provider_wire_snapshot.json: the upstage cells' model moves from solar-pro3 to solar-pro4 (only change; the wire is otherwise identical)

Live checks (2026-10-17, https://api.upstage.ai/v1)

check solar-pro4 solar-mini4
POST /chat/completions 200 200
streaming with stream_options.include_usage usage in last chunk; reasoning arrives as delta.reasoning 200
tools -> tool_calls yes yes
response_format json_schema strict yes not checked
reasoning_effort omitted no reasoning (reasoning_tokens 0) no reasoning
reasoning_effort none / minimal no reasoning no reasoning
reasoning_effort low medium high xhigh max message.reasoning + reasoning_tokens same
assistant history carrying reasoning or reasoning_content (incl. a tool-call turn) accepted (200) not checked
reasoning_effort: "foo" 400, lists the seven values –

How to Test

  1. pytest tests/plugins/model_providers/test_upstage_profile.py tests/hermes_cli/test_upstage_provider.py tests/agent/transports/test_provider_wire_snapshot.py -q
  2. HERMES_UPDATE_WIRE_SNAPSHOT=1 python -m pytest tests/agent/transports/test_provider_wire_snapshot.py should leave the fixture unchanged
  3. python scripts/check

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix
  • I've run pytest tests/ -q and all tests pass — ran the three files above on main @ 848fc0a in a clean Python 3.12 container with uv sync --group dev: 81 passed, 6 failed. The same 6 fail on unmodified main in that environment (wire snapshots for anthropic, minimax, minimax-cn, minimax-oauth, tencent-tokenplan and base-url:kimi-coding need optional extras such as anthropic that the dev group does not install). HERMES_UPDATE_WIRE_SNAPSHOT=1 leaves the fixture unchanged. Full suite left to CI.
  • python scripts/check passes (to be run in CI)
  • I've added tests for my changes
  • Locally, without the project's dependencies: loaded the Upstage profile and checked unset -> medium, low/xhigh/max pass through, ultra -> max, minimal and disabled omit the field, unknown -> high, fallback_models == ("solar-pro4",)

Documentation & Housekeeping

  • Documentation — N/A (no user-facing doc names solar-pro3 as the default)
  • cli-config.yaml.example — N/A
  • CONTRIBUTING.md / AGENTS.md — N/A
  • Cross-platform impact — N/A
  • Tool descriptions/schemas — N/A

Disclosure: I work at Upstage.
AI assistance: drafted with an AI coding assistant (Claude); I reviewed the changes and ran the checks listed above.

🤖 Generated with Claude Code

…high/max

Upstage retires solar-pro3 on 2026-10-30 (KST) and names solar-pro4 as
the replacement, so make solar-pro4 the provider default. The Solar API
accepts reasoning_effort xhigh and max, so stop clamping them to high;
ultra now maps to max.

Signed-off-by: YoungjuKim <[email protected]>
@alt-glitch alt-glitch added cause/upstream A cause outside Hermes that Hermes cannot fully fix: a model provider's outage, policy change, rate comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint comp/plugins Plugin system and bundled plugins P3 Low — cosmetic, nice to have type/bug Something isn't working labels Oct 16, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cause/upstream A cause outside Hermes that Hermes cannot fully fix: a model provider's outage, policy change, rate comp/agent Core agent runtime: loop, agent_init, prompt builder, context-compression, responses endpoint comp/plugins Plugin system and bundled plugins P3 Low — cosmetic, nice to have type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants