Mintplex-Labs/anything-llm · error · Error

ENV: No TTS_PROVIDER value found in environment!

Error message

ENV: No TTS_PROVIDER value found in environment!

What it means

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.

Source

Thrown at server/utils/TextToSpeech/index.js:17

function getTTSProvider() {
  const provider = process.env.TTS_PROVIDER || "openai";
  switch (provider) {
    case "openai":
      const { OpenAiTTS } = require("./openAi");
      return new OpenAiTTS();
    case "elevenlabs":
      const { ElevenLabsTTS } = require("./elevenLabs");
      return new ElevenLabsTTS();
    case "generic-openai":
      const { GenericOpenAiTTS } = require("./openAiGeneric");
      return new GenericOpenAiTTS();
    case "kokoro":
      const { KokoroTTS } = require("./kokoro");
      return new KokoroTTS();
    default:
      throw new Error("ENV: No TTS_PROVIDER value found in environment!");
  }
}

module.exports = { getTTSProvider };

View on GitHub (pinned to 526360e320)

Solutions

  1. Set TTS_PROVIDER to one of: openai, elevenlabs, generic-openai, kokoro (lowercase, exact).
  2. If unset is desired, leave it unset to fall back to 'openai'.
  3. Check for trailing whitespace, quotes, or typos in the .env value.
  4. Restart the server after changing .env.

Example fix

# before
TTS_PROVIDER=ElevenLabs
# (typo/case → throws)

# after
TTS_PROVIDER=elevenlabs
TTS_ELEVEN_LABS_KEY=el_xxxxxxxx
Defensive patterns

Strategy: validation

Validate before calling

const VALID_TTS = ["openai", "elevenlabs", "generic-openai", "kokoro"];
const provider = process.env.TTS_PROVIDER;
if (provider && !VALID_TTS.includes(provider)) {
  throw new Error(
    `TTS_PROVIDER "${provider}" is invalid. Use one of: ${VALID_TTS.join(", ")}, or leave unset to default to 'openai'.`
  );
}

Type guard

const VALID_TTS = new Set(["openai", "elevenlabs", "generic-openai", "kokoro"]);
function isKnownTTSProvider(v) {
  return v === undefined || (typeof v === "string" && VALID_TTS.has(v));
}

Try / catch

try {
  return getTTSProvider();
} catch (e) {
  if (/No TTS_PROVIDER value found/i.test(e.message)) {
    logger.error(
      "TTS_PROVIDER is set to an unknown value. Use openai|elevenlabs|generic-openai|kokoro, or unset it to default to 'openai'."
    );
  }
  throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13). Data as JSON: /api/errors/fde95891badf2310. Report an issue: GitHub.