Mintplex-Labs/anything-llm · error
No OpenRouter API key was set.
Error message
No OpenRouter API key was set.
What it means
The OpenRouterEmbedder constructor throws immediately when OPENROUTER_API_KEY is unset or empty. The key is required to build the OpenAI SDK client pointed at https://openrouter.ai/api/v1 that performs embedding calls, so provider selection fails fast before any request is made.
Solutions
- Create a key at openrouter.ai/keys and set OPENROUTER_API_KEY in .env.
- Restart the server or recreate the container after saving.
- Confirm the key has credit/access for embedding models (default model is baai/bge-m3).
- Verify the variable name spelling and that no quotes/spaces surround the value.
Example fix
# .env — before EMBEDDING_ENGINE=openrouter EMBEDDING_MODEL_PREF=baai/bge-m3 # .env — after EMBEDDING_ENGINE=openrouter EMBEDDING_MODEL_PREF=baai/bge-m3 OPENROUTER_API_KEY=sk-or-v1-...
Defensive patterns
Strategy: validation
Validate before calling
if (!process.env.OPENROUTER_API_KEY) {
throw new Error(
"OpenRouter embedder selected but OPENROUTER_API_KEY is missing — set it before use."
);
}
const { OpenRouterEmbedder } = require("server/utils/EmbeddingEngines/openRouter");
const embedder = new OpenRouterEmbedder(); Type guard
function hasOpenRouterEmbedderConfig(env = process.env) {
return (
typeof env.OPENROUTER_API_KEY === "string" && env.OPENROUTER_API_KEY.length > 0
);
} Try / catch
try {
new OpenRouterEmbedder();
} catch (err) {
if (err.message === "No OpenRouter API key was set.") {
// route the user to provider settings instead of failing the embedding job
}
} Prevention
- Keep OpenRouter credentials in env referenced from .env, never inline.
- Validate that a key exists before switching EMBEDDING_ENGINE to openrouter.
- Recreate containers after env changes.
When it happens
Trigger: Choosing OpenRouter as the embedding engine without creating/exporting an API key at openrouter.ai; adding the key to .env after the process started; a typo in the variable name; docker env not passed through.
Common situations: Users who have an OpenRouter key for the LLM but a differently named/missing one for embeddings; fresh OpenRouter accounts with no key generated; CI environments missing the env.
Understand the failure class
Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.
Related errors
- No OpenAI API key was set.
- No Voyage AI API key was set.
- No embedding model was set.
- No Minimax API key was set.
- No Mistral API key was set.
AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18).
Data as JSON: /api/errors/9c7a192a4ce5988d.
Report an issue: GitHub.
Appendix: source
Thrown at server/utils/EmbeddingEngines/openRouter/index.js:6
const { toChunks, reportEmbeddingProgress } = require("../../helpers");
class OpenRouterEmbedder {
constructor() {
if (!process.env.OPENROUTER_API_KEY)
throw new Error("No OpenRouter API key was set.");
this.className = "OpenRouterEmbedder";
const { OpenAI: OpenAIApi } = require("openai");
this.openai = new OpenAIApi({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
defaultHeaders: {
"HTTP-Referer": "https://anythingllm.com",
"X-Title": "AnythingLLM",
},
});
this.model = process.env.EMBEDDING_MODEL_PREF || "baai/bge-m3";
// Limit of how many strings we can process in a single pass to stay with resource or network limits
this.maxConcurrentChunks = 500;
// https://openrouter.ai/docs/api/reference/embeddings
this.embeddingMaxChunkLength = 8_191;
}View on GitHub (pinned to 3aec848f28)