Skip to content

fix(llm): drop deepseek v4 pro from all harness fallback chains - #2360

Merged
shunkakinoki merged 5 commits into
mainfrom
claude/deepseek-v4-fallback-refactor-ee254e
Aug 12, 2026
Merged

fix(llm): drop deepseek v4 pro from all harness fallback chains#2360
shunkakinoki merged 5 commits into
mainfrom
claude/deepseek-v4-fallback-refactor-ee254e

Conversation

@shunkakinoki

@shunkakinoki shunkakinoki commented Aug 12, 2026

Copy link
Copy Markdown
Owner

What

Removes deepseek-v4-pro from every automatic model path and documents the resulting layout in a new MODELS.md.

Fallback chain is now uniform across all fallback-capable harnesses:

deepseek-v4-flash -> gemma-4-31b-it -> glm-4.7 -> minimax-m3 -> free
File Change
config/opencode/opencode-fallback.tpl.jsonc dropped shunkakinoki/__DEEPSEEK_PRO__
config/openclaw/openclaw.tpl.json dropped cliproxy/__DEEPSEEK_PRO__; normalized hardcoded gemma-4-31b-it/glm-4.7 to __GEMMA__/__GLM__
config/hermes/config.tpl.yaml dropped the pro fallback_providers entry
config/factory/settings.tpl.json primary __DEEPSEEK_PRO__ -> __DEEPSEEK_FLASH__

Why

The flash migration (#2350, #2354, #2357) only moved primaries and the MoA reference model. Fallback chains were never touched, so every harness fell back to pro on the first hop, and Factory still had pro as its outright default.

Evidence from kyber and matic cliproxy logs:

Host Finding
kyber /api/show {"name":"deepseek-v4-pro"} -> 404. Pro is not resolvable via the model-metadata endpoint, so anything probing it before use fails.
kyber POST /v1/chat/completions -> 400 unknown provider for model cliproxy/deepseek-v4-flash (x2, Aug 12).
matic 503 auth_unavailable: no auth available (providers=openai-compatible-opencode,openai-compatible-openrouter, model=deepseek-v4-flash) (x10, Aug 10). Aliyun not in the tried set despite being configured at priority 200.

Error-log model counts: kyber 26 flash / 14 pro, matic 40 flash / 0 pro. A live probe on both hosts confirmed pro and flash each route past model lookup to provider auth, so pro is not broken, just redundant.

Notes for reviewers

  • deepseek-v4-pro stays in the cliproxy catalog (config/cliproxyapi/config.tpl.yaml) and in the opencode/openclaw model listings. It remains addressable by explicit request. It is only off the automatic paths.
  • The openclaw placeholder normalization is cosmetic: generated openclaw.template.json output is byte-identical apart from the removed pro line.
  • MODELS.md also records two things that were previously implicit: the l-suffixed fish shortcuts (ocxel, coxel, pixel) run local Qwen via LM Studio rather than the cloud default, and Handy's glm-4.7 is transcript post-processing rather than transcription.
  • OMP and Pi are documented under "No fallback chain". The runtime-fallback work on claude/pi-fallback-support-335ac0 is not in this tree; MODELS.md will need an edit once that lands.

Not addressed here

Two issues surfaced by the logs that are separate from chain composition:

  1. The unknown provider for model cliproxy/<model> 400 is a prefix bug. OpenCode absorbs it via retryable_error_patterns; openclaw and hermes have no equivalent matcher and hard-fail on it.
  2. Matic's 503 shows aliyun missing from the provider set for flash despite priority: 200.

Testing

shellspec full suite: 2064 examples, 0 failures. Updated assertions in spec/llm_update_spec.sh, spec/openclaw_hydrate_spec.sh, spec/hermes_hydrate_spec.sh.

make check (nix flake check) was not run locally; CI covers it.


Summary by cubic

Drops deepseek-v4-pro and minimax-m3 from all automatic fallback chains and switches Factory’s session default to deepseek-v4-flash, eliminating first-hop failures and enforcing a flash‑first policy. Pro remains available by explicit request; minimax-m3 remains in Hermes’s MoA reference set.

  • Shared chain is now deepseek-v4-flash -> gemma-4-31b-it -> glm-4.7 -> free; no pro or minimax on any fallback path.
  • OpenCode, OpenClaw, and Hermes configs remove pro and minimax; OpenClaw normalizes Gemma/GLM to placeholders; Factory default moves to flash.
  • Adds MODELS.md (linked from README.md), completes the alias reference to match models.json, and documents derived forms and provider-specific overrides; updates hydrate and LLM update specs.
  • OMP: task role and code-explorer subagent now use gpt-5.6-luna; removes the gpt-5.3-codex-spark alias from models.json.

Rollout

  • No migration required. If any job relied on pro or minimax via defaults or fallback, specify deepseek-v4-pro or minimax-m3 explicitly.
  • If OMP workflows expected gpt-5.3-codex-spark, use gpt-5.6-luna instead.

Written for commit 96a21d7. Summary will update on new commits.

Review in cubic

Flash is the primary everywhere, but the fallback chains still hopped to pro
first and Factory still defaulted to it outright. Kyber cliproxy returns 404
for deepseek-v4-pro on /api/show, so anything probing model metadata before
use fails on that hop.

Chain is now uniform: flash -> gemma-4-31b-it -> glm-4.7 -> minimax-m3 -> free.
Pro stays in the cliproxy catalog and is addressable by explicit request.

Also normalizes openclaw's hardcoded gemma/glm entries to placeholders
(generated output unchanged).

Entire-Checkpoint: cb2c92cc5d56
Documents the models.json -> placeholder -> llm-update.sh pipeline, the shared
fallback chain and the rules governing it, per-harness model assignments
(opencode, openclaw, hermes, omp, codex, pi, factory, ccs, aichat, llm, handy),
fish shortcut models, and cliproxy provider priority.

Entire-Checkpoint: ca7fa7ea303f
@indent-zero

indent-zero Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Warning

Indent Zero is shutting down on August 7th. Please migrate over to Indent 2.0 to continue getting PR reviews.

PR Summary

Trims every automatic fallback chain to only vendor-diverse hops that CLIProxy reliably serves. deepseek-v4-pro was removed because Kyber CLIProxy 404s on its /api/show probe (hard-failing OpenClaw and Hermes, which lack OpenCode's error-pattern matcher); minimax-m3 is now also dropped from the fallback path but kept in model catalogs and the Hermes MoA reference set. gpt-codex-spark is retired entirely from models.json since its only OMP consumers (task role, code-explorer override) are moved to gpt-5.6-luna.

  • Fallback chain across OpenCode / OpenClaw / Hermes is now deepseek-v4-flash → gemma-4-31b-it → glm-4.7 → free (3 hops), applied to opencode-fallback.tpl.jsonc, openclaw.tpl.json, and hermes/config.tpl.yaml plus their generated twins.
  • Factory sessionDefaultSettings.model flipped from deepseek-v4-pro to deepseek-v4-flash.
  • Normalizes two remaining hardcoded model strings in openclaw.tpl.json to __GEMMA__ / __GLM__ placeholders (generated output unchanged).
  • OMP retires gpt-codex-spark: modelRoles.task and agentModelOverrides.code-explorer in config/omp/config.tpl.yml now use __GPT_LUNA__, and the gpt-codex-spark alias is deleted from models.json. Only remaining gpt-5.3-codex-spark strings are in a commented-out example block in config/cliproxyapi/.
  • spec/llm_update_spec.sh, spec/hermes_hydrate_spec.sh, spec/openclaw_hydrate_spec.sh updated to match the new chain; the MoA-scoped minimax-m3 assertion in hermes_hydrate_spec.sh:198 is intentionally preserved.
  • Adds MODELS.md documenting the models.json → placeholder → llm-update.sh pipeline: complete 19-row alias table matching models.json key-for-key (__GPT_IMAGE__ included), the derived _PRETTY_/_NONDOT_ forms, the two provider-specific overrides declared in scripts/llm-update.sh (__GPT_IMAGE_OPENROUTER__, __DEEPSEEK_FLASH_0731__), the shared fallback chain, per-harness assignments, CCS profiles, fish shortcuts, and a provider-prefix table clarifying that shunkakinoki/, cliproxy/, and cliproxyapi/ all resolve through CLIProxy but map to different remote/local endpoints per harness. Linked from README.md.

Issues

All clear! No issues remaining. 🎉

1 issue already resolved
  • MODELS.md "No fallback chain" table drops the provider prefix for OpenCode's small_model (glm-4.7) and code-reviewer (deepseek-v4-flash), while every other row in the same table carries its prefix; the actual template values are shunkakinoki/glm-4.7 and shunkakinoki/deepseek-v4-flash (OpenRouter preset via shunkakinoki, not cliproxy), so a reader is misled about which upstream serves those roles. (fixed by commit b239a0a)

CI Checks

Waiting for CI checks...

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@shunkakinoki, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 15 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 39ad69df-b00e-49de-8d51-2abfc4074346

📥 Commits

Reviewing files that changed from the base of the PR and between 5b82760 and 96a21d7.

📒 Files selected for processing (16)
  • MODELS.md
  • README.md
  • config/factory/settings.json
  • config/factory/settings.tpl.json
  • config/hermes/config.template.yaml
  • config/hermes/config.tpl.yaml
  • config/omp/config.tpl.yml
  • config/omp/config.yml
  • config/openclaw/openclaw.template.json
  • config/openclaw/openclaw.tpl.json
  • config/opencode/opencode-fallback.jsonc
  • config/opencode/opencode-fallback.tpl.jsonc
  • models.json
  • spec/hermes_hydrate_spec.sh
  • spec/llm_update_spec.sh
  • spec/openclaw_hydrate_spec.sh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread MODELS.md
gpt-5.3-codex-spark was only reachable through two OMP slots (the task role
and the code-explorer subagent). Both now use gpt-5.6-luna, matching the other
fast-path slots, and the alias is removed from models.json.

The remaining gpt-5.3-codex-spark strings in the cliproxyapi configs are inside
a commented-out upstream example block and are left as synced.

Entire-Checkpoint: 2c17b23a9772

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread MODELS.md
Chain is now flash -> gemma-4-31b-it -> glm-4.7 -> free across opencode,
openclaw, and hermes. minimax-m3 stays in the model catalogs and in the Hermes
MoA reference set, which is not a fallback path.

Also documents the provider prefixes in MODELS.md and qualifies the two
OpenCode rows that were listed without one.

Entire-Checkpoint: 999cd0db5586
Adds the missing __GPT_IMAGE__ row, documents the _PRETTY_/_NONDOT_ derived
forms, and documents the two provider-specific overrides declared in
llm-update.sh rather than models.json.

The alias table now matches models.json key-for-key.

Entire-Checkpoint: 46bcbe487816
@shunkakinoki
shunkakinoki merged commit a5a9251 into main Aug 12, 2026
29 of 30 checks passed
@shunkakinoki
shunkakinoki deleted the claude/deepseek-v4-fallback-refactor-ee254e branch August 12, 2026 15:39
@indent-zero indent-zero Bot mentioned this pull request Aug 12, 2026
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.

1 participant