Mintplex-Labs/anything-llm · error · Error

STT_PROVIDER "${provider}" is not a server-side provider.

Error message

STT_PROVIDER "${provider}" is not a server-side provider.

What it means

Thrown by getSTTProvider when STT_PROVIDER does not match any of: openai, lemonade, deepgram, generic-openai, groq. Critically, the default value when STT_PROVIDER is unset is 'native' (line 2), and 'native' is NOT a case — so an unset STT_PROVIDER lands in the default branch and throws. The message echoes the offending provider value.

Source

Thrown at server/utils/SpeechToText/index.js:20

  const provider = process.env.STT_PROVIDER || "native";
  switch (provider) {
    case "openai":
      const { OpenAiSTT } = require("./openAi");
      return new OpenAiSTT();
    case "lemonade":
      const { LemonadeSTT } = require("./lemonade");
      return new LemonadeSTT();
    case "deepgram":
      const { DeepgramSTT } = require("./deepgram");
      return new DeepgramSTT();
    case "generic-openai":
      const { GenericOpenAiSTT } = require("./openAiGeneric");
      return new GenericOpenAiSTT();
    case "groq":
      const { GroqSTT } = require("./groq");
      return new GroqSTT();
    default:
      throw new Error(
        `STT_PROVIDER "${provider}" is not a server-side provider.`
      );
  }
}

module.exports = { getSTTProvider };

View on GitHub (pinned to 526360e320)

Solutions

  1. Set STT_PROVIDER to one of: openai, lemonade, deepgram, generic-openai, groq (lowercase, exact).
  2. If you do not want server-side STT, leave the browser to handle STT and avoid invoking getSTTProvider.
  3. Double-check for trailing whitespace or quotes in the .env value.
  4. Restart the server after changing .env.

Example fix

# before
# STT_PROVIDER unset → defaults to 'native' → throws

# after
STT_PROVIDER=openai
OPEN_AI_KEY=sk-...
Defensive patterns

Strategy: validation

Validate before calling

const VALID_STT = ["openai", "lemonade", "deepgram", "generic-openai", "groq"];
const provider = process.env.STT_PROVIDER || "native";
if (!VALID_STT.includes(provider)) {
  throw new Error(
    `STT_PROVIDER "${provider}" is invalid. Set one of: ${VALID_STT.join(", ")} — note 'native' (the default when unset) is NOT server-side.`
  );
}

Type guard

const VALID_STT = new Set(["openai", "lemonade", "deepgram", "generic-openai", "groq"]);
function isServerSideSTT(v) {
  return typeof v === "string" && VALID_STT.has(v);
}

Try / catch

try {
  return getSTTProvider();
} catch (e) {
  if (/not a server-side provider/i.test(e.message)) {
    logger.error(
      "Set STT_PROVIDER to one of openai|lemonade|deepgram|generic-openai|groq (or leave browser-side STT)."
    );
  }
  throw e;
}

Prevention

When it happens

Trigger: STT_PROVIDER is unset (defaults to 'native' which is not handled server-side); STT_PROVIDER is misspelled (e.g. 'OpenAI', 'deepGram', 'open-ai'); STT_PROVIDER set to a browser-side-only value being interpreted on the server.

Common situations: Fresh install where STT_PROVIDER was never set and the server-side STT path is invoked; copy-paste typo; uppercase value; value meant for the frontend STT picker.

Related errors


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