fix(opencode-go): clamp deepseek reasoning_effort "max" to "high" for mimo backends that reject it

mimo-v2.5-pro/v2.6 on the Go lane return 400 on reasoning_effort "max"
(probed live; mimo-v2.5 accepts it). The deepseek applyFormat case now honors
the declared thinking levels, and mimo-v2.5-pro gets a levels entry.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
decolua
2026-09-23 11:45:40 +07:00
parent 2aa99d9f39
commit 1b72f02e3b
2 changed files with 7 additions and 2 deletions

View File

@@ -42,6 +42,8 @@ const PATTERN_THINKING = [
{ provider: "codex", pattern: "*gpt-5.6-luna*", levels: CODEX_GPT_5_6_LEVELS },
{ pattern: "*codex*", levels: ["low", "medium", "high", "xhigh"] }, // codex cannot disable thinking
{ pattern: "*mimo*v2.6*", levels: ["none", "low", "medium", "high", "xhigh"] },
// mimo-v2.5-pro on opencode-go rejects reasoning_effort "max" (probed live); v2.5 accepts it.
{ pattern: "*mimo*v2.5-pro*", levels: ["none", "low", "medium", "high", "xhigh"] },
// DeepSeek v4.* (Alibaba MaaS, probed live): effort low|medium|high|xhigh|max
// all 200 via output_config.effort; "none" is a 400 on the anthropic route
// (disable thinking instead). none kept for the picker = disable.

View File

@@ -302,9 +302,12 @@ function applyFormat(fmt, body, cfg, caps, supportedLevels, display) {
case "deepseek": {
if (none && canDisable) { body.thinking = { type: "disabled" }; break; }
body.thinking = { type: "enabled" };
// DeepSeek: low/medium→high, xhigh/max→max.
// DeepSeek: low/medium→high, xhigh/max→max. Some backends (mimo v2.5-pro/v2.6
// on opencode-go, probed live) 400 on "max" — clamp to high when the declared
// levels exclude it.
const level = toLevel(eff);
body.reasoning_effort = level === "xhigh" || level === "max" ? "max" : "high";
const want = level === "xhigh" || level === "max" ? "max" : "high";
body.reasoning_effort = want === "max" && supportedLevels && !supportedLevels.includes("max") ? "high" : want;
break;
}
case "kimi": {