From b82fb72d2b77ea091517aca56024ef1fefd234af Mon Sep 17 00:00:00 2001 From: zyang-dev <267119621+zyang-dev@users.noreply.github.com> Date: Fri, 10 Jul 2026 13:00:18 -0700 Subject: [PATCH 1/2] fix(onboard): remove experimental vLLM label on managed platforms Signed-off-by: zyang-dev <267119621+zyang-dev@users.noreply.github.com> --- .../local-compatible-inference-setup.mdx | 2 +- docs/inference/tool-calling-reliability.mdx | 2 +- src/lib/onboard/vllm-menu.test.ts | 23 ++++++++++++++++++- src/lib/onboard/vllm-menu.ts | 4 +++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/docs/inference/local-compatible-inference-setup.mdx b/docs/inference/local-compatible-inference-setup.mdx index 1f0d7e8fdc5..2b6fa3b6169 100644 --- a/docs/inference/local-compatible-inference-setup.mdx +++ b/docs/inference/local-compatible-inference-setup.mdx @@ -220,7 +220,7 @@ On supported Linux hosts with NVIDIA GPUs, the onboard wizard can also install o ### Use an Existing vLLM Server -For an already-running vLLM server, run `$$nemoclaw onboard` and select **Local vLLM [experimental]** from the provider list. +For an already-running vLLM server, run `$$nemoclaw onboard` and select **Local vLLM** from the provider list. The entry retains an experimental label on generic hosts, but not on DGX Spark or DGX Station. If vLLM is already running, NemoClaw detects the running model and validates the endpoint. When vLLM exposes runtime metadata such as `max_model_len`, NemoClaw uses that value for the configured context window unless you set `NEMOCLAW_CONTEXT_WINDOW` yourself. diff --git a/docs/inference/tool-calling-reliability.mdx b/docs/inference/tool-calling-reliability.mdx index 36694afbd6f..bff356ce23c 100644 --- a/docs/inference/tool-calling-reliability.mdx +++ b/docs/inference/tool-calling-reliability.mdx @@ -104,7 +104,7 @@ These routes therefore keep direct structured tool calling until search, describ ## Recommended Fix -For persistent NemoClaw use, start vLLM with auto tool choice and the parser that matches your model family, then rerun onboarding and select **Local vLLM [experimental]** or **Other OpenAI-compatible endpoint**. +For persistent NemoClaw use, start vLLM with auto tool choice and the parser that matches your model family, then rerun onboarding and select **Local vLLM** or **Other OpenAI-compatible endpoint**. The Local vLLM entry retains an experimental label on generic hosts, but not on DGX Spark or DGX Station. ### Configure vLLM diff --git a/src/lib/onboard/vllm-menu.test.ts b/src/lib/onboard/vllm-menu.test.ts index 8ceabdc4341..f90d37e9571 100644 --- a/src/lib/onboard/vllm-menu.test.ts +++ b/src/lib/onboard/vllm-menu.test.ts @@ -20,7 +20,7 @@ describe("buildVllmMenuEntries", () => { assert.deepEqual(entries, []); }); - it("returns the running entry when vLLM is reachable on localhost", () => { + it("marks the running entry experimental on generic hosts", () => { const entries = buildVllmMenuEntries({ vllmRunning: true, vllmProfile: null, @@ -35,6 +35,27 @@ describe("buildVllmMenuEntries", () => { assert.match(entries[0].label, /running/); }); + for (const [platform, hostLabel] of [ + ["spark", "Spark"], + ["station", "Station"], + ] as const) { + it(`does not mark the running entry experimental on DGX ${hostLabel}`, () => { + const entries = buildVllmMenuEntries({ + vllmRunning: true, + vllmProfile: null, + experimental: false, + platform, + hasVllmImage: false, + log: () => {}, + env: {}, + }); + assert.equal(entries.length, 1); + assert.equal(entries[0].key, "vllm"); + assert.doesNotMatch(entries[0].label, /experimental/); + assert.match(entries[0].label, /running/); + }); + } + it("returns the install entry when a profile matches and EXPERIMENTAL is set", () => { const entries = buildVllmMenuEntries({ vllmRunning: false, diff --git a/src/lib/onboard/vllm-menu.ts b/src/lib/onboard/vllm-menu.ts index 549d57409a6..58709a87bee 100644 --- a/src/lib/onboard/vllm-menu.ts +++ b/src/lib/onboard/vllm-menu.ts @@ -62,10 +62,12 @@ export function buildVllmMenuEntries(opts: BuildVllmMenuOptions): VllmMenuEntry[ ` Note: NEMOCLAW_PROVIDER=install-vllm requested, but vLLM is already running on localhost:${VLLM_PORT} — selecting the running instance.`, ); } + const experimentalLabel = + opts.platform && MANAGED_VLLM_DEFAULT_PLATFORMS.has(opts.platform) ? "" : " [experimental]"; return [ { key: "vllm", - label: `Local vLLM [experimental] (localhost:${VLLM_PORT}) — running (suggested)`, + label: `Local vLLM${experimentalLabel} (localhost:${VLLM_PORT}) — running (suggested)`, }, ]; } From cebd788dbf3d45737b078eddffe9bee436701797 Mon Sep 17 00:00:00 2001 From: zyang-dev <267119621+zyang-dev@users.noreply.github.com> Date: Fri, 10 Jul 2026 15:42:17 -0700 Subject: [PATCH 2/2] fix(onboard): address vLLM platform label review feedback Signed-off-by: zyang-dev <267119621+zyang-dev@users.noreply.github.com> --- docs/inference/local-compatible-inference-setup.mdx | 3 ++- docs/inference/tool-calling-reliability.mdx | 3 ++- src/lib/onboard/vllm-menu.test.ts | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/inference/local-compatible-inference-setup.mdx b/docs/inference/local-compatible-inference-setup.mdx index 2b6fa3b6169..869844350a3 100644 --- a/docs/inference/local-compatible-inference-setup.mdx +++ b/docs/inference/local-compatible-inference-setup.mdx @@ -220,7 +220,8 @@ On supported Linux hosts with NVIDIA GPUs, the onboard wizard can also install o ### Use an Existing vLLM Server -For an already-running vLLM server, run `$$nemoclaw onboard` and select **Local vLLM** from the provider list. The entry retains an experimental label on generic hosts, but not on DGX Spark or DGX Station. +For an already-running vLLM server, run `$$nemoclaw onboard` and select **Local vLLM** from the provider list. +On generic hosts, you see an experimental label on the entry; on DGX Spark or DGX Station, you do not. If vLLM is already running, NemoClaw detects the running model and validates the endpoint. When vLLM exposes runtime metadata such as `max_model_len`, NemoClaw uses that value for the configured context window unless you set `NEMOCLAW_CONTEXT_WINDOW` yourself. diff --git a/docs/inference/tool-calling-reliability.mdx b/docs/inference/tool-calling-reliability.mdx index bff356ce23c..5eec2ce5f2a 100644 --- a/docs/inference/tool-calling-reliability.mdx +++ b/docs/inference/tool-calling-reliability.mdx @@ -104,7 +104,8 @@ These routes therefore keep direct structured tool calling until search, describ ## Recommended Fix -For persistent NemoClaw use, start vLLM with auto tool choice and the parser that matches your model family, then rerun onboarding and select **Local vLLM** or **Other OpenAI-compatible endpoint**. The Local vLLM entry retains an experimental label on generic hosts, but not on DGX Spark or DGX Station. +For persistent NemoClaw use, start vLLM with auto tool choice and the parser that matches your model family, then rerun onboarding and select **Local vLLM** or **Other OpenAI-compatible endpoint**. +On generic hosts, you see an experimental label on the Local vLLM entry; on DGX Spark or DGX Station, you do not. ### Configure vLLM diff --git a/src/lib/onboard/vllm-menu.test.ts b/src/lib/onboard/vllm-menu.test.ts index f90d37e9571..3564eccce5a 100644 --- a/src/lib/onboard/vllm-menu.test.ts +++ b/src/lib/onboard/vllm-menu.test.ts @@ -25,6 +25,7 @@ describe("buildVllmMenuEntries", () => { vllmRunning: true, vllmProfile: null, experimental: false, + platform: "linux", hasVllmImage: false, log: () => {}, env: {},