Skip to content

fix(nvidia): surface provider error detail, raise timeout, retire EOL models - #9

Merged
aliihsaad merged 3 commits into
mainfrom
fix/nvidia-eol-and-provider-errors
Aug 23, 2026
Merged

fix(nvidia): surface provider error detail, raise timeout, retire EOL models#9
aliihsaad merged 3 commits into
mainfrom
fix/nvidia-eol-and-provider-errors

Conversation

@aliihsaad

Copy link
Copy Markdown
Owner

Ports one VPS-only commit upstream and fixes the three defects that made NVIDIA NIM the worst-performing provider in production.

Production evidence

Read-only audit of the Hostinger VPS (/opt/llm-hub, 4618 logged requests, 47.7% error rate). NVIDIA accounts for 216 failures — 215 are explained by the three fixes here:

Count Error Fix
182 This operation was aborted timeout 15s → 60s
20 NVIDIA NIM API error 410: Gone migration V21
13 NVIDIA NIM API error 404: Not Found error-detail fix will finally explain it
1 503 transient

1. Error bodies were being discarded

NVIDIA answers RFC 7807 problem+json ({type,title,status,detail}) with no error envelope, but all six call sites read only err.error?.message and fell through to res.statusText. A fully explained retirement surfaced as the useless NVIDIA NIM API error 410: Gone — the body actually said:

The model 'minimaxai/minimax-m2.7' has reached its end of life on 2026-07-27T00:00:00Z and is no longer available.

readProviderErrorText() now checks error.messagetitle/detailmessagetitlestatusText.

Probing every provider showed three more were silently affected: Cerebras ({message}), Mistral ({detail}), HuggingFace ({error:"string"}). Google (error.message) and Cloudflare (errors[0].message) were already correct and are untouched.

2. No timeout override

NVIDIA hosts almost exclusively 70B–550B models on a non-latency-guaranteed free-credit pool, yet ran on the 15s default while nine slower-tier providers already had 60s. Worse, classifyProviderError maps an abort to a 120s key cooldown, so one slow request benched the entire provider.

3. Four rows end-of-lifed upstream (migration V21)

Live-probed 2026-08-23. NVIDIA resolves the model before authenticating, so an unauthenticated POST cleanly separates 401/403 (exists) from 404 (never existed) and 410 (retired) — verified against a bogus-model control.

Retired: llama-4-maverick, deepseek-v4-pro, mistral-large-3, minimax-m2.7. Disabled not deleted, per V18/V19 precedent. Eight probe-confirmed replacements added, including deepseek-v4-flash-0731, minimax-m3, nemotron-3-ultra-550b-a55b and kimi-k3.

Also: ports a VPS-only commit

fix(routing): respect tool schema context size existed only on the production VPS, never pushed (original authorship preserved). It also introduced its own migrateModelsV20, which is exactly why the NVIDIA migration here is numbered V21 — porting it first surfaced the collision.

Verification

  • Tests written first and confirmed failing against old behaviour — the 410 case reproduced the exact production string NVIDIA NIM API error 410: Gone
  • 257/257 server tests pass, tsc clean
  • dist rebuilt in a separate commit (repo ships it via package.json files)

🤖 Generated with Claude Code

root and others added 3 commits August 23, 2026 02:59
… models

Three defects made NVIDIA NIM the worst-performing provider in production
(216 failures logged on the VPS; 215 explained by these three).

1. Error bodies were discarded. NVIDIA answers RFC 7807 problem+json
   ({type,title,status,detail}) with no `error` envelope, but all six call
   sites read only `err.error?.message` and fell through to res.statusText.
   A fully explained retirement surfaced as "NVIDIA NIM API error 410: Gone".
   readProviderErrorText() now checks error.message -> title/detail ->
   message -> title -> statusText. This also fixes Cerebras ({message}),
   Mistral ({detail}) and HuggingFace ({error:"string"}), which were
   likewise showing bare status text. Google (error.message) and
   Cloudflare (errors[0].message) were already correct and are untouched.

2. No timeout override. NVIDIA hosts almost exclusively 70B-550B models on
   a non-latency-guaranteed free-credit pool, yet ran on the 15s default
   while nine slower-tier providers already had 60s. 182 of the 216 logged
   failures are "This operation was aborted" — and classifyProviderError
   maps an abort to a 120s key cooldown, so one slow request benched the
   whole provider. Raised to 60s.

3. Four catalog rows were end-of-lifed upstream. Live-probed 2026-08-23:
   NVIDIA resolves the model before authenticating, so an unauthenticated
   POST separates 401/403 (exists) from 404 (never existed) and 410
   (retired). llama-4-maverick, deepseek-v4-pro, mistral-large-3 and
   minimax-m2.7 all answer 410 and are absent from GET /v1/models.
   Migration V21 disables them (V18/V19 precedent) and adds eight
   probe-confirmed replacements.

Tests written first and confirmed failing against the old behaviour: the
410 case reproduced the exact production string "NVIDIA NIM API error
410: Gone" before the fix.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Repo ships server/dist via package.json "files", so the tracked build must
follow source.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ca2edce0-7fd4-4858-8bed-786c321c185c


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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.

1 participant