fix(nvidia): load featured model catalog#80775
Conversation
Co-authored-by: CaptainTimon <CaptainTimon@users.noreply.github.com>
|
Codex review: needs maintainer review before merge. Summary Reproducibility: not applicable. this is a feature PR for live NVIDIA catalog discovery, not a broken existing behavior report. Current main is static, and the live endpoint plus PR-supplied exact-head runtime output establish the intended behavior path. Real behavior proof Next step before merge Security Review detailsBest possible solution: Land one chosen provider-owned NVIDIA live-catalog implementation after maintainer approval, then supersede the duplicate related branch and close the linked feature issue as appropriate. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a feature PR for live NVIDIA catalog discovery, not a broken existing behavior report. Current main is static, and the live endpoint plus PR-supplied exact-head runtime output establish the intended behavior path. Is this the best way to solve the issue? Yes, with a maintainer-gate caveat: keeping the fetch provider-owned, guarded, validated, cached, and backed by the static manifest is the narrow maintainable shape. The remaining decision is which open implementation to land. What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against fc9b8c94a9a1. |
TurboTheTurtle
left a comment
There was a problem hiding this comment.
I didn't find a blocking issue in this pass. I checked the live NVIDIA catalog fetch path, SSRF host policy, response parsing bounds, merge order with the bundled fallback catalog, static fallback registration, and the focused provider/onboarding tests. Remaining risk is normal CI plus maintainer judgment on making model-picker/setup freshness depend on a bounded provider-owned network fetch.
Summary
Changes
Real behavior proof
Behavior or issue addressed: NVIDIA setup/model-picker catalog loading can consume NVIDIA's public featured-model feed and merge live ranked rows with the bundled fallback catalog.
Real environment tested: Local OpenClaw checkout at branch
79431, commit90b56ad407, Nodev22.22.2, Linux container, no NVIDIA API key required because the featured catalog endpoint is public.Exact steps or command run after this patch: Ran the provider runtime against the live NVIDIA featured catalog endpoint:
Evidence after fix: Terminal output from the exact-head local runtime command:
{ "elapsedMs": 5281, "modelCount": 6, "firstModels": [ { "id": "nvidia/nemotron-3-super-120b-a12b", "name": "Nemotron 3 Super 120B", "contextWindow": 262144, "maxTokens": 8192 }, { "id": "z-ai/glm-5.1", "name": "GLM 5.1", "contextWindow": 202752, "maxTokens": 8192 }, { "id": "minimaxai/minimax-m2.7", "name": "Minimax M2.7", "contextWindow": 196608, "maxTokens": 8192 }, { "id": "moonshotai/kimi-k2.5", "name": "Kimi K2.5", "contextWindow": 262144, "maxTokens": 8192 } ] }Observed result after fix: The provider runtime fetched NVIDIA's current public featured feed, promoted live rows such as
z-ai/glm-5.1andminimaxai/minimax-m2.7, and merged them ahead of bundled fallback rows.What was not tested: Full interactive onboarding with a real NVIDIA API key was not tested; the changed provider catalog runtime path does not require the key.
Validation
corepack pnpm test -- extensions/nvidia/provider-catalog.test.ts extensions/nvidia/index.test.ts extensions/nvidia/onboard.test.tscorepack pnpm check:changed -- --base upstream/main docs/providers/nvidia.md extensions/nvidia/index.test.ts extensions/nvidia/index.ts extensions/nvidia/onboard.test.ts extensions/nvidia/provider-catalog.test.ts extensions/nvidia/provider-catalog.tscorepack pnpm exec tsx -e 'import { buildLiveNvidiaProvider } from "./extensions/nvidia/provider-catalog.ts"; void (async () => { const started = Date.now(); const provider = await buildLiveNvidiaProvider(); console.log(JSON.stringify({ elapsedMs: Date.now() - started, modelCount: provider.models.length, firstModels: provider.models.slice(0, 4).map((model) => ({ id: model.id, name: model.name, contextWindow: model.contextWindow, maxTokens: model.maxTokens })) }, null, 2)); })();'Notes
CHANGELOG.mdupdate per maintainer instruction.read:projectscope.