An Azure service that integrates speech processing into apps and services.
wrong placement
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Issue context:
We are using Azure Voice Live realtime STT in production voice sessions and need strict monolingual behavior per session.
Observed behavior:
"input_audio_transcription": {
"model": "azure-speech",
"language": "es-ES"
},
"turn_detection": {
"type": "azure_semantic_vad_multilingual",
"threshold": 0.5,
"prefix_padding_ms": 500,
"silence_duration_ms": 1400,
"barge_in": true
}
An Azure service that integrates speech processing into apps and services.
wrong placement
Hello @Jurado, Jose Luis
Thanks for testing that so precisely the fact that it still leaks after moving to gpt-realtime is actually the key clue, and it points straight at the root cause. Two things to untangle here.
1. Turn detection is not your language control turn_detection (server_vad, azure_semantic_vad, azure_semantic_vad_multilingual) only governs when the service decides a turn started/ended (and, with a languages array, filler-word removal). It has no effect on which language your transcript comes back in. So swapping the _multilingual suffix didn't lock anything — you can set VAD to whatever endpoints best; it's orthogonal to language.
2. The real reason it leaks: gpt-realtime is a native-audio (multimodal) model. Multimodal models (gpt-realtime, gpt-realtime-mini, phi4-mm-realtime) listen to the audio directly. For these, input_audio_transcription.language is only a hint to improve transcription quality — not a hard lock, and the model returns results for languages not listed (just at lower quality). The transcription runs as a separate pass, so it can't constrain what the underlying model hears or answers. That's exactly why a Spanish-only setting still lets non-Spanish through.
Also note: with gpt-realtime/-mini, the available transcription models are the OpenAI ones (whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe, gpt-4o-transcribe-diarize) — not azure-speech. So you can't get the azure-speech "single language" restriction while staying on a native-audio model.
How to actually enforce a per-session Spanish lock at the recognition layer: Use a non-multimodal (text) chat model — e.g. gpt-4.1 — paired with azure-speech transcription in single-language mode:
This is the documented "single language configuration," which restricts the transcription languages detected. Two things to watch:
A few validation/robustness steps:
"instructions": "The caller always speaks Spanish (es-ES). Transcribe and respond only in Spanish, even if you detect another language in the input audio."
(This biases behavior; it's not a hard STT lock — only the text-model + azure-speech path gives you the recognition-layer restriction.)Links:
Voice Live supported languages (three language modes / single-language config)
https://learn.microsoft.com/en-us/azure/ai-services/speech-service/voice-live-language-support?tabs=speechinput
How to use the Voice Live API (audio input transcription, turn detection):
https://learn.microsoft.com/en-us/azure/ai-services/speech-service/voice-live-how-to
Speech-to-text language & locale support:
https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt
VAD isn't the lever. On a native-audio model like gpt-realtime, language is only a hint — no hard lock exists. For a true per-session es-ES lock, switch to a text chat model + azure-speech transcription with a single es-ES locale (no comma), and handle any hard rejection of non-Spanish turns at the app layer.
Thanks,
Manish.