fix(inference): serve Spark Qwen3.6 with qwen3_coder tool parser (#6457) - #6551
Conversation
The DGX Spark managed-vLLM default checkpoint nvidia/Qwen3.6-35B-A3B-NVFP4 was served with --tool-call-parser qwen3_xml. That parser mis-parses this checkpoint's tool-call frames: vLLM logs "qwen3xml_tool_parser.py:303 Error when parsing XML elements: not well-formed" and emits truncated/extra-} tool arguments, so LangChain Deep Agents Code headless runs (dcode -n) fail intermittently with POST /v1/chat/completions 400 Bad Request (json.decoder.JSONDecodeError: Extra data) and dcode exits 1. Switch the Spark recipe to --tool-call-parser qwen3_coder, matching this Qwen3.6-family checkpoint's emitted tool-call format and the parser the other Qwen3.6 recipes in this registry already use (Qwen3.6-27B-FP8, Nemotron-3-Nano-4B). Validated end-to-end on real DGX Spark (GB10) hardware via the reporter workflow (nemoclaw <name> exec -- dcode -n ...): pre-fix 3/4 runs exited 1 with HTTP 400; post-fix 5/5 runs completed with exit 0 and zero parser errors or 400s. Signed-off-by: Yimo Jiang <yimoj@nvidia.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
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 (2)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughThe NVFP4 ChangesNVFP4 Tool-Call Parser Fix
Estimated code review effort: 1 (Trivial) | ~3 minutes Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most impacted files.
Updated |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/inference/vllm-models.test.ts (1)
212-212: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd
(#6457)issue-reference suffix to the test title.This test now encodes a regression check for issue
#6457(added at Lines 230-235), but its title doesn't carry the issue suffix, unlike the analogous fix-regression test at Line 182 (...with auto tool-choice enabled (#6314)). As per coding guidelines,**/*.test.tsfiles should "Write behavior-oriented test titles, and put local issue references in a final(#1234)suffix."✏️ Proposed fix
- it("builds the NVFP4 serve command from the DGX Spark model-card recipe", () => { + it("builds the NVFP4 serve command from the DGX Spark model-card recipe (`#6457`)", () => {🤖 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 `@src/lib/inference/vllm-models.test.ts` at line 212, Add the local issue reference suffix to the behavior-oriented test title in the `it(...)` block for the DGX Spark model-card recipe so it matches the test naming convention used elsewhere in `vllm-models.test.ts`. Update the title string in that `it("builds the NVFP4 serve command from the DGX Spark model-card recipe", ...)` test to end with `(`#6457`)` and keep the rest of the test body unchanged.Source: Coding guidelines
🤖 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.
Nitpick comments:
In `@src/lib/inference/vllm-models.test.ts`:
- Line 212: Add the local issue reference suffix to the behavior-oriented test
title in the `it(...)` block for the DGX Spark model-card recipe so it matches
the test naming convention used elsewhere in `vllm-models.test.ts`. Update the
title string in that `it("builds the NVFP4 serve command from the DGX Spark
model-card recipe", ...)` test to end with `(`#6457`)` and keep the rest of the
test body unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: be3d4e67-403a-4dcf-9845-0aee5ff03033
📒 Files selected for processing (2)
src/lib/inference/vllm-models.test.tssrc/lib/inference/vllm-models.ts
PR Review Advisor (Nemotron Ultra) — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Test follow-ups to resolve or justifyIf these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.
This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision. |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Test follow-ups to resolve or justifyIf these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.
This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision. |
Address PR #6551 review: add a dedicated negative regression test asserting the DGX Spark serve command uses --tool-call-parser qwen3_coder (not qwen3_xml) with exactly one parser configured, and add the (#6457) issue-reference suffix to the NVFP4 serve-command test title per the repo test-title convention. Signed-off-by: Yimo Jiang <yimoj@nvidia.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/inference/vllm-models.test.ts (1)
247-262: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueOverlapping assertions with the adjacent test.
This new regression test re-asserts
qwen3_coderpresent /qwen3_xmlabsent, which is already covered by the test at Line 230-234. The only new assertion is the "exactly once" occurrence check at Line 261. Consider folding the occurrence check into the existing test (as was done fornemotron-3-nano-4bat Line 201-202) instead of duplicating the parser assertions in a second test block.♻️ Proposed consolidation
expect(cmd).toContain("--tool-call-parser qwen3_coder"); expect(cmd).not.toContain("qwen3_xml"); + expect(cmd.match(/--tool-call-parser/g)).toHaveLength(1); expect(cmd).toContain("--reasoning-parser qwen3"); expect(cmd).toContain("--max-model-len 262144"); ... }); - - it("does not regress the Spark tool-call parser to qwen3_xml (`#6457`)", () => { - ... - });🤖 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 `@src/lib/inference/vllm-models.test.ts` around lines 247 - 262, The new Spark regression test in vllm-models.test.ts duplicates the existing parser assertions already covered by the adjacent qwen3_coder test. Move the unique "exactly one --tool-call-parser" check into the existing test that builds the Spark vLLM command, and keep this new test focused on the regression-specific behavior so the parser presence/absence assertions are not repeated across both blocks.
🤖 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.
Nitpick comments:
In `@src/lib/inference/vllm-models.test.ts`:
- Around line 247-262: The new Spark regression test in vllm-models.test.ts
duplicates the existing parser assertions already covered by the adjacent
qwen3_coder test. Move the unique "exactly one --tool-call-parser" check into
the existing test that builds the Spark vLLM command, and keep this new test
focused on the regression-specific behavior so the parser presence/absence
assertions are not repeated across both blocks.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 88d04306-56fe-4c67-9806-deb367806de3
📒 Files selected for processing (1)
src/lib/inference/vllm-models.test.ts
Fold the single-tool-call-parser occurrence check into the existing (#6457) NVFP4 serve-command test and drop the duplicate regression block per PR #6551 CodeRabbit review; the negative regression guard (qwen3_coder present, qwen3_xml absent, exactly one parser) is preserved. Signed-off-by: Yimo Jiang <yimoj@nvidia.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Address PR #6551 advisor: remove the specific dcode run-count claims (3/4, 5/5) from the qwen3_coder parser comments in vllm-models.ts and its test; keep the technical rationale and #6457 reference and point to the PR verification notes for the transcript. Comment-only; no behavior or assertion change. Signed-off-by: Yimo Jiang <yimoj@nvidia.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
E2E Target Results — ✅ All requested jobs passedRun: 29031635887
|
E2E Target Results — ❌ Some jobs failedRun: 29031635888
|
E2E Target Results — ❌ Some jobs failedRun: 29032278382
|
E2E Target Results — ❌ Some jobs failedRun: 29031635888
|
cjagwani
left a comment
There was a problem hiding this comment.
Exact-head maintainer audit on 7e1c439: the parser change, focused tests, DCO, four Verified commits, CodeRabbit, and all 46 standard checks pass. The qwen3_coder registry value is the correct narrow fix, and the advisor suggestion to assert JSON from vLLM /health is inapplicable because that endpoint is an empty liveness response rather than a tool-parser exercise.
Approval is still held on required live evidence. inference-routing run 29031635887 passed only its three negative paths; the four hosted paths were skipped. network-policy failed twice, including controlled retry 29032278382, with the same gateway trust-anchor cleanup error before the deny probe: the test received NemoClaw rejected a conflicting gateway trust anchor, and the ambient gateway token could not be cleared at network-policy.test.ts:575. This is deterministic integration-harness state outside this parser diff, so do not change the parser blindly. Repair or explicitly waive that harness blocker, preserve the PR-body real Spark tool-call evidence, then rerun the exact-head advisor before approval.
E2E Target Results — ❌ Some jobs failedRun: 29031635888
|
1 similar comment
E2E Target Results — ❌ Some jobs failedRun: 29031635888
|
Maintainer resolution for exact head
|
apurvvkumaria
left a comment
There was a problem hiding this comment.
Exact head 7e1c439 is ready for final human merge. Normal CI, DCO, signatures, CodeRabbit, and inference-routing are green; both refreshed advisors recommend merge_as_is. The four network-policy attempts failed in shared-runner setup before exercising this parser-only change, and the accepted waiver is recorded with the behavior-specific DGX Spark 5/5 validation evidence.
<!-- markdownlint-disable MD041 --> ## Summary Adds the pre-tag v0.0.79 release notes entry to `docs/about/release-notes.mdx` so the release plan can be generated after docs merge. The entry summarizes the merged v0.0.79 release train across inference, diagnostics, runtime hardening, policies, onboarding recovery, and release validation. ## Changes - Added the v0.0.79 release notes section with linked follow-up documentation for OpenRouter onboarding, managed vLLM changes, completion and logging, Deep Agents runtime limits, policy updates, onboarding recovery, and release validation. - Source summary: - #6461 -> `docs/about/release-notes.mdx`: Documents OpenRouter onboarding support and links to inference/provider references. - #6271 and #6272 -> `docs/about/release-notes.mdx`: Documents shell completion and structured logging highlights. - #6465, #6539, #6570, and #6528 -> `docs/about/release-notes.mdx`: Documents status route-drift, orphaned sandbox, gateway cleanup, and DGX Spark express-install diagnostics. - #6523, #6551, #6484, #6488, #6324, and #6542 -> `docs/about/release-notes.mdx`: Documents managed vLLM, Qwen3.6 tool parser, compaction, and timeout/readiness improvements. - #6559, #6538, #6560, #6568, #6552, #6567, and #6587 -> `docs/about/release-notes.mdx`: Documents runtime, credential, proxy, PID namespace, TOML, and provider-state hardening. - #6541, #5415, #6246, #6496, and #6573 -> `docs/about/release-notes.mdx`: Documents GitHub policy, Gmail policy, MCP allowlist, WhatsApp, and messaging-variant updates. - #6253, #6572, #6444, #6536, and #5860 -> `docs/about/release-notes.mdx`: Documents onboarding resume and create-step recovery improvements. - #6508, #6527, #5506, #6588, #6446, #6447, #6582, #6296, #6367, #6397, and #6505 -> `docs/about/release-notes.mdx`: Documents docs, release-risk, and E2E validation updates. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [x] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Release-note prose only. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: Tests not applicable, release-note prose only. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Docs validation note: `npm run docs:check-agent-variants && npm run docs:check-routes && git diff --check` passed. Full `npm run docs` is currently blocked before Fern validation because the pinned `fern-api@5.65.2` package is unavailable from npm (`ETARGET No matching version found`). --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.79 with a new summary of recent improvements, including onboarding and inference options, operator/CLI diagnostics, sandbox recovery hardening, runtime limits, network policy behavior, and release validation updates. * Added updated references and links for the latest release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…DIA#6457) (NVIDIA#6551) ## Summary On DGX Spark, the managed local-vLLM default model `nvidia/Qwen3.6-35B-A3B-NVFP4` was served with `--tool-call-parser qwen3_xml`, which mis-parses this checkpoint's tool-call frames and makes LangChain Deep Agents Code (`dcode -n`) fail with HTTP 400 during tool calls. This switches the Spark recipe to `--tool-call-parser qwen3_coder` — the parser the other Qwen3.6-family recipes in this registry already use — validated end-to-end on real DGX Spark (GB10) hardware. ## Related Issue Fixes NVIDIA#6457 ## Changes - `src/lib/inference/vllm-models.ts`: change the DGX Spark `nvidia/Qwen3.6-35B-A3B-NVFP4` serve recipe from `--tool-call-parser qwen3_xml` to `--tool-call-parser qwen3_coder`, with a comment documenting the failure mode and the on-hardware validation. - `src/lib/inference/vllm-models.test.ts`: update the Spark serve-command contract to pin `qwen3_coder` and assert `qwen3_xml` is absent. ## Root cause vLLM's `qwen3_xml` tool-call parser does not round-trip this checkpoint's tool-call output. The server logs `WARNING [qwen3xml_tool_parser.py:303] Error when parsing XML elements: not well-formed (invalid token)` and produces truncated / extra-`}` tool arguments, so Deep Agents Code tool calls intermittently return `POST /v1/chat/completions 400 Bad Request` (`json.decoder.JSONDecodeError: Extra data`), the agent reports `tool.result ... has no correlated tool.use args; sending empty tool_args`, and `dcode` exits 1. `qwen3_coder` matches this Qwen3.6-family checkpoint's emitted tool-call format (already used by the `Qwen3.6-27B-FP8` and `Nemotron-3-Nano-4B` recipes here). ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: internal serve-flag correction; no user-facing doc/config surface changes (managed model/profile is auto-selected on Spark). - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: `codex review --uncommitted` — no discrete correctness issues; single serve-flag value change in the inference model registry, validated end-to-end on DGX Spark (see Verification). ## Verification E2E run on real DGX Spark (GB10, aarch64, Ubuntu; NVIDIA GB10 / compute cap 12.1) using the current worktree CLI (`node ./bin/nemoclaw.js`) and the reporter workflow. The managed vLLM container is launched by the fixed CLI code; post-fix the running container shows `--tool-call-parser qwen3_coder`. Onboard (fixed worktree CLI), then the reporter command — both run via the worktree binary: ``` node ./bin/nemoclaw.js onboard --non-interactive --agent langchain-deepagents-code \ --name dcode6457 --gpu --yes --yes-i-accept-third-party-software --fresh --recreate-sandbox # (NEMOCLAW_PROVIDER=install-vllm → DGX Spark default nvidia/Qwen3.6-35B-A3B-NVFP4) node ./bin/nemoclaw.js dcode6457 exec -- dcode -n "Work in /sandbox/work/deepagent-journey. Read task.md and complete it exactly. Run the requested tests before finishing." ``` **Pre-fix (`qwen3_xml`, current main):** 3 of 4 runs exit 1 with the reporter's exact failure: ``` 🔧 Calling tool: read_file / ls tool.result for chatcmpl-tool-... has no correlated tool.use args; sending empty tool_args langgraph.pregel.remote.RemoteException: {'error': 'BadRequestError', 'message': 'An internal error occurred'} # vLLM log: WARNING [qwen3xml_tool_parser.py:303] Error when parsing XML elements: not well-formed (invalid token): line 6, column 1 json.decoder.JSONDecodeError: Extra data: line 1 column 44 (char 43) POST /v1/chat/completions HTTP/1.1 400 Bad Request DCODE_EXIT=1 ``` **Post-fix (`qwen3_coder`, this PR) — clean onboard via the fixed CLI, then reporter command 5×:** ``` 🔧 read_file → ls → edit_file → shell → execute → read_file "The bug has been fixed ... changed return a - b to return a + b" ✓ Task completed POSTFIX_DCODE_EXIT=0 RUN 1..4: exit=0 parse_or_400_delta=0 empty_tool_args=0 remote_exc=0 task_completed=1 ``` 5/5 post-fix runs completed with exit 0 and zero parser errors or HTTP 400s. - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `npx vitest run src/lib/inference/vllm-models.test.ts src/lib/inference/vllm.test.ts` → 56 passed; full `--project cli` lane green. - [x] Applicable broad gate passed — command/result: `npx vitest run --project cli` passed (all files ✓); change is confined to the inference model registry. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [ ] Doc pages follow the style guide (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- Signed-off-by: Yimo Jiang <yimoj@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved tool-call handling for the `nvidia/Qwen3.6-35B-A3B-NVFP4` model by switching to the correct vLLM tool-call parser, preventing malformed/truncated tool-call arguments and reducing intermittent HTTP 400 failures. * **Tests** * Updated the DGX Spark serve-command regression coverage to confirm `qwen3_xml` is not used and that `--tool-call-parser` is present exactly once with the expected `qwen3_coder` setting. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
<!-- markdownlint-disable MD041 --> ## Summary Adds the pre-tag v0.0.79 release notes entry to `docs/about/release-notes.mdx` so the release plan can be generated after docs merge. The entry summarizes the merged v0.0.79 release train across inference, diagnostics, runtime hardening, policies, onboarding recovery, and release validation. ## Changes - Added the v0.0.79 release notes section with linked follow-up documentation for OpenRouter onboarding, managed vLLM changes, completion and logging, Deep Agents runtime limits, policy updates, onboarding recovery, and release validation. - Source summary: - NVIDIA#6461 -> `docs/about/release-notes.mdx`: Documents OpenRouter onboarding support and links to inference/provider references. - NVIDIA#6271 and NVIDIA#6272 -> `docs/about/release-notes.mdx`: Documents shell completion and structured logging highlights. - NVIDIA#6465, NVIDIA#6539, NVIDIA#6570, and NVIDIA#6528 -> `docs/about/release-notes.mdx`: Documents status route-drift, orphaned sandbox, gateway cleanup, and DGX Spark express-install diagnostics. - NVIDIA#6523, NVIDIA#6551, NVIDIA#6484, NVIDIA#6488, NVIDIA#6324, and NVIDIA#6542 -> `docs/about/release-notes.mdx`: Documents managed vLLM, Qwen3.6 tool parser, compaction, and timeout/readiness improvements. - NVIDIA#6559, NVIDIA#6538, NVIDIA#6560, NVIDIA#6568, NVIDIA#6552, NVIDIA#6567, and NVIDIA#6587 -> `docs/about/release-notes.mdx`: Documents runtime, credential, proxy, PID namespace, TOML, and provider-state hardening. - NVIDIA#6541, NVIDIA#5415, NVIDIA#6246, NVIDIA#6496, and NVIDIA#6573 -> `docs/about/release-notes.mdx`: Documents GitHub policy, Gmail policy, MCP allowlist, WhatsApp, and messaging-variant updates. - NVIDIA#6253, NVIDIA#6572, NVIDIA#6444, NVIDIA#6536, and NVIDIA#5860 -> `docs/about/release-notes.mdx`: Documents onboarding resume and create-step recovery improvements. - NVIDIA#6508, NVIDIA#6527, NVIDIA#5506, NVIDIA#6588, NVIDIA#6446, NVIDIA#6447, NVIDIA#6582, NVIDIA#6296, NVIDIA#6367, NVIDIA#6397, and NVIDIA#6505 -> `docs/about/release-notes.mdx`: Documents docs, release-risk, and E2E validation updates. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [x] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Release-note prose only. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: Tests not applicable, release-note prose only. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Docs validation note: `npm run docs:check-agent-variants && npm run docs:check-routes && git diff --check` passed. Full `npm run docs` is currently blocked before Fern validation because the pinned `fern-api@5.65.2` package is unavailable from npm (`ETARGET No matching version found`). --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.79 with a new summary of recent improvements, including onboarding and inference options, operator/CLI diagnostics, sandbox recovery hardening, runtime limits, network policy behavior, and release validation updates. * Added updated references and links for the latest release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
On DGX Spark, the managed local-vLLM default model
nvidia/Qwen3.6-35B-A3B-NVFP4was served with--tool-call-parser qwen3_xml, which mis-parses this checkpoint's tool-call frames and makes LangChain Deep Agents Code (dcode -n) fail with HTTP 400 during tool calls. This switches the Spark recipe to--tool-call-parser qwen3_coder— the parser the other Qwen3.6-family recipes in this registry already use — validated end-to-end on real DGX Spark (GB10) hardware.Related Issue
Fixes #6457
Changes
src/lib/inference/vllm-models.ts: change the DGX Sparknvidia/Qwen3.6-35B-A3B-NVFP4serve recipe from--tool-call-parser qwen3_xmlto--tool-call-parser qwen3_coder, with a comment documenting the failure mode and the on-hardware validation.src/lib/inference/vllm-models.test.ts: update the Spark serve-command contract to pinqwen3_coderand assertqwen3_xmlis absent.Root cause
vLLM's
qwen3_xmltool-call parser does not round-trip this checkpoint's tool-call output. The server logsWARNING [qwen3xml_tool_parser.py:303] Error when parsing XML elements: not well-formed (invalid token)and produces truncated / extra-}tool arguments, so Deep Agents Code tool calls intermittently returnPOST /v1/chat/completions 400 Bad Request(json.decoder.JSONDecodeError: Extra data), the agent reportstool.result ... has no correlated tool.use args; sending empty tool_args, anddcodeexits 1.qwen3_codermatches this Qwen3.6-family checkpoint's emitted tool-call format (already used by theQwen3.6-27B-FP8andNemotron-3-Nano-4Brecipes here).Type of Change
Quality Gates
codex review --uncommitted— no discrete correctness issues; single serve-flag value change in the inference model registry, validated end-to-end on DGX Spark (see Verification).Verification
E2E run on real DGX Spark (GB10, aarch64, Ubuntu; NVIDIA GB10 / compute cap 12.1) using the current worktree CLI (
node ./bin/nemoclaw.js) and the reporter workflow. The managed vLLM container is launched by the fixed CLI code; post-fix the running container shows--tool-call-parser qwen3_coder.Onboard (fixed worktree CLI), then the reporter command — both run via the worktree binary:
Pre-fix (
qwen3_xml, current main): 3 of 4 runs exit 1 with the reporter's exact failure:Post-fix (
qwen3_coder, this PR) — clean onboard via the fixed CLI, then reporter command 5×:5/5 post-fix runs completed with exit 0 and zero parser errors or HTTP 400s.
Verifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpx vitest run src/lib/inference/vllm-models.test.ts src/lib/inference/vllm.test.ts→ 56 passed; full--project clilane green.npx vitest run --project clipassed (all files ✓); change is confined to the inference model registry.npm run docsbuilds without warnings (doc changes only)Signed-off-by: Yimo Jiang yimoj@nvidia.com
Summary by CodeRabbit
Bug Fixes
nvidia/Qwen3.6-35B-A3B-NVFP4model by switching to the correct vLLM tool-call parser, preventing malformed/truncated tool-call arguments and reducing intermittent HTTP 400 failures.Tests
qwen3_xmlis not used and that--tool-call-parseris present exactly once with the expectedqwen3_codersetting.