Repository navigation
feat(vision-bridge): honor configured vision model + support custom model input & all active providers (#10808, #10809) - #10859
Merged
diegosouzapw merged 1 commit intoAug 21, 2026
Conversation
…, creds, cache key, CC vision)
diegosouzapw
pushed a commit
that referenced
this pull request
Aug 21, 2026
backryun
added a commit
to backryun/OmniRoute
that referenced
this pull request
Aug 21, 2026
…chable diegosouzapw#10859 (3805494) taught the reroute heuristic to consider not-combo text-only models, so the three describe-path assertions in vision-bridge-maxchars.test.ts were silently hijacked by a live reroute (meta.rerouted=true) before reaching the describe branch. Inject hasUsableCredentials: async () => false — the definitive exclusion signal per visionBridgeRouter's fail-open contract — so the describe path under test actually runs. 5/5 green.
backryun
added a commit
to backryun/OmniRoute
that referenced
this pull request
Aug 21, 2026
…chable diegosouzapw#10859 (3805494) taught the reroute heuristic to consider not-combo text-only models, so the three describe-path assertions in vision-bridge-maxchars.test.ts were silently hijacked by a live reroute (meta.rerouted=true) before reaching the describe branch. Inject hasUsableCredentials: async () => false — the definitive exclusion signal per visionBridgeRouter's fail-open contract — so the describe path under test actually runs. 5/5 green.
backryun
added a commit
to backryun/OmniRoute
that referenced
this pull request
Aug 21, 2026
…chable diegosouzapw#10859 (3805494) taught the reroute heuristic to consider not-combo text-only models, so the three describe-path assertions in vision-bridge-maxchars.test.ts were silently hijacked by a live reroute (meta.rerouted=true) before reaching the describe branch. Inject hasUsableCredentials: async () => false — the definitive exclusion signal per visionBridgeRouter's fail-open contract — so the describe path under test actually runs. 5/5 green.
backryun
added a commit
to backryun/OmniRoute
that referenced
this pull request
Aug 22, 2026
…chable diegosouzapw#10859 (3805494) taught the reroute heuristic to consider not-combo text-only models, so the three describe-path assertions in vision-bridge-maxchars.test.ts were silently hijacked by a live reroute (meta.rerouted=true) before reaching the describe branch. Inject hasUsableCredentials: async () => false — the definitive exclusion signal per visionBridgeRouter's fail-open contract — so the describe path under test actually runs. 5/5 green.
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
…, creds, cache key, CC vision) (diegosouzapw#10859) Validado no worktree combinado do lote: typecheck:core, lint, gates de qualidade (file-size rebaselineado com justificativa — crescimento legítimo em modelCapabilities.ts/commandCode.ts) e os 97+9 testes focados (vision-bridge, command-code vision, model-select-field-catalog-vision) todos verdes. Duas correções reais (diegosouzapw#10808/diegosouzapw#10809) bem documentadas. CI vermelho neste PR é o base-red já rastreado em diegosouzapw#9985. Obrigado!
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
…(missed at merge)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
model (e.g.
oc/mimo-v2.5-free) and fell back tocommand-code/claude-opus-4-7,producing repeated
403 MODEL_NOT_IN_PLANfailures. Root cause: the bridgecredential gate queried
provider_connectionswith the public alias (oc)instead of the canonical registry id (
opencode), returning zero rows andexcluding every candidate; no-auth providers were also judged by the
"must have a stored API key" bar even though they authenticate through the
synthetic
noauthconnection.hardcoded
availablesubset. It now reads the unified catalog (allconfigured providers + user-added custom models, matching the Audio tab),
derives
supportsVisionfrom catalog capability/modality metadata, and addsan editable custom-input field so operators can type self-hosted/unlisted
vision model ids (Ollama/vLLM, …).
reasoningfield fallback foropencode-routed gateways (SSE + non-stream parsing, empty-choices
misclassification), Command Code wire-model normalization for bare ids
(
mimo-v2.5→xiaomi/mimo-v2.5), stable Vision Bridge describe cache key(base prompt, not task-composed prompt), and
cmd/gpt-5.3-codex*markedtext-only in capability resolution.
Related Issues
Validation
Choose the change type and focused loop from the
Contribution Golden Path. The full unit suite,
Vitest, the 60% coverage gate, and the production build all run in CI on this PR (#8329):
node --import tsx/esm --test tests/unit/guardrails/visionBridgeCredentials.test.tsnode --import tsx/esm --test tests/unit/guardrails/vision-bridge-cache-key.test.tsnode --import tsx/esm --test tests/unit/model-select-field-catalog-vision-10809.test.tsnode --import tsx/esm --test tests/unit/model-capabilities-command-code-codex-textonly-10703.test.tsnode --import tsx/esm --test tests/unit/command-code-vision.test.tsnode --import tsx/esm --test tests/unit/command-code-registry-vision.test.tsnode --import tsx/esm --test tests/unit/guardrails/vision-bridge-sse-and-reasoning.test.tsnode --import tsx/esm --test tests/unit/issue-6623-opencode-mimo-reasoning-details-nonstream.test.tsnode --import tsx/esm --test tests/unit/vision-bridge-cc-no-reroute.test.tsnpm run lintTests Added Or Updated
tests/unit/guardrails/visionBridgeCredentials.test.ts(new) — [BUG] Vision Bridge fails with "No vision-capable provider connected" despite active settings #10702regression: alias resolution + no-auth provider handling against the real
DB-backed path (isolated
DATA_DIR,resetDbInstance()cleanup).tests/unit/guardrails/vision-bridge-cache-key.test.ts(new) — describecache reuse across full-transcript turns; new images still force a fresh call.
tests/unit/model-select-field-catalog-vision-10809.test.ts(new) —readCatalogModelsvision verdict derivation (capabilities / inputmodalities / conservative heuristic for
custommodels only).tests/unit/model-capabilities-command-code-codex-textonly-10703.test.ts(new) —
cmd/gpt-5.3-codextext-only override.tests/unit/command-code-vision.test.ts— wire-model normalization(
command-code/mimo-v2.5→xiaomi/mimo-v2.5, aliasedcmd/, prefixedpassthrough); conservative vision-family lock kept for
gpt-5.4-mini.tests/unit/command-code-registry-vision.test.ts— registry verdict movesgpt-5.3-codexfrom vision → text-only list.tests/unit/guardrails/vision-bridge-sse-and-reasoning.test.ts— plainreasoningfield fallback (opencode gateway) for non-stream responses.tests/unit/issue-6623-opencode-mimo-reasoning-details-nonstream.test.ts—reasoning-only non-stream completions no longer flagged empty.
tests/unit/ui/modality-bridge-vision-tab.test.tsx— Vision tab withcatalog model source + custom input.
tests/unit/vision-bridge-cc-no-reroute.test.ts— no-reroute expectationsfor native-vision CC models.
Coverage Notes
src/lib/guardrails/(vision bridge),src/lib/ modelCapabilities.ts,src/shared/components/ModelSelectField.tsx,src/app/(dashboard)/dashboard/settings/components/modalityBridge/, andopen-sse/(commandCode executor, errorClassifier, diagnostics).resolution (real DB-backed), cache keying, catalog vision derivation, wire
model normalization, and reasoning-field parsing. UI change (Vision tab
props) is covered by the updated
modality-bridge-vision-tab.test.tsx.statement/branch coverage to previously untested branches (no-auth provider
path in
visionBridgeCredentials.ts,reasoningfallback branches).Reviewer Notes
logic; no schema change, no new env vars.
hasUsableCredentialsForModelnow treats anempty active connection set as usable for no-auth providers (
oc/opencode,ddgw/duckduckgo-web, …). Terminal statuses (disabled/banned/expired)still block. This is what lets
oc/mimo-v2.5-freepass the credential gate.visionBridge.ts): keying switched from thetask-aware composed prompt to the base prompt. Intentional and stable — the
composed prompt appends the last user text and changes every turn, defeating
the cache for full-transcript clients. A genuinely new image has a different
contentRefand still misses.commandCode.ts) is a minimal, doc-backedallowlist (
mimo-v2.5,mimo-v2.5-pro); ids containing/pass throughuntouched. Verify against Command Code's
/alpha/generatewhen testing.reasoningfield fallback relies on OpenAI-compatible upstreams namingchain-of-thought
reasoning(opencode gateway).reasoning_contentremainsthe primary fallback.
oc/mimo-v2.5-freeas the VisionBridge model with a text-only target, send an image payload, and confirm the
describe call goes to
oc/mimo-v2.5-free(no fallback to claude-opus-4-7).