tinyhumansai/openhuman · error
voice provider '{}' does not support TTS (capability: {})
Error message
voice provider '{}' does not support TTS (capability: {}) What it means
TTS counterpart of the capability check: the slug exists in voice_providers but the entry does not declare TTS (e.g. an STT-only provider chosen for speech synthesis), so no TTS client can be built.
Source
Thrown at src/openhuman/voice/factory/helpers.rs:159
/// Create a TTS provider by looking up a slug in `config.voice_providers`.
pub(super) fn create_tts_provider_by_slug(
slug: &str,
voice: &str,
config: &Config,
) -> anyhow::Result<Box<dyn TtsProvider>> {
let entry = config
.voice_providers
.iter()
.find(|p| p.slug == slug)
.ok_or_else(|| {
anyhow::anyhow!(
"no voice provider with slug '{}' found in voice_providers",
slug
)
})?;
if !entry.capability.supports_tts() {
return Err(anyhow::anyhow!(
"voice provider '{}' does not support TTS (capability: {})",
slug,
entry.capability.as_str()
));
}
let effective_voice = if voice.trim().is_empty() {
entry.default_tts_voice.as_deref().unwrap_or("default")
} else {
voice
};
let api_key = crate::openhuman::inference::provider::factory::lookup_key_for_slug(slug, config)
.unwrap_or_default();
debug!(
"{LOG_PREFIX} creating external TTS provider slug={slug} voice={effective_voice} \
endpoint={} key_present={}",View on GitHub (pinned to 7491200858)
Solutions
- Select a provider whose capability includes TTS
- Or declare tts capability on the entry in config.toml
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/voice/factory/helpers.rs:159 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/69c19306a60c02df.
Report an issue: GitHub.