{"record":{"id":"22f5b9d379139173","repo":"tinyhumansai/openhuman","slug":"voice-provider-does-not-support-stt-capabili","errorCode":null,"errorMessage":"voice provider '{}' does not support STT (capability: {})","messagePattern":"voice provider '(.+?)' does not support STT \\(capability: (.+?)\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/voice/factory/helpers.rs","lineNumber":109,"sourceCode":"/// Create an STT provider by looking up a slug in `config.voice_providers`.\npub(super) fn create_stt_provider_by_slug(\n    slug: &str,\n    model: &str,\n    config: &Config,\n) -> anyhow::Result<Box<dyn SttProvider>> {\n    let entry = config\n        .voice_providers\n        .iter()\n        .find(|p| p.slug == slug)\n        .ok_or_else(|| {\n            anyhow::anyhow!(\n                \"no voice provider with slug '{}' found in voice_providers\",\n                slug\n            )\n        })?;\n\n    if !entry.capability.supports_stt() {\n        return Err(anyhow::anyhow!(\n            \"voice provider '{}' does not support STT (capability: {})\",\n            slug,\n            entry.capability.as_str()\n        ));\n    }\n\n    let effective_model = if model.trim().is_empty() {\n        entry.default_stt_model.as_deref().unwrap_or(\"default\")\n    } else {\n        model\n    };\n\n    let api_key = crate::openhuman::inference::provider::factory::lookup_key_for_slug(slug, config)\n        .unwrap_or_default();\n\n    debug!(\n        \"{LOG_PREFIX} creating external STT provider slug={slug} model={effective_model} \\\n         endpoint={} key_present={}\",","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/voice/factory/helpers.rs#L91-L127","documentation":"The slug resolved to a configured voice provider, but its capability flags do not include STT (e.g. a TTS-only provider selected for transcription). Fails before provider construction; the message reports the actual capability.","triggerScenarios":"Thrown at src/openhuman/voice/factory/helpers.rs:109 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Select a provider whose capability includes STT","Or update the entry's capability in config.toml to declare stt support"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}