{"record":{"id":"fde95891badf2310","repo":"Mintplex-Labs/anything-llm","slug":"env-no-tts-provider-value-found-in-environment","errorCode":null,"errorMessage":"ENV: No TTS_PROVIDER value found in environment!","messagePattern":"ENV: No TTS_PROVIDER value found in environment!","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/utils/TextToSpeech/index.js","lineNumber":17,"sourceCode":"function getTTSProvider() {\n  const provider = process.env.TTS_PROVIDER || \"openai\";\n  switch (provider) {\n    case \"openai\":\n      const { OpenAiTTS } = require(\"./openAi\");\n      return new OpenAiTTS();\n    case \"elevenlabs\":\n      const { ElevenLabsTTS } = require(\"./elevenLabs\");\n      return new ElevenLabsTTS();\n    case \"generic-openai\":\n      const { GenericOpenAiTTS } = require(\"./openAiGeneric\");\n      return new GenericOpenAiTTS();\n    case \"kokoro\":\n      const { KokoroTTS } = require(\"./kokoro\");\n      return new KokoroTTS();\n    default:\n      throw new Error(\"ENV: No TTS_PROVIDER value found in environment!\");\n  }\n}\n\nmodule.exports = { getTTSProvider };\n","sourceCodeStart":1,"sourceCodeEnd":22,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/526360e320da9d1b36074be5ed64fe76e5bbfbbd/server/utils/TextToSpeech/index.js#L1-L22","documentation":"Thrown by getTTSProvider when TTS_PROVIDER does not match: openai, elevenlabs, generic-openai, kokoro. Unlike the STT index, the default value when TTS_PROVIDER is unset is 'openai' (line 2), which IS a valid case — so this default branch is only reached when TTS_PROVIDER is explicitly set to an unrecognized value. The message is a fixed string and does not echo the bad value.","triggerScenarios":"TTS_PROVIDER is explicitly set to a typo or unsupported value (e.g. 'OpenAI', 'eleven', 'azure', 'polly'); trailing whitespace; a value intended for the frontend TTS picker.","commonSituations":"Manually setting TTS_PROVIDER to a provider that exists on the frontend but has no server implementation; copy-paste typo; uppercase value; leftover value from a previous config.","solutions":["Set TTS_PROVIDER to one of: openai, elevenlabs, generic-openai, kokoro (lowercase, exact).","If unset is desired, leave it unset to fall back to 'openai'.","Check for trailing whitespace, quotes, or typos in the .env value.","Restart the server after changing .env."],"exampleFix":"# before\nTTS_PROVIDER=ElevenLabs\n# (typo/case → throws)\n\n# after\nTTS_PROVIDER=elevenlabs\nTTS_ELEVEN_LABS_KEY=el_xxxxxxxx","handlingStrategy":"validation","validationCode":"const VALID_TTS = [\"openai\", \"elevenlabs\", \"generic-openai\", \"kokoro\"];\nconst provider = process.env.TTS_PROVIDER;\nif (provider && !VALID_TTS.includes(provider)) {\n  throw new Error(\n    `TTS_PROVIDER \"${provider}\" is invalid. Use one of: ${VALID_TTS.join(\", \")}, or leave unset to default to 'openai'.`\n  );\n}","typeGuard":"const VALID_TTS = new Set([\"openai\", \"elevenlabs\", \"generic-openai\", \"kokoro\"]);\nfunction isKnownTTSProvider(v) {\n  return v === undefined || (typeof v === \"string\" && VALID_TTS.has(v));\n}","tryCatchPattern":"try {\n  return getTTSProvider();\n} catch (e) {\n  if (/No TTS_PROVIDER value found/i.test(e.message)) {\n    logger.error(\n      \"TTS_PROVIDER is set to an unknown value. Use openai|elevenlabs|generic-openai|kokoro, or unset it to default to 'openai'.\"\n    );\n  }\n  throw e;\n}","preventionTips":["Remember unset TTS_PROVIDER defaults to 'openai' (valid) — this error only fires for explicitly bad values.","Use lowercase exact values; avoid typos and trailing whitespace.","Document the allowed TTS provider list next to the env var."],"tags":["tts","configuration","environment","validation","provider-selection"],"backgroundTag":null,"analyzedSha":"526360e320da9d1b36074be5ed64fe76e5bbfbbd","analyzedAt":"2026-08-13T01:45:47.170Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}