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
4 changes: 2 additions & 2 deletions .github/workflows/e2e-script.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,8 @@ jobs:
printf 'NEMOCLAW_E2E_USE_HOSTED_INFERENCE=1\n'
printf 'NEMOCLAW_PROVIDER=custom\n'
printf 'NEMOCLAW_ENDPOINT_URL=https://inference-api.nvidia.com/v1\n'
printf 'NEMOCLAW_MODEL=nvidia/nemotron-3-super-120b-a12b\n'
printf 'NEMOCLAW_COMPAT_MODEL=nvidia/nemotron-3-super-120b-a12b\n'
printf 'NEMOCLAW_MODEL=nvidia/nvidia/nemotron-3-super-v3\n'
printf 'NEMOCLAW_COMPAT_MODEL=nvidia/nvidia/nemotron-3-super-v3\n'
printf 'NEMOCLAW_PREFERRED_API=openai-completions\n'
printf 'COMPATIBLE_API_KEY=%s\n' "${NVIDIA_INFERENCE_API_KEY}"
} >> "$GITHUB_ENV"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/e2e-vitest-scenarios.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -990,8 +990,8 @@ jobs:
NVIDIA_INFERENCE_API_KEY: ${{ secrets.NVIDIA_INFERENCE_API_KEY }}
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
run: |
set -euo pipefail
Expand Down
72 changes: 36 additions & 36 deletions .github/workflows/nightly-e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -468,8 +468,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -544,8 +544,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_ISSUE_4434_LIVE: "1"
Expand Down Expand Up @@ -973,8 +973,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -1271,8 +1271,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -1578,8 +1578,8 @@ jobs:
NVIDIA_INFERENCE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/vitest/credential-migration
Expand Down Expand Up @@ -1804,8 +1804,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand All @@ -1817,8 +1817,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -1856,8 +1856,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand All @@ -1869,8 +1869,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -1908,8 +1908,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand All @@ -1921,8 +1921,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -1961,8 +1961,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand All @@ -1974,8 +1974,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -2014,8 +2014,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand All @@ -2028,8 +2028,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -2070,8 +2070,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand All @@ -2084,8 +2084,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down Expand Up @@ -2164,8 +2164,8 @@ jobs:
NEMOCLAW_E2E_USE_HOSTED_INFERENCE: "1"
NEMOCLAW_PROVIDER: custom
NEMOCLAW_ENDPOINT_URL: https://inference-api.nvidia.com/v1
NEMOCLAW_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_COMPAT_MODEL: nvidia/nemotron-3-super-120b-a12b
NEMOCLAW_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_COMPAT_MODEL: nvidia/nvidia/nemotron-3-super-v3
NEMOCLAW_PREFERRED_API: openai-completions
COMPATIBLE_API_KEY: ${{ (github.event_name != 'workflow_dispatch' || inputs.target_ref == '') && secrets.NVIDIA_INFERENCE_API_KEY || '' }}
NEMOCLAW_NON_INTERACTIVE: "1"
Expand Down
11 changes: 10 additions & 1 deletion src/lib/inference/onboard-probes.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,10 +284,19 @@ describe("OpenAI-compatible inference probes", () => {
});
});

it("keeps the default chat-completions probe minimal for other models", () => {
it("keeps the default chat-completions probe bounded for other models", () => {
expect(getChatCompletionsProbePayload("nvidia/nemotron-3-super-120b-a12b")).toEqual({
model: "nvidia/nemotron-3-super-120b-a12b",
messages: [{ role: "user", content: "Reply with exactly: OK" }],
max_tokens: 8,
});
});

it("bounds the hosted compatible inference probe for the served Nemotron model", () => {
expect(getChatCompletionsProbePayload("nvidia/nvidia/nemotron-3-super-v3")).toEqual({
model: "nvidia/nvidia/nemotron-3-super-v3",
messages: [{ role: "user", content: "Reply with exactly: OK" }],
max_tokens: 8,
});
});

Expand Down
1 change: 1 addition & 0 deletions src/lib/inference/onboard-probes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,7 @@ function getChatCompletionsProbePayload(model) {
const payload = {
model,
messages: [{ role: "user", content: "Reply with exactly: OK" }],
max_tokens: 8,
};

if (isDeepSeekV4ProModel(model)) {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/onboard/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const HERMES_INFERENCE_ENDPOINT_URL = "https://inference-api.nousresearch.com/v1
const HOSTED_INFERENCE_SOURCE_ENV = "NVIDIA_INFERENCE_API_KEY";
const HOSTED_INFERENCE_CREDENTIAL_ENV = "COMPATIBLE_API_KEY";
const HOSTED_INFERENCE_ENDPOINT_URL = "https://inference-api.nvidia.com/v1";
const HOSTED_INFERENCE_MODEL = "nvidia/nemotron-3-super-120b-a12b";
const HOSTED_INFERENCE_MODEL = "nvidia/nvidia/nemotron-3-super-v3";

const REMOTE_PROVIDER_CONFIG = {
build: {
Expand Down
2 changes: 1 addition & 1 deletion test/e2e-scenario/fixtures/hosted-inference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const HOSTED_INFERENCE_CREDENTIAL_ENV = "COMPATIBLE_API_KEY";
const HOSTED_INFERENCE_PROVIDER = "custom";
const HOSTED_INFERENCE_PROVIDER_NAME = "compatible-endpoint";
const DEFAULT_HOSTED_INFERENCE_BASE_URL = "https://inference-api.nvidia.com/v1";
const DEFAULT_HOSTED_INFERENCE_MODEL = "nvidia/nemotron-3-super-120b-a12b";
const DEFAULT_HOSTED_INFERENCE_MODEL = "nvidia/nvidia/nemotron-3-super-v3";

export interface HostedInferenceSecrets {
required(name: string): string;
Expand Down
17 changes: 9 additions & 8 deletions test/e2e-script-workflow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -545,8 +545,8 @@ describe("E2E reusable workflow contract", () => {
expect(runStep?.env?.NVIDIA_INFERENCE_API_KEY).toBe(GUARDED_HOSTED_INFERENCE_SECRET);
expect(runStep?.env?.NEMOCLAW_PROVIDER).toBe("custom");
expect(runStep?.env?.NEMOCLAW_ENDPOINT_URL).toBe("https://inference-api.nvidia.com/v1");
expect(runStep?.env?.NEMOCLAW_MODEL).toBe("nvidia/nemotron-3-super-120b-a12b");
expect(runStep?.env?.NEMOCLAW_COMPAT_MODEL).toBe("nvidia/nemotron-3-super-120b-a12b");
expect(runStep?.env?.NEMOCLAW_MODEL).toBe("nvidia/nvidia/nemotron-3-super-v3");
expect(runStep?.env?.NEMOCLAW_COMPAT_MODEL).toBe("nvidia/nvidia/nemotron-3-super-v3");
expect(runStep?.env?.NEMOCLAW_PREFERRED_API).toBe("openai-completions");
expect(runStep?.env?.COMPATIBLE_API_KEY).toBe(GUARDED_HOSTED_INFERENCE_SECRET);
expect(runStep?.env?.GITHUB_TOKEN).toBeUndefined();
Expand Down Expand Up @@ -904,8 +904,8 @@ describe("E2E reusable workflow contract", () => {
expect(exportStep?.run).toContain("NEMOCLAW_E2E_USE_HOSTED_INFERENCE=1");
expect(exportStep?.run).toContain("NEMOCLAW_PROVIDER=custom");
expect(exportStep?.run).toContain("NEMOCLAW_ENDPOINT_URL=https://inference-api.nvidia.com/v1");
expect(exportStep?.run).toContain("NEMOCLAW_MODEL=nvidia/nemotron-3-super-120b-a12b");
expect(exportStep?.run).toContain("NEMOCLAW_COMPAT_MODEL=nvidia/nemotron-3-super-120b-a12b");
expect(exportStep?.run).toContain("NEMOCLAW_MODEL=nvidia/nvidia/nemotron-3-super-v3");
expect(exportStep?.run).toContain("NEMOCLAW_COMPAT_MODEL=nvidia/nvidia/nemotron-3-super-v3");
expect(exportStep?.run).toContain("NEMOCLAW_PREFERRED_API=openai-completions");
expect(exportStep?.run).toContain("COMPATIBLE_API_KEY=%s");

Expand All @@ -915,7 +915,7 @@ describe("E2E reusable workflow contract", () => {
}
});

it("keeps rebuild fixture registry inference aligned with the onboard session", () => {
it("keeps rebuild fixture registry inference aligned with hosted custom inference", () => {
const rebuildFixtures = [
"test/e2e/test-rebuild-openclaw.sh",
"test/e2e/test-rebuild-hermes.sh",
Expand All @@ -925,9 +925,10 @@ describe("E2E reusable workflow contract", () => {
for (const fixture of rebuildFixtures) {
const body = readFileSync(fixture, "utf8");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use module-relative reads for rebuild fixtures to avoid CWD-coupled test failures.

readFileSync(fixture, "utf8") relies on the test runner’s current working directory. This can flake when the suite is invoked from a different CWD.

Suggested patch
-    for (const fixture of rebuildFixtures) {
-      const body = readFileSync(fixture, "utf8");
+    for (const fixture of rebuildFixtures) {
+      const body = readFileSync(new URL(`../${fixture}`, import.meta.url), "utf8");
       expect(body, fixture).toContain("provider = sess.get('provider')");
       expect(body, fixture).toContain("if env_provider == 'custom'");
       expect(body, fixture).toContain("'provider': provider");
       expect(body, fixture).toContain("'model': model");
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const body = readFileSync(fixture, "utf8");
const body = readFileSync(new URL(`../${fixture}`, import.meta.url), "utf8");
🤖 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/e2e-script-workflow.test.ts` at line 926, Replace the CWD-dependent read
with a module-relative read: when reading the fixture use
readFileSync(path.join(__dirname, fixture), "utf8") (or readFileSync(new
URL(fixture, import.meta.url), "utf8") in ESM) instead of readFileSync(fixture,
"utf8"); update the import/require to include path (or ensure URL usage) so the
assignment to body uses a module-relative path derived from __dirname or
import.meta.url and no longer depends on the process CWD.

expect(body, fixture).toContain("provider = sess.get('provider')");
expect(body, fixture).toContain("model = (");
expect(body, fixture).toContain("if env_provider == 'custom'");
expect(body, fixture).toContain("'provider': provider");
expect(body, fixture).toContain("'model': model");
expect(body, fixture).toContain("nvidia/nvidia/nemotron-3-super-v3");
expect(body, fixture).not.toContain("'provider': 'nvidia-prod'");
expect(body, fixture).not.toContain("'model': 'nvidia/nemotron-3-super-120b-a12b'");
}
Expand Down Expand Up @@ -980,8 +981,8 @@ describe("E2E reusable workflow contract", () => {
}
expect(step.env?.NEMOCLAW_PROVIDER, jobName).toBe("custom");
expect(step.env?.NEMOCLAW_ENDPOINT_URL, jobName).toBe("https://inference-api.nvidia.com/v1");
expect(step.env?.NEMOCLAW_MODEL, jobName).toBe("nvidia/nemotron-3-super-120b-a12b");
expect(step.env?.NEMOCLAW_COMPAT_MODEL, jobName).toBe("nvidia/nemotron-3-super-120b-a12b");
expect(step.env?.NEMOCLAW_MODEL, jobName).toBe("nvidia/nvidia/nemotron-3-super-v3");
expect(step.env?.NEMOCLAW_COMPAT_MODEL, jobName).toBe("nvidia/nvidia/nemotron-3-super-v3");
expect(step.env?.NEMOCLAW_PREFERRED_API, jobName).toBe("openai-completions");
expect(step.env?.COMPATIBLE_API_KEY, jobName).toBe(GUARDED_HOSTED_INFERENCE_SECRET);
}
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/lib/ci-compatible-inference.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# at inference-api.nvidia.com. Keep this helper in test/e2e so the
# product-facing provider/default endpoint remain unchanged.

NEMOCLAW_E2E_COMPATIBLE_INFERENCE_MODEL_DEFAULT="nvidia/nemotron-3-super-120b-a12b"
NEMOCLAW_E2E_COMPATIBLE_INFERENCE_MODEL_DEFAULT="nvidia/nvidia/nemotron-3-super-v3"
NEMOCLAW_E2E_HOSTED_INFERENCE_PROVIDER_DEFAULT="compatible-endpoint"
NEMOCLAW_E2E_NVIDIA_INFERENCE_MODEL_DEFAULT="nvidia/nemotron-3-super-120b-a12b"

Expand Down
Loading
Loading