Skip to content

fix(resilience): honor shared passthrough providers - #11075

Merged
diegosouzapw merged 1 commit into
diegosouzapw:mainfrom
yourspraveen:fix/11071-local-model-lockout
Aug 22, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:mainfrom
yourspraveen:fix/11071-local-model-lockout

Conversation

@yourspraveen

Copy link
Copy Markdown
Contributor

Summary

  • Resolve passthrough-model metadata from the shared provider registry when deciding whether failures are model-scoped.
  • Keep Ollama, LM Studio, vLLM, and other shared passthrough providers from turning a missing model into a connection-wide cooldown.
  • Add a focused regression test covering passthrough and non-passthrough local providers.

Root cause

hasPerModelQuota() only consulted the Open-SSE registry and compatible-provider rules. Local providers such as ollama-local define passthroughModels: true in the shared registry, so their model-not-found failures fell through to connection-wide cooldown handling.

Verification

  • node --import tsx/esm --test tests/unit/account-fallback-service.test.ts — 78 passed
  • Regression sabotage run — new test fails without the production change and passes with it
  • npm run test:vitest — 34 files, 291 tests passed
  • npm run typecheck:core — passed
  • npm run lint — passed with 6 pre-existing warnings and 0 errors

Local limitations

  • npm run test:unit exceeded the local 420-second tool limit; CI should complete the full suite.
  • npm run build exited during the Turbopack compile phase without a diagnostic; typecheck and focused tests passed, so CI build remains the authoritative result.

Risk

Low. The change only broadens existing model-lockout classification to providers already declaring passthroughModels: true; explicit connection-level overrides still take precedence.

Closes #11071

@diegosouzapw
diegosouzapw merged commit c68cda7 into diegosouzapw:main Aug 22, 2026
3 checks passed
diegosouzapw pushed a commit that referenced this pull request Aug 22, 2026
…#11165)

Validated on a worktree over the current tip: account-fallback-service 91/91 plus the five sibling lockout suites 24/24. The measurement in the body (40 of 111 passthroughModels providers uncovered on this branch) is the clincher — one lookup via getProviderById().passthroughModels beside the existing checks, closing the #11071 remainder for shared-registry gateways (port of #11075 which had only landed on main). Thank you @yourspraveen!
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/.
diegosouzapw added a commit that referenced this pull request Aug 28, 2026
…nc-back step 2/2

The eighteen commits main carries beyond the cycle branch, and what each one
became here:

  already in release/v3.8.51 by its own PR (no-op, verified by content):
    b090b60 / 026e1ca  deps: nanoid 3.3.18 equal, dompurify 3.4.14 newer
    918fba5  .gitignore: /_tasks already anchored
    5f0a394  #10026 hide health-check-excluded models — same helper, 5 call sites
    c68cda7  #11075 shared passthrough providers — superseded by #11071/#11078
  superseded, one piece kept:
    ca23eed  #10055 memoize models.dev pricing — the cycle memoizes on the
                catalog cache version already; only the resetDbInstance() hook is
                ported, wired to that memo
  applied as-is:
    8778ea7  stamp dist/BUILD_SHA before the npm provenance gate (#11721)
    aa52351  decouple the Bun image from the release manifest (#11724)
    925feb2  let the bun digest artifact be absent (#11740)
    b65ef33  size the install-upgrade gate to a measured run
    0ce2123  #11845 converge install/upgrade schemas (migration renumbered in
                the next commit: 163 collides with 163_radar_feed_cache_generated_at)
    b7c07ed  #11855 install-upgrade gate on disk, not tmpfs
    8e2fb04  #11864 drop *.nft.json from the npm tarball (413)
    dea6bb8  #11877 publish npm from a hosted runner (provenance 422)
  handled by the sync script that follows (CHANGELOG protocol):
    b4ec780  Release v3.8.50 — squash of content this branch already carries
    5458026 / c44c0a2  CHANGELOG aggregation, stats and top-25
  applied separately (its own commit, ten files):
    65e8115  #11088 Ollama capability routing — a 5,094-file squash from a
                stale base; only the Ollama files are the change

Every cherry-pick that touched a file this branch had also changed was
resolved by hand and re-run through the tests both sides own for it.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…uzapw#11071) (diegosouzapw#11165)

Validated on a worktree over the current tip: account-fallback-service 91/91 plus the five sibling lockout suites 24/24. The measurement in the body (40 of 111 passthroughModels providers uncovered on this branch) is the clincher — one lookup via getProviderById().passthroughModels beside the existing checks, closing the diegosouzapw#11071 remainder for shared-registry gateways (port of diegosouzapw#11075 which had only landed on main). Thank you @yourspraveen!
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
⭐5 — Fornecedores locais compartilhados (ollama-local, LM Studio, vLLM) declaram passthroughModels:true no registry, mas hasPerModelQuota() não consultava o registry compartilhado — fallha de modelo faltante virava cooldown de conexão inteira. Broadens a classificação de model-lockout. TDD + 78/291 testes + typecheck + lint verdes. Fecha diegosouzapw#11071.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…k the release PR

The living release PR diegosouzapw#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 diegosouzapw#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:

- diegosouzapw#11088 ollama capability routing  -> ported here as diegosouzapw#11271 (ec959d8)
- diegosouzapw#11075 shared passthrough providers -> ported here as diegosouzapw#11165 (4813c32)
- diegosouzapw#10055 getModelsDevPricing memoization -> present (modelsDevSync.ts)
- diegosouzapw#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 diegosouzapw#10450 and was then deliberately superseded by
  bc825a1 "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/.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…nc-back step 2/2

The eighteen commits main carries beyond the cycle branch, and what each one
became here:

  already in release/v3.8.51 by its own PR (no-op, verified by content):
    7124dd3 / bae33e2  deps: nanoid 3.3.18 equal, dompurify 3.4.14 newer
    ceb8e3e  .gitignore: /_tasks already anchored
    bf87c7d  diegosouzapw#10026 hide health-check-excluded models — same helper, 5 call sites
    3816ade  diegosouzapw#11075 shared passthrough providers — superseded by diegosouzapw#11071/diegosouzapw#11078
  superseded, one piece kept:
    b735371  diegosouzapw#10055 memoize models.dev pricing — the cycle memoizes on the
                catalog cache version already; only the resetDbInstance() hook is
                ported, wired to that memo
  applied as-is:
    a93d123  stamp dist/BUILD_SHA before the npm provenance gate (diegosouzapw#11721)
    dd329d7  decouple the Bun image from the release manifest (diegosouzapw#11724)
    a5e649b  let the bun digest artifact be absent (diegosouzapw#11740)
    e9045c4  size the install-upgrade gate to a measured run
    f5addae  diegosouzapw#11845 converge install/upgrade schemas (migration renumbered in
                the next commit: 163 collides with 163_radar_feed_cache_generated_at)
    a38590e  diegosouzapw#11855 install-upgrade gate on disk, not tmpfs
    8588804  diegosouzapw#11864 drop *.nft.json from the npm tarball (413)
    28bde09  diegosouzapw#11877 publish npm from a hosted runner (provenance 422)
  handled by the sync script that follows (CHANGELOG protocol):
    fc15eef  Release v3.8.50 — squash of content this branch already carries
    2b80128 / 4398260  CHANGELOG aggregation, stats and top-25
  applied separately (its own commit, ten files):
    837b36a  diegosouzapw#11088 Ollama capability routing — a 5,094-file squash from a
                stale base; only the Ollama files are the change

Every cherry-pick that touched a file this branch had also changed was
resolved by hand and re-run through the tests both sides own for it.
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