From 07c2f813922e6d011bf6f17aea91d02596cacfbb Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 5 Apr 2026 08:42:57 +0100 Subject: [PATCH] fix: preserve explicit Ollama apiKey during discovery --- extensions/ollama/index.ts | 24 +++++++++++++++++-- .../models-config.providers.ollama.test.ts | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/extensions/ollama/index.ts b/extensions/ollama/index.ts index fda104b3741..b183e355f70 100644 --- a/extensions/ollama/index.ts +++ b/extensions/ollama/index.ts @@ -31,6 +31,17 @@ const OPENAI_COMPATIBLE_REPLAY_HOOKS = buildProviderReplayFamilyHooks({ family: "openai-compatible", }); +function resolveOllamaDiscoveryApiKey(params: { + env: NodeJS.ProcessEnv; + explicitApiKey?: string; + resolvedApiKey?: string; +}): string { + const envApiKey = params.env.OLLAMA_API_KEY?.trim() ? "OLLAMA_API_KEY" : undefined; + const explicitApiKey = params.explicitApiKey?.trim() || undefined; + const resolvedApiKey = params.resolvedApiKey?.trim() || undefined; + return envApiKey ?? explicitApiKey ?? resolvedApiKey ?? DEFAULT_API_KEY; +} + function shouldSkipAmbientOllamaDiscovery(env: NodeJS.ProcessEnv): boolean { return Boolean(env.VITEST) || env.NODE_ENV === "test"; } @@ -92,6 +103,7 @@ export default definePluginEntry({ const explicit = ctx.config.models?.providers?.ollama; const hasExplicitModels = Array.isArray(explicit?.models) && explicit.models.length > 0; const ollamaKey = ctx.resolveProviderApiKey(PROVIDER_ID).apiKey; + const explicitApiKey = typeof explicit?.apiKey === "string" ? explicit.apiKey : undefined; if (hasExplicitModels && explicit) { return { provider: { @@ -101,7 +113,11 @@ export default definePluginEntry({ ? resolveOllamaApiBase(explicit.baseUrl) : OLLAMA_DEFAULT_BASE_URL, api: explicit.api ?? "ollama", - apiKey: ollamaKey ?? explicit.apiKey ?? DEFAULT_API_KEY, + apiKey: resolveOllamaDiscoveryApiKey({ + env: ctx.env, + explicitApiKey, + resolvedApiKey: ollamaKey, + }), }, }; } @@ -118,7 +134,11 @@ export default definePluginEntry({ return { provider: { ...provider, - apiKey: ollamaKey ?? explicit?.apiKey ?? DEFAULT_API_KEY, + apiKey: resolveOllamaDiscoveryApiKey({ + env: ctx.env, + explicitApiKey, + resolvedApiKey: ollamaKey, + }), }, }; }, diff --git a/src/agents/models-config.providers.ollama.test.ts b/src/agents/models-config.providers.ollama.test.ts index 4c3f852b58f..49b87461937 100644 --- a/src/agents/models-config.providers.ollama.test.ts +++ b/src/agents/models-config.providers.ollama.test.ts @@ -254,7 +254,7 @@ describe("Ollama provider", () => { expect(providers?.ollama?.models).toEqual(explicitModels); expect(providers?.ollama?.baseUrl).toBe("http://remote-ollama:11434"); expect(providers?.ollama?.api).toBe("ollama"); - expect(providers?.ollama?.apiKey).toBe("ollama-local"); + expect(providers?.ollama?.apiKey).toBe("config-ollama-key"); }); }); @@ -274,7 +274,7 @@ describe("Ollama provider", () => { }, }); - expect(providers?.ollama?.apiKey).toBe("ollama-local"); + expect(providers?.ollama?.apiKey).toBe("config-ollama-key"); }); }); });