Skip to content

fix(resilience): honor shared-registry passthrough providers (#11071) - #11165

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.50from
yourspraveen:fix/11071-shared-passthrough-registry
Aug 22, 2026
Merged

fix(resilience): honor shared-registry passthrough providers (#11071)#11165
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.50from
yourspraveen:fix/11071-shared-passthrough-registry

Conversation

@yourspraveen

Copy link
Copy Markdown
Contributor

Ports the fix from #11075 (merged to main as c68cda7df) onto release/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-sse REGISTRY passthrough set, isCompatibleProvider, and the local/self-hosted families. None of them reads src/shared/constants/providers/, where 111 providers declare passthroughModels: true. Measured against the current tip:

total providers:                    348
declare passthroughModels: true:    111
NOT covered on release/v3.8.50:      40   ← novita, uncloseai, orcarouter, cheaperinference,
                                            freebuff, piapi, getgoapi, laozhang, thebai, …

For those 40, a missing-model 404 still 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:

if (getProviderById(canonicalId)?.passthroughModels === true) return true;

The test targets the residual gap, not #11075's original cases

Worth flagging for review, because a verbatim port would have been misleading:

Verification

Suite Result
account-fallback-service.test.ts 91/91
25 lockout / cooldown / passthrough suites 317/318
typecheck:core, lint (with suppressions), check:mutation-test-coverage clean

The single failure is quota classifier rejects terminal-looking evidence on ineligible statuses in combo-quota-exhaustion-only-fallback.test.ts — an inherited base-red that fails identically on the untouched tip (also red on #11146 and #11154).

⚠️ base-red inherited: #9985

Note on the diff

Four hunks in account-fallback-service.test.ts outside 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, so lint-staged rewraps them on any commit touching it.

yourspraveen pushed a commit to yourspraveen/OmniRoute that referenced this pull request Aug 22, 2026
@diegosouzapw
diegosouzapw force-pushed the fix/11071-shared-passthrough-registry branch from 1f81148 to 12a65e9 Compare August 22, 2026 23:42
@diegosouzapw
diegosouzapw merged commit 92ef3c7 into diegosouzapw:release/v3.8.50 Aug 22, 2026
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/.
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.

fix(resilience): keep Ollama model-not-found failures scoped to one connection and model

2 participants