fix(resilience): honor shared-registry passthrough providers (#11071) - #11165
Merged
diegosouzapw merged 1 commit intoAug 22, 2026
Conversation
yourspraveen
pushed a commit
to yourspraveen/OmniRoute
that referenced
this pull request
Aug 22, 2026
…uzapw#11071) Includes changelog fragment for diegosouzapw#11165.
diegosouzapw
force-pushed
the
fix/11071-shared-passthrough-registry
branch
from
August 22, 2026 23:42
1f81148 to
12a65e9
Compare
diegosouzapw
merged commit Aug 22, 2026
92ef3c7
into
diegosouzapw:release/v3.8.50
4 of 7 checks passed
diegosouzapw
pushed a commit
that referenced
this pull request
Aug 24, 2026
…k the release PR The living release PR #8875 was CONFLICTING, which makes GitHub skip EVERY pull_request workflow silently (no ci.yml, no semgrep, no DAST). Back-merging main restores a computable merge ref. Strategy `-s ours`: main is a stale snapshot of the release line (PR #11088 was merged into main from a release-tip base, dragging ~5094 files). All 7 main-only commits were verified as already represented on this branch: - #11088 ollama capability routing -> ported here as #11271 (6d4c484) - #11075 shared passthrough providers -> ported here as #11165 (92ef3c7) - #10055 getModelsDevPricing memoization -> present (modelsDevSync.ts) - #10026 hide health-check excluded models -> present and extended (catalog.ts) - /_tasks anchored gitignore hardening -> present (.gitignore:288) - nanoid/dompurify Dependabot bumps -> identical versions main-only files intentionally NOT carried over: - changelog.d/fixes/10286-gemini-3-5-flash-thinking.md + its regression test: the fix landed here as #10450 and was then deliberately superseded by 2764812 "eliminate Gemini 3.5 Flash". The test fails on this branch by design. - public/providers/hackclub.svg: provider removed here (migration 162). - docs/superpowers/**/2026-08-23-qdrant-*: planning artifacts belong in _tasks/ (AGENTS.md), never under docs/.
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.
Ports the fix from #11075 (merged to
mainasc68cda7df) ontorelease/v3.8.50, where it never landed. Closes the part of #11071 that is still open on this branch.Why this isn't a duplicate of #11078
#11078 fixed #11071 here with a different mechanism —
isLocalProviderId(canonicalId) || isSelfHostedChatProvider(canonicalId). That covers local backends. It does not cover the shared registry.hasPerModelQuota()currently consults the open-sseREGISTRYpassthrough set,isCompatibleProvider, and the local/self-hosted families. None of them readssrc/shared/constants/providers/, where 111 providers declarepassthroughModels: true. Measured against the current tip:For those 40, a missing-model
404still cools the entire connection instead of locking out the one model — the original #11071 defect, still live for non-local providers. On a gateway where each upstream carries a different model subset, a single missing model takes the whole connection offline.The change is one lookup, placed beside the existing passthrough check:
The test targets the residual gap, not #11075's original cases
Worth flagging for review, because a verbatim port would have been misleading:
ollama-local,lm-studio,vllm) already passes here via fix(resilience): keep Ollama model-not-found failures scoped to connection model lockout (#11071) #11078's local branch — it would prove nothing on this branch. It is still asserted, to guard against regressing fix(resilience): keep Ollama model-not-found failures scoped to connection model lockout (#11071) #11078.novita/uncloseai/orcarouterare the real cases: they fail before this change, pass after.mlx-gemma => false) is deliberately not ported. It declares no passthrough metadata but is local, so fix(resilience): keep Ollama model-not-found failures scoped to connection model lockout (#11071) #11078 correctly makes ittruehere — porting that assertion would have contradicted fix(resilience): keep Ollama model-not-found failures scoped to connection model lockout (#11071) #11078.openai/anthropicserve as the negative control instead.Verification
account-fallback-service.test.tstypecheck:core, lint (with suppressions),check:mutation-test-coverageThe single failure is
quota classifier rejects terminal-looking evidence on ineligible statusesincombo-quota-exhaustion-only-fallback.test.ts— an inherited base-red that fails identically on the untouched tip (also red on #11146 and #11154).Note on the diff
Four hunks in
account-fallback-service.test.tsoutside the new test are formatter output, not intentional edits — those lines exceed the 100-char width and the file was not prettier-clean on the base, solint-stagedrewraps them on any commit touching it.