What changed from v2
- Spanish. Learned from zero in one 6K-step continuation run: 60K synthetic Spanish
phone utterances (Spanish spoken forms for numbers, dates, times and addresses) plus
Common Voice Spanish, with English anchor data so English didn't regress.
Benchmarks
Native inference, greedy. v3 and v2 measured in the same run on the same audio: n=100 per WER set,
and the 500-clip phone-quality half of our entity benchmark (synthetic caller utterances passed
through 8 kHz resampling, telephone band-pass and μ-law/AMR compression).
Table with columns: Metric, v3, v2| Metric | v3 | v2 |
|---|
| LibriSpeech test-clean WER ¹ | 2.17% | 2.12% |
| LibriSpeech test-other WER | 4.70% | 6.99% |
| Common Voice 17 Spanish WER | 4.17% | 30.2% |
| Phone-number digit accuracy | 97.0% | 95.5% |
| Person-name accuracy | 75.9% | 82.5% |
| Business-name accuracy | 83.8% | 86.8% |
| Spelled-email accuracy | 49.4% | 53.2% |
| Date / service accuracy | 100% / 99.6% | 100% / 100% |
¹ The synthetic training voices were cloned from LibriSpeech test-clean speakers (different
sentences). Treat test-clean as slightly optimistic; test-other has no speaker overlap.
Trade-off: v3 is more robust on harder English audio, adds Spanish and is slightly better on
phone numbers, but recognizes English person names about 7 points worse than v2 (business names
and emails are within a few clips of v2). For English-only deployments where names matter most,
v2 remains a good choice.
Conversational use
v3 responds natively to audio (not transcription-only), in the language the caller speaks.
It is trained on this user turn shape:
[ {"role": "system", "content": "<your agent persona>"}, {"role": "user", "content": [ {"type": "text", "text": "Respond conversationally to what the user just said. Keep replies short — one or two natural sentences. Never use markdown, code, symbols, or headers. Never invent quotes. If you didn't catch what they said, ask them to repeat. "}, {"type": "input_audio", "input_audio": {"data": "<b64 wav>", "format": "wav"}} ]}]
Transcription prompts:
- English:
"Repeat the following text, without any explanation: " + audio
- Spanish:
"Repeat the following text, which is written in Spanish, as it is without any explanation: " + audio
A persona system prompt is strongly recommended for conversational use.
Training
Three phases on 2×H200 (about $390 of compute in total):
- Phase 1B (35K steps, eff. batch 16): English ASR corpora + real telephone
conversations, with telephony augmentation (8 kHz resample,
AMR/μ-law compression, band-pass, pink noise, gain).
- Phase 2 (15K steps): 150K synthetic entity-dense utterances (phone numbers, names,
spelled emails, addresses, dates/times across 31 cloned TTS voices) + 40K spoken-dialogue
response pairs + anti-forgetting data from phase 1.
- Phase 3 (6K steps): 60K synthetic Spanish utterances (es-MX TTS) + Common Voice
Spanish ×3 + English anchors (real telephone audio, Common Voice English, LibriSpeech).
The LLM is frozen throughout, so its text abilities are unchanged.
Serving
Works with vLLM (--trust-remote-code). Qwen 3.6's hybrid linear attention loses some
accuracy under vLLM relative to native transformers inference; for maximum quality use HF
transformers, or vLLM with --no-enable-chunked-prefill and default (fp32) mamba cache dtypes.
All numbers above are native.
Known limitations
- Spanish replies can sound stiff. A small share of the synthetic Spanish training text
had template artifacts (for example doubled articles), which occasionally shows in
conversational replies.
- Very short turns (sub-second "yes", "okay") are the weakest input; padding sub-second
turns with ~500 ms of silence helps.
- English person names are about 7 points below v2 (see Benchmarks).
- English and Spanish only; heavily accented speech is weaker.
- Response style is trained to the prompt shape above; deviating from it reduces quality.
- vLLM serving gap noted above.
Apache 2.0. Built with the Ultravox training framework by Fixie.ai.