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
- Set STT_PROVIDER to one of: openai, lemonade, deepgram, generic-openai, groq (lowercase, exact).
- If you do not want server-side STT, leave the browser to handle STT and avoid invoking getSTTProvider.
- Double-check for trailing whitespace or quotes in the .env value.
- 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
- Remember unset STT_PROVIDER defaults to 'native' which has no server implementation — set it explicitly when using server-side STT.
- Use lowercase exact values; avoid trailing spaces/quotes.
- Document the provider list next to the env var in your deploy config.
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
- No OpenAI compatible endpoint was set. Please set this to us
- ENV: No TTS_PROVIDER value found in environment!
- No Deepgram API key was set.
- No Groq API key was set.
- No Lemonade base path was set.
AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13).
Data as JSON: /api/errors/d29ffd0c388eccfb.
Report an issue: GitHub.