Skip to content

fix(nvidia): drop retired free endpoints and move the emergency fallback to a live model - #18443

Open
HouMinXi wants to merge 4 commits into
cheaper-inference:release/v3.8.53from
HouMinXi:fix/18418-nvidia-gpt-oss-deprecated
Open

HouMinXi wants to merge 4 commits into
cheaper-inference:release/v3.8.53from
HouMinXi:fix/18418-nvidia-gpt-oss-deprecated

Conversation

@HouMinXi

Copy link
Copy Markdown
Contributor

Summary

When a request ran out of budget, OmniRoute's emergency fallback sent it to nvidia/openai/gpt-oss-120b. NVIDIA retired that free endpoint on 2026-09-03. Since then every redirected request has come back as 410 Gone ... has reached its end of life, so the safety net failed exactly when it was needed. The issue also asked us to check the rest of the NVIDIA list, and three more catalog entries turned out to be retired the same way.

  • Retired NVIDIA ids, each now answering 410 with the date NVIDIA gives:
    • openai/gpt-oss-120b (2026-09-03)
    • deepseek-ai/deepseek-v4-pro-0813 (2026-09-14)
    • deepseek-ai/deepseek-v4-flash-0731 (2026-09-21)
    • moonshotai/kimi-k3 (2026-10-15)
  • These four are removed from the nvidia registry, nvidiaHostedModels.snapshot.json and, for gpt-oss-120b, the free catalog. The free catalog goes from 484 to 483 entries, so the README count and the two budget SVGs were regenerated with the repo generators.
  • EMERGENCY_FALLBACK_CONFIG now defaults to nvidia + nvidia/nemotron-3.5-super-vl-120b-a12b.
  • The new default gets a zero-price row in the nvidia block of src/shared/constants/pricing/inference-hosts.ts, with the same shape as the existing gpt-oss rows, which stay as they were. Without it the fallback's usage counts as unpriced. A key with a daily or weekly USD limit then fails closed (fix(backend): API-key budget enforcement can compute $0 for routing alias auto #12341) after a single served fallback, and the rest of the window is rejected. Zero is the right price because the model is on NVIDIA's free endpoint.
  • The NVIDIA line in docs/guides/USER_GUIDE.md listed six ids that NVIDIA has shut down, besides gpt-oss: z-ai/glm-5.1, minimaxai/minimax-m2.7, mistralai/mistral-small-4-119b-2603, mistralai/mistral-large-3-675b-instruct-2512, qwen/qwen3.5-397b-a17b and deepseek-ai/deepseek-v4-pro. Each answers 410 with an end-of-life date between 2026-07-02 and 2026-08-07. The line now lists only registry ids that answered 401 on 2026-10-28: google/gemma-4-31b-it, nvidia/nemotron-3.5-super-vl-120b-a12b, nvidia/nemotron-3-ultra-550b-a55b and nvidia/nemotron-3.5-lightning-30b-a3b. This touches the English guide only.
  • gpt-oss-120b on other providers (groq, requesty and the rest) is left alone. The canonicalization alias and the historical nvidia pricing rows are also unchanged.

Why this model

OmniRoute's emergency fallback is there so a request still gets answered for free once the paid budget is gone. The default therefore has to be a model that a plain NVIDIA free key can actually call. nvidia/nemotron-3.5-super-vl-120b-a12b was the best fit among the live options:

  • build.nvidia.com lists it with "Free Endpoint Available", and the page does not mark it deprecated. It is a 124B MoE (12B active) with a 262K context, close in size to the 120B model it replaces.
  • It is already in the nvidia registry and in the reviewed free catalog. It was accepted in fix(nvidia): replace retired Nemotron 3 Super with Nemotron 3.5 Super VL #17928 as the replacement for the retired Nemotron 3 Super.
  • It is listed by the public GET https://integrate.api.nvidia.com/v1/models, and an unauthenticated chat request to it answers 401 rather than 410 (retired). That only rules out a shutdown: a real completion was not verified.

Alternatives I looked at:

  • google/gemma-4-31b-it: free and stable, but a much smaller model. It is the natural fallback if the Nemotron model is retired.
  • nvidia/nemotron-3-ultra-550b-a55b: live, but not in the free catalog.
  • openai/gpt-oss-20b: live, but not in the nvidia registry.

Related Issues

Target Branch

  • Base is the active release/v3.8.53 branch (the highest open release/v*), not main
  • Not a new feature

Validation

  • Change type: bug fix (provider catalog and fallback default)
  • Evidence, captured 2026-10-28 08:20 EDT:
    • Unauthenticated POSTs to integrate.api.nvidia.com/v1/chat/completions return 410 with an end-of-life date for all four removed ids and 401 for every id still in the registry.
    • /v1/models no longer lists any of the four removed ids, and it lists the new default.
    • Running the repo's computeNvidiaCatalogDrift against that list reports no removed and no missing documented ids for the updated snapshot.
  • Focused tests: the NVIDIA EOL catalog, NIM registry, catalog updates, emergency fallback header, chat route coverage, free models, stale synced catalog and catalog count files (114 pass). The new fallback assertion fails on the base.
  • Pricing and budget tests: api-key-budget-alias-auto-12341, the NVIDIA EOL catalog and every unit or integration test that imports the default pricing or inference-hosts, or that covers cost calculation (88 files, 575 pass). The two new pricing assertions fail when the row is removed.
  • Adjacent run over every test file that touches the NVIDIA registry, the free catalog, isFreeModel or the emergency fallback (284 files). Every failure there also fails on the base for environment reasons (missing @radix-ui/react-select and subset-font packages in my checkout, and playground-model-qualify), or comes from vitest files that I then ran under vitest (67 pass).
  • Prettier and ESLint on changed files, docs sync, docs counts sync, free catalog evidence, changelog integrity, file size, any budget, cycles and boundary ratchets
  • Tested on release base 2c4e3ab7aa; git merge-tree --write-tree against the current tip ffe4b52178 is clean
  • Production code changes include a new automated test in this PR

Tests Added Or Updated

  • tests/unit/nvidia-eol-catalog.test.ts: the four ids join the retired list, and a new test checks that the emergency fallback targets a model that is on nvidia, not retired, in the nvidia registry and in the nvidia free catalog. This fails on the base and catches the next time the default goes stale.
  • tests/unit/nvidia-eol-catalog.test.ts, second new test: the emergency default has an all-zero nvidia pricing row, and calculateCostDetailed returns priced: true and $0 for it.
  • tests/unit/api-key-budget-alias-auto-12341.test.ts: a key with a $10 daily and $50 weekly limit records one large emergency fallback completion on the default model. The test asserts $0 spent, no unpriced usage, and neither window exceeded.
  • Registry, catalog, header, chat route, free model and catalog count tests were updated for the removed ids and the new default. The stale synced catalog test (fix(nvidia): NVIDIA provider unusable: static nvidiaHostedModels.snapshot.json allowlist is stale (12 of 14 ids gone upstream) #12849) used moonshotai/kimi-k3 as its live model and now uses google/gemma-4-31b-it.

Coverage Notes

  • Four pricing mutants, all killed:
    • deleting the row (both new tests fail);
    • keying it by the bare id without nvidia/ (the pricing row test fails);
    • keying it by another model id (both fail);
    • giving it a nonzero input price (both fail).
  • Ten catalog mutants, all killed:
    • putting back the old default;
    • pointing the default at a non-free registry model;
    • pointing it at a typo id;
    • pointing it at another provider;
    • putting each retired id back in the registry and snapshot;
    • putting gpt-oss-120b back in the free catalog;
    • putting gpt-oss-120b back in the snapshot only.

Reviewer Notes

  • No migration is needed. The emergency fallback is a code constant, not a saved setting, so nobody has a stored copy of the old default. Operators can still turn it off with OMNIROUTE_EMERGENCY_FALLBACK.
  • Combos or direct requests that name nvidia/openai/gpt-oss-120b (or the other three ids) keep failing upstream, as they already do. I did not add an automatic alias because the deprecation aliases are not tied to a provider, and an alias for openai/gpt-oss-120b would also redirect groq and requesty users who can still use it.
  • What was verified for the new default: the model page lists a free endpoint and does not mark it deprecated, /v1/models lists it, and a chat request without a key answers 401. What was not verified: a real completion, because I have no NVIDIA key. If NVIDIA retires the model, the EOL catalog test fails, and google/gemma-4-31b-it is the replacement I would use then.
  • The new default is a reasoning model, and the fallback caps output at 4096 tokens, so part of that cap may go to reasoning. Whether that cuts answers short is unverified. Tool requests still skip the fallback, as before.
  • Other NVIDIA registry models also have no pricing row, for example google/gemma-4-31b-it and the other Nemotron ids. That predates this PR. It matters only for keys with USD limits that call those models directly, so I left it for a separate change.
  • Only the English docs are edited (ENVIRONMENT.md, USER_GUIDE.md, README.md). The locale mirrors, including the 484 count in the 66 localized READMEs and the shut-down ids in the localized USER_GUIDE NVIDIA line, are left for the post-merge translation refresh.

…default (cheaper-inference#18418)

NVIDIA retired the free endpoints for openai/gpt-oss-120b (2026-09-03),
deepseek-ai/deepseek-v4-pro-0813 (2026-09-14), deepseek-ai/deepseek-v4-flash-0731
(2026-09-21) and moonshotai/kimi-k3 (2026-10-15). integrate.api.nvidia.com now
answers 410 "reached its end of life" for each of them, and build.nvidia.com marks
their free endpoint as deprecated.

The budget emergency fallback still pointed at nvidia/openai/gpt-oss-120b, so a
budget-exhausted request was redirected to a dead model. It now targets
nvidia/nemotron-3.5-super-vl-120b-a12b, which build.nvidia.com lists with a free
endpoint and which is already in the nvidia registry and the free catalog. The
NVIDIA EOL catalog test now asserts the fallback target is a registered, free,
non-retired nvidia model.

The four ids are removed from the nvidia registry, the hosted-model snapshot and
the free catalog (484 to 483 entries; README count and budget SVGs regenerated).
gpt-oss-120b on other providers is untouched.

Closes cheaper-inference#18418
…eaper-inference#18418)

The previous commit moved the budget emergency fallback to
nvidia/nemotron-3.5-super-vl-120b-a12b, which had no pricing row.
calculateCostDetailed then reported its usage as unpriced, and
getApiKeyUsageLimitStatus failed closed (cheaper-inference#12341): one served fallback put every
API key with a daily or weekly USD limit over its limit for the rest of the
window.

Add a zero-price row for the model in the nvidia pricing block, with the same
shape as the gpt-oss rows. The endpoint is free, so zero is accurate. The
NVIDIA EOL catalog test now checks the row and that calculateCostDetailed
reports it priced, and the cheaper-inference#12341 fixture shows a USD-limited key stays under
its limits after an emergency fallback.

Also drop six NVIDIA ids that answer 410 end of life from the English
USER_GUIDE NVIDIA line, and list only registry models that are still live.
…aper-inference#18418)

Dropping openai/gpt-oss-120b also dropped the test's assertion that it
kept tool calling disabled, so the test-masking check flagged a net
assert removal (4 to 3). The replacement checks a capability of the
model that took its place as the emergency fallback default:
nvidia/nemotron-3.5-super-vl-120b-a12b must keep supportsVision. It
fails if the flag is removed from the registry entry.
@HouMinXi

Copy link
Copy Markdown
Contributor Author

Pushed one small commit to clear the PR Test Policy check. The earlier assertion count dropped from 4 to 3 because the removed deprecated model had its own check. I added an assertion that the new emergency fallback model (Nemotron 3.5 Super VL) keeps vision support, so the count is 4 again and the new check tests a real capability. The boundary ratchet shows 776 against 774 on the current release tip, but it is 776 against 776 on this PR's own base, so the PR adds no edges and a merge of release should clear it.

HouMinXi commented Nov 2, 2026

Copy link
Copy Markdown
Contributor Author

After syncing 075d6e5 in 9709b4bb, the free catalog goes from 485 to 484 entries. TokenHarbor and the other upstream changes are preserved; the 483 count in the original description is outdated. The README and both regenerated SVGs use 484.

All four workflows passed for this head: CI, Quality Gates, API Route Typecheck, and semgrep. CI had 23 successful jobs and 10 skipped jobs; those skipped jobs were not tested.

I also need to correct the claim that the EOL test will catch the next retirement: it checks the checked-in catalog and retired-ID list, so it cannot detect a future NVIDIA retirement on its own. A live NVIDIA completion is still unverified, including whether the 4096-token cap leaves enough room for the new model's reasoning and answer.

This branch has not been deployed

No deployments
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(nvidia): catalog still lists openai/gpt-oss-120b after NVIDIA retired it (410)

1 participant