Skip to content

fix(api): expose per-member supportsVision on /v1/combos model steps (#14587) - #15823

Merged
diegosouzapw merged 1 commit into
release/v3.8.52from
fix/14587-combo-member-vision
Oct 8, 2026
Merged

diegosouzapw merged 1 commit into
release/v3.8.52from
fix/14587-combo-member-vision

Conversation

@diegosouzapw

Copy link
Copy Markdown
Owner

Closes #14587

Root cause

The core of #14587 (vision override honored, MiMo id fragments) already landed via #14595 / #15086; getResolvedModelCapabilities now agrees with routing on the modelCompatOverrides.supportsVision row (covered by tests/unit/model-compat-vision-canonical-resolution-14587.test.ts). What remained was diagnosability: /v1/combos only exposed the aggregate capabilities.multimodal, so an operator could not tell which member blocks it.

Fix

  • PublicComboStep gains supportsVision?: boolean | null (true/false/null = no source knows), set on direct model steps when capabilities are included, using the same resolver (and bulk snapshot) as the aggregate. No behavior change to multimodal.
  • docs/openapi.yaml documents the field on GET /api/v1/combos.

Tests

tests/unit/14587-combo-member-supports-vision.test.ts (new): per-member verdicts, invariant multimodal === every(member.supportsVision === true), field omitted without capabilities.

  • RED before fix: 2 fail (field absent) / 1 pass.
  • GREEN after: 3/3. Also green: v1-combos-projection (14), model-compat-vision-canonical-resolution-14587 (6).

Gates

eslint (with suppressions) exit 0, prettier, typecheck:core exit 0, check-complexity OK (3003 < 3218), check-cognitive-complexity OK (1374 < 1437), check-file-size no violations, husky pre-commit gates passed.

⚠️ base-red inherited: #15306 — unit/integration/package-artifact gates timing out, vitest open-sse/mcp-server/tests/audit.test.ts, check:ai-attribution range error

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

CI Coverage Report

  • Coverage job: skipped
  • PR test policy: success

Coverage artifact was not available for this run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant