From 0908d6e7835bffe4a9678bb29da0579b0d8e1752 Mon Sep 17 00:00:00 2001 From: w1nd Date: Sun, 14 Jun 2026 16:56:31 +0800 Subject: [PATCH 1/2] fix: let OpenAIEmbeddingProvider resolve its own API key from env Signed-off-by: w1nd --- src/providers/embedding/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/embedding/index.ts b/src/providers/embedding/index.ts index d18de2328..58f48a9fe 100644 --- a/src/providers/embedding/index.ts +++ b/src/providers/embedding/index.ts @@ -35,7 +35,7 @@ export function createEmbeddingProvider(): EmbeddingProvider | null { case "gemini": return withDimensionGuard(new GeminiEmbeddingProvider(getEnvVar("GEMINI_API_KEY")!)); case "openai": - return withDimensionGuard(new OpenAIEmbeddingProvider(getEnvVar("OPENAI_API_KEY")!)); + return withDimensionGuard(new OpenAIEmbeddingProvider()); case "voyage": return withDimensionGuard(new VoyageEmbeddingProvider(getEnvVar("VOYAGE_API_KEY")!)); case "cohere": From 18e925aac5ed572e589c441000cbbb6c4387a655 Mon Sep 17 00:00:00 2001 From: w1nd Date: Mon, 15 Jun 2026 11:21:15 +0800 Subject: [PATCH 2/2] fix: detectEmbeddingProvider respects OPENAI_EMBEDDING_API_KEY (#863) Signed-off-by: w1nd --- .env.example | 7 +++++-- src/cli.ts | 2 +- src/config.ts | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 77ca0f3a3..3d59f33c3 100644 --- a/.env.example +++ b/.env.example @@ -74,8 +74,11 @@ # COHERE_API_KEY=... # General-purpose embeddings # Reuses OPENAI_API_KEY / OPENAI_BASE_URL above when EMBEDDING_PROVIDER=openai. -# OPENAI_EMBEDDING_MODEL=text-embedding-3-small # Embedding model when EMBEDDING_PROVIDER=openai -# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table +# Set OPENAI_EMBEDDING_API_KEY to use a different key for embeddings than for LLM. +# OPENAI_EMBEDDING_API_KEY=sk-... # Dedicated embedding key (falls back to OPENAI_API_KEY) +# OPENAI_EMBEDDING_BASE_URL=https://api.openai.com # Override for embedding API base URL (falls back to OPENAI_BASE_URL) +# OPENAI_EMBEDDING_MODEL=text-embedding-3-small # Embedding model when EMBEDDING_PROVIDER=openai +# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table # OPENROUTER_EMBEDDING_MODEL=openai/text-embedding-3-small # When EMBEDDING_PROVIDER=openrouter diff --git a/src/cli.ts b/src/cli.ts index 48f6f09b6..e469329cc 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1687,7 +1687,7 @@ async function passiveServerChecks(): Promise { ok: hasEmbed, hint: hasEmbed ? undefined - : "Running BM25-only. Add OPENAI_API_KEY / VOYAGE_API_KEY / COHERE_API_KEY / OLLAMA_HOST", + : "Running BM25-only. Add OPENAI_API_KEY / OPENAI_EMBEDDING_API_KEY / VOYAGE_API_KEY / COHERE_API_KEY / OLLAMA_HOST", }, ); diff --git a/src/config.ts b/src/config.ts index f68da2e31..ca90f19cc 100644 --- a/src/config.ts +++ b/src/config.ts @@ -241,7 +241,7 @@ export function detectEmbeddingProvider( if (forced) return forced; if (source["GEMINI_API_KEY"]) return "gemini"; - if (source["OPENAI_API_KEY"]) return "openai"; + if (source["OPENAI_EMBEDDING_API_KEY"] || source["OPENAI_API_KEY"]) return "openai"; if (source["VOYAGE_API_KEY"]) return "voyage"; if (source["COHERE_API_KEY"]) return "cohere"; if (source["OPENROUTER_API_KEY"]) return "openrouter";