Skip to content

fix: preserve dots for OpenCode Zen non-Claude models - #8708

Closed
DomGrieco wants to merge 1 commit into
NousResearch:mainfrom
DomGrieco:fix/opencode-zen-dot-preservation
Closed

fix: preserve dots for OpenCode Zen non-Claude models#8708
DomGrieco wants to merge 1 commit into
NousResearch:mainfrom
DomGrieco:fix/opencode-zen-dot-preservation

Conversation

@DomGrieco

Copy link
Copy Markdown
Contributor

Summary

  • preserve dotted GPT/GLM-style model ids for OpenCode Zen normalization
  • keep Claude ids hyphenated on OpenCode Zen
  • add regression coverage for glm-5.1, gpt-5.4, and vendor-prefixed OpenCode Zen slugs

Why

OpenCode Zen accepts model ids like glm-5.1 and gpt-5.4, but Hermes was normalizing opencode-zen through the generic dot-to-hyphen path, which turned those into glm-5-1 / gpt-5-4. That breaks valid OpenCode Zen model ids while Claude still needs hyphenated native slugs.

This narrows the normalization behavior:

  • Claude on OpenCode Zen -> dots become hyphens
  • GPT / GLM / Gemini / Kimi / MiniMax-style ids on OpenCode Zen -> dots are preserved

Test Plan

  • python -m pytest tests/hermes_cli/test_model_normalize.py tests/hermes_cli/test_model_validation.py -q

Platforms tested

  • macOS

teknium1 added a commit that referenced this pull request Apr 13, 2026
OpenCode Zen was in _DOT_TO_HYPHEN_PROVIDERS, causing all dotted model
names (minimax-m2.5-free, gpt-5.4, glm-5.1) to be mangled. The fix:

Layer 1 (model_normalize.py): Remove opencode-zen from the blanket
dot-to-hyphen set. Add an explicit block that preserves dots for
non-Claude models while keeping Claude hyphenated (Zen's Claude
endpoint uses anthropic_messages mode which expects hyphens).

Layer 2 (run_agent.py _anthropic_preserve_dots): Add opencode-zen and
zai to the provider allowlist. Broaden URL check from opencode.ai/zen/go
to opencode.ai/zen/ to cover both Go and Zen endpoints. Add bigmodel.cn
for ZAI URL detection.

Also adds glm-5.1 to ZAI model lists in models.py and setup.py.

Closes #7710

Salvaged from contributions by:
- konsisumer (PR #7739, #7719)
- DomGrieco (PR #8708)
- Esashiero (PR #7296)
- sharziki (PR #7497)
- XiaoYingGee (PR #8750)
- APTX4869-maker (PR #8752)
- kagura-agent (PR #7157)
teknium1 added a commit that referenced this pull request Apr 13, 2026
…8794)

OpenCode Zen was in _DOT_TO_HYPHEN_PROVIDERS, causing all dotted model
names (minimax-m2.5-free, gpt-5.4, glm-5.1) to be mangled. The fix:

Layer 1 (model_normalize.py): Remove opencode-zen from the blanket
dot-to-hyphen set. Add an explicit block that preserves dots for
non-Claude models while keeping Claude hyphenated (Zen's Claude
endpoint uses anthropic_messages mode which expects hyphens).

Layer 2 (run_agent.py _anthropic_preserve_dots): Add opencode-zen and
zai to the provider allowlist. Broaden URL check from opencode.ai/zen/go
to opencode.ai/zen/ to cover both Go and Zen endpoints. Add bigmodel.cn
for ZAI URL detection.

Also adds glm-5.1 to ZAI model lists in models.py and setup.py.

Closes #7710

Salvaged from contributions by:
- konsisumer (PR #7739, #7719)
- DomGrieco (PR #8708)
- Esashiero (PR #7296)
- sharziki (PR #7497)
- XiaoYingGee (PR #8750)
- APTX4869-maker (PR #8752)
- kagura-agent (PR #7157)
@teknium1

Copy link
Copy Markdown
Contributor

Merged via PR #8794 which combines the best aspects of all open dot-preservation PRs onto current main. Your Layer 1 mixed-mode approach (Claude stays hyphenated, other models preserve dots) was used as the core design for model_normalize.py. Thanks for the contribution, @DomGrieco!

@teknium1 teknium1 closed this Apr 13, 2026
lawyerwenhan pushed a commit to lawyerwenhan/hermes-agent that referenced this pull request Apr 13, 2026
…ousResearch#8794)

OpenCode Zen was in _DOT_TO_HYPHEN_PROVIDERS, causing all dotted model
names (minimax-m2.5-free, gpt-5.4, glm-5.1) to be mangled. The fix:

Layer 1 (model_normalize.py): Remove opencode-zen from the blanket
dot-to-hyphen set. Add an explicit block that preserves dots for
non-Claude models while keeping Claude hyphenated (Zen's Claude
endpoint uses anthropic_messages mode which expects hyphens).

Layer 2 (run_agent.py _anthropic_preserve_dots): Add opencode-zen and
zai to the provider allowlist. Broaden URL check from opencode.ai/zen/go
to opencode.ai/zen/ to cover both Go and Zen endpoints. Add bigmodel.cn
for ZAI URL detection.

Also adds glm-5.1 to ZAI model lists in models.py and setup.py.

Closes NousResearch#7710

Salvaged from contributions by:
- konsisumer (PR NousResearch#7739, NousResearch#7719)
- DomGrieco (PR NousResearch#8708)
- Esashiero (PR NousResearch#7296)
- sharziki (PR NousResearch#7497)
- XiaoYingGee (PR NousResearch#8750)
- APTX4869-maker (PR NousResearch#8752)
- kagura-agent (PR NousResearch#7157)
aj-nt pushed a commit to aj-nt/hermes-agent that referenced this pull request May 1, 2026
…ousResearch#8794)

OpenCode Zen was in _DOT_TO_HYPHEN_PROVIDERS, causing all dotted model
names (minimax-m2.5-free, gpt-5.4, glm-5.1) to be mangled. The fix:

Layer 1 (model_normalize.py): Remove opencode-zen from the blanket
dot-to-hyphen set. Add an explicit block that preserves dots for
non-Claude models while keeping Claude hyphenated (Zen's Claude
endpoint uses anthropic_messages mode which expects hyphens).

Layer 2 (run_agent.py _anthropic_preserve_dots): Add opencode-zen and
zai to the provider allowlist. Broaden URL check from opencode.ai/zen/go
to opencode.ai/zen/ to cover both Go and Zen endpoints. Add bigmodel.cn
for ZAI URL detection.

Also adds glm-5.1 to ZAI model lists in models.py and setup.py.

Closes NousResearch#7710

Salvaged from contributions by:
- konsisumer (PR NousResearch#7739, NousResearch#7719)
- DomGrieco (PR NousResearch#8708)
- Esashiero (PR NousResearch#7296)
- sharziki (PR NousResearch#7497)
- XiaoYingGee (PR NousResearch#8750)
- APTX4869-maker (PR NousResearch#8752)
- kagura-agent (PR NousResearch#7157)
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…ousResearch#8794)

OpenCode Zen was in _DOT_TO_HYPHEN_PROVIDERS, causing all dotted model
names (minimax-m2.5-free, gpt-5.4, glm-5.1) to be mangled. The fix:

Layer 1 (model_normalize.py): Remove opencode-zen from the blanket
dot-to-hyphen set. Add an explicit block that preserves dots for
non-Claude models while keeping Claude hyphenated (Zen's Claude
endpoint uses anthropic_messages mode which expects hyphens).

Layer 2 (run_agent.py _anthropic_preserve_dots): Add opencode-zen and
zai to the provider allowlist. Broaden URL check from opencode.ai/zen/go
to opencode.ai/zen/ to cover both Go and Zen endpoints. Add bigmodel.cn
for ZAI URL detection.

Also adds glm-5.1 to ZAI model lists in models.py and setup.py.

Closes NousResearch#7710

Salvaged from contributions by:
- konsisumer (PR NousResearch#7739, NousResearch#7719)
- DomGrieco (PR NousResearch#8708)
- Esashiero (PR NousResearch#7296)
- sharziki (PR NousResearch#7497)
- XiaoYingGee (PR NousResearch#8750)
- APTX4869-maker (PR NousResearch#8752)
- kagura-agent (PR NousResearch#7157)
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
…ousResearch#8794)

OpenCode Zen was in _DOT_TO_HYPHEN_PROVIDERS, causing all dotted model
names (minimax-m2.5-free, gpt-5.4, glm-5.1) to be mangled. The fix:

Layer 1 (model_normalize.py): Remove opencode-zen from the blanket
dot-to-hyphen set. Add an explicit block that preserves dots for
non-Claude models while keeping Claude hyphenated (Zen's Claude
endpoint uses anthropic_messages mode which expects hyphens).

Layer 2 (run_agent.py _anthropic_preserve_dots): Add opencode-zen and
zai to the provider allowlist. Broaden URL check from opencode.ai/zen/go
to opencode.ai/zen/ to cover both Go and Zen endpoints. Add bigmodel.cn
for ZAI URL detection.

Also adds glm-5.1 to ZAI model lists in models.py and setup.py.

Closes NousResearch#7710

Salvaged from contributions by:
- konsisumer (PR NousResearch#7739, NousResearch#7719)
- DomGrieco (PR NousResearch#8708)
- Esashiero (PR NousResearch#7296)
- sharziki (PR NousResearch#7497)
- XiaoYingGee (PR NousResearch#8750)
- APTX4869-maker (PR NousResearch#8752)
- kagura-agent (PR NousResearch#7157)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants