diff --git a/docs/providers/nvidia.md b/docs/providers/nvidia.md index ad67420ea2d..da33dc34f40 100644 --- a/docs/providers/nvidia.md +++ b/docs/providers/nvidia.md @@ -3,7 +3,7 @@ summary: "Use NVIDIA's OpenAI-compatible API in OpenClaw" read_when: - You want to use NVIDIA models in OpenClaw - You need NVIDIA_API_KEY setup -title: "NVIDIA" +title: 'NVIDIA' --- # NVIDIA @@ -12,28 +12,31 @@ NVIDIA provides an OpenAI-compatible API at `https://integrate.api.nvidia.com/v1 ## CLI setup +Export the key once, then run onboarding without an inline secret: + ```bash -openclaw onboard --auth-choice apiKey --token-provider nvidia --token "$NVIDIA_API_KEY" +export NVIDIA_API_KEY="nvapi-..." +openclaw onboard --auth-choice apiKey --token-provider nvidia ``` -If `NVIDIA_API_KEY` is already exported, you can omit `--token`. +If you still pass `--token`, remember it lands in shell history and `ps` output; prefer the env var when possible. ## Config snippet ```json5 { - env: { NVIDIA_API_KEY: "nvapi-..." }, + env: { NVIDIA_API_KEY: 'nvapi-...' }, models: { providers: { nvidia: { - baseUrl: "https://integrate.api.nvidia.com/v1", - api: "openai-completions", + baseUrl: 'https://integrate.api.nvidia.com/v1', + api: 'openai-completions', }, }, }, agents: { defaults: { - model: { primary: "nvidia/llama-3.1-nemotron-70b-instruct" }, + model: { primary: 'nvidia/llama-3.1-nemotron-70b-instruct' }, }, }, } diff --git a/src/agents/models-config.providers.nvidia.test.ts b/src/agents/models-config.providers.nvidia.test.ts index bbd655fe09f..fcb9885e6e5 100644 --- a/src/agents/models-config.providers.nvidia.test.ts +++ b/src/agents/models-config.providers.nvidia.test.ts @@ -2,6 +2,7 @@ import { mkdtempSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { describe, expect, it } from "vitest"; +import { resolveApiKeyForProvider } from "./model-auth.js"; import { buildNvidiaProvider, resolveImplicitProviders } from "./models-config.providers.js"; describe("NVIDIA provider", () => { @@ -13,7 +14,30 @@ describe("NVIDIA provider", () => { try { const providers = await resolveImplicitProviders({ agentDir }); expect(providers?.nvidia).toBeDefined(); - expect(providers?.nvidia?.apiKey).toBe("NVIDIA_API_KEY"); + expect(providers?.nvidia?.models?.length).toBeGreaterThan(0); + } finally { + if (previous === undefined) { + delete process.env.NVIDIA_API_KEY; + } else { + process.env.NVIDIA_API_KEY = previous; + } + } + }); + + it("resolves the nvidia api key value from env", async () => { + const agentDir = mkdtempSync(join(tmpdir(), "openclaw-test-")); + const previous = process.env.NVIDIA_API_KEY; + process.env.NVIDIA_API_KEY = "nvidia-test-api-key"; + + try { + const auth = await resolveApiKeyForProvider({ + provider: "nvidia", + agentDir, + }); + + expect(auth.apiKey).toBe("nvidia-test-api-key"); + expect(auth.mode).toBe("api-key"); + expect(auth.source).toContain("NVIDIA_API_KEY"); } finally { if (previous === undefined) { delete process.env.NVIDIA_API_KEY;