diff --git a/bin/lib/onboard.js b/bin/lib/onboard.js index 5ab4e8629..02aa47904 100644 --- a/bin/lib/onboard.js +++ b/bin/lib/onboard.js @@ -2732,7 +2732,14 @@ async function setupNim(gpu) { if (!validation.ok) { continue; } - preferredInferenceApi = validation.api; + // Ollama's /v1/responses endpoint does not produce correctly + // formatted tool calls — force chat completions like vLLM/NIM. + if (validation.api !== "openai-completions") { + console.log( + " ℹ Using chat completions API (Ollama tool calls require /v1/chat/completions)", + ); + } + preferredInferenceApi = "openai-completions"; break; } break; @@ -2777,7 +2784,14 @@ async function setupNim(gpu) { if (!validation.ok) { continue; } - preferredInferenceApi = validation.api; + // Ollama's /v1/responses endpoint does not produce correctly + // formatted tool calls — force chat completions like vLLM/NIM. + if (validation.api !== "openai-completions") { + console.log( + " ℹ Using chat completions API (Ollama tool calls require /v1/chat/completions)", + ); + } + preferredInferenceApi = "openai-completions"; break; } break; diff --git a/test/onboard-selection.test.js b/test/onboard-selection.test.js index 46ff08152..2942e6c44 100644 --- a/test/onboard-selection.test.js +++ b/test/onboard-selection.test.js @@ -624,7 +624,7 @@ const { setupNim } = require(${onboardPath}); assert.equal(result.status, 0, result.stderr); const payload = JSON.parse(result.stdout.trim()); assert.equal(payload.result.provider, "ollama-local"); - assert.equal(payload.result.preferredInferenceApi, "openai-responses"); + assert.equal(payload.result.preferredInferenceApi, "openai-completions"); assert.ok( payload.lines.some((line) => line.includes("Loading Ollama model: nemotron-3-nano:30b")), );