{"record":{"id":"e27ccb6843576b3f","repo":"Mintplex-Labs/anything-llm","slug":"no-cerebras-api-key-was-set","errorCode":null,"errorMessage":"No Cerebras API key was set.","messagePattern":"No Cerebras API key was set\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"server/utils/AiProviders/cerebras/index.js","lineNumber":16,"sourceCode":"const { NativeEmbedder } = require(\"../../EmbeddingEngines/native\");\nconst {\n  LLMPerformanceMonitor,\n} = require(\"../../helpers/chat/LLMPerformanceMonitor\");\nconst {\n  handleDefaultStreamResponseV2,\n} = require(\"../../helpers/chat/responses\");\nconst { MODEL_MAP } = require(\"../modelMap\");\n\nclass CerebrasLLM {\n  static modelContextWindows = {};\n\n  constructor(embedder = null, modelPreference = null) {\n    const { OpenAI: OpenAIApi } = require(\"openai\");\n    if (!process.env.CEREBRAS_API_KEY)\n      throw new Error(\"No Cerebras API key was set.\");\n\n    this.className = \"CerebrasLLM\";\n    this.openai = new OpenAIApi({\n      baseURL: \"https://api.cerebras.ai/v1\",\n      apiKey: process.env.CEREBRAS_API_KEY,\n    });\n    this.model =\n      modelPreference || process.env.CEREBRAS_MODEL_PREF || \"gpt-oss-120b\";\n    // Lazy load the limits to avoid blocking the main thread on cacheContextWindows\n    this.limits = null;\n\n    this.embedder = embedder ?? new NativeEmbedder();\n    this.defaultTemp = 0;\n\n    CerebrasLLM.cacheContextWindows(true);\n    this.#log(`Initialized with model: ${this.model}`);\n  }\n","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/526360e320da9d1b36074be5ed64fe76e5bbfbbd/server/utils/AiProviders/cerebras/index.js#L1-L34","documentation":"Thrown by the CerebrasLLM constructor when process.env.CEREBRAS_API_KEY is falsy. The provider builds an OpenAI-compatible client against https://api.cerebras.ai/v1 with this key, so it is mandatory before any chat/stream call.","triggerScenarios":"Constructing CerebrasLLM with CEREBRAS_API_KEY unset. The constructor also sets up the model preference (default gpt-oss-120b) and lazy-loads limits, but the key guard short-circuits all of that.","commonSituations":"Cerebras provider selected but key not entered; key env var misnamed (e.g. CEREBRAS_KEY); .env updated but process not restarted; deploying without the env.","solutions":["Set `CEREBRAS_API_KEY=<your cerebras key>` in .env and restart the server.","Re-save the Cerebras provider credentials in the UI to persist the key.","Verify with `printenv CEREBRAS_API_KEY` in the server environment.","Optionally set CEREBRAS_MODEL_PREF to override the default gpt-oss-120b."],"exampleFix":"// before\n// .env\nCEREBRAS_API_KEY=\n\n// after\n// .env\nCEREBRAS_API_KEY=csk-xxxxxxxxxxxxxxxx\nCEREBRAS_MODEL_PREF=gpt-oss-120b","handlingStrategy":"validation","validationCode":"if (!process.env.CEREBRAS_API_KEY) {\n  throw new Error(\n    \"CEREBRAS_API_KEY is missing. Create one in the Cerebras dashboard before selecting this provider.\"\n  );\n}\nconst llm = new CerebrasLLM(embedder, modelPref);","typeGuard":"/** @param {unknown} v @returns {boolean} */\nfunction isNonEmptyKey(v) {\n  return typeof v === \"string\" && v.trim().length > 0;\n}","tryCatchPattern":"try {\n  const llm = new CerebrasLLM(embedder, modelPref);\n} catch (e) {\n  if (/No Cerebras API key/.test(e.message)) {\n    return { ok: false, reason: \"missing-cerebras-key\" };\n  }\n  throw e;\n}","preventionTips":["Validate CEREBRAS_API_KEY at provider-save time and mark the provider unready until set.","Use the exact env var name from a shared constants file.","Restart after credential edits.","Optionally pre-validate the key with a /v1/models call before marking the provider active."],"tags":["config","env","authentication","cerebras","constructor"],"backgroundTag":null,"analyzedSha":"526360e320da9d1b36074be5ed64fe76e5bbfbbd","analyzedAt":"2026-08-13T01:45:47.170Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}