{"record":{"id":"0d7637385c40fd5e","repo":"Mintplex-Labs/anything-llm","slug":"no-novita-api-key-was-set","errorCode":null,"errorMessage":"No Novita API key was set.","messagePattern":"No Novita API key was set\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/utils/AiProviders/novita/index.js","lineNumber":25,"sourceCode":"} = require(\"../../helpers/chat/responses\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst { safeJsonParse } = require(\"../../http\");\nconst {\n  LLMPerformanceMonitor,\n} = require(\"../../helpers/chat/LLMPerformanceMonitor\");\nconst cacheFolder = path.resolve(\n  process.env.STORAGE_DIR\n    ? path.resolve(process.env.STORAGE_DIR, \"models\", \"novita\")\n    : path.resolve(__dirname, `../../../storage/models/novita`)\n);\n\nclass NovitaLLM {\n  defaultTimeout = 3_000;\n\n  constructor(embedder = null, modelPreference = null) {\n    if (!process.env.NOVITA_LLM_API_KEY)\n      throw new Error(\"No Novita API key was set.\");\n\n    this.className = \"NovitaLLM\";\n    const { OpenAI: OpenAIApi } = require(\"openai\");\n    this.basePath = \"https://api.novita.ai/v3/openai\";\n    this.openai = new OpenAIApi({\n      baseURL: this.basePath,\n      apiKey: process.env.NOVITA_LLM_API_KEY ?? null,\n      defaultHeaders: {\n        \"HTTP-Referer\": \"https://anythingllm.com\",\n        \"X-Novita-Source\": \"anythingllm\",\n      },\n    });\n    this.model =\n      modelPreference ||\n      process.env.NOVITA_LLM_MODEL_PREF ||\n      \"deepseek/deepseek-r1\";\n    this.limits = {\n      history: this.promptWindowLimit() * 0.15,","sourceCodeStart":7,"sourceCodeEnd":43,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/3aec848f2885144aa8f1e53b9731a04310d5d558/server/utils/AiProviders/novita/index.js#L7-L43","documentation":"NovitaLLM's constructor throws when process.env.NOVITA_LLM_API_KEY is falsy, before the OpenAI-compatible client for https://api.novita.ai/v3/openai is created. Any instantiation of the provider (selecting Novita as the LLM, sending a chat) fails until the key is set.","triggerScenarios":"Selecting Novita AI as the provider with NOVITA_LLM_API_KEY unset, misspelled, or empty; .env edited but the process not restarted; Docker deployments where the variable was not injected.","commonSituations":"Typo'd variable name (NOVITA_API_KEY, NOVITA_LLM_KEY); stale process after .env edits; missing env entry in docker-compose.","solutions":["Add NOVITA_LLM_API_KEY=<key from novita.ai> to the server's .env","Restart the AnythingLLM server or container","Confirm the variable name is present in the runtime environment (name check only)","Check for whitespace or quotes around the value"],"exampleFix":"# before\n# (NOVITA_LLM_API_KEY not set)\n# after\nNOVITA_LLM_API_KEY=sk-...your-key","handlingStrategy":"validation","validationCode":"if (!process.env.NOVITA_LLM_API_KEY)\n  throw new Error('Novita provider selected but NOVITA_LLM_API_KEY is not configured');\nconst llm = new NovitaLLM(embedder);","typeGuard":null,"tryCatchPattern":"try {\n  const llm = new NovitaLLM(embedder);\n} catch (e) {\n  if (e.message === 'No Novita API key was set.')\n    return respondConfigError(e); // configure key, restart, do not retry\n  throw e;\n}","preventionTips":["Set NOVITA_LLM_API_KEY before selecting Novita in the UI","Restart the process after .env edits","Verify the variable name reaches the container environment (name only)"],"tags":["novita","anythingllm","api-key","environment-variables","configuration"],"backgroundTag":"missing-api-key","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"}