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
- Set STT_PROVIDER to exactly one of: openai, lemonade, deepgram, generic-openai, groq
- Match case exactly and remove surrounding whitespace/quotes from the value
- If you intended browser-native transcription, do not invoke the server-side STT path — 'native' is intentionally not in this switch
- 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
- Offer STT_PROVIDER as a dropdown of the five supported values — never free text
- Values are case-sensitive and not trimmed: match them exactly in .env
- Treat 'native' as client-side and never route it into getSTTProvider()
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
- No Deepgram API key was set.
- No Groq API key was set.
- No Lemonade base path was set.
- addToWorkspaces must be a string of comma-separated…
- ApiPie chat: is not valid for chat completion!
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)