{"record":{"id":"d29ffd0c388eccfb","repo":"Mintplex-Labs/anything-llm","slug":"stt-provider-provider-is-not-a-server-side-pr","errorCode":null,"errorMessage":"STT_PROVIDER \"${provider}\" is not a server-side provider.","messagePattern":"STT_PROVIDER \"(.+?)\" is not a server-side provider\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/utils/SpeechToText/index.js","lineNumber":20,"sourceCode":"  const provider = process.env.STT_PROVIDER || \"native\";\n  switch (provider) {\n    case \"openai\":\n      const { OpenAiSTT } = require(\"./openAi\");\n      return new OpenAiSTT();\n    case \"lemonade\":\n      const { LemonadeSTT } = require(\"./lemonade\");\n      return new LemonadeSTT();\n    case \"deepgram\":\n      const { DeepgramSTT } = require(\"./deepgram\");\n      return new DeepgramSTT();\n    case \"generic-openai\":\n      const { GenericOpenAiSTT } = require(\"./openAiGeneric\");\n      return new GenericOpenAiSTT();\n    case \"groq\":\n      const { GroqSTT } = require(\"./groq\");\n      return new GroqSTT();\n    default:\n      throw new Error(\n        `STT_PROVIDER \"${provider}\" is not a server-side provider.`\n      );\n  }\n}\n\nmodule.exports = { getSTTProvider };\n","sourceCodeStart":2,"sourceCodeEnd":27,"githubUrl":"https://github.com/Mintplex-Labs/anything-llm/blob/526360e320da9d1b36074be5ed64fe76e5bbfbbd/server/utils/SpeechToText/index.js#L2-L27","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"# before\n# STT_PROVIDER unset → defaults to 'native' → throws\n\n# after\nSTT_PROVIDER=openai\nOPEN_AI_KEY=sk-...","handlingStrategy":"validation","validationCode":"const VALID_STT = [\"openai\", \"lemonade\", \"deepgram\", \"generic-openai\", \"groq\"];\nconst provider = process.env.STT_PROVIDER || \"native\";\nif (!VALID_STT.includes(provider)) {\n  throw new Error(\n    `STT_PROVIDER \"${provider}\" is invalid. Set one of: ${VALID_STT.join(\", \")} — note 'native' (the default when unset) is NOT server-side.`\n  );\n}","typeGuard":"const VALID_STT = new Set([\"openai\", \"lemonade\", \"deepgram\", \"generic-openai\", \"groq\"]);\nfunction isServerSideSTT(v) {\n  return typeof v === \"string\" && VALID_STT.has(v);\n}","tryCatchPattern":"try {\n  return getSTTProvider();\n} catch (e) {\n  if (/not a server-side provider/i.test(e.message)) {\n    logger.error(\n      \"Set STT_PROVIDER to one of openai|lemonade|deepgram|generic-openai|groq (or leave browser-side STT).\"\n    );\n  }\n  throw e;\n}","preventionTips":["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."],"tags":["stt","configuration","environment","validation","provider-selection"],"backgroundTag":null,"analyzedSha":"526360e320da9d1b36074be5ed64fe76e5bbfbbd","analyzedAt":"2026-08-13T01:45:47.170Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}