Mintplex-Labs/anything-llm · error · Error

STT_PROVIDER " " is not a server-side provider.

Error message

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

What it means

getSTTProvider() switches on process.env.STT_PROVIDER (defaulting to 'native') and only accepts the exact values openai, lemonade, deepgram, generic-openai, and groq; every other value — including the unset 'native' default, which is browser-side — hits the default case and throws this templated error.

Solutions

  1. Set STT_PROVIDER to exactly one of: openai, lemonade, deepgram, generic-openai, groq
  2. Match case exactly and remove surrounding whitespace/quotes from the value
  3. If you intended browser-native transcription, do not invoke the server-side STT path — 'native' is intentionally not in this switch
  4. Restart the server after correcting .env

Example fix

# before (.env)
STT_PROVIDER=Groq

# after (.env)
STT_PROVIDER=groq
Defensive patterns

Strategy: validation

Validate before calling

const SERVER_STT_PROVIDERS = ['openai', 'lemonade', 'deepgram', 'generic-openai', 'groq'];
const provider = (process.env.STT_PROVIDER || 'native').trim();
if (provider !== 'native' && !SERVER_STT_PROVIDERS.includes(provider)) {
  throw new Error(`STT_PROVIDER must be 'native' or one of: ${SERVER_STT_PROVIDERS.join(', ')}`);
}

Type guard

function isServerSideSttProvider(value) {
  return ['openai', 'lemonade', 'deepgram', 'generic-openai', 'groq'].includes(String(value).trim());
}

Try / catch

try {
  stt = getSTTProvider();
} catch (err) {
  if (err.message.includes('is not a server-side provider')) {
    // reset STT_PROVIDER to a supported value or 'native' default
  }
  throw err;
}

Prevention

When it happens

Trigger: STT_PROVIDER set to a misspelled or case-wrong value ('Groq', 'openAi', 'deepgram ', a provider that is client-side-only like 'native'); or a server-side code path calling getSTTProvider() while STT_PROVIDER is unset so the 'native' default reaches the switch.

Common situations: Values are case-sensitive and not trimmed; users set a browser-side provider name in a deployment where server-side STT is invoked; .env quoting/spaces around the value; code changes calling getSTTProvider unconditionally instead of only for server-side providers.

Related errors


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

Appendix: 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 3aec848f28)