Skip to content

fix(e2e): select Nemotron 3.5 Super VL for public NVIDIA targets - #13583

Merged
sandl99 merged 4 commits into
mainfrom
fix/e2e-public-nvidia-super-vl
Oct 21, 2026
Merged

sandl99 merged 4 commits into
mainfrom
fix/e2e-public-nvidia-super-vl

Conversation

@sandl99

@sandl99 sandl99 commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Outcome

The OpenClaw and Hermes native NVIDIA inference-switch E2E targets and the Linux AMD64 Pi qualification target now select the public model nvidia/nemotron-3.5-super-vl-120b-a12b at https://integrate.api.nvidia.com/v1. Before this change, they selected nvidia/nemotron-3-super-120b-a12b, which the public endpoint rejects with HTTP 404.

Reason

E2E run 39541140084 on c1dda570 failed all three targets:

  • OpenClaw and Hermes: nemoclaw inference set was rejected because the sandbox invocation probe returned HTTP 404 with the NVCF "Function not found for account" response. The previous selection stayed in place.
  • Pi: host-side endpoint validation returned HTTP 404 before sandbox creation.

The product default (DEFAULT_CLOUD_MODEL) moved to Super VL in #13542; the E2E selectors did not. runCatalogueTarget assigns each catalogue entry's environment over the job environment, so the catalogue values decide the model. Changing a helper fallback alone would not change it.

Changes

  • tools/e2e/target-catalogue.mts: set NEMOCLAW_SWITCH_MODEL for openclaw-inference-switch and hermes-inference-switch, and NEMOCLAW_MODEL for pi-agent-qualification-amd64, to Super VL.
  • test/e2e/live/public-nvidia-switch-provider.ts, test/e2e/fixtures/inference-adapter.ts, and test/e2e/live/pi-agent-qualification.test.ts: use DEFAULT_CLOUD_MODEL for the switch fallback, the public adapter default, and the Pi model expectation.
  • Response-model check: the public endpoint answers Super VL requests with "model": "private/nvidia/nemotron-3.5-super-120b-a12b". Every Hermes, OpenClaw, and Pi request in runs 39548034650 and 39551307701 returned this value. The public /v1/models catalog has no selectable model with that name, and it lists Super VL as the only Nemotron 3.5 Super model. acceptedSwitchResponseModels() accepts that exact serving name only for the Super VL request. Every other requested model, including the old Super ID, still requires an exact match. The OpenClaw gateway model.run check stays exact. In OpenClaw 2026.9.2, agentMeta.model reports the requested model, and the observed value was Super VL.
  • Fast coverage: catalogue/fallback/default agreement for both switch targets; Pi catalogue model and models.json evidence in the mapped Pi fast test; adapter precedence over an ambient NEMOCLAW_MODEL with explicit-override preservation; positive and negative alias cases.
  • docs/reference/pi-support.mdx: name Super VL as the qualification model.

Old-model strings remain where they test older-model compatibility, act as mock identities, or belong to targets outside this scope. Text, tool, lifecycle, credential, and policy assertions are otherwise unchanged. The Pi receipt records no model, and Pi image sources did not change, so the receipt stays valid.

Verification

  • Focused e2e-support suites (inference-adapter, inference-switch-workflow-boundary, public-nvidia-switch-provider, openclaw-inference-switch-helpers, hermes-inference-switch-command-shape, pi-agent-qualification-events): passed.
  • npm run test:changed on macOS: changed-file failures were limited to host-only gaps that also fail on the unchanged base (Bash 3 mapfile, missing Python yaml) and one load timeout that passed alone.
  • npm run docs: passed. Hooks passed, including growth guardrails, E2E mock/live parity, publication validation, and TypeScript checks.
  • Required PR CI on 05c6defc: all checks pass. PR Review Advisor on 05c6defc: all nine specialists clear.
  • Manual PR E2E (targets=openclaw-inference-switch,hermes-inference-switch,pi-agent-qualification-amd64, which also selects the two Anthropic sibling shards):
    • 39548034650 on a979ca89: Pi passed. OpenClaw and Hermes switched to Super VL, then failed the response-model check described above.
    • 39551307701 on d7adb5fe: OpenClaw, Hermes, and Pi passed with Super VL on the public endpoint. Cleanup passed.
    • 39554687177 on 05c6defc (final candidate): Hermes and Pi passed in attempt 1. OpenClaw passed in attempt 3: it switched to nvidia-prod / Super VL at https://integrate.api.nvidia.com/v1, sandbox inference returned PONG, and the gateway model.run reported Super VL with text PONG. Cleanup passed. The two earlier OpenClaw attempts failed during inference set for reasons outside this change. In attempt 1, the provider returned HTTP 500 to the sandbox probe and the previous selection was preserved. In attempt 2, the first probe got no HTTP status. NemoClaw retried successfully, but the command passed the test's 120-second deadline during the gateway restart. Run 39225787037 hit the same deadline on Oct 19 with the old model.
  • The diff contains no secrets, API keys, or credentials.

Review notes

tools/e2e/target-catalogue.mts matches the sensitive pattern tools/e2e/**. Self-review covered the complete diff through 05c6defc1ce166c9fa0253196ad1b70fccaa58e2. No independent pre-publication review exists. This draft awaits review.

Maintainer decision requested: accept the Super VL serving-name alias as response-model evidence. Possible follow-up outside this PR: the 120-second inference set deadline in the OpenClaw switch test is shorter than the product's bounded sandbox-probe retry window.


Signed-off-by: San Dang sdang@nvidia.com

The OpenClaw and Hermes native NVIDIA switch targets and the Linux AMD64
Pi qualification target selected nvidia/nemotron-3-super-120b-a12b. The
public NVIDIA endpoint now returns HTTP 404 for that model, so the switch
was rejected and Pi onboarding stopped during endpoint validation.

Select nvidia/nemotron-3.5-super-vl-120b-a12b in the catalogue entries,
which take precedence over the job environment, and derive the switch
helper, public inference adapter, and Pi expectation from the product
default model.

Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 self-assigned this Oct 21, 2026
@copy-pr-bot

copy-pr-bot Bot commented Oct 21, 2026

Copy link
Copy Markdown

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.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Repository: NVIDIA/NemoClaw/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Enterprise
  • Run ID: 90c07d4d-ee2b-4c2d-b67b-b1e61bdb2519
📥 Commits

Reviewing files that changed from the base of the PR and between 4688863 and 05c6def.

📒 Files selected for processing: 13
  • docs/reference/pi-support.mdx
  • test/e2e/fixtures/inference-adapter.ts
  • test/e2e/live/hermes-inference-switch-helpers.ts
  • test/e2e/live/hermes-inference-switch.test.ts
  • test/e2e/live/openclaw-inference-switch.test.ts
  • test/e2e/live/pi-agent-qualification.test.ts
  • test/e2e/live/public-nvidia-switch-provider.ts
  • test/e2e/support/inference-adapter.test.ts
  • test/e2e/support/inference-switch-workflow-boundary.test.ts
  • test/e2e/support/openclaw-inference-switch-helpers.test.ts
  • test/e2e/support/pi-agent-qualification-events.test.ts
  • test/e2e/support/public-nvidia-switch-provider.test.ts
  • tools/e2e/target-catalogue.mts
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@github-code-quality

github-code-quality Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Code coverage overview

Languages: TypeScript

TypeScript / code-coverage/plugin

main 63002cd fix/e2e-public-nvidi... 05c6def +/-
96% 97% +1%
View coverage of the 10 most impacted files.
File main 63002cd fix/e2e-public-nvidi... 05c6def +/-
nemoclaw/src/onboard/config.ts 98% 96% -2%
nemoclaw/src/index.ts 94% 93% -1%
nemoclaw/src/bl...print/runner.ts 95% 95% 0%
nemoclaw/src/bl...ime-identity.ts 97% 97% 0%
nemoclaw/src/bl...t-management.ts 100% 100% 0%
nemoclaw/src/co.../config-show.ts 100% 100% 0%
nemoclaw/src/commands/slash.ts 100% 100% 0%
nemoclaw/src/ru...time-context.ts 100% 100% 0%
nemoclaw/src/sh...er-boundary.cts 100% 100% 0%
nemoclaw/src/on...native-route.ts 0% 100% +100%

TypeScript / code-coverage/cli

main 63002cd fix/e2e-public-nvidi... 05c6def +/-
84% 86% +2%
View coverage of the 10 most impacted files.
File main 63002cd fix/e2e-public-nvidi... 05c6def +/-
src/lib/onboard.ts 62% 50% -12%
src/lib/actions...ess-recovery.ts 65% 81% +16%
src/lib/state/l...diness-lease.ts 66% 83% +17%
src/lib/inferen...ollama/proxy.ts 41% 61% +20%
src/lib/onboard.../application.ts 55% 84% +29%
src/lib/domain/...y/dimensions.ts 0% 71% +71%
src/lib/inferen...er/lifecycle.ts 0% 72% +72%
src/lib/actions...ry/operation.ts 0% 76% +76%
src/lib/actions...try/snapshot.ts 0% 78% +78%
src/lib/inferen...ovider/index.ts 0% 88% +88%

ℹ️ Calculations represent line coverage. Results may change as calculations are updated.


Updated October 21, 2026 06:40 UTC

Cover the Pi target's catalogue model and managed inference evidence in
its mapped fast test, as required by the E2E mock/live parity check.

Signed-off-by: San Dang <sdang@nvidia.com>
The public endpoint answers nvidia/nemotron-3.5-super-vl-120b-a12b
requests with the response model private/nvidia/nemotron-3.5-super-120b-a12b.
Live run 39548034650 observed this for Hermes, OpenClaw, and Pi. Accept
only that exact serving name for the Super VL request; every other model
still requires an exact response model match.

Signed-off-by: San Dang <sdang@nvidia.com>
Pi qualification now runs against nvidia/nemotron-3.5-super-vl-120b-a12b.
Update the Pi support reference. Record the response-model evidence for
the Super VL serving name, and test that the alias does not apply to
other requested models.

Signed-off-by: San Dang <sdang@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

PR Review Advisor finished for commit 05c6def. Include the Advisor findings in the complete PR feedback collection. Verify and group valid findings before repair.

Request review only when Require no Advisor blockers is green.

All previous runs

@sandl99
sandl99 marked this pull request as ready for review October 21, 2026 10:03
@sandl99
sandl99 merged commit f88e135 into main Oct 21, 2026
92 checks passed
@sandl99
sandl99 deleted the fix/e2e-public-nvidia-super-vl branch October 21, 2026 10:03
deepujain added a commit that referenced this pull request Oct 21, 2026
Include the public NVIDIA model selection fix from #13583 so the
inference-switch E2E uses Super VL instead of the retired model that
returns HTTP 404. Preserve the private IPv6 policy repair and existing
live assertions.

Signed-off-by: Deepak Jain <deepujain@gmail.com>
prekshivyas pushed a commit that referenced this pull request Oct 21, 2026
## Outcome

Express onboarding can abort with HTTP 403 when a Docker host alias
resolves to a private IPv6 address such as `fdc4:f303:9324::254`. New
local-inference profiles admit that address range while existing
sandboxes keep their recorded permissions until the user reselects the
local provider.

## Reason

The host Ollama service and authentication proxy were healthy, but the
generated provider policy admitted only private IPv4 addresses. A
distinct immutable profile identity lets new selections use IPv6 without
changing permissions attached to existing sandboxes.

### Related issues

Fixes #13544.

## Changes

- Add `fc00::/7` for `host.openshell.internal` and
`host.docker.internal`. Preserve the selected host, port, paths,
methods, executable permissions, and credential reference. Literal
private IPv4 endpoints retain their `/32` restriction.
- Preserve recorded IPv4-only profiles for verification, resume,
rebuild, and cleanup. OpenClaw and Hermes reselection use the existing
ownership transaction, including rollback on publication failure.
- Keep `TC-INF-19` for a prepared WSL2 Docker Desktop host. It requires
IPv6-only ULA resolution, authenticated sandbox chat, and explicit
policy denials for public, link-local, and loopback IPv6. Lower-layer
tests cover resolution classification and fixture behavior.
- Keep the native-Docker WSL lane on its existing full E2E suite, with
revision verification. Its Ubuntu Docker installation does not configure
IPv6-only host aliases, so it cannot run the Docker Desktop proof.
Shell-execution regression tests protect both full-suite success and
failure propagation.
- Clarify private IPv4 and IPv6 host-alias permissions in the
troubleshooting guide. Include main's model-selection fix from #13583 so
the E2E catalogue uses Super VL and its reviewed response-model mapping.

## Verification

- The new workflow regression ran against `a5133fa` before repair. Both
native-Docker cases reproduced the defect: full-suite statuses 0 and 17
became 42 when the script invoked the unsupported IPv6 scenario. The
same cases pass after repair and preserve their original statuses.
- With Node 24.18.1 and `NEMOCLAW_TEST_TIMEOUT=60000`, this command
passed all 82 tests across three suites:
  ```bash
node node_modules/vitest/vitest.mjs run --maxWorkers=1 --project
integration test/automation/e2e/platform-vitest-main-workflow.test.ts
--project e2e-support
test/e2e/support/native-local-ipv6-evidence.test.ts
test/e2e/support/onboard-timeout-contract.test.ts
  ```
- Historical policy reproduction: both host-alias regression cases
failed before the original fix because `fdc4:f303:9324::254` was
excluded. At `3743603`, nine focused suites passed all 391 tests. Policy
and selection code are unchanged by this workflow repair.
- Historical E2E on `a5133fa` passed. The [Advisor run on that
head](https://github.com/NVIDIA/NemoClaw/actions/runs/39642884716) had
no P0/P1 findings, but `Require no Advisor blockers` failed on six
unresolved WSL E2E recommendations. Those results do not validate this
updated commit. Fresh CI, image checks, automated reviews, and
applicable E2E are pending.
- WSL2 ARM Docker Desktop qualification has not run. No supported manual
PR selector supplies that environment. The native-Docker WSL lane and
Ubuntu catalogue runs do not establish that qualification.
- On `32f7d712bd10a6ea7a476961acecd8b43a5f3690`, normal commit hooks,
pre-push publication validation, and CLI TypeScript checks passed. The
diff contains no secrets, API keys, credentials, or unrelated dependency
changes.

## Review notes

Decision: accept the existing host-alias policy repair. Reason: the
reported private IPv6 bridge falls outside the generated profile.
Placement: profile generation and identity, existing selection owners,
provider guidance, and the existing IPv6 live test. Validation plan:
profile and selection tests, workflow and fixture contracts, publication
checks, and WSL2 ARM Docker Desktop qualification. Existing permissions
change only through explicit reselection.

The workflow review identified a valid mismatch between the
native-Docker runner and the required IPv6-only network. The repair
removes that incompatible invocation and its extra timeout and artifact
handling. Every live IPv6 assertion remains intact. This preserves the
existing workflow trust boundary and full-suite behavior. A new trusted
qualification lane remains separate work; this decision neither clears
the Advisor gate nor waives the missing live evidence.

Self-review of `32f7d712bd10a6ea7a476961acecd8b43a5f3690` covers the
workflow repair, executable regression cases, test guidance, and timeout
comment. Independent re-review is pending. The sensitive native-local
policy, identity, selection, and rollback implementation is unchanged by
this repair. The existing eight added live assertion points retain their
recorded [growth
approval](#13582 (comment)).
No live assertion or growth record changes here. DGX Station validation
is not applicable.

---
Signed-off-by: Deepak Jain <deepujain@gmail.com>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

- **New Features**
- Native local connections now support private IPv6 unique-local
addresses when resolved through approved host aliases.
- IPv4-only and dual-stack profiles are distinguished while preserving
existing permissions and connection receipts.
- Native local provider switching now correctly handles profile changes
and restores the previous connection if persistence fails.

- **Bug Fixes**
- Public, link-local, loopback, and unsupported literal IPv6 endpoints
remain blocked.
- Private IPv4 literal endpoints remain restricted to exact host
addresses.

- **Documentation**
- Added troubleshooting guidance for Docker Desktop WSL IPv6 resolution
and native-local endpoint restrictions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Deepak Jain <deepujain@gmail.com>
@wscurran wscurran added area: e2e End-to-end tests, nightly failures, or validation infrastructure area: providers Inference provider integrations and provider behavior chore Build, CI, dependency, or tooling maintenance integration: hermes Hermes integration behavior integration: openclaw OpenClaw integration behavior provider: nvidia NVIDIA inference endpoint, NIM, or NVIDIA provider behavior labels Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: e2e End-to-end tests, nightly failures, or validation infrastructure area: providers Inference provider integrations and provider behavior chore Build, CI, dependency, or tooling maintenance integration: hermes Hermes integration behavior integration: openclaw OpenClaw integration behavior provider: nvidia NVIDIA inference endpoint, NIM, or NVIDIA provider behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants