fix(onboard): surface install-vllm when explicitly opted in via env#3790
Conversation
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (5)
✅ Files skipped from review due to trivial changes (3)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughExtracts vLLM menu construction into buildVllmMenuEntries, updates onboard.ts to call it, adds unit and integration tests for install-vllm edge cases, and updates platform/config/docs to distinguish "Local vLLM (already running)" from "Local vLLM (managed install/start)". ChangesvLLM Onboarding Menu Refactor
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-3790.docs.buildwithfern.com/nemoclaw |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Auto-dispatched E2E: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
…naged Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
ci/platform-matrix.json (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winMissing SPDX license header.
The coding guidelines require every source file (including JSON) to include an SPDX license header. This file does not have one.
📄 Add SPDX header
Add the following at the top of the file:
+// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 { "$comment": "Single source of truth for tested platforms and providers. Scripts read this to generate README and docs tables. QA/CI update this file; docs are derived.",As per coding guidelines, "Every source file must include an SPDX license header for copyright and Apache-2.0 license."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci/platform-matrix.json` at line 1, This JSON file is missing the required SPDX license header; add an SPDX short-form header for Apache-2.0 at the very top of the file before the opening "{" so every source file has the copyright and license declaration, ensuring the header appears as the first line of the file.
🧹 Nitpick comments (6)
test/onboard-selection.test.ts (1)
505-505: ⚡ Quick winPrefix unused catch binding with underscore.
The error variable
eis bound but never used in the catch block. As per coding guidelines, unused variables should be prefixed with underscore. Either usecatch (_e)or omit the binding entirely withcatch { }.♻️ Proposed fix
- } catch (e) { + } catch { // Downstream paths (model probe, gateway, etc.) are not mocked here; we // only care about the menu-build log emitted before any failure. }As per coding guidelines: Unused variables should be prefixed with underscore (
_) following Biome conventions.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/onboard-selection.test.ts` at line 505, In the catch block in test/onboard-selection.test.ts where the code currently uses "catch (e)" (near the end of the test), rename the unused error binding to "_e" or remove the binding entirely (use "catch { }") to comply with Biome conventions for unused variables; update the catch clause around the failing try/catch in that test so the unused exception variable is either prefixed with an underscore or omitted.docs/get-started/quickstart.md (1)
258-260: ⚡ Quick winMultiple sentences on the same line.
The documentation style guide requires one sentence per line to make diffs readable. Lines 258, 259, and 260 each contain multiple sentences.
📝 Split into one sentence per line
-- **Local NVIDIA NIM** appears when `NEMOCLAW_EXPERIMENTAL=1` is set and the host has a NIM-capable GPU. NemoClaw pulls and manages a NIM container. -- **Local vLLM (already running)** appears whenever NemoClaw detects a vLLM server on `localhost:8000`. No flag is required for the menu entry. NemoClaw auto-detects the loaded model. -- **Local vLLM (managed install/start)** requires `NEMOCLAW_EXPERIMENTAL=1` or `NEMOCLAW_PROVIDER=install-vllm`. NemoClaw pulls and starts a vLLM container on supported DGX Spark, DGX Station, and Linux NVIDIA GPU hosts. +- **Local NVIDIA NIM** appears when `NEMOCLAW_EXPERIMENTAL=1` is set and the host has a NIM-capable GPU. + NemoClaw pulls and manages a NIM container. +- **Local vLLM (already running)** appears whenever NemoClaw detects a vLLM server on `localhost:8000`. + No flag is required for the menu entry. + NemoClaw auto-detects the loaded model. +- **Local vLLM (managed install/start)** requires `NEMOCLAW_EXPERIMENTAL=1` or `NEMOCLAW_PROVIDER=install-vllm`. + NemoClaw pulls and starts a vLLM container on supported DGX Spark, DGX Station, and Linux NVIDIA GPU hosts.As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/get-started/quickstart.md` around lines 258 - 260, The three bullet entries for "**Local NVIDIA NIM**", "**Local vLLM (already running)**", and "**Local vLLM (managed install/start)**" contain multiple sentences on the same line; edit the quickstart.md bullets so each sentence is on its own line (e.g., break the NIM bullet into one line for the condition and a second line for the behavior, and do the same for both vLLM bullets), keeping the exact wording but ensuring one sentence per source line to satisfy the "one sentence per line" doc style.docs/security/best-practices.md (1)
501-501: ⚡ Quick winMultiple sentences on the same line.
The documentation style guide requires one sentence per line to make diffs readable. Line 501 contains two sentences.
📝 Split into one sentence per line
-The `NEMOCLAW_EXPERIMENTAL=1` environment variable gates local NVIDIA NIM and the managed vLLM install/start path. An already-running vLLM server on `localhost:8000` is offered in the menu without a flag, because selecting it is an explicit user action. +The `NEMOCLAW_EXPERIMENTAL=1` environment variable gates local NVIDIA NIM and the managed vLLM install/start path. +An already-running vLLM server on `localhost:8000` is offered in the menu without a flag, because selecting it is an explicit user action.As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/security/best-practices.md` at line 501, The sentence pair describing NEMOCLAW_EXPERIMENTAL and the vLLM server on localhost:8000 must be split so each sentence is on its own line; edit the paragraph containing "The `NEMOCLAW_EXPERIMENTAL=1` environment variable..." and place the first sentence on one line and the second sentence ("An already-running vLLM server on `localhost:8000` is offered...") on the following line so the file follows the one-sentence-per-line docstyle.docs/security/best-practices.mdx (2)
464-464: ⚡ Quick winMultiple sentences on the same line.
The documentation style guide requires one sentence per line to make diffs readable. Line 464 contains two sentences.
📝 Split into one sentence per line
-The `NEMOCLAW_EXPERIMENTAL=1` environment variable gates local NVIDIA NIM and the managed vLLM install/start path. An already-running vLLM server on `localhost:8000` is offered in the menu without a flag, because selecting it is an explicit user action. +The `NEMOCLAW_EXPERIMENTAL=1` environment variable gates local NVIDIA NIM and the managed vLLM install/start path. +An already-running vLLM server on `localhost:8000` is offered in the menu without a flag, because selecting it is an explicit user action.As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/security/best-practices.mdx` at line 464, The line containing the text about NEMOCLAW_EXPERIMENTAL and the vLLM server (mentions NEMOCLAW_EXPERIMENTAL=1 and localhost:8000) has multiple sentences on one line; split that line into separate lines so each sentence occupies its own line (e.g., one line for "The `NEMOCLAW_EXPERIMENTAL=1` environment variable gates local NVIDIA NIM and the managed vLLM install/start path." and a separate line for "An already-running vLLM server on `localhost:8000` is offered in the menu without a flag, because selecting it is an explicit user action."). Ensure the surrounding paragraph formatting remains unchanged and follow the one-sentence-per-line rule used across the docs.
4-4: ⚡ Quick winColon in title.
The documentation style guide prohibits colons in section titles. The title uses a colon to separate the main heading from the subtitle.
📝 Remove colon from title
Consider one of these alternatives:
-title: "NemoClaw Security Best Practices: Controls, Risks, and Posture Profiles" +title: "NemoClaw Security Best Practices for Controls, Risks, and Posture Profiles"Or:
-title: "NemoClaw Security Best Practices: Controls, Risks, and Posture Profiles" +title: "NemoClaw Security Best Practices – Controls, Risks, and Posture Profiles"As per coding guidelines, "No colons in titles. Flag 'Inference: Cloud and Local' — should be 'Cloud and Local Inference.'"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/security/best-practices.mdx` at line 4, Change the page title string "NemoClaw Security Best Practices: Controls, Risks, and Posture Profiles" to remove the colon per the style guide—e.g., "NemoClaw Security Best Practices — Controls, Risks and Posture Profiles" or split into a main title and subtitle such as "NemoClaw Security Best Practices" with a subtitle "Controls, Risks and Posture Profiles"; update the title value in the document header (the title string shown in the diff) and ensure any references or TOC entries use the new punctuation-free form (also fix similar instances like "Inference: Cloud and Local" to "Cloud and Local Inference").docs/get-started/quickstart.mdx (1)
236-238: ⚡ Quick winMultiple sentences on the same line.
The documentation style guide requires one sentence per line to make diffs readable. Lines 236, 237, and 238 each contain multiple sentences.
📝 Split into one sentence per line
-- **Local NVIDIA NIM** appears when `NEMOCLAW_EXPERIMENTAL=1` is set and the host has a NIM-capable GPU. NemoClaw pulls and manages a NIM container. -- **Local vLLM (already running)** appears whenever NemoClaw detects a vLLM server on `localhost:8000`. No flag is required for the menu entry. NemoClaw auto-detects the loaded model. -- **Local vLLM (managed install/start)** requires `NEMOCLAW_EXPERIMENTAL=1` or `NEMOCLAW_PROVIDER=install-vllm`. NemoClaw pulls and starts a vLLM container on supported DGX Spark, DGX Station, and Linux NVIDIA GPU hosts. +- **Local NVIDIA NIM** appears when `NEMOCLAW_EXPERIMENTAL=1` is set and the host has a NIM-capable GPU. + NemoClaw pulls and manages a NIM container. +- **Local vLLM (already running)** appears whenever NemoClaw detects a vLLM server on `localhost:8000`. + No flag is required for the menu entry. + NemoClaw auto-detects the loaded model. +- **Local vLLM (managed install/start)** requires `NEMOCLAW_EXPERIMENTAL=1` or `NEMOCLAW_PROVIDER=install-vllm`. + NemoClaw pulls and starts a vLLM container on supported DGX Spark, DGX Station, and Linux NVIDIA GPU hosts.As per coding guidelines, "One sentence per line in source (makes diffs readable). Flag paragraphs where multiple sentences appear on the same line."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/get-started/quickstart.mdx` around lines 236 - 238, The three bullet lines for "**Local NVIDIA NIM**", "**Local vLLM (already running)**", and "**Local vLLM (managed install/start)**" contain multiple sentences on the same line; split each sentence onto its own line in docs/get-started/quickstart.mdx so each sentence becomes a separate line (e.g., break the bullet sentences after the period), preserving the exact wording and bullet structure and ensuring no other text is changed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@ci/platform-matrix.json`:
- Line 1: This JSON file is missing the required SPDX license header; add an
SPDX short-form header for Apache-2.0 at the very top of the file before the
opening "{" so every source file has the copyright and license declaration,
ensuring the header appears as the first line of the file.
---
Nitpick comments:
In `@docs/get-started/quickstart.md`:
- Around line 258-260: The three bullet entries for "**Local NVIDIA NIM**",
"**Local vLLM (already running)**", and "**Local vLLM (managed install/start)**"
contain multiple sentences on the same line; edit the quickstart.md bullets so
each sentence is on its own line (e.g., break the NIM bullet into one line for
the condition and a second line for the behavior, and do the same for both vLLM
bullets), keeping the exact wording but ensuring one sentence per source line to
satisfy the "one sentence per line" doc style.
In `@docs/get-started/quickstart.mdx`:
- Around line 236-238: The three bullet lines for "**Local NVIDIA NIM**",
"**Local vLLM (already running)**", and "**Local vLLM (managed install/start)**"
contain multiple sentences on the same line; split each sentence onto its own
line in docs/get-started/quickstart.mdx so each sentence becomes a separate line
(e.g., break the bullet sentences after the period), preserving the exact
wording and bullet structure and ensuring no other text is changed.
In `@docs/security/best-practices.md`:
- Line 501: The sentence pair describing NEMOCLAW_EXPERIMENTAL and the vLLM
server on localhost:8000 must be split so each sentence is on its own line; edit
the paragraph containing "The `NEMOCLAW_EXPERIMENTAL=1` environment variable..."
and place the first sentence on one line and the second sentence ("An
already-running vLLM server on `localhost:8000` is offered...") on the following
line so the file follows the one-sentence-per-line docstyle.
In `@docs/security/best-practices.mdx`:
- Line 464: The line containing the text about NEMOCLAW_EXPERIMENTAL and the
vLLM server (mentions NEMOCLAW_EXPERIMENTAL=1 and localhost:8000) has multiple
sentences on one line; split that line into separate lines so each sentence
occupies its own line (e.g., one line for "The `NEMOCLAW_EXPERIMENTAL=1`
environment variable gates local NVIDIA NIM and the managed vLLM install/start
path." and a separate line for "An already-running vLLM server on
`localhost:8000` is offered in the menu without a flag, because selecting it is
an explicit user action."). Ensure the surrounding paragraph formatting remains
unchanged and follow the one-sentence-per-line rule used across the docs.
- Line 4: Change the page title string "NemoClaw Security Best Practices:
Controls, Risks, and Posture Profiles" to remove the colon per the style
guide—e.g., "NemoClaw Security Best Practices — Controls, Risks and Posture
Profiles" or split into a main title and subtitle such as "NemoClaw Security
Best Practices" with a subtitle "Controls, Risks and Posture Profiles"; update
the title value in the document header (the title string shown in the diff) and
ensure any references or TOC entries use the new punctuation-free form (also fix
similar instances like "Inference: Cloud and Local" to "Cloud and Local
Inference").
In `@test/onboard-selection.test.ts`:
- Line 505: In the catch block in test/onboard-selection.test.ts where the code
currently uses "catch (e)" (near the end of the test), rename the unused error
binding to "_e" or remove the binding entirely (use "catch { }") to comply with
Biome conventions for unused variables; update the catch clause around the
failing try/catch in that test so the unused exception variable is either
prefixed with an underscore or omitted.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 6ef1cc3a-e2ff-4354-a4fa-8abd972b24dc
📒 Files selected for processing (11)
ci/platform-matrix.jsondocs/get-started/quickstart.mddocs/get-started/quickstart.mdxdocs/inference/inference-options.mddocs/inference/inference-options.mdxdocs/security/best-practices.mddocs/security/best-practices.mdxsrc/lib/onboard.tssrc/lib/onboard/vllm-menu.test.tssrc/lib/onboard/vllm-menu.tstest/onboard-selection.test.ts
Selective E2E Results — ✅ All requested jobs passedRun: 26119326630
|
Selective E2E Results —
|
| Job | Result |
|---|---|
| cloud-e2e | |
| cloud-onboard-e2e | |
| gpu-e2e | ⏭️ skipped |
Summary
NEMOCLAW_PROVIDER=install-vllmandNEMOCLAW_EXPERIMENTAL=1used to disappear silently in two scenarios: (a) when a vLLM server was already running onlocalhost:8000— the menu correctly picked the running entry but never told the user their env-var opt-in was redirected; and (b) when no vLLM profile matched the host — the menu dropped the install entry entirely and the dispatcher emitted the generic "Requested provider 'install-vllm' is not available in this environment." error that hid the real cause. Docs additionally claimed Local vLLM required bothNEMOCLAW_EXPERIMENTAL=1AND a server already running, which conflated the two paths.Related Issues
Fixes #3765
Fixes #3684
Changes
buildVllmMenuEntrieshelper at src/lib/onboard/vllm-menu.ts that builds the local-vLLM entries for the onboarding inference menu in one place: always emits the install entry when the user explicitly opted in viaNEMOCLAW_PROVIDER=install-vllm(even when no profile matches), so the dispatcher can emit the precise "No vLLM install profile available for this host." error. When running vLLM takes precedence over the opt-in, the helper logs a note so the redirect is visible.setupNimin src/lib/onboard.ts delegates the vLLM menu construction to the helper. Net diff ononboard.tsis -9 lines.NEMOCLAW_EXPERIMENTAL=1orNEMOCLAW_PROVIDER=install-vllm). Regenerated docs/inference/inference-options.md and its.mdxmirror.buildVllmMenuEntriescovering every code path. Integration tests at test/onboard-selection.test.ts verify the dispatcher's precise error message and the running-vLLM override note.Type of Change
Verification
npx prek run --all-filespassesnpm testpassesmake docsbuilds without warnings (doc changes only)Signed-off-by: Tinson Lai tinsonl@nvidia.com
Summary by CodeRabbit
New Features
Documentation
Tests