Skip to content

fix(nvidia): load featured model catalog#80775

Open
eleqtrizit wants to merge 2 commits into
openclaw:mainfrom
eleqtrizit:79431
Open

fix(nvidia): load featured model catalog#80775
eleqtrizit wants to merge 2 commits into
openclaw:mainfrom
eleqtrizit:79431

Conversation

@eleqtrizit
Copy link
Copy Markdown
Contributor

@eleqtrizit eleqtrizit commented May 11, 2026

Summary

  • Loads NVIDIA's public featured-model catalog in the NVIDIA provider runtime and falls back to the bundled manifest catalog when the feed is unavailable.
  • Keeps NVIDIA setup and model-picker surfaces current without changing existing auth or config defaults.

Changes

  • Added a guarded HTTPS fetch for the featured catalog with hostname policy, a 10s timeout for the guarded pinned-dispatcher path, successful-result caching, row bounds, schema validation, and duplicate merging.
  • Registered the live NVIDIA catalog with the existing static provider catalog as the offline fallback.
  • Updated NVIDIA provider tests and docs, including the canonical normalized model-id expectation in onboarding coverage.

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, commit 90b56ad407, Node v22.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:

corepack 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)); })();'

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.1 and minimaxai/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.ts
  • corepack 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.ts
  • corepack 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

Co-authored-by: CaptainTimon <CaptainTimon@users.noreply.github.com>
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation extensions: nvidia size: M maintainer Maintainer-authored PR labels May 11, 2026
@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented May 11, 2026

Codex review: needs maintainer review before merge.

Summary
The branch adds a guarded NVIDIA featured-model catalog fetch with caching, validation, bundled fallback wiring, provider tests, and NVIDIA docs updates.

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
Sufficient (terminal): The PR body now includes exact-head terminal output from buildLiveNvidiaProvider showing live NVIDIA rows merged with fallback rows after the patch.

Next step before merge
Human maintainer review is the next action because the PR is protected by the maintainer label and overlaps another open implementation; there is no narrow automated repair defect.

Security
Cleared: Cleared: the diff adds a credential-free GET to a fixed HTTPS NVIDIA assets endpoint through existing SSRF guard helpers with timeout, bounded parsing, cache, and static fallback, without dependency, CI, secrets, or package-execution changes.

Review details

Best 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:

  • Protected PR state: Live PR metadata shows this PR is open, authored by a contributor, and labeled maintainer, extensions: nvidia, and proof: supplied; the protected label prevents cleanup closure. (90b56ad40703)
  • Current main static catalog baseline: Current main still builds the NVIDIA provider from the manifest-backed static catalog via buildNvidiaProvider, so the PR is adding new live-catalog behavior rather than removing already-implemented code. (extensions/nvidia/provider-catalog.ts:7, fc9b8c94a9a1)
  • Manifest fallback remains available: The NVIDIA manifest contains the bundled fallback rows and marks NVIDIA discovery as static, matching the PR's fallback boundary. (extensions/nvidia/openclaw.plugin.json:15, fc9b8c94a9a1)
  • PR live provider implementation: At the PR head, buildLiveNvidiaProvider loads featured rows, returns the static provider on empty/unavailable results, and merges featured rows ahead of fallback rows. (extensions/nvidia/provider-catalog.ts:55, 90b56ad40703)
  • Provider SDK seam supports this shape: defineSingleProviderPluginEntry accepts async buildProvider, optional buildStaticProvider, and separately registers live and static model catalog providers, so the PR stays within the existing provider boundary. (src/plugin-sdk/provider-entry.ts:29, fc9b8c94a9a1)
  • Network guard contract checked: fetchWithSsrFGuard enforces HTTP(S), requireHttps, redirect handling, timeout cleanup, and release semantics; the SSRF policy helper derives an exact hostname policy from the configured endpoint URL. (src/infra/net/fetch-guard.ts:344, fc9b8c94a9a1)

Likely related people:

  • eleqtrizit: Merged history shows this account introduced the bundled NVIDIA provider, onboarding flow, docs, and static catalog in feat(nvidia): add NVIDIA provider with onboarding flow #71204, which is the area this PR extends. (role: introduced NVIDIA provider behavior; confidence: high; commits: 9a0b43c47e30; files: extensions/nvidia/provider-catalog.ts, extensions/nvidia/index.ts, docs/providers/nvidia.md)
  • shakkernerd: Commit history for the NVIDIA catalog path shows recent work refactoring the NVIDIA catalog to the manifest-backed shape that current main uses. (role: recent NVIDIA catalog contributor; confidence: medium; commits: 1f883f3dffcb; files: extensions/nvidia/provider-catalog.ts, extensions/nvidia/openclaw.plugin.json)
  • steipete: Recent provider-entry history shows work unifying model catalog registration, including the live/static catalog seam the PR relies on. (role: SDK catalog adjacent owner; confidence: medium; commits: 311e4608d173; files: src/plugin-sdk/provider-entry.ts)
  • vincentkoc: Commit history shows NVIDIA provider metadata fixes shortly before the bundled provider merge, making this person relevant for catalog metadata behavior. (role: recent NVIDIA metadata contributor; confidence: low; commits: dcd665cd0510; files: extensions/nvidia/provider-catalog.ts, extensions/nvidia/openclaw.plugin.json)

Remaining risk / open question:

  • Maintainers still need to choose between this PR and feat(nvidia): fetch featured model catalog #79482 before landing one implementation.
  • I did not run the PR branch tests in this read-only review; merge should still be gated by the targeted NVIDIA provider tests, changed-surface checks, and CI.

Codex review notes: model gpt-5.5, reasoning high; reviewed against fc9b8c94a9a1.

Copy link
Copy Markdown
Contributor

@TurboTheTurtle TurboTheTurtle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@eleqtrizit eleqtrizit added the proof: supplied External PR includes structured after-fix real behavior proof. label May 11, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation extensions: nvidia maintainer Maintainer-authored PR proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants