Benchmarking Real-Time Speech Recognition on Accented English
How accurately and how fast 21 real-time speech-to-text systems transcribe non-native English speakers.
- Hours
- 22.2
- Speakers
- 2,042
- Accents
- 16
- Fluency levels
- 3
- Models
- 21
Contents
1Overview
A voice tutor needs speech recognition that is accurate and fast on accented, hesitant English.
We took 22.2 hours of unscripted answers that 2,042 learners gave Fluently’s AI tutor and streamed them to 21 real-time speech-to-text systems, under a protocol adapted from Artificial Analysis’s AA-WER Streaming. We measured word error rate (WER) and time to final text across 16 accent groups and 3 fluency levels.
2What’s in the benchmark
Every clip is one whole learner turn of about 3 to 30 seconds from a real voice conversation with Fluently’s AI tutor on iOS or Android, shared by users who opted in. The speech is unscripted, with pauses, repetitions, false starts and self-corrections.
The accent group comes from the learner’s native language and country, not from listening (Table 1). The fluency level is the learner’s usual speaking rate in Fluently, not a CEFR level (Table 2). Each of the 48 accent and fluency cells holds 24 to 30 minutes of speech, balanced by gender and platform, with at most 60 seconds per speaker.
Two annotation studios transcribed every clip independently. Our in-house team of over 30 trained phonologists resolved every disagreement span by span against the audio.
| Accent group | AR | BR | ZH | SLAV | FR | DE | IN | IT | JA | KO | PL | ES | LATAM | TH | TR | VI | All |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Clips | 337 | 323 | 339 | 345 | 372 | 320 | 338 | 354 | 332 | 310 | 348 | 348 | 294 | 348 | 313 | 360 | 5,381 |
| Speakers | 129 | 126 | 120 | 117 | 143 | 126 | 127 | 131 | 123 | 134 | 123 | 131 | 117 | 126 | 129 | 140 | 2,042 |
| Hours | 1.3 | 1.3 | 1.5 | 1.4 | 1.4 | 1.4 | 1.3 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 22.2 |
| Fluency level | Low | Medium | High |
|---|---|---|---|
| Speaking rate | under 70 words/min | 70 to under 90 words/min | 90+ words/min |
| Clips | 1,784 | 1,873 | 1,724 |
| Speakers | 713 | 675 | 654 |
| Hours | 7.1 | 7.5 | 7.6 |
3Results
- Two systems tie for first. Scribe v2 Realtime (5.4% WER) and MAI-Transcribe-2 (5.6%) are statistically tied for first and well ahead of the rest, which start at 6.8% (Figure 1). Against references made without Scribe drafts, the two stay tied. See Limitations.
- Accent matters as much as fluency. The median real-time system’s WER ranges 2.1× across accent groups (German 6.2% to Vietnamese 12.8%) and 1.7× across fluency levels (6.7% to 11.3%).
- Two kinds of hard accent. Thai, Vietnamese, Japanese and Chinese speakers stay hard even at high fluency, at 8.2% to 10.8% for the median system against 4.9% to 6.7% for the other 12 groups. For Brazilian Portuguese and Arabic speakers the difficulty is concentrated at low fluency, at 13.6% and 13.1% against about 6.3% when fluent (Figure 2).
- No system has solved beginner speech. Low-fluency WER is 1.5× to 1.8× the high-fluency WER for every real-time system except Resonant-1, at 2.0×. Better systems are better across the board, not specifically on beginners.
- Streaming hurts beginners most. Against the same model run offline, streaming adds a median of 1.4 WER points across 11 same-model pairs, +2.3 at low fluency and +0.9 at high. Among them, the systems that send finals before our endpoint (Grok, Gemini 3.5 Live, Universal-3.5 Pro, Chirp 3, Resonant-1 and Nova-3) show the largest gaps between low and high fluency, +1.3 to +3.2 points. The other 5 show +0.9 or less.
Real-time WER
- Real-time
- Same model offline
Scribe v2 Realtime (our references favor this system)5.4%, offline 3.4%
MAI-Transcribe-25.6%, offline 4.6%
Nari Qwen3-ASR 1.7B Fast6.8%
Ink-27.5%
Muse7.6%, offline 7.6%
Grok7.6%, offline 6.1%
Gemini 3.5 Live7.8%, offline 6.5%
Universal-3.6 Pro8.1%
Universal-3.5 Pro8.2%, offline 6.5%
Chirp 38.6%, offline 7.2%
Resonant-18.6%, offline 5.9%
GPT Live9.2%, offline 9.5%
Soniox v59.7%, offline 9.2%
Linden 19.9%
Azure Speech10.3%
Pulse10.5%
Flux10.8%
Nova-310.9%, offline 7.7%
GPT Realtime Whisper13.8%
Nemotron15.8%
Voxtral Realtime18.8%
Early finals likely explain the largest beginner gaps, though our evidence is observational. A provider’s default endpointing splits a hesitant turn, and the system then decodes each piece with less context. Most extra errors are substitutions. Part of the streaming cost comes from our protocol. Several systems keep their provider’s default endpointing, while Artificial Analysis configures providers so that only its forced endpoint produces a final.
Speed is rarely the problem. For 16 of 21 systems, the median time to final text is 0.3 s or less, counted from the moment the audio through the end of speech and the finalize signal have been sent. The slowest, Chirp 3, takes 1.5 s.
Accents and fluency
| Accent group | Lowunder 70 words/min | Medium70 to under 90 words/min | High90+ words/min |
|---|---|---|---|
| Vietnamese | 15.2 | 13.7 | 10.1 |
| Thai | 14.6 | 11.4 | 10.8 |
| Chinese | 14.2 | 10.7 | 8.2 |
| Japanese | 14.1 | 10.4 | 9.3 |
| Brazilian Portuguese | 13.6 | 10.0 | 6.3 |
| Arabic | 13.1 | 11.3 | 6.3 |
| Spanish (Latin America) | 11.7 | 9.7 | 6.7 |
| Korean | 11.5 | 8.6 | 6.3 |
| Spanish (Spain) | 10.6 | 8.6 | 6.2 |
| French | 10.5 | 10.2 | 6.1 |
| East Slavic | 10.4 | 9.6 | 6.5 |
| Italian | 9.6 | 8.5 | 5.9 |
| Polish | 9.3 | 6.5 | 6.0 |
| Indian | 9.0 | 8.9 | 5.3 |
| Turkish | 8.1 | 7.1 | 6.5 |
| German | 7.8 | 6.3 | 4.9 |
Figure 2 shows the two kinds of hard accent. The Thai, Vietnamese, Japanese and Chinese rows stay dark even at high fluency, where the other groups are light. The Brazilian Portuguese and Arabic rows are dark at low fluency and fade to the level of most other groups when fluent. Each cell holds 24 to 30 minutes of speech, so small differences between cells are noise.
4Limitations
- One setting: learners talking to an AI tutor on a phone, in English only.
- Broad accent groups such as Arabic and East Slavic span many countries.
- Two annotation studios transcribed every clip independently. Our in-house team of over 30 trained phonologists resolved every disagreement span by span against the audio. One studio worked from ElevenLabs Scribe v2 drafts, which favors Scribe. A blind re-transcription by our linguists measures the bias at 0.33 points for Scribe v2 Realtime (95% CI −0.11 to 0.77) and 1.47 points for Scribe v2 offline (95% CI 0.99–1.97). In real time the bias is within noise, so Scribe v2 Realtime and MAI-Transcribe-2 stay tied for first.
- Latency was measured from three cloud machines in the United States, a central one for 15 systems, a western one for 5 and a third for Nari Qwen3-ASR 1.7B Fast, each during one window. A control rerun of three earlier systems on 300 clips from the second machine matched their first runs within 0.1 WER points and 19 ms of median time to final. From the third machine it matched within 0.12 WER points, with median time to final 3 and 6 ms higher for Nova-3 and Scribe v2 Realtime and 47 ms lower for Universal-3.5 Pro. Other regions and loads will differ.
- Providers update models without notice.
5Conclusion
For most real-time systems, speed is not the problem. Accuracy is, and it is worst for beginners, the learners who need a tutor most. Test on speech like your users’.
To have your system evaluated, contact [email protected].
6License and access
Code. The inference code, with every model’s settings and the real-time protocol, is on GitHub under the MIT License.
Data. The audio and reference transcripts stay private. We publish aggregate results only.
Citation. To cite this report:
@misc{fluently2026asr,
title = {Benchmarking Real-Time Speech Recognition on Accented English},
author = {{Fluently}},
year = {2026},
url = {https://getfluently.app/research/asr}
}7References
- [1]Speech to Text Benchmarking Methodology. Artificial Analysis.
- [2]AA-WER Streaming: New Speech to Text Streaming Benchmark. Artificial Analysis.
- [3]Open ASR Leaderboard. Hugging Face.
- [4]kaldialign. GitHub.
- [5]Silero VAD. GitHub.
8Appendix
Inference config
| System | Mode | Finalize signal | Settings |
|---|---|---|---|
Azure Speechazure-stt | Real-time | PushAudioInputStream.commit() | language=en-US, profanity=Raw, Speech SDK 1.52 preview with setfeature=forcecommit |
Chirp 3chirp_3 | Real-time | None | language_code=en-US, interim_results=true, automatic punctuation off |
Fluxflux-general-en | Real-time | ForceEndTurn | English model, eot_threshold=1.0 so only ForceEndTurn or 5 s of silence ends a turn, numerals=false |
Gemini 3.5 Transcribe Livegemini-3.5-transcribe-live | Real-time | audioStreamEnd | languageCodes=en-US, mode=VERBATIM |
GPT Live Transcribegpt-live-transcribe | Real-time | input_audio_buffer.commit | 24 kHz audio, languages=en, turn detection off |
GPT Realtime Whispergpt-realtime-whisper | Real-time | input_audio_buffer.commit | 24 kHz audio, language=en, turn detection off, default delay level |
Grok Voice Transcribe 2.0grok-voice-transcribe-2.0 | Real-time | finalize | language=en, filler_words=true, format=false |
Ink-2ink-2 | Real-time | finalize | cartesia_version=2026-08-14, language detected by the model |
Linden 1linden-1 | Real-time | ForceEndOfUtterance | Agent STT endpoint, language=en, turn_detection_mode=external, remove_disfluencies=false |
MAI-Transcribe-2MAI-Transcribe-2-Streaming | Real-time | input_audio_buffer.commit | language=en, turn detection and noise reduction off |
Muse Voice Transcribe 1.0muse-voice-transcribe-1.0 | Real-time | endStream | 24 kHz audio, mode=PUSH_TO_TALK, languageBias=English, endStream also ends the audio |
Nari Qwen3-ASR 1.7B Fastqwen3-asr-fast | Real-time | input_audio_buffer.commit | hosted by Nari Labs, based on Qwen3-ASR 1.7B, Fast tier, language=en, turn detection off |
Nemotron 3 ASR Streaming 0.6Bnvidia/nemotron-3-asr-streaming-0.6b | Real-time | input_audio_buffer.commit | language=en, turn_detection=none, served by Together AI |
Nova-3nova-3 | Real-time | Finalize | language=en, filler_words=true, punctuate=false, smart_format=false, numerals=false |
Pulsepulse | Real-time | finalize | language=en, format=false, itn_normalize=false |
Resonant-1resonant-1 | Real-time | flush_request | language=en, filler_mode=verbatim |
Scribe v2 Realtimescribe_v2_realtime | Real-time | commit: true | language_code=en, commit_strategy=manual, no_verbatim=false |
Soniox v5stt-rt-v5 | Real-time | finalize | language_hints=en (strict), enable_endpoint_detection=false |
Universal-3.5 Prouniversal-3-5-pro | Real-time | ForceEndpoint | mode=max_accuracy, language_codes=en, always formatted, no verbatim option |
Universal-3.6 Prouniversal-3-6-pro | Real-time | ForceEndpoint | mode=max_accuracy, language_codes=en, always formatted, no verbatim option |
Voxtral Mini Transcribe Realtimevoxtral-mini-transcribe-realtime-2602 | Real-time | input_audio.flush | server defaults, no language or verbatim option |
Chirp 3chirp_3 | File API | — | language_code=en-US, automatic punctuation off |
Gemini 3.5 Transcribegemini-3.5-transcribe | File API | — | languageCodes=en-US, mode=VERBATIM |
GPT Transcribegpt-transcribe | File API | — | language=en |
Grok Voice Transcribe 2.0grok-voice-transcribe-2.0 | File API | — | language=en, filler_words=true, format=false |
Ink Whisperink-whisper | File API | — | language=en |
MAI-Transcribe-2MAI-Transcribe-2 | File API | — | locales=en, enhanced mode, transcribeStyle=verbatim |
Muse Voice Transcribe 1.0muse-voice-transcribe-1.0 | File API | — | 24 kHz audio, mode=PUSH_TO_TALK, languageBias=English |
Nova-3nova-3 | File API | — | language=en, filler_words=true, punctuate=false, smart_format=false, numerals=false |
Parakeet TDT 0.6B v3nvidia/parakeet-tdt-0.6b-v3 | Local | — | float32, greedy decoding |
Pulse Propulse-pro | File API | — | 16 kHz audio, language=en |
Qwen3 ASR 1.7BQwen/Qwen3-ASR-1.7B-hf | Local | — | language=English, bfloat16, greedy decoding |
Resonant-1resonant-1 | File API | — | language=en, filler_mode=verbatim |
Scribe v2scribe_v2 | File API | — | language_code=en, no_verbatim=false, tag_audio_events=true |
Soniox v5stt-async-v5 | File API | — | language_hints=en (strict) |
Universal-3.5 Prouniversal-3-5-pro | File API | — | language_code=en, disfluencies=true, punctuate=false, format_text=false |
Voxtral Mini Transcribe 2voxtral-mini-2602 | File API | — | language=en, temperature=0 |
Real-time protocol
The protocol is adapted from Artificial Analysis’s AA-WER Streaming.
- Audio. 16-bit PCM at 16 kHz, or 24 kHz where the API requires it, sent in 100 ms chunks at real-time speed.
- End of speech. Silero VAD marks it, and the client sends the API’s finalize signal (Table A1). Chirp 3 has no finalize signal, so we wait for its own final. Audio keeps flowing, the rest of the clip and then silence.
- Scored text. Every final segment up to and including the first final after the end of speech. We wait at least 15 s for it, and finals in a 5 s drain after the stream closes still count.
- Time to final. Runs from the moment the audio through the end of speech and the finalize signal have been sent to that first final, as in AA-WER Streaming, and is reported as mean, p50 and p95.
- Re-runs. Streams that failed or returned no final were re-run, up to 3 attempts. Empty finals were kept, not re-run.
- Conditions. Of the 21 systems, 15 streamed at once from a cloud machine in the central United States during one 3.5-hour window on October 13, 2026, with 8 to 48 concurrent sessions per provider. Another 5 streamed on October 16 from a second machine in the western United States, and Nari Qwen3-ASR 1.7B Fast on October 19 and 20 from a third machine in the United States, with 10 concurrent sessions. A control rerun of three earlier systems on 300 clips from the second machine matched their first runs within 0.1 WER points and 19 ms of median time to final. From the third machine it matched within 0.12 WER points, with median time to final 3 and 6 ms higher for Nova-3 and Scribe v2 Realtime and 47 ms lower for Universal-3.5 Pro.
Four differences from the Artificial Analysis methodology (AA):
- Chunks. 100 ms for every provider. AA uses 20 ms or the provider’s recommendation.
- Wait for a final. We wait at least 15 s for a final and never score partial text. AA falls back to the partial text when no final arrives within 2 s.
- Endpointing. Several systems keep their provider’s default endpointing (Table A1), so 10 systems send some finals before our endpoint. AA configures providers so that only its forced endpoint produces a final.
- Scoring. Pooled WER over reference words with each clip’s errors capped at its reference length and the Open ASR Leaderboard normalizer, offline too. AA weights WER by audio duration and uses an extended Whisper normalizer.
Quirks:
- Pulse. Its reply to the finalize signal omits the last word, which arrives about 0.2 s later in a final we do not score.
- Voxtral Realtime. Returns empty text on 86 clips.
- Resonant-1. Returns empty text on 12 short clips.
Normalization details
| # | Step | Example |
|---|---|---|
| 1 | Lowercase | Okay → okay |
| 2 | Drop text in brackets or parentheses | [noise] yes → yes |
| 3 | Drop fillers | um I think → i think |
| 4 | Expand contractions and titles | won't → will not |
| 5 | Drop punctuation, symbols and accents | well, yes. → well yes |
| 6 | Join listed compounds | wi fi → wifi |
| 7 | Write numbers as digits | twenty five → 25 |
| 8 | Use American spelling | colour → color |
| 9 | Standardize names and acronyms | b b c → bbc |
| 10 | Align with kaldialign 0.12, where a compound split in one text matches it joined in the other | white paper = whitepaper |
| 11 | Cap each clip’s errors (substitutions + deletions + insertions) at its reference length | 40 errors in 10 words → 10 |
| 12 | Sum the capped errors over all clips of a slice and divide by their reference words | 3 errors in 60 words → 5% |
Changelog
October 20, 2026. First version, with 21 real-time and 16 offline systems.
Transcription accuracy
Word error rate (WER, %), overall and by accent group or fluency level. Lower is better. Click a column to sort.
| 1 | 1 | 5.41 | 6.6 | 5.4 | 5.8 | 4.9 | 5.1 | 3.3 | 5.4 | 4.5 | 6.4 | 4.6 | 4.2 | 5.1 | 4.9 | 6.8 | 4.3 | 9.3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 2 | 5.56 | 5.9 | 6.0 | 6.4 | 5.7 | 5.1 | 3.7 | 4.8 | 4.6 | 7.1 | 5.4 | 4.0 | 4.7 | 5.6 | 7.3 | 4.2 | 9.1 |
| 3 | 3 | 6.84 | 7.4 | 7.0 | 7.1 | 7.4 | 6.5 | 4.7 | 6.2 | 6.1 | 8.0 | 6.3 | 5.2 | 5.4 | 6.9 | 8.7 | 5.7 | 11.1 |
| 4 | 4 | 7.48 | 7.5 | 8.5 | 8.2 | 6.9 | 7.1 | 4.7 | 6.2 | 6.3 | 9.3 | 7.4 | 5.9 | 6.8 | 6.6 | 10.8 | 5.9 | 11.7 |
| 5 | 5 | 7.59 | 7.7 | 8.4 | 8.0 | 7.1 | 7.2 | 5.7 | 6.5 | 6.8 | 9.2 | 6.9 | 6.3 | 7.3 | 7.4 | 10.3 | 6.2 | 10.8 |
| 6 | 6 | 7.62 | 9.2 | 8.0 | 8.9 | 7.1 | 7.5 | 4.7 | 6.8 | 6.1 | 9.5 | 7.0 | 5.8 | 6.7 | 6.9 | 10.7 | 5.9 | 11.4 |
| 7 | 7 | 7.79 | 8.7 | 8.8 | 9.6 | 7.4 | 8.0 | 5.2 | 6.1 | 6.7 | 9.6 | 7.1 | 6.6 | 6.7 | 7.2 | 9.9 | 6.3 | 11.1 |
| 8 | 8 | 8.09 | 8.1 | 8.5 | 10.2 | 6.9 | 8.1 | 6.2 | 6.3 | 7.4 | 9.7 | 7.3 | 6.7 | 7.5 | 8.1 | 10.8 | 6.1 | 11.7 |
| 9 | 9 | 8.20 | 8.1 | 8.7 | 10.2 | 6.7 | 8.3 | 6.1 | 6.5 | 7.2 | 10.0 | 8.0 | 6.5 | 7.1 | 8.0 | 11.5 | 6.6 | 12.1 |
| 10 | 10 | 8.58 | 9.5 | 8.9 | 10.4 | 7.9 | 8.4 | 5.5 | 7.0 | 7.8 | 10.5 | 8.4 | 6.9 | 7.9 | 8.8 | 11.6 | 7.0 | 11.3 |
| 11 | 11 | 8.64 | 8.7 | 9.0 | 9.9 | 9.1 | 8.1 | 5.7 | 7.1 | 7.3 | 10.1 | 7.8 | 6.6 | 7.6 | 8.3 | 12.4 | 6.9 | 14.2 |
| 12 | 12 | 9.16 | 9.9 | 9.9 | 10.6 | 8.7 | 9.4 | 6.5 | 7.4 | 8.0 | 11.1 | 8.3 | 7.6 | 8.3 | 9.0 | 12.1 | 7.4 | 12.8 |
| 13 | 13 | 9.71 | 10.2 | 10.8 | 11.7 | 8.7 | 10.2 | 6.4 | 8.1 | 8.3 | 11.8 | 9.0 | 8.0 | 8.5 | 9.3 | 13.2 | 6.9 | 14.6 |
| 14 | 14 | 9.94 | 10.2 | 10.2 | 11.4 | 9.1 | 9.7 | 6.3 | 9.2 | 8.1 | 11.4 | 8.7 | 7.9 | 10.2 | 10.2 | 14.0 | 8.2 | 14.5 |
| 15 | 15 | 10.26 | 10.6 | 10.4 | 10.8 | 10.0 | 10.7 | 7.5 | 7.8 | 8.4 | 12.5 | 10.2 | 8.1 | 9.9 | 9.7 | 14.6 | 8.3 | 15.2 |
| 16 | 16 | 10.48 | 11.2 | 11.1 | 11.1 | 10.2 | 10.3 | 6.8 | 9.4 | 9.0 | 12.1 | 9.8 | 9.1 | 9.3 | 9.8 | 15.1 | 8.1 | 15.6 |
| 17 | 17 | 10.84 | 11.8 | 10.7 | 11.6 | 11.1 | 10.9 | 6.9 | 10.5 | 9.7 | 12.4 | 10.0 | 8.3 | 10.2 | 9.9 | 15.3 | 8.1 | 16.4 |
| 18 | 18 | 10.91 | 11.3 | 10.5 | 11.9 | 10.3 | 10.5 | 7.4 | 11.3 | 9.1 | 12.9 | 10.0 | 8.8 | 10.1 | 10.8 | 14.7 | 9.1 | 16.0 |
| 19 | 19 | 13.78 | 14.8 | 14.7 | 16.6 | 12.4 | 14.0 | 9.3 | 12.3 | 12.4 | 16.0 | 13.3 | 10.9 | 12.9 | 13.0 | 17.7 | 10.9 | 20.0 |
| 20 | 20 | 15.75 | 15.3 | 17.1 | 18.3 | 15.0 | 15.4 | 11.3 | 12.8 | 13.3 | 19.0 | 16.0 | 12.8 | 15.2 | 15.1 | 21.1 | 12.6 | 22.6 |
| 21 | 21 | 18.81 | 18.9 | 17.9 | 20.2 | 17.0 | 17.9 | 14.5 | 17.5 | 18.0 | 21.0 | 17.9 | 15.8 | 19.8 | 19.0 | 24.2 | 14.8 | 26.9 |
AR Arabic · BR Brazilian Portuguese · ZH Chinese · SLAV East Slavic · FR French · DE German · IN Indian · IT Italian · JA Japanese · KO Korean · PL Polish · ES Spanish (Spain) · LATAM Spanish (Latin America) · TH Thai · TR Turkish · VI Vietnamese
* Part of the reference started from ElevenLabs drafts, which favors Scribe v2 Realtime by 0.33 points (95% CI −0.11 to 0.77, measured with a blind re-transcription by our linguists).
Latency
Time to final text, from the moment the audio through the end of speech and the finalize signal have been sent. Lower is better.
Real-time WER
Median time to final text
| 1 | 1 | 0.07 s | 0.06 s | 0.11 s |
|---|---|---|---|---|
| 1 | 1 | 0.06 s | 0.06 s | 0.10 s |
| 1 | 1 | 0.07 s | 0.06 s | 0.16 s |
| 4 | 4 | 0.07 s | 0.07 s | 0.08 s |
| 5 | 5 | 0.12 s | 0.08 s | 0.26 s |
| 6 | 6 | 0.13 s | 0.11 s | 0.24 s |
| 6 | 6 | 0.14 s | 0.11 s | 0.20 s |
| 8 | 8 | 0.13 s | 0.13 s | 0.16 s |
| 8 | 8 | 0.13 s | 0.13 s | 0.18 s |
| 10 | 10 | 0.15 s | 0.14 s | 0.21 s |
| 11 | 11 | 0.16 s | 0.15 s | 0.27 s |
| 12 | 12 | 0.18 s | 0.16 s | 0.34 s |
| 13 | 13 | 0.22 s | 0.20 s | 0.38 s |
| 13 | 13 | 0.24 s | 0.20 s | 0.45 s |
| 15 | 15 | 0.25 s | 0.24 s | 0.30 s |
| 16 | 16 | 0.26 s | 0.25 s | 0.39 s |
| 17 | 17 | 0.36 s | 0.35 s | 0.48 s |
| 18 | 18 | 0.42 s | 0.39 s | 0.55 s |
| 19 | 19 | 0.54 s | 0.54 s | 0.69 s |
| 20 | 20 | 0.60 s | 0.59 s | 0.74 s |
| 21 | 21 | 1.70 s | 1.49 s | 2.96 s |
Chirp 3 has no finalize signal, so we wait for its own final.
Contents
1Dataset construction
Overview
The benchmark holds 5,381 clips of English spoken by 2,042 learners, 22.2 hours of audio with 118,218 words in the reference transcripts. Every clip is a learner’s side of a real voice conversation with Fluently’s AI tutor. The clips span 16 accent groups and 3 fluency levels, and each of the 48 combinations holds a similar amount of speech. This section describes how the audio was selected and how the reference transcripts were made.
Audio collection
The audio comes from Fluently’s mobile app on iOS and Android, from users who opted in to data sharing. In each session a learner talks with the AI tutor, and we kept only the learner’s own audio channel, so no clip contains the tutor’s voice. The speech is unscripted. Learners answer the tutor in their own words, with the pauses, repetitions, false starts and self-corrections of someone speaking a language they are still learning.
A clip is one whole learner turn of about 3 to 30 seconds, with a median of 13.5 seconds. Whole turns keep each answer intact, as a tutor receives it, and each clip’s end was extended to the natural end of speech, located with Silero VAD. Before selection, recordings were screened for personal or sensitive information and, with an automatic check per speaker, for children’s voices. Recordings that failed either check were removed.
The accent group comes from the learner’s native language and country, not from listening. Broad groups such as Arabic, East Slavic and Latin American span several countries (Table 1). The fluency level is the learner’s usual speaking rate in Fluently, not a CEFR level: low under 70, medium 70 to under 90, high 90+ words/min (Table 2). Each of the 48 accent and fluency cells holds 24 to 30 minutes of speech, balanced by gender and platform. No speaker contributes more than 60 seconds, so no single voice dominates a cell.
| Accent group | AR | BR | ZH | SLAV | FR | DE | IN | IT | JA | KO | PL | ES | LATAM | TH | TR | VI | All |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Clips | 337 | 323 | 339 | 345 | 372 | 320 | 338 | 354 | 332 | 310 | 348 | 348 | 294 | 348 | 313 | 360 | 5,381 |
| Speakers | 129 | 126 | 120 | 117 | 143 | 126 | 127 | 131 | 123 | 134 | 123 | 131 | 117 | 126 | 129 | 140 | 2,042 |
| Hours | 1.3 | 1.3 | 1.5 | 1.4 | 1.4 | 1.4 | 1.3 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 | 22.2 |
| Fluency level | Low | Medium | High |
|---|---|---|---|
| Speaking rate | under 70 words/min | 70 to under 90 words/min | 90+ words/min |
| Clips | 1,784 | 1,873 | 1,724 |
| Speakers | 713 | 675 | 654 |
| Hours | 7.1 | 7.5 | 7.6 |
Reference annotation
The references are verbatim. A tutor has to respond to what the learner actually said, so the guideline keeps grammar errors, repetitions, false starts, cut-off words and fillers, and never corrects the learner’s English. It writes numbers as words and marks unclear or foreign speech with tags.
Two annotation studios transcribed every clip independently. Our in-house team of over 30 trained phonologists resolved every disagreement span by span against the audio. Both studios followed this guideline, and clips where their transcripts agree after normalization keep the agreed text.
One studio worked from ElevenLabs Scribe v2 drafts, which favors Scribe. A blind re-transcription by our linguists measures the bias at 0.33 points for Scribe v2 Realtime (95% CI −0.11 to 0.77) and 1.47 points for Scribe v2 offline (95% CI 0.99–1.97). In real time the bias is within noise, so Scribe v2 Realtime and MAI-Transcribe-2 stay tied for first. The Scribe v2 rows carry *. The audio and the reference transcripts stay private, and this page publishes aggregate results only.
2Evaluation methodology
Systems and setup
We evaluated 21 real-time systems from 16 providers, each through its streaming API. To measure what streaming costs, the same clips also went to 16 offline systems from 15 providers, 14 file APIs and 2 models that we ran ourselves. The Offline mode of the leaderboard shows them. For 11 real-time systems an offline system in the set runs the same model, so the gap between the two is the cost of streaming.
Every system received the audio alone, without conversation context. File APIs received the original recordings, 48 kHz mono, with two exceptions. Pulse Pro received 16 kHz, as its provider’s documentation asks, and Muse 24 kHz, the highest rate its API accepts. We set the language to English wherever the API accepts one and requested verbatim output wherever it offers that option, and otherwise kept each provider’s defaults. Table A1 lists every model with its settings and finalize signal.
Real-time protocol
The protocol is adapted from Artificial Analysis’s AA-WER Streaming. Each clip is streamed at real-time pace as 16-bit PCM in 100 ms chunks, at 16 kHz or at 24 kHz where the API requires it, so network delay is part of every measurement. Silero VAD marks the end of speech in each clip. Once the audio up to that point has been sent, the client sends the API’s finalize signal. Chirp 3 has no finalize signal, so we wait for its own final. The audio keeps flowing after the signal, first the rest of the clip and then silence, as it would from an open microphone.
We then wait at least 15 seconds for the first final transcript after the end of speech, and finals that arrive in a 5-second drain after the stream closes still count. The scored text is every final segment up to and including that first final. Several systems keep their provider’s default endpointing (Table A1), so 10 systems send some finals before our endpoint, and those count too. A stream that failed or ended without any final was streamed again, up to three attempts. An empty final that a model did return was kept and scored as an empty output.
Time to final runs from the moment the audio through the end of speech and the finalize signal have been sent to that first final, network time included, as in AA-WER Streaming. We report its mean, median (p50) and 95th percentile (p95). The median describes a typical turn and p95 the slow turn a user meets about once in twenty. We stop at p95 because the tail beyond it rests on few streams and depends mostly on provider load at the moment of the run.
Of the 21 systems, 15 streamed at once from a cloud machine in the central United States during one 3.5-hour window on October 13, 2026, with 8 to 48 concurrent sessions per provider, so they faced the same network and the same time of day. Another 5 streamed on October 16 from a second machine in the western United States, and Nari Qwen3-ASR 1.7B Fast on October 19 and 20 from a third machine in the United States. A control rerun of three earlier systems on 300 clips from the second machine matched their first runs within 0.1 WER points and 19 ms of median time to final. From the third machine it matched within 0.12 WER points, with median time to final 3 and 6 ms higher for Nova-3 and Scribe v2 Realtime and 47 ms lower for Universal-3.5 Pro. Latency from other regions and under other loads will differ. The appendix gives the full protocol and its four differences from the Artificial Analysis methodology.
Scoring
Reference and system output pass through the same English normalizer, the one of the Hugging Face Open ASR Leaderboard at a pinned commit (Table A2). It lowercases, drops punctuation, bracketed tags and fillers, expands contractions, writes numbers as digits and uses American spelling. A system is therefore not penalized for formatting, for writing “25” where the reference says “twenty five”, or for leaving out “um”. Repetitions and false starts stay in both texts, so a system that cleans them up is charged with deletions.
The two texts are then aligned word by word with kaldialign 0.12, where a compound split in one text matches it joined in the other. WER is pooled: substitutions, deletions and insertions summed over all clips of a slice, divided by the reference words of those clips. We never average per-clip rates, which would let one error in a short clip outweigh several in a long turn.
A provider error, timeout or empty transcript counts as an empty output, so every word of its reference is a deletion. Every system is thus measured on the same 5,381 clips and 118,218 reference words.
We report WER with each clip’s errors capped at its reference length, so a runaway output counts as fully wrong but cannot outweigh other clips. Offline systems produced 9 outputs with runaway repetitions, and real-time systems produced none. They start on ordinary disfluent speech, such as a repeated or stuttered word, and the other systems transcribe those clips normally. The leaderboard shows the plain pooled WER on hover.
Ranking
Systems are ranked by WER, real-time and offline systems separately, and exact ties share a rank, as in 1, 2, 2, 4. Gaps of about 0.2 points are within sampling noise (paired speaker bootstrap). Scribe v2 Realtime and MAI-Transcribe-2 are tied for first, and Ink-2, Muse, Grok and Gemini 3.5 Live (ranks 4 to 7) are each tied with their neighbors.
Because every accent and fluency cell holds a similar amount of speech, no accent group dominates the overall WER, and neither does the mix of Fluently’s users. Pooling weighs every reference word equally, though, and slower speech holds fewer words per minute. Low-fluency learners supply 24% of the reference words and high-fluency learners 43%, although each level holds about a third of the audio.
The accent filter re-pools the data rather than averaging it. Selecting accent groups sums the errors and reference words of those groups alone, recomputes each system’s WER and ranks the systems again. The Low fluency by accent view does the same for low-fluency learners only. A system that ranks high overall can fall behind on a particular group, and the filter shows where. Accent filters shrink the sample, so ranks move more under them and small moves are noise.
3References
- [1]Speech to Text Benchmarking Methodology. Artificial Analysis.
- [2]AA-WER Streaming: New Speech to Text Streaming Benchmark. Artificial Analysis.
- [3]Open ASR Leaderboard. Hugging Face.
- [4]kaldialign. GitHub.
- [5]Silero VAD. GitHub.
4Appendix
Inference config
| System | Mode | Finalize signal | Settings |
|---|---|---|---|
Azure Speechazure-stt | Real-time | PushAudioInputStream.commit() | language=en-US, profanity=Raw, Speech SDK 1.52 preview with setfeature=forcecommit |
Chirp 3chirp_3 | Real-time | None | language_code=en-US, interim_results=true, automatic punctuation off |
Fluxflux-general-en | Real-time | ForceEndTurn | English model, eot_threshold=1.0 so only ForceEndTurn or 5 s of silence ends a turn, numerals=false |
Gemini 3.5 Transcribe Livegemini-3.5-transcribe-live | Real-time | audioStreamEnd | languageCodes=en-US, mode=VERBATIM |
GPT Live Transcribegpt-live-transcribe | Real-time | input_audio_buffer.commit | 24 kHz audio, languages=en, turn detection off |
GPT Realtime Whispergpt-realtime-whisper | Real-time | input_audio_buffer.commit | 24 kHz audio, language=en, turn detection off, default delay level |
Grok Voice Transcribe 2.0grok-voice-transcribe-2.0 | Real-time | finalize | language=en, filler_words=true, format=false |
Ink-2ink-2 | Real-time | finalize | cartesia_version=2026-08-14, language detected by the model |
Linden 1linden-1 | Real-time | ForceEndOfUtterance | Agent STT endpoint, language=en, turn_detection_mode=external, remove_disfluencies=false |
MAI-Transcribe-2MAI-Transcribe-2-Streaming | Real-time | input_audio_buffer.commit | language=en, turn detection and noise reduction off |
Muse Voice Transcribe 1.0muse-voice-transcribe-1.0 | Real-time | endStream | 24 kHz audio, mode=PUSH_TO_TALK, languageBias=English, endStream also ends the audio |
Nari Qwen3-ASR 1.7B Fastqwen3-asr-fast | Real-time | input_audio_buffer.commit | hosted by Nari Labs, based on Qwen3-ASR 1.7B, Fast tier, language=en, turn detection off |
Nemotron 3 ASR Streaming 0.6Bnvidia/nemotron-3-asr-streaming-0.6b | Real-time | input_audio_buffer.commit | language=en, turn_detection=none, served by Together AI |
Nova-3nova-3 | Real-time | Finalize | language=en, filler_words=true, punctuate=false, smart_format=false, numerals=false |
Pulsepulse | Real-time | finalize | language=en, format=false, itn_normalize=false |
Resonant-1resonant-1 | Real-time | flush_request | language=en, filler_mode=verbatim |
Scribe v2 Realtimescribe_v2_realtime | Real-time | commit: true | language_code=en, commit_strategy=manual, no_verbatim=false |
Soniox v5stt-rt-v5 | Real-time | finalize | language_hints=en (strict), enable_endpoint_detection=false |
Universal-3.5 Prouniversal-3-5-pro | Real-time | ForceEndpoint | mode=max_accuracy, language_codes=en, always formatted, no verbatim option |
Universal-3.6 Prouniversal-3-6-pro | Real-time | ForceEndpoint | mode=max_accuracy, language_codes=en, always formatted, no verbatim option |
Voxtral Mini Transcribe Realtimevoxtral-mini-transcribe-realtime-2602 | Real-time | input_audio.flush | server defaults, no language or verbatim option |
Chirp 3chirp_3 | File API | — | language_code=en-US, automatic punctuation off |
Gemini 3.5 Transcribegemini-3.5-transcribe | File API | — | languageCodes=en-US, mode=VERBATIM |
GPT Transcribegpt-transcribe | File API | — | language=en |
Grok Voice Transcribe 2.0grok-voice-transcribe-2.0 | File API | — | language=en, filler_words=true, format=false |
Ink Whisperink-whisper | File API | — | language=en |
MAI-Transcribe-2MAI-Transcribe-2 | File API | — | locales=en, enhanced mode, transcribeStyle=verbatim |
Muse Voice Transcribe 1.0muse-voice-transcribe-1.0 | File API | — | 24 kHz audio, mode=PUSH_TO_TALK, languageBias=English |
Nova-3nova-3 | File API | — | language=en, filler_words=true, punctuate=false, smart_format=false, numerals=false |
Parakeet TDT 0.6B v3nvidia/parakeet-tdt-0.6b-v3 | Local | — | float32, greedy decoding |
Pulse Propulse-pro | File API | — | 16 kHz audio, language=en |
Qwen3 ASR 1.7BQwen/Qwen3-ASR-1.7B-hf | Local | — | language=English, bfloat16, greedy decoding |
Resonant-1resonant-1 | File API | — | language=en, filler_mode=verbatim |
Scribe v2scribe_v2 | File API | — | language_code=en, no_verbatim=false, tag_audio_events=true |
Soniox v5stt-async-v5 | File API | — | language_hints=en (strict) |
Universal-3.5 Prouniversal-3-5-pro | File API | — | language_code=en, disfluencies=true, punctuate=false, format_text=false |
Voxtral Mini Transcribe 2voxtral-mini-2602 | File API | — | language=en, temperature=0 |
Real-time protocol
The protocol is adapted from Artificial Analysis’s AA-WER Streaming.
- Audio. 16-bit PCM at 16 kHz, or 24 kHz where the API requires it, sent in 100 ms chunks at real-time speed.
- End of speech. Silero VAD marks it, and the client sends the API’s finalize signal (Table A1). Chirp 3 has no finalize signal, so we wait for its own final. Audio keeps flowing, the rest of the clip and then silence.
- Scored text. Every final segment up to and including the first final after the end of speech. We wait at least 15 s for it, and finals in a 5 s drain after the stream closes still count.
- Time to final. Runs from the moment the audio through the end of speech and the finalize signal have been sent to that first final, as in AA-WER Streaming, and is reported as mean, p50 and p95.
- Re-runs. Streams that failed or returned no final were re-run, up to 3 attempts. Empty finals were kept, not re-run.
- Conditions. Of the 21 systems, 15 streamed at once from a cloud machine in the central United States during one 3.5-hour window on October 13, 2026, with 8 to 48 concurrent sessions per provider. Another 5 streamed on October 16 from a second machine in the western United States, and Nari Qwen3-ASR 1.7B Fast on October 19 and 20 from a third machine in the United States, with 10 concurrent sessions. A control rerun of three earlier systems on 300 clips from the second machine matched their first runs within 0.1 WER points and 19 ms of median time to final. From the third machine it matched within 0.12 WER points, with median time to final 3 and 6 ms higher for Nova-3 and Scribe v2 Realtime and 47 ms lower for Universal-3.5 Pro.
Four differences from the Artificial Analysis methodology (AA):
- Chunks. 100 ms for every provider. AA uses 20 ms or the provider’s recommendation.
- Wait for a final. We wait at least 15 s for a final and never score partial text. AA falls back to the partial text when no final arrives within 2 s.
- Endpointing. Several systems keep their provider’s default endpointing (Table A1), so 10 systems send some finals before our endpoint. AA configures providers so that only its forced endpoint produces a final.
- Scoring. Pooled WER over reference words with each clip’s errors capped at its reference length and the Open ASR Leaderboard normalizer, offline too. AA weights WER by audio duration and uses an extended Whisper normalizer.
Quirks:
- Pulse. Its reply to the finalize signal omits the last word, which arrives about 0.2 s later in a final we do not score.
- Voxtral Realtime. Returns empty text on 86 clips.
- Resonant-1. Returns empty text on 12 short clips.
Normalization details
| # | Step | Example |
|---|---|---|
| 1 | Lowercase | Okay → okay |
| 2 | Drop text in brackets or parentheses | [noise] yes → yes |
| 3 | Drop fillers | um I think → i think |
| 4 | Expand contractions and titles | won't → will not |
| 5 | Drop punctuation, symbols and accents | well, yes. → well yes |
| 6 | Join listed compounds | wi fi → wifi |
| 7 | Write numbers as digits | twenty five → 25 |
| 8 | Use American spelling | colour → color |
| 9 | Standardize names and acronyms | b b c → bbc |
| 10 | Align with kaldialign 0.12, where a compound split in one text matches it joined in the other | white paper = whitepaper |
| 11 | Cap each clip’s errors (substitutions + deletions + insertions) at its reference length | 40 errors in 10 words → 10 |
| 12 | Sum the capped errors over all clips of a slice and divide by their reference words | 3 errors in 60 words → 5% |
Changelog
October 20, 2026. First version, with 21 real-time and 16 offline systems.