{"record":{"id":"9c7a192a4ce5988d","repo":"Mintplex-Labs/anything-llm","slug":"no-openrouter-api-key-was-set-9c7a19","errorCode":null,"errorMessage":"No OpenRouter API key was set.","messagePattern":"No OpenRouter API key was set\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/utils/EmbeddingEngines/openRouter/index.js","lineNumber":6,"sourceCode":"const { toChunks, reportEmbeddingProgress } = require(\"../../helpers\");\n\nclass OpenRouterEmbedder {\n  constructor() {\n    if (!process.env.OPENROUTER_API_KEY)\n      throw new Error(\"No OpenRouter API key was set.\");\n    this.className = \"OpenRouterEmbedder\";\n    const { OpenAI: OpenAIApi } = require(\"openai\");\n    this.openai = new OpenAIApi({\n      baseURL: \"https://openrouter.ai/api/v1\",\n      apiKey: process.env.OPENROUTER_API_KEY,\n      defaultHeaders: {\n        \"HTTP-Referer\": \"https://anythingllm.com\",\n        \"X-Title\": \"AnythingLLM\",\n      },\n    });\n    this.model = process.env.EMBEDDING_MODEL_PREF || \"baai/bge-m3\";\n\n    // Limit of how many strings we can process in a single pass to stay with resource or network limits\n    this.maxConcurrentChunks = 500;\n\n    // https://openrouter.ai/docs/api/reference/embeddings\n    this.embeddingMaxChunkLength = 8_191;\n  }","sourceCodeStart":1,"sourceCodeEnd":24,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/3aec848f2885144aa8f1e53b9731a04310d5d558/server/utils/EmbeddingEngines/openRouter/index.js#L1-L24","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"# .env — before\nEMBEDDING_ENGINE=openrouter\nEMBEDDING_MODEL_PREF=baai/bge-m3\n\n# .env — after\nEMBEDDING_ENGINE=openrouter\nEMBEDDING_MODEL_PREF=baai/bge-m3\nOPENROUTER_API_KEY=sk-or-v1-...","handlingStrategy":"validation","validationCode":"if (!process.env.OPENROUTER_API_KEY) {\n  throw new Error(\n    \"OpenRouter embedder selected but OPENROUTER_API_KEY is missing — set it before use.\"\n  );\n}\nconst { OpenRouterEmbedder } = require(\"server/utils/EmbeddingEngines/openRouter\");\nconst embedder = new OpenRouterEmbedder();","typeGuard":"function hasOpenRouterEmbedderConfig(env = process.env) {\n  return (\n    typeof env.OPENROUTER_API_KEY === \"string\" && env.OPENROUTER_API_KEY.length > 0\n  );\n}","tryCatchPattern":"try {\n  new OpenRouterEmbedder();\n} catch (err) {\n  if (err.message === \"No OpenRouter API key was set.\") {\n    // route the user to provider settings instead of failing the embedding job\n  }\n}","preventionTips":["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."],"tags":["openrouter","embeddings","configuration","environment-variables","api-key"],"backgroundTag":"missing-env-var","analyzedSha":"3aec848f2885144aa8f1e53b9731a04310d5d558","analyzedAt":"2026-08-18T10:02:21.017Z","contentChangedAt":"2026-08-18T10:02:21.017Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}