Repository navigation
fix(inference): send native local health probes to the recorded provider - #13447
Conversation
OpenClaw Ollama onboarding attaches each sandbox to its own OpenShell provider behind the auth proxy and publishes no shared gateway route (#13293). The GPU Ollama and GPU double-onboard E2Es still required the shared route and sent requests to inference.local, which now returns "Not configured" and HTTP 503. Check the recorded native endpoint and send the sandbox requests to it with the supervisor-issued credential handle. The answer checks, proxy token checks, timeouts and cleanup are unchanged. Refs #13338. Signed-off-by: San Dang <sdang@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. |
Code coverage overviewLanguages: TypeScript TypeScript / code-coverage/plugin
View coverage of the 10 most impacted files.
TypeScript / code-coverage/cli
View coverage of the 10 most impacted files.
ℹ️ Calculations represent line coverage. Results may change as calculations are updated. Updated |
The mock/live parity check requires a mapped fast test whenever a live E2E changes. Move the sandbox chat request for the native Ollama provider into a shared fixture used by both GPU tests, and test it with a recording curl: it sends the OpenShell-issued credential handle to the recorded endpoint and refuses a raw or missing credential before calling curl. Map the fixture and the support test to both GPU live tests. Refs #13338. Signed-off-by: San Dang <sdang@nvidia.com>
|
Manual PR E2E on
|
The native chat command put the endpoint and JSON body inside literal single quotes. A single quote in request data, such as a model name, would end the argument and run the rest as sandbox shell syntax. Quote both values with the shared shellQuote helper. The new support test fails on the previous command and passes now. Refs #13338. Signed-off-by: San Dang <sdang@nvidia.com>
|
Manual PR E2E on the latest commit
Advisor findings on
Advisor findings on
|
Status, connect, and start health checks omitted the agent for OpenClaw native local sandboxes. The request builder then fell back to the shared inference.local route, which OpenShell answers with HTTP 503 when no shared route is configured, while status displayed the native endpoint. Use the agent recorded on the native local attachment when the caller omits it, reject a contradicting agent or an attachment that would not select its recorded endpoint before sending a request, pass the registry agent from status and readiness health, and report the endpoint that was requested. Refs #13338 Signed-off-by: San Dang <sdang@nvidia.com>
Changes to the shared native-local chat fixture now select gpu-e2e and gpu-double-onboard. The platform matrix now says that new OpenClaw Ollama, vLLM, and llama.cpp selections use sandbox-attached providers. Refs #13338 Signed-off-by: San Dang <sdang@nvidia.com>
|
🌿 Preview your docs: https://nvidia-preview-pr-13447.docs.buildwithfern.com/nemoclaw |
Changes to connect, status, readiness health, and the inference probe now select inference-routing-openclaw-native, which exercises the native local start, rebuild, restart, and isolation path. Refs #13338 Signed-off-by: San Dang <sdang@nvidia.com>
A native local attachment already identifies the provider endpoint, so the probe uses it whenever the attachment is present. This removes the agent derivation, mismatch rejection, and caller changes in status, connect, and readiness health. Status still reports the endpoint of a failed request. Refs #13338 Signed-off-by: San Dang <sdang@nvidia.com>
Extend the existing nativeLocalTestReceipt helper with binding overrides and remove the duplicate receipt builder. Update the OpenClaw quickstart: new Ollama, vLLM, and llama.cpp selections use sandbox-attached providers. Refs #13338 Signed-off-by: San Dang <sdang@nvidia.com>
|
Reviewed all 17 changed files at The probe now uses the validated native-local attachment endpoint while preserving sandbox/provider/gateway checks and credential-handle validation. The new tests exercise generated shell commands and check destinations, authorization, omitted-agent cases, and shared-route fallback. The earlier Advisor findings about quickstart routing and duplicate receipt fixtures are addressed in this revision. Validation remains revision-specific:
I did not run additional tests. Evidence inspection covered Advisor reports, dispatch/evidence manifests, and cleanup reports, not complete E2E job logs. Final merge readiness still needs completed checks and live evidence for the current commit. |
|
PR Review Advisor finished for commit Request review only when Require no Advisor blockers is green. |
|
Manual PR E2E on The fix works.
Also passed:
Failed, unrelated to this PR: |
Merge main to include the native-provider probe fix from #13447. Keep published history and the piped-message patch intact. Signed-off-by: Deepak Jain <deepujain@gmail.com>
Outcome
For OpenClaw sandboxes that use a native local provider (Ollama, vLLM or llama.cpp),
status,connectandstartnow send their inference health request to the provider recorded for the sandbox. Before this change they sent it to the sharedinference.localroute, which native-local onboarding does not configure. OpenShell 0.0.116 answers that route with HTTP 503 ("cluster inference is not configured").statusstill displayed the native endpoint. The GPU Ollama and GPU double-onboard E2Es now use the per-sandbox provider too.Reason
Native-local onboarding attaches a provider to each sandbox and leaves the shared route empty (#13293). The probe request builder used the native endpoint only when the caller passed an agent that uses native local inference. Some callers did not pass one:
statuspassed the agent only for Deep Agents Code.connectandstartreadiness represent OpenClaw as a null agent.Without an agent, the builder used
https://inference.local/v1/chat/completions.doctorpasses the agent, so it passed whilestatusandconnectfailed. This matches run 39196254769 on762aef4c82:startafter a successful rebuild.doctorand failedconnect --probe-only.The GPU tests separately hardcoded
inference.localor expected a shared Ollama route.The 503 response bodies were not retained. The 503 mechanism comes from the pinned OpenShell source (
crates/openshell-supervisor-network/src/proxy.rs, v0.0.116). The wrong destination is reproduced by the unit tests below. This PR does not claim to explain every historical 503 in #13338.Related issues
Refs #13338
Changes
src/lib/actions/sandbox/inference-invocation-probe.ts: when the sandbox has a native local attachment, the probe sends its request to the attachment's recorded endpoint, whichever agent the caller passes.src/lib/actions/sandbox/inference-route-health.ts: native local status reports the endpoint that the failed request used.gpu-e2echecks the recorded native Ollama endpoint. Both GPU tests send their chat requests there with the OpenShell-issued credential handle (test/e2e/fixtures/native-local-chat.ts).tools/e2e/target-catalogue.mts:inference-routing-openclaw-native.test/helpers/native-local-probe-shell.tsruns the generated probe command in a real shell with a recordingcurl. New cases check:Authorizationheader for vLLM, llama.cpp and Ollama, with the agent omitted, null oropenclaw;statusand readiness health;ci/platform-matrix.jsonanddocs/reference/platform-support.mdx: new OpenClaw local selections are now described as using sandbox-attached providers.Verification
npm run test:changed(2525 tests) has 7 failures:native-podman-setup-action.test.ts, which also fail on unmodified762aef4c82in this environment.portable-openclaw-pairing-settlement, which passes when run alone.tsc -p tsconfig.cli.json --noEmit, oxlint and oxfmt: passed. Commit and pre-push hooks passed.e2e-mock-parityandtest:e2e-phases:check: passed.Review notes
status,connectand readiness health. It was replaced by the smaller endpoint selection above.doctorsucceeds) matches the endpoint selection fixed here. A retry does not change the destination.Signed-off-by: San Dang sdang@nvidia.com
Summary by CodeRabbit