moeru-ai/airi · warning
[Speech Pipeline] OpenAI Compatible: No voice in provider co
Error message
[Speech Pipeline] OpenAI Compatible: No voice in provider config, using default
What it means
For the openai-compatible-audio-speech provider, Stage.vue builds the voice object from providerConfig.voice. When it is unset, it synthesizes a default 'alloy' voice record (id/name 'alloy') and warns. On non-OpenAI endpoints without an 'alloy' voice the later synthesis call fails at the API level.
Source
Thrown at packages/stage-ui/src/components/scenes/Stage.vue:500
description: providerConfig.voice as string,
previewURL: '',
languages: [{ code: 'en', title: 'English' }],
provider: activeSpeechProvider.value,
gender: 'neutral',
}
}
else {
// Fallback to default if not in provider config
voice = {
id: 'alloy',
name: 'alloy',
description: 'alloy',
previewURL: '',
languages: [{ code: 'en', title: 'English' }],
provider: activeSpeechProvider.value,
gender: 'neutral',
}
console.warn('[Speech Pipeline] OpenAI Compatible: No voice in provider config, using default', { providerConfig })
}
}
if (!model || !voice)
return null
try {
const speechRequest = speechStore.resolveSpeechInput({
text: request.text,
voice,
providerConfig: {
...providerConfig,
pitch: ssmlEnabled.value ? pitch.value : undefined,
},
forceSSML: ssmlEnabled.value,
supportsSSML: speechStore.supportsSSML,
})
View on GitHub (pinned to 677329427f)
Solutions
- Open Settings > Providers > openai-compatible-audio-speech, set the voice field to a voice your endpoint serves, and save
- Fetch the provider's voice list (API key + base URL configured) and select one explicitly
- If the default is intended, confirm the endpoint actually supports the 'alloy' voice
Defensive patterns
Strategy: validation
Validate before calling
// Before enabling TTS for openai-compatible-audio-speech
const config = providers.value['openai-compatible-audio-speech']
if (!config?.voice) {
// mark provider incomplete in settings UI instead of relying on the alloy default
console.warn('[Speech Pipeline] OpenAI Compatible: No voice in provider config, using default')
} Type guard
function hasProviderVoice(config: unknown): config is { voice: string } {
return Boolean(config) && typeof config === 'object' && typeof (config as any).voice === 'string' && (config as any).voice.length > 0
} Prevention
- Make voice a required field in the openai-compatible-audio-speech settings form
- Select a voice from the endpoint's fetched voice list rather than assuming 'alloy' exists
- Treat the warn as incomplete setup, not a working default
When it happens
Trigger: The openai-compatible-audio-speech provider was saved without a voice field while TTS is requested.
Common situations: Provider configured with only API key, base URL and model; voice selection skipped during setup; config persisted by an older app version.
Related errors
- [Speech Pipeline] OpenAI Compatible: No model in provider co
- Failed to initialize speech provider
- MiniMax TTS request failed: ${response.status} ${response.st
- OpenRouter audio request failed: ${response.status} ${await
- Failed to initialize speech provider
AI-assisted analysis of moeru-ai/airi@677329427f (2026-08-18).
Data as JSON: /api/errors/600bfc3284b25dca.
Report an issue: GitHub.