Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 42 additions & 31 deletions .github/workflows/nightly-e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
# Nightly E2E tests:
#
# cloud-e2e Cloud inference (NVIDIA Endpoint API) on ubuntu-latest.
# agent-turn-latency-e2e Times one real OpenClaw turn and one real Hermes
# turn through the configured NVIDIA Build model.
# messaging-providers-e2e Validates messaging credential provider/placeholder/L7-proxy chain
# for Telegram + Discord + Slack. Uses fake tokens. Slack additionally
# exercises OpenShell provider-shaped alias resolution (#2085 follow-up).
Expand Down Expand Up @@ -94,40 +96,28 @@ on:
description: >-
Comma-separated job names to run (empty = all).
Valid: cloud-e2e, cloud-onboard-e2e, cloud-inference-e2e,
skill-agent-e2e, openclaw-skill-cli-e2e, docs-validation-e2e, messaging-providers-e2e,
openclaw-slack-pairing-e2e,
openclaw-tui-chat-correlation-e2e,
issue-4434-tui-unreachable-inference-e2e,
issue-3600-gpu-proof-optional-e2e,
openclaw-discord-pairing-e2e,
agent-turn-latency-e2e, skill-agent-e2e, openclaw-skill-cli-e2e,
docs-validation-e2e, messaging-providers-e2e, openclaw-slack-pairing-e2e,
openclaw-tui-chat-correlation-e2e, issue-4434-tui-unreachable-inference-e2e,
issue-3600-gpu-proof-optional-e2e, openclaw-discord-pairing-e2e,
issue-4462-scope-upgrade-approval-e2e,
issue-4462-gateway-pinned-approval-characterization-e2e,
messaging-compatible-endpoint-e2e,
kimi-inference-compat-e2e,
bedrock-runtime-compatible-anthropic-e2e,
token-rotation-e2e, sandbox-survival-e2e,
openshell-gateway-upgrade-e2e,
issue-2478-crash-loop-recovery-e2e, hermes-e2e,
hermes-dashboard-e2e,
hermes-root-entrypoint-smoke-e2e,
openclaw-onboard-security-posture-e2e,
hermes-onboard-security-posture-e2e,
hermes-inference-switch-e2e, hermes-discord-e2e,
hermes-slack-e2e, sandbox-operations-e2e, inference-routing-e2e,
openclaw-inference-switch-e2e,
network-policy-e2e, state-backup-restore-e2e, tunnel-lifecycle-e2e, diagnostics-e2e,
credential-migration-e2e,
snapshot-commands-e2e, shields-config-e2e,
vm-driver-privileged-exec-routing-e2e, rebuild-openclaw-e2e,
upgrade-stale-sandbox-e2e, rebuild-hermes-e2e,
rebuild-hermes-stale-base-e2e, double-onboard-e2e,
onboard-repair-e2e, onboard-resume-e2e, onboard-negative-paths-e2e,
runtime-overrides-e2e,
credential-sanitization-e2e, telegram-injection-e2e,
overlayfs-autofix-e2e, device-auth-health-e2e,
launchable-smoke-e2e, gpu-e2e, gpu-double-onboard-e2e,
messaging-compatible-endpoint-e2e, sessions-agents-cli-e2e,
channels-add-remove-e2e, channels-stop-start-e2e, brave-search-e2e,
sessions-agents-cli-e2e
kimi-inference-compat-e2e, bedrock-runtime-compatible-anthropic-e2e,
token-rotation-e2e, sandbox-survival-e2e, issue-2478-crash-loop-recovery-e2e,
hermes-e2e, hermes-dashboard-e2e, hermes-root-entrypoint-smoke-e2e,
openclaw-onboard-security-posture-e2e, hermes-onboard-security-posture-e2e,
hermes-inference-switch-e2e, hermes-discord-e2e, hermes-slack-e2e,
sandbox-operations-e2e, inference-routing-e2e, openclaw-inference-switch-e2e,
network-policy-e2e, state-backup-restore-e2e, tunnel-lifecycle-e2e,
diagnostics-e2e, credential-migration-e2e, snapshot-commands-e2e,
shields-config-e2e, vm-driver-privileged-exec-routing-e2e, rebuild-openclaw-e2e,
upgrade-stale-sandbox-e2e, openshell-gateway-upgrade-e2e, rebuild-hermes-e2e,
rebuild-hermes-stale-base-e2e, double-onboard-e2e, onboard-repair-e2e,
onboard-resume-e2e, onboard-negative-paths-e2e, runtime-overrides-e2e,
credential-sanitization-e2e, telegram-injection-e2e, overlayfs-autofix-e2e,
device-auth-health-e2e, launchable-smoke-e2e, gpu-e2e, gpu-double-onboard-e2e
required: false
type: string
default: ""
Expand Down Expand Up @@ -221,6 +211,24 @@ jobs:
env_json: '{"NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE":"1","NEMOCLAW_NON_INTERACTIVE":"1","NEMOCLAW_RECREATE_SANDBOX":"1","NEMOCLAW_SANDBOX_NAME":"e2e-cloud-inference"}'
nvidia_api_key: true
secrets: *nightly-e2e-default-secrets
agent-turn-latency-e2e:
if: >-
github.repository == 'NVIDIA/NemoClaw' && (github.event_name != 'workflow_dispatch' ||
inputs.jobs == '' ||
contains(format(',{0},', inputs.jobs), ',agent-turn-latency-e2e,'))
uses: ./.github/workflows/e2e-script.yaml
with:
ref: ${{ inputs.target_ref || github.ref }}
script: test/e2e/test-agent-turn-latency-e2e.sh
timeout_minutes: 120
artifact_name: "agent-turn-latency-logs"
artifact_path: |
/tmp/nemoclaw-e2e-openclaw-turn-latency-install.log
/tmp/nemoclaw-e2e-hermes-turn-latency-install.log
/tmp/nemoclaw-e2e-agent-turn-latency.json
env_json: '{"NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE":"1","NEMOCLAW_NON_INTERACTIVE":"1","NEMOCLAW_RECREATE_SANDBOX":"1","NEMOCLAW_TURN_LATENCY_MODEL":"nvidia/nemotron-3-ultra-550b-a55b"}'
nvidia_api_key: true
secrets: *nightly-e2e-default-secrets
skill-agent-e2e:
if: >-
github.repository == 'NVIDIA/NemoClaw' && (github.event_name != 'workflow_dispatch' ||
Expand Down Expand Up @@ -2008,6 +2016,7 @@ jobs:
cloud-e2e,
cloud-onboard-e2e,
cloud-inference-e2e,
agent-turn-latency-e2e,
skill-agent-e2e,
openclaw-skill-cli-e2e,
docs-validation-e2e,
Expand Down Expand Up @@ -2118,6 +2127,7 @@ jobs:
cloud-e2e,
cloud-onboard-e2e,
cloud-inference-e2e,
agent-turn-latency-e2e,
skill-agent-e2e,
openclaw-skill-cli-e2e,
docs-validation-e2e,
Expand Down Expand Up @@ -2285,6 +2295,7 @@ jobs:
cloud-e2e,
cloud-onboard-e2e,
cloud-inference-e2e,
agent-turn-latency-e2e,
skill-agent-e2e,
openclaw-skill-cli-e2e,
docs-validation-e2e,
Expand Down
2 changes: 1 addition & 1 deletion docs/inference/inference-options.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ The managed install/start vLLM entry appears by default on DGX Spark and DGX Sta

| Option | Description | Curated models |
|--------|-------------|----------------|
| NVIDIA Endpoints | Routes to models hosted on [build.nvidia.com](https://build.nvidia.com). You can also enter any model ID from the catalog. Set `NVIDIA_API_KEY`. | Nemotron 3 Super 120B, GLM-5.1, MiniMax M2.7, GPT-OSS 120B, DeepSeek V4 Pro |
| NVIDIA Endpoints | Routes to models hosted on [build.nvidia.com](https://build.nvidia.com). You can also enter any model ID from the catalog. Set `NVIDIA_API_KEY`. | Nemotron 3 Super 120B, Nemotron 3 Ultra 550B, GLM-5.1, MiniMax M2.7, GPT-OSS 120B, DeepSeek V4 Pro |
| OpenAI | Routes to the OpenAI API. Set `OPENAI_API_KEY`. | `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro-2026-03-05` |
| Other OpenAI-compatible endpoint | Routes to any server that implements `/v1/chat/completions`. NemoClaw uses `/v1/chat/completions` at runtime by default; set `NEMOCLAW_PREFERRED_API=openai-responses` to allow `/v1/responses` for proxies that implement it, such as some llama.cpp builds. The wizard prompts for a base URL and model name. Works with OpenRouter, LocalAI, llama.cpp, or any compatible proxy. When you enable Telegram messaging, onboarding also runs a bounded sandbox-side smoke check through `https://inference.local/v1/chat/completions`. Set `COMPATIBLE_API_KEY`. | You provide the model name. |
| Anthropic | Routes to the Anthropic Messages API. Set `ANTHROPIC_API_KEY`. | `claude-sonnet-4-6`, `claude-haiku-4-5`, `claude-opus-4-6` |
Expand Down
1 change: 1 addition & 0 deletions src/lib/inference/config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ describe("inference selection config", () => {
it("exposes the curated cloud model picker options", () => {
expect(CLOUD_MODEL_OPTIONS.map((option: { id: string }) => option.id)).toEqual([
"nvidia/nemotron-3-super-120b-a12b",
"nvidia/nemotron-3-ultra-550b-a55b",
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
"z-ai/glm-5.1",
"minimaxai/minimax-m2.7",
Expand Down
1 change: 1 addition & 0 deletions src/lib/inference/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export const HERMES_PROVIDER_MODEL_OPTIONS = [
export const DEFAULT_HERMES_PROVIDER_MODEL = HERMES_PROVIDER_MODEL_OPTIONS[0];
export const CLOUD_MODEL_OPTIONS = [
{ id: "nvidia/nemotron-3-super-120b-a12b", label: "Nemotron 3 Super 120B" },
{ id: "nvidia/nemotron-3-ultra-550b-a55b", label: "Nemotron 3 Ultra 550B" },
{ id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", label: "Nemotron 3 Nano Omni 30B" },
{ id: "z-ai/glm-5.1", label: "GLM-5" },
{ id: "minimaxai/minimax-m2.7", label: "MiniMax M2.7" },
Expand Down
2 changes: 1 addition & 1 deletion src/lib/inference/model-prompts.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ describe("model prompt helpers", () => {
});

it("returns DeepSeek V4 Pro from the default cloud model menu", async () => {
const promptFn = promptSequence(["7"]);
const promptFn = promptSequence(["8"]);
const result = await promptCloudModel({
promptFn,
writeLine: vi.fn(),
Expand Down
Loading
Loading