moeru-ai/airi · warning
[Speech Pipeline] OpenAI Compatible: No model in provider co
Error message
[Speech Pipeline] OpenAI Compatible: No model in provider config, using default
What it means
For the openai-compatible-audio-speech provider, Stage.vue prefers the model stored in the provider config over the globally selected speech model. If providerConfig.model is unset, it falls back to 'tts-1' and warns. On endpoints that do not serve tts-1 the subsequent synthesis call will fail with an API error.
Source
Thrown at packages/stage-ui/src/components/scenes/Stage.vue:475
if (!request.text && !request.special)
return null
const providerConfig = providerStore.getProviderConfig(activeSpeechProvider.value)
// For OpenAI Compatible providers, always use provider config for model and voice
// since these are manually configured in provider settings
let model = activeSpeechModel.value
let voice = activeSpeechVoice.value
if (activeSpeechProvider.value === 'openai-compatible-audio-speech') {
// Always prefer provider config for OpenAI Compatible (user configured it there)
if (providerConfig?.model) {
model = providerConfig.model as string
}
else {
// Fallback to default if not in provider config
model = 'tts-1'
console.warn('[Speech Pipeline] OpenAI Compatible: No model in provider config, using default', { providerConfig })
}
if (providerConfig?.voice) {
voice = {
id: providerConfig.voice as string,
name: providerConfig.voice as string,
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',View on GitHub (pinned to 677329427f)
Solutions
- Open Settings > Providers > openai-compatible-audio-speech, set the model field (e.g. tts-1 or your endpoint's equivalent) and save
- With API key and base URL set, load models for the provider and pick one from the fetched list
- If the default is intended, verify the endpoint actually serves tts-1 by calling it directly
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?.model) {
// mark provider incomplete in settings UI instead of relying on the tts-1 default
console.warn('[Speech Pipeline] OpenAI Compatible: No model in provider config, using default')
} Type guard
function hasProviderModel(config: unknown): config is { model: string } {
return Boolean(config) && typeof config === 'object' && typeof (config as any).model === 'string' && (config as any).model.length > 0
} Prevention
- Make model a required field in the openai-compatible-audio-speech settings form
- Verify the endpoint actually serves the configured (or default tts-1) model before relying on the fallback
- Treat the warn as a signal of incomplete provider setup, not a working state
When it happens
Trigger: The openai-compatible-audio-speech provider was saved without a model field in its provider settings while TTS is requested during a conversation.
Common situations: Fresh provider setup where only API key, base URL and voice were entered; config written by an older version that did not persist model; non-OpenAI compatible endpoints whose TTS models have different names.
Related errors
- [Speech Pipeline] OpenAI Compatible: No voice 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/8a51746eb2b84c31.
Report an issue: GitHub.