{"record":{"id":"62b51b8812fd926a","repo":"HKUDS/DeepTutor","slug":"unsupported-stt-adapter-name-r","errorCode":null,"errorMessage":"Unsupported STT adapter: {name!r}","messagePattern":"Unsupported STT adapter: (.+?)","errorType":"exception","errorClass":"VoiceProviderError","httpStatus":null,"severity":"error","filePath":"deeptutor/services/voice/adapters/__init__.py","lineNumber":38,"sourceCode":"    \"openrouter_tts\": OpenRouterTTSAdapter(),\n}\n\nSTT_ADAPTERS: dict[str, BaseSTTAdapter] = {\n    \"openai_compat\": OpenAICompatSTTAdapter(),\n}\n\n\ndef get_tts_adapter(name: str) -> BaseTTSAdapter:\n    adapter = TTS_ADAPTERS.get(name or \"openai_compat\")\n    if adapter is None:\n        raise VoiceProviderError(f\"Unsupported TTS adapter: {name!r}\")\n    return adapter\n\n\ndef get_stt_adapter(name: str) -> BaseSTTAdapter:\n    adapter = STT_ADAPTERS.get(name or \"openai_compat\")\n    if adapter is None:\n        raise VoiceProviderError(f\"Unsupported STT adapter: {name!r}\")\n    return adapter\n\n\n__all__ = [\n    \"TTS_ADAPTERS\",\n    \"STT_ADAPTERS\",\n    \"get_tts_adapter\",\n    \"get_stt_adapter\",\n]\n","sourceCodeStart":20,"sourceCodeEnd":48,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/services/voice/adapters/__init__.py#L20-L48","documentation":"get_stt_adapter(name) resolves an STT adapter from the STT_ADAPTERS registry keyed by name, defaulting to \"openai_compat\" only when the name is empty/None. If the name is non-empty but not a registered key, a VoiceProviderError is raised. This guards against typos or uninstalled STT backends.","triggerScenarios":"Calling get_stt_adapter(\"whisper\") or any name not present in STT_ADAPTERS (e.g. a name copied from TTS config, or a backend whose extra deps were not installed). Empty string or None falls back to \"openai_compat\" and does NOT raise.","commonSituations":"A voice settings JSON names an STT provider that isn't compiled into this build (missing optional dependency), a copy-paste of the TTS adapter name into the STT field, or a renamed adapter after an upgrade.","solutions":["Check the exact keys of STT_ADAPTERS in deeptutor/services/voice/adapters/__init__.py and correct the configured name","Set the STT adapter name to \"openai_compat\" (or leave it empty to use the default)","If a custom adapter is expected, register it in STT_ADAPTERS or install the extra that provides it"],"exampleFix":"// before\nadapter = get_stt_adapter(\"whisper_local\")\n// after\nadapter = get_stt_adapter(\"openai_compat\")","handlingStrategy":"validation","validationCode":"from deeptutor.services.voice.adapters import STT_ADAPTERS\n\nname = (stt_name or \"openai_compat\").strip()\nif name not in STT_ADAPTERS:\n    raise ValueError(f\"Unknown STT adapter {name!r}; available: {sorted(STT_ADAPTERS)}\")\nadapter = get_stt_adapter(name)","typeGuard":"def is_known_stt_adapter(name: str) -> bool:\n    return (name or \"openai_compat\") in STT_ADAPTERS","tryCatchPattern":null,"preventionTips":["Whitelist adapter names in UI/settings dropdowns from STT_ADAPTERS.keys()","Validate the configured adapter name at settings-save time, not at call time","Default empty names to openai_compat explicitly in your config layer"],"tags":["voice","stt","adapter-registry","configuration"],"backgroundTag":"unknown-provider-adapter","analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}