From 6886915f62c84d9f65c31afb9c833df9db36e723 Mon Sep 17 00:00:00 2001 From: decolua Date: Tue, 22 Sep 2026 09:45:20 +0700 Subject: [PATCH] feat(capacity-adapter): default vision fallback to mimo-v2.6-flash-free Register mimo-v2.6-flash-free on opencode-zen (chat lane) with a v2.6 capability pattern, and switch the vision adapter default from the old mimo-v2.5-free. Co-Authored-By: Claude Code --- open-sse/providers/capabilities.js | 1 + open-sse/providers/registry/opencode-zen.js | 12 ++++++++++++ open-sse/services/capacityAdapter.js | 2 +- src/app/(dashboard)/dashboard/combos/page.js | 2 +- tests/unit/opencode-zen-models.test.js | 2 +- 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/open-sse/providers/capabilities.js b/open-sse/providers/capabilities.js index 7ec47ce8..93486760 100644 --- a/open-sse/providers/capabilities.js +++ b/open-sse/providers/capabilities.js @@ -373,6 +373,7 @@ export const PATTERN_CAPABILITIES = [ { pattern: "*minimax*", caps: { reasoning: true, thinkingFormat: "minimax", thinkingCanDisable: false, contextWindow: 200000, maxOutput: 131072 } }, // ── Xiaomi MiMo (vision + -tag reasoning, always-on, can't disable) ── + { pattern: "*mimo*v2.6*", caps: { vision: true, audioInput: true, videoInput: true, reasoning: true, thinkingFormat: "deepseek", thinkingCanDisable: false, contextWindow: 1048576, maxOutput: 131072 } }, { pattern: "*mimo*v2.5*", caps: { vision: true, audioInput: true, videoInput: true, reasoning: true, thinkingFormat: "deepseek", thinkingCanDisable: false, contextWindow: 1048576, maxOutput: 131072 } }, { pattern: "*mimo*omni*", caps: { vision: true, audioInput: true, reasoning: true, thinkingFormat: "deepseek", thinkingCanDisable: false, contextWindow: 262144, maxOutput: 131072 } }, { pattern: "*mimo*", caps: { vision: true, reasoning: true, thinkingFormat: "deepseek", thinkingCanDisable: false, contextWindow: 262144, maxOutput: 131072 } }, diff --git a/open-sse/providers/registry/opencode-zen.js b/open-sse/providers/registry/opencode-zen.js index 8ec2ff1f..9bba1df6 100644 --- a/open-sse/providers/registry/opencode-zen.js +++ b/open-sse/providers/registry/opencode-zen.js @@ -106,6 +106,7 @@ export default { { id: "union-alpha", name: "Union Alpha", supportedFormats: ["claude"] }, // Free tier on the keyed lane (chat completions) { id: "deepseek-v4-flash-free", name: "DeepSeek V4 Flash Free", supportedFormats: ["openai"] }, + { id: "mimo-v2.6-flash-free", name: "MiMo V2.6 Flash Free", supportedFormats: ["openai"] }, { id: "mimo-v2.5-free", name: "MiMo V2.5 Free", supportedFormats: ["openai"] }, { id: "ling-3.0-flash-fin-free", name: "Ling 3.0 Flash Fin Free", supportedFormats: ["openai"] }, { id: "nemotron-3-ultra-free", name: "Nemotron 3 Ultra Free", supportedFormats: ["openai"] }, @@ -113,7 +114,18 @@ export default { // Free tier on the keyed lane (responses) { id: "muse-spark-1.3-contributor-free", name: "Muse Spark 1.3 Contributor Free", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] }, { id: "muse-spark-1.2-contributor-free", name: "Muse Spark 1.2 Contributor Free", targetFormat: "openai-responses", supportedFormats: ["openai-responses"] }, + // System One (Jev) decision models on the native /systemone endpoint + { id: "jev-1.13", name: "Jev 1.13", kind: "decision" }, + { id: "jev-1.13-free", name: "Jev 1.13 Free", kind: "decision" }, ], + serviceKinds: ["llm", "systemone"], + systemoneConfig: { + baseUrl: "https://opencode.ai/zen/v1/systemone", + headers: { + "x-opencode-client": "desktop", + "User-Agent": "opencode/1.18.31", + }, + }, modelsFetcher: { url: "https://opencode.ai/zen/v1/models", type: "opencode-free" }, passthroughModels: true, features: { diff --git a/open-sse/services/capacityAdapter.js b/open-sse/services/capacityAdapter.js index 7b096f97..875f3aa2 100644 --- a/open-sse/services/capacityAdapter.js +++ b/open-sse/services/capacityAdapter.js @@ -12,7 +12,7 @@ import { getCapabilitiesForModel } from "../providers/capabilities.js"; const CAPABILITY_KEYS = ["vision", "pdf", "audioInput", "videoInput"]; const HARD_CAPS = new Set(CAPABILITY_KEYS); -const DEFAULT_FALLBACK_MODEL = "oc/mimo-v2.5-free"; +const DEFAULT_FALLBACK_MODEL = "oc/mimo-v2.6-flash-free"; // Normalize a capability entry to { enabled, roundRobin, models }. Backward-compat: // accept the legacy array form [{model, enabled}] (treated as enabled, fallback). diff --git a/src/app/(dashboard)/dashboard/combos/page.js b/src/app/(dashboard)/dashboard/combos/page.js index c0e20f3e..56471beb 100644 --- a/src/app/(dashboard)/dashboard/combos/page.js +++ b/src/app/(dashboard)/dashboard/combos/page.js @@ -21,7 +21,7 @@ const CAPACITY_ADAPTER_CAPS = [ // pdf, videoInput temporarily hidden — no translator support yet for those blocks. { key: "audioInput", label: "Audio", icon: "graphic_eq", desc: "Audio input" }, ]; -const DEFAULT_FALLBACK_MODEL = "oc/mimo-v2.5-free"; +const DEFAULT_FALLBACK_MODEL = "oc/mimo-v2.6-flash-free"; const EMPTY_CAP_ENTRY = { enabled: true, roundRobin: false, models: [] }; const EMPTY_CAPACITY_ADAPTER = { vision: { ...EMPTY_CAP_ENTRY }, diff --git a/tests/unit/opencode-zen-models.test.js b/tests/unit/opencode-zen-models.test.js index 3812d400..a5e8f0f4 100644 --- a/tests/unit/opencode-zen-models.test.js +++ b/tests/unit/opencode-zen-models.test.js @@ -9,7 +9,7 @@ const CHAT_ONLY = ["deepseek-v4-pro", "deepseek-v4-flash", "deepseek-v4-flash-vi "minimax-m3", "minimax-m2.7", "minimax-m2.5", "kimi-k3", "kimi-k2.7-code", "kimi-k2.6", "kimi-k2.5", "big-pickle", "deepseek-v4-flash-free", - "mimo-v2.5-free", "ling-3.0-flash-fin-free", "nemotron-3-ultra-free", "nemotron-3.5-lightning-free"]; + "mimo-v2.6-flash-free", "mimo-v2.5-free", "ling-3.0-flash-fin-free", "nemotron-3-ultra-free", "nemotron-3.5-lightning-free"]; // Models that also expose the Anthropic /messages endpoint const CLAUDE_CAPABLE = ["claude-fable-5", "claude-fable-5-1", "claude-opus-5", "claude-opus-4-8", "claude-opus-4-7", "claude-opus-4-6", "claude-opus-4-5",