Skip to content

fix(capabilities): resolve the MiMo v2.6 family as vision-capable (#14587) - #14595

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
xiechimon:fix/14587-mimo-v2-6-vision-fragment
Sep 29, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
xiechimon:fix/14587-mimo-v2-6-vision-fragment

Conversation

@xiechimon

@xiechimon xiechimon commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

What

Refs #14587. The MiMo v2.6 family (mimo-v2.6-pro, mimo-v2.6-flash) is natively vision-capable but absent from every capability source in this repo: the opencode-go registry stops at mimo-v2.5, the MiMo block in modelSpecs.ts covers only the v2.5 generation, and VISION_MODEL_ID_FRAGMENTS has mimo-vl but nothing for v2.6. resolveVisionCapability therefore returns null, and both /v1/models and the combo projection render the model text-only. Because combo capability is an intersection over members, a single unresolvable member flips the whole combo to multimodal: false.

(Changed from Fixes to Refs per review: the issue still tracks the two out-of-scope gaps below, so it should not auto-close from the release branch.)

Why this fix

Adds "mimo-v2.6-pro" and "mimo-v2.6-flash" to VISION_MODEL_ID_FRAGMENTS (src/shared/constants/visionModels.ts), the shared last-resort heuristic from #4072 that routing, the /v1/models catalog and lite compression all delegate to. This is the minimal fix the report proposes, and the established channel for exactly this case (same pattern as vision-models-cc-fragments.test.ts covers for gpt-5, kimi-k2., claude-fable).

Per review, the fragments are scoped to the documented pro/flash family instead of the whole mimo-v2.6 generation, so a hypothetical mimo-v2.6-distill-qwen-9b or mimo-v2.6-tts does not inherit the vision verdict; the comment beside the fragments says how to extend it if Xiaomi documents image input for more v2.6 ids. The fragments match both provider-qualified ids from the report (opencode-go/mimo-v2.6-pro, command-code/xiaomi/mimo-v2.6-pro) plus bare and :free variants. They cannot over-match the text-only earlier-generation pro siblings: mimo-v2.5-pro and mimo-v2-pro never contain v2.6, and their hard text-only overrides (isKnownTextOnlyDespiteSync, checked first in the cascade) stay untouched.

Also rescopes the stale "MiMo *-pro = text-only" comment in modelSpecs.ts to the v2.5 family: the v2.6 generation flips that rule (models.dev lists mimo-v2.6-pro with image input). Comment-only change, no spec entries touched.

Explicitly out of scope, per the report's own framing as separate fix gaps: (a) a first-class per-model vision override, (b) per-member resolved supportsVision in /v1/combos. Both are design calls beyond this fragment fix.

How this was tested

New regression test tests/unit/14587-mimo-v2-6-vision.test.ts (16 cases):

  • Positive: the two ids from the report, bare mimo-v2.6-pro, :free suffix, mimo-v2.6-flash, -ultraspeed all resolve supportsVision === true through both isVisionModelId and getResolvedModelCapabilities.
  • Negative: mimo-v2.5-pro, mimo-v2-pro (bare + provider-qualified) stay non-vision, mimo-v2-flash untouched, unrelated text model control, plus the two undocumented-sibling cases from the review (mimo-v2.6-distill-qwen-9b, opencode-go/mimo-v2.6-tts) stay non-vision.
  • Resolved-capability controls: mimo-v2.5 and mimo-v2-omni still true, earlier-gen pro verdicts unchanged.

Red-green (re-run after the narrowing): with both src files reverted to base release/v3.8.51 the 6 v2.6 vision cases fail (supportsVision resolves falsy), the 10 others pass; after the fix 16/16 pass.

Adjacent regression: vision-models-cc-fragments, vision-detection-consistency, mimo-v2-5-safety, command-code-registry-vision = 56/56 after the change; the earlier wider sweep (combo/capability suites 94/94, all vision/mimo/models tests 1057 pass / 0 fail / 3 skipped, the 8 combo-suite failures identical on a clean base worktree = pre-existing) predates the narrowing and the touched code path is the same shared fragment list. prettier --check clean, eslint exit 0 on the three touched files.

No changelog fragment, following the precedent of #14300 / #14291.

@diegosouzapw

Copy link
Copy Markdown
Owner

Thanks @xiechimon, clean and well-tested fix. Your new test fails on the release tip and passes here, and Xiaomi's model page confirms V2.6-Pro takes image input.

Two small things:

  1. Please change Fixes #14587 to Refs #14587 in the description. The release branch is our default branch, so Fixes would auto-close the issue, and it still has the two parts you marked out of scope (the ignored compat supportsVision override and the per-member combo diagnostic).
  2. Optional: mimo-v2.6 also matches ids like mimo-v2.6-distill-qwen-9b or a future mimo-v2.6-tts. If you'd like, narrow it to the pro/flash family (or exclude distill/tts) and add one negative case.

…egosouzapw#14587)

The v2.6 generation flips the older '*-pro is text-only' rule: models.dev
lists mimo-v2.6-pro with image input, but every capability source in the
repo stops at v2.5, so resolveVisionCapability returned null and both
/v1/models and the combo projection advertised the model text-only.

Add the 'mimo-v2.6' fragment to VISION_MODEL_ID_FRAGMENTS (the shared
last-resort heuristic, diegosouzapw#4072) and rescope the stale 'pro = text-only'
comment in modelSpecs.ts to the v2.5 family. The fragment matches both
provider-qualified ids from the report and cannot over-match the
text-only earlier-generation pro siblings, which never contain v2.6.
@xiechimon
xiechimon force-pushed the fix/14587-mimo-v2-6-vision-fragment branch from 0f41541 to f7ac29d Compare September 23, 2026 22:10
@xiechimon

Copy link
Copy Markdown
Contributor Author

Both done in f7ac29d.

  1. The description now says Refs #14587, with a line noting why.
  2. Took the narrowing: the fragment list now carries mimo-v2.6-pro and mimo-v2.6-flash instead of the whole generation, so mimo-v2.6-distill-qwen-9b and mimo-v2.6-tts stay non-vision. Added both as negative cases in the regression test (16 cases now), and re-ran the red-green: with the src files reverted to base the 6 v2.6 vision cases fail, after the fix 16/16 pass. The comment beside the fragments explains how to extend it if Xiaomi documents image input for more v2.6 ids.

@diegosouzapw
diegosouzapw merged commit 3de7912 into diegosouzapw:release/v3.8.51 Sep 29, 2026
9 of 16 checks passed
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