Converse-STT Technical Report
Benchmarking speech-to-text on real two-person American English conversation, with the open-source ocular-evals harness.
The benchmark
Converse-STT measures how accurately speech-to-text systems transcribe unscripted, two-person American English conversation when each speaker is recorded on their own microphone for a full 15-minute session. This report documents the benchmark end to end: how the recordings were collected and transcribed, how the audio reaches each model, how text is normalized, how word and character error rates are computed and pooled, what the 19 systems on the leaderboard scored, and what the errors actually are.
Public ASR leaderboards are dominated by short, single-speaker clips. Conversation is different: speakers overlap, backchannel (“yeah”, “right”, “mm-hmm”), restart words mid-syllable, and talk for a quarter of an hour without a break. Converse-STT Version 1, scored in September 2026 with Cekura[9], showed that twelve of fifteen models had a higher error rate on Ocular AI’s conversational recordings than on public short clips, and that the leading model changed with the dataset.
At a glance
Version 2 keeps the same four recordings and makes the evaluation reproducible by anyone. Every number on the board is produced by the open-source harness (MIT): the dataset manifest, the per-model inference configuration, the normalizer, the scorer and the report are all code, and every run directory keeps the raw transcripts and the normalized texts that produced its score. The design follows established conventions for conversational ASR evaluation: a separate channel per speaker, verbatim references[2], Whisper English normalization[1], and summed edit counts, so that a model’s number here can be read next to numbers from other public harnesses that use the same conventions. The implementation is independent and deliberately small: one Python package, one manifest format, one command per step.
Scoring convention
A word error rate is only comparable with another when the normalizer, the reference convention, the pooling rule and the audio each system received are the same. Every number on the leaderboard and in the findings uses the convention below. The sections after it are how the reference was built and how the percentage was computed.
One rule for every system
What the ranked number includes.
| Rule | This benchmark |
|---|---|
| Ranked score | Pooled word error rate after Whisper English normalization. Lower is better. CER is reported alongside. |
| Input | One speaker’s own track, the whole 15 minutes, with a language hint of en. No mixing, no diarization, no streaming requirement. |
| Reference | Verbatim: fillers, repetitions, false starts and fragments are kept; breaths, laughter and other events are tagged. |
| Normalization | The same function on both sides: markup stripped, Whisper’s English normalizer (removes um, uh, hmm, mm; expands contractions; numbers to digits), non-lexical tokens dropped. |
| Pooling | Counts summed across all eight tracks, then divided once. A run must have all eight tracks to be ranked. |
| Configuration | Vendor defaults, language=en, and the minimum settings needed to process long audio. Every parameter is recorded in run.json. |
| Also reported | Substitutions, deletions and insertions; per-conversation and per-track rates; median wall-clock latency per track (not ranked). |
Rates are never averaged. Edit counts are summed over the two tracks of a conversation and over the four conversations, and the headline WER is total errors divided by total reference words, so a long track weighs more and a catastrophic track contributes exactly its error count.
Dataset collection
The audio is the public four-conversation sample of Ocular AI’s American English Hi-Fi full-duplex collection, published on Hugging Face[3] under CC BY 4.0. The harness pins revision 29b74ad4.
Setting and prompting
Two participants hold a conversation on Ocular’s recording platform. Each participant is captured on a separate microphone into a separate file for the entire session, so there is no mixing and no voice-activity gating between speakers at the recording stage. Each session opens with a supplied discussion prompt that one participant reads or paraphrases (for example, “Consider the ethical and practical implications of using drones in everyday life…”). The prompt is part of the recording and of the reference; everything after it is unscripted.
Participants and sessions
Eight distinct speakers, all self-reporting American English as accent and English as native language; five female, three male; self-reported age bands 35–45 (one), 45–55 (three) and not reported (four). Demographics are self-reported and were not verified. The sessions were recorded on 12 and 15 August 2026 (UTC). Topics: drones and privacy; interpreting news sources; brand loyalty and customer engagement; fitness plans.
Synchronization
The two files of a session do not start at the same instant. Each filename carries the capture start in epoch milliseconds (<room_start_ms>-<speaker_id>-hifi-audio-<capture_start_ms>.flac); the later track in each session starts 1.298–2.125 s after the earlier one. The harness derives this offset from the filenames and shifts the later track’s word timestamps onto a shared conversation timeline.
Transcription protocol
According to the collection’s documentation, references were produced by an ASR-assisted first pass followed by human transcription correction, a second human review, and an Ocular audit. Word-level timestamps were produced afterwards by forced alignment of the reviewed text to the audio.
Transcript production
Audio specification
All eight files are mono 24-bit PCM FLAC at 48 kHz, delivered as recorded, with no resampling, trimming or loudness processing. The harness never alters the archived audio; conversions for upload are made from it per request and discarded afterwards.
Eight tracks
Close-talk, quiet-room audio.
| Track | Speaker | Duration | Size | RMS | Peak | Noise floor |
|---|---|---|---|---|---|---|
| 0fcd38f2 / ch1 | M | 904.3 s | 42.6 MB | −29.8 dBFS | −4.5 dBFS | digital silence (gated) |
| 0fcd38f2 / ch2 | F | 901.3 s | 67.8 MB | −29.7 dBFS | −3.1 dBFS | −92.5 dBFS |
| 2bb0cfe2 / ch1 | F, 45–55 | 905.1 s | 67.6 MB | −28.2 dBFS | 0.0 dBFS | −82.4 dBFS |
| 2bb0cfe2 / ch2 | M | 904.8 s | 30.1 MB | −29.5 dBFS | 0.0 dBFS | −78.7 dBFS |
| 86c27418 / ch1 | F, 45–55 | 904.9 s | 65.0 MB | −29.8 dBFS | −3.0 dBFS | −91.6 dBFS |
| 86c27418 / ch2 | F | 904.8 s | 64.7 MB | −27.9 dBFS | −0.1 dBFS | −89.8 dBFS |
| ea217639 / ch1 | F, 35–45 | 907.6 s | 47.8 MB | −27.6 dBFS | −2.5 dBFS | −85.8 dBFS |
| ea217639 / ch2 | M, 45–55 | 905.8 s | 68.6 MB | −29.2 dBFS | −3.7 dBFS | −69.5 dBFS |
Noise floor is the 5th percentile of 100 ms RMS windows. Track 0fcd38f2/ch1 has a floor of true digital zero, which indicates client-side gating or noise suppression on that participant’s input chain; when the gate is open, the partner’s voice is audible on the channel. This single track accounts for essentially all cross-talk insertions in the results.
Three observations matter for interpreting results. Recording levels are consistent (−28 to −30 dBFS RMS) and the floors are very low: this is close-talk, quiet-room audio, not telephone or far-field speech. Two tracks in conversation 2bb0cfe2 reach 0.0 dBFS, so some clipping on loud syllables is possible. And track 0fcd38f2/ch1 is gated, which makes it the one channel on which a second, quieter voice is intermittently present.
Transcripts and reference conventions
References are verbatim. They keep fillers, repetitions, false starts and word fragments, and annotate non-speech events with SGML-style tags. The references contain no digits at all; every number is spelled out as spoken. Contractions are written as spoken. The dataset card notes known imperfections: two segments without word arrays, one segment ending 69 ms after its track, and alignment that is less reliable for short fillers. None of these affect text scoring, which uses the full-track transcript, not the word arrays.
Reference conventions
What the reviewers wrote down.
| Convention | Example from the references | Count in the 8 tracks |
|---|---|---|
| Audible breath | <breath/> | 616 |
| Standalone laughter | <laugh/> | 108 |
| Laughter spanning speech | <laugh>…</laugh> | 7 pairs |
| Speech present, not transcribable | <spn/> | 20 |
| Unclear audio | <unclear/> | 4 |
| Throat clearing | <clear-throat/> | 7 |
| Word fragment / restart | “I- I’ll listen”, “Con- consider” | 202 |
| Immediate repetition | “the the”, “I I” (after normalization) | 220 |
| Trailing off | “…” | 86 |
| Backchannel spelled out | “Mm-hmm”, “Uh-huh” | 62, 3 |
| Fillers | “um”, “uh” | removed by the normalizer |
| Spelled letter sequences | “A-I”, “G-P-S”, “N-P-R” | 6 + 3 + 2 |
| Numbers | “twenty different cameras”, “a thousand dollars” | no digits in any reference |
| Contractions | “it’s” 116, “I’m” 80, “don’t” 74, “that’s” 63, “there’s” 43 … | ≈ 700 |
Conversational phenomena
The references preserve the behaviour that makes conversation hard. Raw excerpts, markup left in:
Fillers, backchannels, and a self-interruption · 0fcd38f2/ch2, F
Um, I think the most beneficial it could be is for deliveries, absolutely. Getting my stuff quicker. Love it. Um,
<laugh/>other than that, as far as, like, surveillance,<breath/>uh,<spn/>I’m thinking specifically with a lady brain that, no.<breath/>there’s too many creeps already.<laugh/>
Restarts and fragments · 2bb0cfe2/ch2, M
So the strategy I use is I got these, uh,
<breath/>noise-canceling headphones, right? And I put them on, and I- I’ll listen to, like, the Rocky soundtrack,<breath/>and I’ll just, um, I’ll walk down the street, and I’ll go to- um, I’ll go to, like, this auto body shop…
A prompt read aloud, then spontaneous speech · ea217639/ch1, F
Consider a business that wants to enhance its brand loyalty
<breath/>. What strategies would you suggest to deep-in customer engagement<breath/>and foster long-term relationships? Mm-hmm. Yes<laugh/>.<breath/>You know, I think you covered some great ones already, like the Cracker Jack box…
Numbers are written as spoken throughout: “on twenty different cameras”, “three hundred and sixty”, “a check for a thousand dollars”, “a solid block of thirty, sixty minutes”, “five thousand dollars or … a fifty doll-”.
Dataset statistics
Speech time below is computed from the word-level timestamps after merging same-speaker words separated by at most 200 ms, the pause-merging threshold used in multi-speaker ASR corpora such as CHiME-6[2]. Overlap is the time both speakers are active, as a share of total speech time. Turns are same-speaker stretches separated by more than one second of that speaker’s silence.
The English sample
Four conversations on one clock.
| Conversation | Topic | ch1 | ch2 | Timeline | Ref words (ch1 + ch2) | Speech (ch1 / ch2) | Overlap | Silence | Turns |
|---|---|---|---|---|---|---|---|---|---|
| 0fcd38f2 | Drones, privacy | M | F | 904 s | 1,257 + 1,806 = 3,063 | 331 s / 569 s | 115 s (12.8%) | 120 s (13%) | 69 / 42 |
| 2bb0cfe2 | News sources | F 45–55 | M | 906 s | 1,458 + 1,841 = 3,299 | 483 s / 512 s | 193 s (19.4%) | 104 s (11%) | 59 / 61 |
| 86c27418 | Fitness plans | F 45–55 | F | 906 s | 1,655 + 1,547 = 3,202 | 480 s / 443 s | 131 s (14.2%) | 114 s (13%) | 35 / 67 |
| ea217639 | Brand loyalty | F 35–45 | M 45–55 | 908 s | 1,447 + 1,544 = 2,991 | 509 s / 472 s | 147 s (14.9%) | 74 s (8%) | 25 / 40 |
| Total | 3,624 s | 12,555 | 3,798 s | 585 s (15.4%) | 412 s (11%) | 398 |
Published two-speaker conversational corpora typically report overlap in the 3–15% range of speech time; Converse-STT sits at the high end of that range in every conversation, and conversation 2bb0cfe2 (19.4%) is above it.
Lexically the corpus is small-vocabulary spontaneous speech: 1,551 distinct normalized word types over 12,555 tokens. The most frequent content is conversational scaffolding: “like” is the third most frequent word (383 tokens, 3.1% of the corpus), “know” 303 (almost all in “you know”), “yeah” 186, “just” 125, “right” 119. A system that cleans disfluencies or drops backchannels is penalized in proportion, which is intended: the benchmark asks for what was said.
From the published files to a manifest
ocular-evals dataset pull downloads train/metadata.jsonl and the eight FLACs from the pinned revision and writes data/converse-en-sample/manifest.json, the only dataset artefact the rest of the harness reads. For each session it groups the two rows by session_id; parses the capture start from each filename, orders tracks by capture time (then speaker_id), names them ch1 and ch2, and records offset_s (0.000 / 2.125, 0.000 / 1.321, 0.000 / 1.298, 0.000 / 2.109 s); copies each FLAC byte-for-byte and records its SHA-256, duration and sample rate; stores the full transcript string as the reference, and the word entries with start and end shifted by offset_s; and keeps the self-reported metadata fields.
The manifest records the Hugging Face repo, revision and the SHA-256 of metadata.jsonl. The dataset’s identity for the rest of the pipeline is a 16-hex-character digest of the sorted (conversation, track, sha256) triples, cea63205dcfdfced for this sample; a run refuses to resume or re-score if that digest changes, and every track’s checksum is re-verified immediately before it is uploaded. ocular-evals dataset verify re-checks all files against the manifest.
Task definition
The task is batch, single-channel, single-speaker transcription of a 15-minute track with a language hint of en. Each of the eight tracks is sent to the system whole, or in the largest pieces the system’s API allows, and the returned text is scored against that track’s reference. There is no mixing of the two speakers, no diarization requirement, and no streaming; the score is about what the system writes down for one person talking in a real conversation, with the other person’s voice occasionally audible through the microphone.
Scoring per separate channel is the standard “separated channels” condition for dual-microphone conversational corpora[2]. A mixed-channel, speaker-attributed condition (cpWER) is on the harness roadmap and is not part of this report; who spoke when is the sibling benchmark, Converse-Diarization, on the same recordings.
Inference harness
ocular-evals run --model <name> resolves the entry in models.toml to a provider adapter and processes the selected tracks sequentially. Eight adapters cover the systems in this report.
Provider adapters
One protocol per adapter.
| Adapter | Protocol | Used for |
|---|---|---|
openai-compatible | POST {base_url}/audio/transcriptions, multipart (file, model, language, response_format=json, optional chunking_strategy, timestamp_granularities) | OpenAI (GPT Transcribe, GPT-4o Transcribe, GPT-4o mini Transcribe), Mistral, and every model routed through OpenRouter |
xai | POST api.x.ai/v1/stt, multipart (model, language, format, filler_words, file) | Grok Voice Transcribe 2.0 |
reson8 | POST api.reson8.dev/v1/speech-to-text/prerecorded, raw audio body, settings as query parameters (language, filler_mode=verbatim, include_words, include_timestamps) | Reson8 |
meta | POST api.meta.ai/v1/asr/transcribe, multipart JSON request + mono 16 kHz PCM WAV; ≤ 600 s and ≤ 32 MB per request | Muse Voice Transcribe 1.0 |
omi | Asynchronous job API: create job, upload, poll for result | Omi General |
nemotron-asr | Local Transformers inference (AutoModelForRNNT) on this machine’s GPU/CPU; mono 16 kHz float input, no upload | Nemotron 3 ASR (EN), Nemotron 3.5 ASR |
openai-realtime | WebSocket transcription session on the OpenAI Realtime API: 24 kHz PCM16 appended at 10× real time, server VAD cuts turns, each turn’s completed transcription is collected and the turns joined in order | GPT Realtime Whisper |
faster-whisper | Local CTranslate2 inference | Available; not used for any number in this report |
Upload preparation
The archived FLACs are 30–69 MB at 48 kHz / 24-bit, which exceeds or stresses most upload paths: OpenAI and OpenRouter cap at 25 MB, and several vendors’ TLS front-ends failed mid-upload with SSL bad record mac above roughly 14 MB during our runs. Each model entry therefore declares an upload format, produced on the fly from the archived file and discarded afterwards. mp3 is ffmpeg 8.1, mono, 16 kHz, 64 kbps CBR (about 7 MB per track), used for every openai-compatible and xai entry. wav16k is mono 16 kHz 16-bit PCM (about 29 MB per track), used only where the vendor rejects compressed audio (AssemblyAI via OpenRouter, Meta). flac is the original file, untouched.
Downsampling to 16 kHz discards content above 8 kHz. Published ASR front-ends (Whisper, Conformer/Parakeet, Voxtral) operate at 16 kHz, and we have no evidence that any evaluated API uses more, so this is not expected to change results; but it is a choice, and it is recorded in every run’s run.json. The one direct comparison we have points the other way for robustness rather than accuracy: Voxtral’s repetition loop occurred on the MP3 and not on the original FLAC.
Client-side chunking
Some endpoints cap request duration or size below a 15-minute track: AssemblyAI via OpenRouter (about 4 MB WAV), Meta (600 s), the Nemotron models’ Transformers implementation (5,000 encoder frames = 400 s per request) and Google’s Chirp 3 synchronous API (60 s). For these, the harness cuts the track into pieces of at most chunk_s seconds. Cut points start evenly spaced and are then moved to the quietest 0.5 s window within ± search_s seconds of the even split, clamped so that no chunk can exceed chunk_s. The chunks are transcribed in order, the texts are joined with a single space, and segment timestamps are offset by the chunk start. The cut algorithm, chunk boundaries and per-chunk byte counts are stored in the hypothesis’s raw field. Chunking introduces a risk of losing or duplicating a word at a boundary; the pause-seeking cut keeps that small but not zero.
Server-side chunking
OpenAI’s GPT-4o-family transcription models silently drop large portions of a 15-minute file unless the request sets chunking_strategy=auto (the diarize variant refuses without it). The harness supports the parameter for any OpenAI-protocol model; the GPT-4o Transcribe and GPT-4o mini Transcribe board rows use it, and GPT Transcribe does not need it. The case studies below quantify the difference.
Reliability and what is recorded
Transport errors, timeouts and HTTP 408/409/425/429/500/502/503/504 are retried up to six times with exponential backoff (1 s base, 30 s cap, 25% jitter), honouring Retry-After. A 429 whose body reports exhausted quota is not retried. Every failed attempt is appended to failures.jsonl with the error message redacted of any secret; after three consecutive failures the run stops. Runs are resumable: a track is skipped if hypotheses.jsonl already holds a row for the same model digest and the same audio SHA-256. The model digest is a hash of the provider, model id and every option that can change the output, so changing chunking_strategy or timestamp_granularities forces a fresh run. Per track the harness records the raw returned text, detected language and duration where the API reports them, segments, the full raw response body minus credentials, wall-clock latency from request start to parsed response, and the audio checksum.
Text normalization
Both the reference and the hypothesis pass through the same function before any comparison. The profile used for every number in this report is whisper: six steps, the fourth of which is the English text normalizer published with Whisper[1] (whisper-normalizer 0.1.12).
The whisper profile
Six steps, applied to both sides.
| Step | Action | Detail |
|---|---|---|
| 1 | Unicode NFKC | Compatibility characters folded (full-width forms, ligatures). |
| 2 | Strip transcript markup | SGML tags, bracketed notes and parenthesised asides are replaced by a space. This removes every event tag in the references and, on the hypothesis side, any [laughter] or (inaudible) style annotation a model emits. |
| 3 | Fold apostrophes | Curly and typographic apostrophes become a plain apostrophe. |
| 4 | Whisper English normalizer | Lowercases; removes the fillers hmm, mm, mhm, mmm, uh, um; expands contractions (i’m → i am, won’t → will not, gonna → going to); maps British to American spellings; expands abbreviations (dr. → doctor); converts spoken numbers to digits including currency and percent (twenty → 20, a thousand dollars → $1000, a hundred percent → 100%); replaces remaining punctuation with spaces. |
| 5 | Drop non-lexical tokens | Any token with no letter or digit (a stray full stop left after a filler was removed) is dropped. |
| 6 | Collapse whitespace | Single spaces, lowercase. |
Worked example, reference 0fcd38f2/ch2:
RAW Um, I think the most beneficial it could be is for deliveries, absolutely. … Um, <laugh/> other
than that, as far as, like, surveillance, <breath/> uh, <spn/> I'm thinking specifically with a
lady brain that, no. <breath/> there's too many creeps already.
NORM i think the most beneficial it could be is for deliveries absolutely … other than that as far as
like surveillance i am thinking specifically with a lady brain that no there is too many creeps
alreadyConsequences a reader should know, all of which apply identically to both sides:
“um”, “uh”, “hmm” and “mm-hmm” are not scored. “Mm-hmm” becomes
mm hmmand both tokens are removed. A system is neither rewarded nor penalized for transcribing these particular fillers. “like”, “you know”, “yeah”, “right”, “okay”, “oh”, repetitions and fragments are scored.The filler list is Whisper’s and is not exhaustive. Spellings outside it survive normalization: Deepgram’s
mhmm, Omi’s and Qwen’suh-huh → huh, Qwen’s嗯. Since the reference form was deleted, these count as insertions.Contraction expansion means normalized word counts exceed raw counts. 12,326 raw tokens after markup removal become 12,555 scored words. The denominator of every WER in this report is the normalized reference length.
Number conversion has edge cases. “oh” is mapped to
0(75 reference tokens), and “thirty, sixty minutes” becomes3060 minutes. These are symmetric and rarely create errors, but they make the normalized text look odd.Hyphens become spaces. The references spell acronyms as letters (“A-I”, “G-P-S”, “N-P-R”) and write “push-ups”; after normalization these are
a i,g p s,push ups, while every model writesai,gps,pushups. This costs each model a fixed 10–15 errors (about 0.1 WER points) and is the single systematic reference-convention penalty we have identified. It is left in place because it is applied uniformly and because fixing it would be a change to the published normalizer.
A second profile, plain (lowercase, strip punctuation except apostrophes and hyphens within words, keep fillers), is available with --profile plain for inspection; it is not used on the board.
Reference cases
What each profile does to a line.
| Input | whisper profile | plain profile |
|---|---|---|
Um, uh, oh, mhm, mm-hmm, hmm, yeah, like, you know, okay. | 0 yeah like you know okay | um uh oh mhm mm-hmm hmm yeah like you know okay |
I- I- I think so. Con- consider it. | i i i think so con consider it | same |
It’s gonna be, like, a hundred percent. | it is going to be like a 100% | it’s gonna be like a hundred percent |
nineteen ninety five / twenty twenty-six | 1995 / 2026 | unchanged |
we’ll we’re won’t can’t ain’t y’all | we will we are will not can not aint you all | unchanged |
Dr. Smith … colour vs color | doctor smith … color vs color | dr smith … colour vs color |
A-I / push-ups / Mm-hmm | a i / push ups / (removed) | a-i / push-ups / mm-hmm |
<breath/> <laugh>ha</laugh> [inaudible] (laughs) | (removed) | (removed) |
Scoring
For each track the normalized reference and hypothesis are tokenized two ways: words are whitespace-separated tokens; characters are every non-whitespace character. Each pair of token sequences is aligned with jiwer 4.0[6] using identity transforms, which is a standard Levenshtein alignment[4] with unit cost for substitution, deletion and insertion. The result is stored as hits H, substitutions S, deletions D and insertions I. Rates are derived, never stored.
Word and character error rate
- Reference words the hypothesis matched
- Reference words replaced by a different word
- Reference words missing from the hypothesis
- Hypothesis words with no reference word
- The reference length: 12,555 words, 47,784 characters
Pooling by counts means a short track cannot carry the same weight as a long one, and a catastrophic track contributes exactly its error count. WER is unbounded above[5]; the pre-fix Voxtral run scored 107% because it produced 12,800 inserted words on one track. A track with no hypothesis (failed after retries) is excluded from the sums and the run is marked incomplete; every run on the board is complete, 8 of 8 tracks. A hypothesis that is empty text scores as all deletions.
CER is reported alongside WER as a tiebreaker and as a check that WER is not being driven by tokenization (for example compounding “pushups”); the primary metric for English is WER. Wall-clock latency per track is recorded and summarized as the median across the eight tracks. It is an end-to-end batch number including upload and any proxy hop and is not comparable across routes; it is reported for context, not ranked.
Reproducibility and audit trail
Each run directory holds run.json (harness version, full resolved model config, model digest, dataset digest and source, normalization profile, timestamps), hypotheses.jsonl (one row per transcribed track with raw text, segments, latency, audio SHA-256 and the full raw API response), failures.jsonl, scores.jsonl (per-track WER/CER counts and the exact normalized reference and hypothesis strings that were aligned) and summary.json (pooled counts and rates, per-conversation breakdown). The leaderboard on this site is rendered from those summaries, and the transcript panel behind each system is the scores.jsonl alignment.
Streaming systems
Converse-STT scores a finished transcript of a finished recording; it is a batch benchmark and does not measure latency, partial-result stability or endpointing. Several systems on the board also exist as streaming products (Deepgram, AssemblyAI, ElevenLabs, xAI and Reson8 all sell real-time endpoints), and for those the board uses the vendor’s batch endpoint, as a vendor evaluation would. Two systems, NVIDIA’s Nemotron 3 ASR and Nemotron 3.5 ASR, exist only as streaming models: cache-aware FastConformer-RNNT encoders[7] in which the right attention context (lookahead, in 80 ms frames) fixes how much future audio each frame may see. Because the streaming steps never overlap and the cache reproduces the full left context, offline inference at a given lookahead yields the same transcript the streaming path produces at that chunk size; the lookahead is therefore the single knob that moves these models along their latency–accuracy curve (80 ms, 160 ms, 320 ms, 560 ms, 1.12 s).
The policy is: a streaming-only model’s board row is its highest-accuracy operating point (lookahead 13 frames = 1.12 s), which is the configuration a batch deployment would use and the one comparable to the other systems’ batch endpoints. Lower-latency operating points are not ranked; they are reported in a separate figure so the accuracy cost of latency is visible without putting an 80 ms streaming configuration in the same ordering as a batch API. One streaming system is scored through its streaming path on purpose: Version 1’s “GPT Realtime Whisper” is the OpenAI Realtime API’s transcription session (server VAD, whisper-1), a product that exists only as a stream, and reproducing the Version 1 row means running it that way. Its score should be read as the accuracy of that product on this audio, not of whisper-1 as a batch decoder.
Evaluated systems
The leaderboard ranks two sets of systems. First, each vendor’s latest general-purpose transcription model: where a vendor offers several current models we take the newest generation (GPT Transcribe; Gemini 3.5 Transcribe; Grok Voice Transcribe 2.0 rather than Grok STT 1.0; MAI-Transcribe 2 rather than 1.5), the flagship size within a generation (Qwen3-ASR 1.7B rather than 0.6B), and the general-domain model rather than a domain variant (Omi General rather than Omi Medical). Second, every model that was scored in Converse-STT Version 1 and that the credentials we hold can reach, so that the Version 2 board can be read against Version 1 model for model: this adds Chirp 3, GPT-4o Transcribe, GPT-4o mini Transcribe, GPT Realtime Whisper and Reson8 to the vendor-latest set (Nova-3 and Universal-3.5 Pro are in both sets; Reson8 is both the Version 1 leader and its vendor’s only model). As a result Google has two rows and OpenAI four; within a vendor the rows are independent runs and are ranked independently.
NVIDIA has three rows for a different reason: Parakeet TDT 0.6B v3[8] is its hosted batch model, while Nemotron 3 ASR (English) and Nemotron 3.5 ASR (multilingual) are a separate, streaming-only family that NVIDIA positions as a complementary product rather than a successor; both run locally at their batch-quality setting. Sibling and older-generation models on neither list (Grok STT 1.0, MAI-Transcribe 1.5, Qwen3-ASR 0.6B, Omi Medical, GPT-4o Transcribe Diarize, Whisper large-v3) were run with the same harness on the same data and are referred to below where they illuminate a finding, but they are not ranked.
19 systems are on the board, all scored against the same pinned manifest. Nine were called on the vendor’s own endpoint with the vendor’s key; two were run locally with open weights; eight through OpenRouter’s /audio/transcriptions gateway, which exposes a catalogue of transcription models behind one OpenAI-style API and one key. OpenRouter adds a proxy hop to latency, may route an id to more than one upstream host, and does not forward every vendor-specific parameter (notably timestamp_granularities); the board says “via OpenRouter” on those rows.
Nineteen scored systems
What each system received.
| System | Vendor | Route / endpoint | API model id | Upload | Request parameters beyond defaults |
|---|---|---|---|---|---|
| ElevenLabs | OpenRouter | elevenlabs/scribe-v2 | mp3 | — | |
| Reson8 | direct · api.reson8.dev/v1/speech-to-text/prerecorded | — (no model id; current pipeline) | mp3 | filler_mode=verbatim, language=en, include_words, include_timestamps | |
| xAI | direct · api.x.ai/v1/stt | grok-voice-transcribe-2.0 | mp3 | format=true, filler_words=true, language=en | |
| OpenRouter | google/gemini-3.5-transcribe | mp3 | — | ||
| Meta | direct · api.meta.ai/v1/asr/transcribe | muse-voice-transcribe-1.0 | wav 16 kHz PCM16 | mode=ENDPOINTING; client chunks ≤ 540 s cut at pauses (2 per track) | |
| Deepgram | OpenRouter | deepgram/nova-3 | mp3 | — | |
| Omi | direct · api.omi.health job API | omi-general-1 | flac | — | |
| OpenRouter | google/chirp-3 | mp3 | client chunks ≤ 55 s, search ± 5 s (17 per track; 60 s synchronous limit) | ||
| Microsoft AI | OpenRouter | microsoft/mai-transcribe-2 | mp3 | — | |
| NVIDIA (open weights) | local · Transformers 5.19 / torch 2.14, Apple M4 Max (MPS) | nvidia/nemotron-speech-streaming-en-0.6b | 16 kHz float, in-process | lookahead_frames=13 (1.12 s); client chunks ≤ 360 s cut at pauses (3 per track) | |
| NVIDIA (open weights) | OpenRouter | nvidia/parakeet-tdt-0.6b-v3 | mp3 | — | |
| OpenAI | direct · api.openai.com/v1 | gpt-transcribe | mp3 | — | |
| Alibaba (open weights) | OpenRouter | qwen/qwen3-asr-1.7b | mp3 | — | |
| OpenAI | direct · api.openai.com/v1 | gpt-4o-mini-transcribe | mp3 | chunking_strategy=auto | |
| AssemblyAI | OpenRouter | assemblyai/universal-3-5-pro | wav 16 kHz PCM16 | client chunks ≤ 120 s, search ± 10 s (8 per track; route rejects mp3 and > ≈ 4 MB) | |
| NVIDIA (open weights) | local, as above | nvidia/nemotron-3.5-asr-streaming-0.6b | 16 kHz float, in-process | lookahead_frames=13 (1.12 s), language=en-US prompt; client chunks ≤ 360 s (3 per track) | |
| Mistral AI | direct · api.mistral.ai/v1 | voxtral-mini-2602 | mp3 | timestamp_granularities=segment | |
| OpenAI | direct · wss://api.openai.com/v1/realtime?intent=transcription | whisper-1 | 24 kHz PCM16 stream, fed at 10× real time | turn_detection=server_vad (silence_duration_ms=500), language=en; one request per VAD turn | |
| OpenAI | direct · api.openai.com/v1 | gpt-4o-transcribe | mp3 | chunking_strategy=auto |
All requests send language=en and response_format=json where the protocol has it. No prompt, vocabulary boost, temperature or seed is sent unless listed; vendors’ defaults apply. Grok’s filler_words=true and format=true match the verbatim reference convention; the normalizer removes um and uh anyway, so the setting is not decisive.
What could not be run
Systems on the comparison boards that could not be run with the credentials available: Inworld, Cartesia, Smallest AI, Speechmatics, Gradium and AssemblyAI Universal-2 (no API access through our keys or OpenRouter); Grok Voice Transcribe 2.0 streaming (WebSocket-only; the batch endpoint is on the board); Gemini 3.1 Pro and Gemini 3.5 Flash (chat models, not transcription endpoints); Cohere Transcribe, Meta omniASR-LLM-7B and NVIDIA Canary (open weights, self-hosting required). NVIDIA also serves the two Nemotron models through its hosted NIM; that route needs an NVIDIA API key, which we did not hold, so the local weights were used instead. An OpenRouter route for Voxtral was run and removed from the board because the route cannot carry the parameter that prevents the model’s repetition loop.
OpenRouter’s /models catalogue lists chat and audio-understanding models only; transcription models are not enumerated anywhere in the API, so the only way to learn whether /audio/transcriptions serves a given id is to send it a request. We probed the endpoint with a one-second WAV for every plausible id of the vendors missing from the board (Speechmatics, Cartesia, Smallest, Inworld, Gradium, Reson8, Deepgram Flux and Nova-2, Chirp 2, Soniox, Gladia, Fireworks Whisper, IBM Granite Speech). Every one returned Model <id> does not exist; the two controls, google/chirp-3 and openai/whisper-1, were accepted and billed. The eight OpenRouter rows are therefore the extent of what that gateway can contribute to this benchmark; everything else needs the vendor’s own key. Reson8 is the first case: the key was added the same day, the reson8 adapter written against the vendor’s prerecorded endpoint, and the model run and ranked within the hour.
Leaderboard
Pooled over 12,555 reference words and 47,784 reference characters. Scribe v2 leads at 1.22%; GPT-4o Transcribe is last at 13.82%. One WER point is 125.6 words and 0.1 point is about 13 words, so differences under roughly 0.3 points between adjacent systems should be read as ties. Pairs that are effectively tied on this data: Reson8 and Grok Voice Transcribe 2.0 (2 words apart), Gemini 3.5 Transcribe and Muse (23 words), Nova-3 and Omi General (5 words), Chirp 3 and MAI-Transcribe 2 (3 words), Parakeet and GPT Transcribe (5 words), Qwen3-ASR 1.7B, GPT-4o mini Transcribe and Universal-3.5 Pro (10 and 2 words), Voxtral and GPT Realtime Whisper (15 words).
Nineteen systems
Lower is a more accurate transcript.
Scribe v2 · 153 errors in words
153 of 12,555 reference words. Median 14 s per track. 1 retried request.
This system, per conversation
Conversation WER, both tracks pooled.
Pooled word error rate over 12,555 reference words after Whisper English normalization. Lower is better. Click a system to read its error composition; the same selection drives the table and the heatmap below.
The table carries every number behind that chart: WER, CER, the word-level substitution, deletion and insertion counts, each conversation’s WER, and the median wall-clock latency per track on our route. Rows are in ranked order. Clicking a row selects that system in the figure above and the heatmap below.
Nineteen scored systems
WER, CER, edit counts, and conversations.
| System | WER | CER | S | D | I | 0fcd | 2bb0 | 86c2 | ea21 | Latency |
|---|---|---|---|---|---|---|---|---|---|---|
| 1.22% | 0.55% | 67 | 57 | 29 | 1.50 | 1.55 | 0.78 | 1.04 | 14 s | |
| 2.92% | 1.53% | 139 | 168 | 60 | 4.18 | 2.91 | 1.78 | 2.88 | 6 s | |
| 2.94% | 1.52% | 149 | 178 | 42 | 3.92 | 3.24 | 2.22 | 2.37 | 5 s | |
| 3.13% | 1.76% | 136 | 224 | 33 | 5.13 | 2.97 | 2.09 | 2.37 | 17 s | |
| 3.31% | 1.73% | 105 | 278 | 33 | 4.21 | 4.00 | 2.40 | 2.61 | 195 s | |
| 3.42% | 2.05% | 146 | 175 | 108 | 4.11 | 4.24 | 2.12 | 3.18 | 7 s | |
| 3.46% | 1.88% | 143 | 190 | 101 | 4.11 | 4.27 | 2.37 | 3.04 | 49 s | |
| 3.72% | 2.13% | 185 | 208 | 74 | 5.13 | 4.09 | 2.12 | 3.58 | 53 s | |
| 3.74% | 2.58% | 145 | 187 | 138 | 5.09 | 2.70 | 4.06 | 3.18 | 24 s | |
| 4.11% | 2.26% | 186 | 278 | 52 | 4.83 | 5.09 | 3.19 | 3.28 | 24 s† | |
| 4.54% | 3.15% | 173 | 175 | 222 | 8.13 | 4.24 | 2.47 | 3.41 | 8 s | |
| 4.58% | 2.79% | 93 | 456 | 26 | 5.94 | 4.82 | 4.06 | 3.48 | 19 s | |
| 5.03% | 2.37% | 136 | 209 | 287 | 5.52 | 5.88 | 4.22 | 4.48 | 14 s | |
| 5.11% | 3.20% | 201 | 386 | 55 | 7.02 | 5.30 | 3.65 | 4.51 | 18 s | |
| 5.13% | 3.50% | 114 | 405 | 125 | 7.35 | 3.03 | 6.96 | 3.21 | 23 s | |
| 5.87% | 3.58% | 213 | 488 | 36 | 7.28 | 6.55 | 4.00 | 5.68 | 31 s† | |
| 6.59% | 4.74% | 131 | 529 | 168 | 6.82 | 5.97 | 4.56 | 9.23 | 10 s | |
| 6.71% | 4.53% | 195 | 478 | 170 | 7.15 | 8.40 | 6.46 | 4.68 | 114 s‡ | |
| 13.82% | 10.64% | 226 | 1,464 | 45 | 25.07 | 13.06 | 10.71 | 6.45 | 18 s |
† Local inference time on an Apple M4 Max (MPS), not an API round trip. ‡ Session wall-clock with audio fed at 10× real time (a 15-minute track takes about 90 s to send), not a batch round trip. S, D and I are word-level counts.
Key findings
Scribe v2 is alone at the top. 1.22% is 1.7 points (214 words) ahead of second place, which is itself a tie: Reson8 (2.92%) and Grok Voice Transcribe 2.0 (2.94%) are two words apart. Its 153 total errors are spread thinly: the single largest category is 29 fragment deletions, and it transcribes the partner-bleed track with zero cross-talk insertions.
The spread is wider than on short-clip benchmarks. Nineteen models span 1.2–13.8%, a factor of 11 between best and worst (1.2–6.7%, a factor of 5.5, without GPT-4o Transcribe); public short-clip boards span under a factor of two. Long-form conversational audio exposes failure modes short clips never trigger: phrase-level omission (GPT Transcribe, GPT-4o Transcribe, Voxtral), decoder loops (Voxtral without segment decoding), hallucination on short VAD-cut turns (GPT Realtime Whisper), language switching on backchannels (Qwen3-ASR’s 嗯, the GPT-4o family’s ja), and cross-talk transcription (Parakeet, MAI-Transcribe 2, AssemblyAI).
Deletions dominate for most systems; what gets deleted is conversational. For 16 of 19 systems D is the largest single category, and for 10 (Gemini, Muse, both Nemotron models, GPT Transcribe, GPT-4o Transcribe, GPT-4o mini, GPT Realtime Whisper, Universal-3.5 Pro, Voxtral) D exceeds S + I. The exceptions are Scribe v2, where substitutions lead at a very low level, and Parakeet and Qwen3-ASR, where insertions lead. The most-deleted words corpus-wide are i, a, and, it, you, know, yeah, right, like: fragments, repeated function words and backchannels. Several systems appear to apply disfluency cleanup by design: Universal-3.5 Pro deletes 105 “you”/“know” tokens, roughly 50 of the about 300 “you know” in the corpus; MAI-Transcribe 2 drops isolated “yeah”/“right” backchannels (48) and GPT-4o mini Transcribe does the same (42). Nemotron 3.5 ASR behaves the same way (74 deleted “yeah”/“right”), while its English sibling deletes 27.
The hard track is the quiet one. 0fcd38f2/ch1, the male speaker whose channel is gated and whose partner talks 70% more than he does, is the worst or second-worst track for 10 of 19 systems, and conversation 0fcd38f2 is the worst conversation for 12. Insertions of the partner’s speech account for 112 of Parakeet’s 130 insertions there, and 44–45 for MAI-Transcribe 2 and AssemblyAI. Systems that ignore faint background speech (Scribe, Reson8, Grok, Gemini, Chirp 3, Muse, Nova-3, Omi, GPT Transcribe, GPT-4o Transcribe, GPT Realtime Whisper, Qwen, Voxtral, both Nemotron models) insert nothing from it; Nemotron 3 ASR’s 2.78% on that track is its second-best.
Newer is not always better within a vendor. OpenAI’s rows are the clearest case: GPT Transcribe 4.58%, GPT-4o mini Transcribe 5.11%, GPT Realtime Whisper 6.71% and GPT-4o Transcribe 13.82%, the last 9.2 points behind the current model on the same audio (the unranked GPT-4o Transcribe Diarize scored 5.53% and open-weight Whisper large-v3 6.32%). Google’s two rows are closer: Chirp 3 (3.72%) is within 0.6 points of Gemini 3.5 Transcribe (3.13%). The retired siblings are mostly worse than their successors (MAI-Transcribe 1.5 3.97% against 3.74%; Qwen3-ASR 0.6B 5.41% against 5.03%), with one exception: Grok STT 1.0 (2.82%) is 13 words better than Grok Voice Transcribe 2.0 (2.94%), a tie at this resolution.
Within NVIDIA’s open models, the English streaming model beats the hosted batch model. Nemotron 3 ASR (EN) at its 1.12 s setting scores 4.11% against Parakeet TDT 0.6B v3’s 4.54% with a quarter of the insertions (52 against 222: no cross-talk, no mhmm-style fillers), and the multilingual Nemotron 3.5 ASR trails both at 5.87%, mostly through deletions (488), which matches NVIDIA’s own guidance to prefer the English model for English.
Configuration decides whether a score is about the model. Voxtral scored 107.7% with a plain json request and 6.59% with timestamp_granularities=segment. With OpenAI’s default request, GPT-4o Transcribe scored 21.87% and GPT-4o mini 21.62% on this data; with chunking_strategy=auto, the board’s 13.82% and 5.11%.
Per-track word error rate
86c27418/ch1 (a female speaker, 45–55, on the fitness topic) is the easiest track for 14 of 19 systems and below 3.6% for every system except GPT Realtime Whisper (3.81%) and GPT-4o Transcribe (7.73%). Track difficulty is driven more by the speaker and channel than by the topic: conversation 0fcd38f2 is the hardest for 12 systems although drones and deliveries are the least technical subject in the set. Ten track scores are above 10%. Five belong to GPT-4o Transcribe, one is GPT Realtime Whisper on 2bb0cfe2/ch1 (11.04%), and the other four (Parakeet and Universal-3.5 Pro on 0fcd38f2/ch1, Universal-3.5 Pro on 86c27418/ch2, Voxtral on ea217639/ch2) each have a single identifiable cause: cross-talk, discourse-marker deletion, and a residual repetition loop.
Eight tracks, nineteen systems
Where each system loses its words.
| System · WER | 0fcd38f2/ch1M1,257 w | 0fcd38f2/ch2F1,806 w | 2bb0cfe2/ch1F, 45–551,458 w | 2bb0cfe2/ch2M1,841 w | 86c27418/ch1F, 45–551,655 w | 86c27418/ch2F1,547 w | ea217639/ch1F, 35–451,447 w | ea217639/ch2M, 45–551,544 w |
|---|---|---|---|---|---|---|---|---|
| 0.88 | 1.94 | 1.30 | 1.74 | 0.48 | 1.10 | 1.59 | 0.52 | |
| 3.34 | 4.76 | 2.67 | 3.10 | 0.79 | 2.84 | 3.46 | 2.33 | |
| 2.78 | 4.71 | 3.16 | 3.31 | 1.27 | 3.23 | 2.28 | 2.46 | |
| 5.17 | 5.09 | 2.61 | 3.26 | 1.27 | 2.97 | 2.14 | 2.59 | |
| 3.34 | 4.82 | 3.22 | 4.62 | 1.15 | 3.75 | 2.42 | 2.78 | |
| 3.26 | 4.71 | 4.66 | 3.91 | 1.33 | 2.97 | 3.25 | 3.11 | |
| 2.78 | 5.04 | 4.94 | 3.75 | 1.51 | 3.30 | 3.39 | 2.72 | |
| 4.38 | 5.65 | 3.84 | 4.29 | 1.33 | 2.97 | 3.25 | 3.89 | |
| 7.32 | 3.54 | 2.26 | 3.04 | 2.78 | 5.43 | 3.11 | 3.24 | |
| 2.78 | 6.26 | 5.21 | 5.00 | 1.27 | 5.24 | 3.39 | 3.17 | |
| 12.81 | 4.87 | 3.22 | 5.05 | 1.57 | 3.43 | 3.25 | 3.56 | |
| 5.73 | 6.09 | 3.98 | 5.49 | 3.44 | 4.72 | 2.56 | 4.34 | |
| 3.18 | 7.14 | 7.27 | 4.78 | 2.96 | 5.56 | 5.32 | 3.69 | |
| 6.84 | 7.14 | 4.60 | 5.87 | 2.42 | 4.98 | 2.97 | 5.96 | |
| 11.61 | 4.37 | 2.74 | 3.26 | 1.63 | 12.67 | 2.63 | 3.76 | |
| 7.40 | 7.20 | 6.58 | 6.52 | 2.24 | 5.88 | 4.84 | 6.48 | |
| 7.64 | 6.26 | 5.01 | 6.74 | 3.56 | 5.62 | 3.18 | 14.90 | |
| 6.68 | 7.48 | 11.04 | 6.30 | 3.81 | 9.31 | 3.04 | 6.22 | |
| 23.07 | 26.47 | 12.35 | 13.63 | 7.73 | 13.90 | 4.70 | 8.10 |
Shade saturates at 12%; cells at or above it are solid. Click a row to select the system in the figures above. Columns are speaker tracks in conversation order; the word count under each is that track’s normalized reference length.
Anatomy of the errors
The alignment in scores.jsonl lets every error be attributed. Grouping the 19 runs’ substitutions, deletions and insertions by cause:
Verbatim-reference costs shared by every system
Fragment restarts (“I-”, “s-”, “th-”) are almost never written by any model; deletions of one- and two-letter fragment tokens range from 29 (Scribe) through 40–140 (most systems) to 162 (GPT Transcribe) and 179 (Voxtral), with GPT-4o Transcribe far above at roughly 350 because it drops whole phrases rather than fragments alone. The hyphenated-letter convention (“A-I”) costs 10–15 errors per model. These are properties of the benchmark, applied uniformly; they set a floor of roughly 0.3–0.5% below which no system that writes standard orthography can go.
Backchannels and discourse markers removed by the system
Deleted by design
Backchannels and discourse markers the system left out.
| System | Deleted “yeah” (of 186) | Deleted “right” (of 119) | Deleted “like” (of 383) | Deleted “you” + “know” |
|---|---|---|---|---|
| 2 | 0 | 0 | 1 | |
| 2 | 1 | 0 | 1 | |
| 3 | — | 2 | 5 | |
| 7 | — | 3 | 5 | |
| 4 | 1 | 5 | 6 | |
| 25 | 23 | 1 | 8 | |
| 16 | 11 | 2 | 7 | |
| 39 | 35 | 10 | 19 | |
| 4 | — | 11 | 11 | |
| 16 | 26 | 5 | 9 | |
| 2 | — | 5 | 105 | |
| 10 | — | 18 | 22 | |
| 3 | 4 | 21 | 60 | |
| 28 | 32 | 117 | 183 |
Filler spellings the normalizer does not neutralize
Because the reference’s “Mm-hmm” and “uh-huh” vanish in normalization while variant spellings do not, a system’s choice of spelling becomes visible as insertions: Deepgram Nova-3 writes mhmm (61 insertions, 56% of its insertions); Omi General writes uh-huh → huh (54) and Reson8 the same (13, its most frequent insertion) and occasionally 嗯 (6); Qwen3-ASR 1.7B 嗯 (148), huh (51), ha (20). The symmetric fix, extending the filler list, would move Nova-3 from 3.42% to about 2.9% and Qwen3-ASR 1.7B from 5.03% to about 3.3%; we report the Whisper-standard behaviour and note the sensitivity rather than tune the normalizer to the systems.
Language switching
Qwen3-ASR 1.7B’s 嗯 insertions are backchannels and laughter decoded as Mandarin despite language=en; the GPT-4o family shows the same pattern in another language (GPT-4o mini and GPT-4o substitute ja for “yeah” 22 and 32 times), and the retired Qwen3-ASR 0.6B produces a 26-cycle que e que e … loop on 2bb0cfe2/ch1. Backchannels and laughter are where multilingual decoders lose the language lock.
Cross-talk transcription
Inserted runs of four or more words that match the partner’s reference, almost entirely on 0fcd38f2/ch1: Parakeet TDT 0.6B v3 112 of its 222 insertions, Universal-3.5 Pro 45 of 125, MAI-Transcribe 2 44 of 138, GPT-4o mini Transcribe 4 of 55, and zero for every other system. Whether to count this as an error is a benchmark decision: the words were audible on the channel but were not said by the speaker whose transcript is being scored, so they are counted. It is the clearest measurement in the benchmark of a system’s sensitivity to a second, quieter voice.
Omission
GPT Transcribe’s profile is unusual: the fewest substitutions (93) and insertions (26) of any system, but 456 deletions, in runs of 1–7 words (219 single words, 167 in runs of 2–3, 70 in runs of 4–7): dropped repetitions, dropped “you know”, dropped clause-initial “and I”. It reads as a fluent transcript that is missing things. Voxtral’s 529 deletions are concentrated in fragments and function words; its 168 insertions are dominated by a residual repetition on ea217639/ch2, where one passage is written three times (inserted runs of 51, 19 and 62 words). GPT-4o Transcribe takes omission to the extreme: 1,464 deletions in runs of up to 20 or more words on every track, even with chunking_strategy=auto, which is why it is last on the board by seven points. GPT Realtime Whisper’s 170 insertions are a different mechanism, hallucination on short VAD-cut turns.
Genuine recognition errors
These are the minority for every system. The most common substitutions shared across systems are in → and, was → is, the → that, a → the, could → can, and them → em (MAI-Transcribe 2 and Parakeet write the reduced form). The Nemotron models and Reson8 add a spelled-acronym variant of the “A-I” cost: they write AI, GPS and NPR as single tokens where the reference has “A-I”, “G-P-S” and “N-P-R”, the same orthographic convention cost paid by every system, in a different direction. Proper nouns are handled well by the leaders; haarp → harp and geez → jeez are the only recurring content-word confusions.
Aligned examples
These are passages from the normalized reference with one system’s edits marked from the alignment the score was computed on: a substituted word shows the model’s word with the reference word struck through, a deleted word is struck, an inserted word is highlighted. Choose a passage, then switch systems to compare how each handles the same seconds of speech.
Read the alignment
The same words, system by system.
2bb0cfe2/ch2 · News sources · Male speaker · reference words 1–40
track WER 3.31% · 21 S · 26 D · 14 I
Loading transcripts…
The reference has “and I- I’ll listen”. Every system recognizes the words; they differ only in whether the restart is written out. Scribe v2, MAI-Transcribe 2 and Universal-3.5 Pro match the reference here; Grok and Muse collapse “I- I’ll” to “I listen”, Gemini and Qwen to “I I listen”, GPT Transcribe and Voxtral to “I will listen”.
- Substituted
- Deleted
- Inserted
Transcripts are the normalized reference and hypothesis strings from scores.jsonl, the same files the leaderboard panel loads. Word positions are counted in the normalized reference.
Case studies in configuration
Voxtral Mini Transcribe 2 and the repetition loop
With the plain json request Voxtral transcribes ea217639/ch2 correctly for about three minutes, then emits a 75-word passage (“…and I think that’s a great way to incentivize a lot of people…”) 179 times, recovers, loops once more, and finishes correctly: 14,262 hypothesis words against a 1,544-word reference, 12,800 insertions, track WER 835%, corpus WER 107.74%. The loop is deterministic across retries, with and without language, and at temperature=0; it does not occur on the original 48 kHz FLAC upload or when the request asks for segment timestamps (timestamp_granularities=segment), which makes the server decode segment by segment. The board uses segment decoding: 6.59%. A residual remains on the same track (1,599 words, 138 insertions, the passage repeated three times, 14.90%); it is reported as scored. The OpenRouter route for the same model cannot carry the parameter and loops identically (107.72%), so it is not on the board.
OpenAI server-side chunking
The GPT-4o-family models returned transcripts that stop or skip for long stretches on 15-minute files unless the request sets chunking_strategy=auto; the board rows use it.
One parameter
The GPT-4o family with and without server-side chunking.
| Model | Default request | chunking_strategy=auto |
|---|---|---|
| 21.87% (S 113, D 2,563, I 70) | 13.82% (S 226, D 1,464, I 45) · board | |
| 21.62% (S 587, D 1,758, I 370) | 5.11% (S 201, D 386, I 55) · board | |
| request rejected (“chunking_strategy is required”) | 5.53% · not ranked |
Even with the parameter, GPT-4o Transcribe leaves out 1,464 words, 11.7% of the reference, in runs of up to 20 or more words on every track; this is the model’s behaviour on long conversational input, not a request error, and it is reproducible. GPT Transcribe, OpenAI’s current model, does not need the parameter and was run without it; its 456 deletions are spread evenly in short runs and are not a truncation effect.
Vendor request limits and client-side chunking
AssemblyAI via OpenRouter accepts only WAV and returns HTTP 413 above about 4 MB (about 125 s of 16 kHz PCM16); the harness sends 8 chunks of at most 120 s per track, cut at the quietest point within ± 10 s of each even split. Meta’s endpoint accepts at most 600 s; 2 chunks of at most 540 s. The Nemotron models’ Transformers implementation accepts 5,000 encoder frames (400 s) per call; 3 chunks of at most 360 s. Google’s Chirp 3 synchronous API accepts 60 s; 17 chunks of at most 55 s, cut within ± 5 s. Chunking adds 7, 1, 2 and 16 boundaries per track respectively; inspection of the alignments at boundaries shows no systematic loss, but these systems’ scores include whatever boundary effects remain, and a vendor evaluation with a batch endpoint could differ.
Upload path failures
Direct uploads of the 42–68 MB FLAC files to xAI, Mistral and OpenAI, and of 29 MB WAV files, repeatedly failed with TLS bad record mac errors from the local client; a 14 MB MP3 also failed once (ElevenLabs via OpenRouter, succeeded on resume; MAI-Transcribe 2, one of nine logged failures). All direct openai-compatible and xai entries therefore use the 64 kbps MP3 upload. The eight remaining MAI-Transcribe 2 failures were a multi-hour upstream outage (HTTP 408 / empty body) on the OpenRouter route; the run completed on resume once the upstream recovered.
Relation to Converse-STT 1.0
Converse-STT Version 1 scored 15 systems on the same four recordings with Cekura’s pipeline in September 2026[9]. It stays published on its own page; Version 2 scores are not comparable with it and are not carried over. Seven of the 15 have been re-run with the Version 2 harness and are ranked on this board as ordinary runs.
Seven re-runs
Version 1 against Version 2, model for model.
| Version 1 system | Version 1 (Cekura) | Version 2 (this harness) | Δ | Version 2 route |
|---|---|---|---|---|
| 2.93% | 2.92% (2nd) | −0.01 | Reson8 direct, prerecorded endpoint, filler_mode=verbatim | |
| 4.39% | 3.42% (6th) | −0.97 | OpenRouter | |
| 4.19% | 3.72% (8th) | −0.47 | OpenRouter, 17 client chunks ≤ 55 s | |
| 3.53% | 6.71% (18th) | +3.18 | Realtime API transcription session, server VAD, whisper-1 | |
| 4.45% | 5.11% (14th) | +0.66 | OpenAI direct, chunking_strategy=auto | |
| 4.23% | 5.13% (15th) | +0.90 | OpenRouter, 8 client chunks ≤ 120 s | |
| 12.45% | 13.82% (19th) | +1.37 | OpenAI direct, chunking_strategy=auto |
The numbers are not expected to match: Version 1 used the vendors’ own endpoints and Cekura’s normalization, while Version 2 reaches Chirp 3, Nova-3 and AssemblyAI through OpenRouter with the chunking described above and uses the Whisper English normalizer. The ordering is stable where the methodology is least different: Reson8 first among the re-run models on both, GPT-4o Transcribe last on both, Nova-3 and Chirp 3 within half a point of each other on both.
Reson8 is the closest agreement in the table: 2.93% with Cekura’s pipeline, 2.92% here, one word apart on 12,555, which is what one expects when the same model is called directly on the same files with no chunking and only the normalizer differs. It was the conversational leader of Version 1 and is second here, two words ahead of Grok Voice Transcribe 2.0 and 214 words behind Scribe v2, a model that was not on the Version 1 board.
The one large disagreement is instructive. GPT Realtime Whisper scores 6.71% here against 3.53% in Version 1. Its alignments show the characteristic failure of Whisper on short, VAD-cut segments rather than a transcription-quality difference: the Realtime session produced 60–110 turns per track, and on the brief backchannel turns whisper-1 hallucinates: 48 inserted ha tokens (laughter rendered as “ha ha ha…”), 18 inserted bye (“Bye.” emitted on near-silent turns), and one textbook hallucination, “I’m going to stop sharing my screen now”, on 2bb0cfe2/ch1, its worst track (11.04%). Each turn is also decoded without the previous turn’s context, which costs clause-initial words. The Version 1 pipeline evidently cut the audio differently. Which number is right depends on the deployment: a voice agent that uses this API will see our behaviour on backchannel-heavy conversation; a batch deployment of whisper-1 would not. Both the session settings and every turn boundary are recorded in the run’s hypotheses.jsonl.
What could not be re-run
Eight Version 1 systems could not be re-run. None is reachable through OpenRouter and none of their vendors’ keys is among the credentials held, so each needs the vendor’s own key and, in most cases, a small adapter.
Eight not yet re-run
What each run needs.
| Version 1 system | Why it is not on the board | What a run needs | Vendor API shape (adapter effort) |
|---|---|---|---|
| Deepgram Flux English | Streaming-only; the Deepgram key held is rejected with HTTP 401 on every authenticated endpoint (which is also why Nova-3 is reached through OpenRouter) | A valid Deepgram key | WebSocket v2 listen, 16 kHz linear16 chunks, EndOfTurn events; same pattern as the openai-realtime adapter (small) |
| Deepgram Flux Multilingual | As above | As above | As above with model=flux-general-multi (shares the adapter) |
| Cartesia Ink 2 | No Cartesia key | CARTESIA_API_KEY | Batch POST /stt multipart plus a WebSocket path; batch is enough for the board (small) |
| Speechmatics Linden | No Speechmatics key | SPEECHMATICS_API_KEY | Asynchronous batch jobs API (submit, poll, fetch), like the omi adapter (medium) |
| Smallest Pulse | No Smallest key | SMALLEST_API_KEY | Batch REST and WebSocket (small–medium) |
| Inworld STT-1 | No Inworld key | INWORLD_API_KEY | REST with base64 audio in the request body (medium) |
| Gradium | No Gradium key | GRADIUM_API_KEY | WebSocket-only per its documentation (medium) |
| Google Chirp 2 | Not on OpenRouter; no Google Cloud credentials | Google Cloud project and service-account credentials | Speech-to-Text v2 batch recognize with model=chirp_2 (medium) |
Adding a key to .env is the only step outside the repository; models.toml holds variable names, never values, and the adapter pattern for each API shape already exists in the harness.
Relation to other public boards
Seven of the vendor-latest board systems are also on a public short-clip US-English STT leaderboard (3,972 short clips, clean to noisy). Six of seven score lower here, by 0.04 to 3.6 points, consistent with close-talk audio; the rank correlation across the seven is nil (Spearman ρ = −0.14). Scribe v2 is 5th there and 1st here; Qwen3-ASR is 3rd there and 10th here; Grok Voice Transcribe 2.0 is 10th there and 2nd here. The disagreement is expected: a short-clip board measures per-utterance recognition under varied acoustics, while Converse-STT measures sustained transcription of one speaker in a live exchange, where omission, looping and cross-talk handling dominate the error budget.
Streaming operating points
The two Nemotron models were re-run at lower lookaheads with nothing else changed: same weights, chunking, prompt and hardware. Each row is a full pass over the eight tracks, scored exactly like a board run, but only the 1.12 s rows are ranked.
Lookahead sweep
What accuracy costs at streaming latency.
Nemotron 3 ASR Streaming (EN) 0.6B
Nemotron 3.5 ASR Streaming 0.6B
Accuracy improves monotonically with lookahead, as NVIDIA reports on FLEURS. A streaming deployment also pays an endpointing and partial-result cost that this offline measurement does not capture; these rows measure the accuracy of the final transcript at each chunk size, nothing more.
Going from the 80 ms to the 1.12 s operating point recovers 0.5 points (63 words) for the English model and 1.1 points (141 words) for the multilingual one; the gain is almost entirely in substitutions and insertions (the English model’s insertions fall from 87 to 52, its substitutions from 235 to 186), while deletions are flat or rise slightly. More right context resolves word identity and suppresses false starts, but it does not bring back the backchannels and fragments these models leave out at every latency. Even at 80 ms, the English model (4.61%) would sit between Parakeet and GPT Transcribe on the board; the 3.5 model at 80 ms (6.99%) would be 18th, behind GPT Realtime Whisper and ahead of GPT-4o Transcribe.
Limitations
The leaderboard is a ranking on this sample, under the convention above. It is not a result for every room, language or microphone a transcription system will meet.
Size and data
Four conversations, eight speakers, 12,555 words. A 0.1-point difference is 13 words; adjacent ranks are often not distinguishable. The board is a reproducible measurement on a fixed public sample, not a population estimate. The private Ocular collection the sample is drawn from is larger; this report covers only the public sample. The recordings have been public since the Version 1 release and cannot be assumed unseen by any system. References were human-corrected and audited but are not claimed error-free; a handful of residual reference errors would affect every system equally.
Routes and runtimes
Eight of the nineteen board systems were reached through OpenRouter. The proxy may select among upstream hosts, adds latency, and does not forward every parameter. Five systems were chunked client-side because of request or model limits on their route, and GPT Realtime Whisper is segmented by the server’s VAD; a vendor’s batch endpoint might behave differently. The two Nemotron rows were produced on our hardware with the Transformers port of NVIDIA’s checkpoints rather than NVIDIA’s NeMo/Riva runtime or hosted NIM. The weights are the same; decoder implementation details may differ slightly from NVIDIA’s reference numbers, and their latency column is compute time, not an API round trip.
Board composition and configuration
The board mixes each vendor’s current model with older models kept for continuity with Version 1, so a vendor’s position depends on which row is read: OpenAI spans 4.58% to 13.82%. Rows are independent runs; no vendor aggregate is computed. A single request parameter can move a score by 8–100 points; we used documented defaults plus the minimum settings needed to process long audio, and recorded every parameter; other reasonable choices exist and were not explored.
Normalizer and scope
Whisper’s English normalizer removes a fixed filler list and does not neutralize variant spellings (mhmm, huh, 嗯), splits hyphenated letter sequences, and maps “oh” to 0. These are symmetric but visible: about 0.5 points for Nova-3, about 1.7 for Qwen3-ASR 1.7B. The benchmark is English only, batch scoring only, separated channels only: no diarization, no mixed-channel cpWER, no latency ranking, no cost. These are roadmap items for the harness.
What this ranking does not claim
Reproducing a score
The harness is open source on GitHub. It downloads the pinned revision, verifies the FLACs, runs a model and renders the report.
uv sync --group dev cp .env.example .env # add the keys you hold; names only ever appear in models.toml uv run ocular-evals dataset pull # Hugging Face sample @ pinned revision -> data/converse-en-sample uv run ocular-evals dataset verify # SHA-256 + duration of every track uv run ocular-evals check # credentials and dependencies per model uv run ocular-evals run --model elevenlabs-scribe-v2 uv run ocular-evals report --board converse-stt # -> reports/converse-stt.html
A new OpenAI-protocol model is one models.toml entry. Models behind other protocols need an adapter implementing Provider.transcribe(path, language) → Hypothesis; the xai, meta and reson8 adapters are 170–200 lines each and are the templates for hosted APIs, nemotron-asr for local open-weight models. Changing anything that affects output changes the model digest and requires --fresh; changing only transport settings does not. The test suite (111 tests) runs without network access and covers the manifest builder, normalizer, metrics, chunker, retry logic and every adapter against mocked HTTP responses.
Conclusion
On four unscripted American English conversations, pooled word error rate after Whisper English normalization puts ElevenLabs Scribe v2 alone at the top at 1.22%, 214 words ahead of a tie between Reson8 (2.92%) and Grok Voice Transcribe 2.0 (2.94%). Nineteen systems span a factor of eleven, and the systems at the bottom are not there because they misheard words: they are there because they left words out, looped, hallucinated on short turns, or transcribed the other speaker.
The errors that separate systems are conversational. Fragments, repeated function words, and backchannels are what gets deleted; variant filler spellings and the partner’s voice through a gated microphone are what gets inserted. A single request parameter moved two systems by more than the whole spread of the top ten, which is why every parameter is recorded and every alignment is published.
The number to quote from the leaderboard is the pooled WER under this convention: verbatim reference, Whisper normalization, one track per speaker, all eight tracks summed. Read the ranking as a result on this sample, under that convention, and open a system to read the transcript behind its score.
License and citation
The harness is MIT-licensed. The audio and references are Ocular AI’s and are released under CC BY 4.0 on Hugging Face; model outputs and scores you produce are yours. The sample is an evaluation set: do not train, fine-tune or distil on it. Contact the research team with questions.
@techreport{ocularai2026converse-stt,
title = {Converse-STT 2.0: Benchmarking Speech-to-Text on Real Two-Person American English Conversation},
author = {{Ocular AI}},
institution = {Ocular AI},
year = {2026},
month = {10},
url = {https://www.useocular.com/converse/stt},
}References
- [1]
Radford, A., Kim, J. W., Xu, T., Brockman, G., McLeavey, C., & Sutskever, I. (2023). Robust speech recognition via large-scale weak supervision. ICML 2023; arXiv:2212.04356
The Whisper paper. Its English text normalizer, published with the models, is the normalization profile used for every number in this report.
- [2]
Watanabe, S., Mandel, M., Barker, J., Vincent, E., et al. (2020). CHiME-6 challenge: tackling multispeaker speech recognition for unsegmented recordings. CHiME 2020 Workshop; arXiv:2004.09249
Multi-speaker conversational ASR on long unsegmented recordings, with per-speaker references and a short pause-merging threshold for speech activity. The source of the 200 ms merge used in the dataset statistics.
- [3]
Ocular AI (2026). American English transcribed Hi-Fi full-duplex two-speaker conversational dataset, sample. Hugging Face
The public sample scored in this report: separate close-talking tracks, verbatim transcripts and word timings. Pinned at revision 29b74ad4.
- [4]
- [5]
Morris, A. C., Maier, V., & Green, P. (2004). From WER and RIL to MER and WIL: improved evaluation measures for connected speech recognition. Interspeech 2004
Discusses word error rate’s properties, including that it is unbounded above when insertions outnumber reference words. Relevant to the 107% Voxtral run.
- [6]
Vaessen, N. (2018–2026). jiwer: evaluate your speech-to-text system with similarity measures such as word error rate. GitHub
The alignment library the harness scores with (version 4.0, rapidfuzz backend). Identity transforms are used, so the alignment is a plain Levenshtein alignment of the normalized tokens.
- [7]
Noroozi, V., Majumdar, S., Kumar, A., Balam, J., & Ginsburg, B. (2024). Stateful Conformer with cache-based inference for streaming automatic speech recognition. ICASSP 2024; arXiv:2312.17279
Cache-aware streaming FastConformer, the architecture family behind the Nemotron streaming models. The right attention context is the lookahead knob swept in the operating-points section.
- [8]
Xu, H., Jia, F., Majumdar, S., Huang, H., Watanabe, S., & Ginsburg, B. (2023). Efficient sequence transduction by jointly predicting tokens and durations. ICML 2023; arXiv:2304.06795
The token-and-duration transducer (TDT) decoder used by Parakeet TDT 0.6B v3.
- [9]
Ocular AI (2026). Converse-STT Version 1: conversational speech-to-text benchmark. Ocular Converse
The September 2026 board scored with Cekura’s pipeline on the same four recordings. Version 2 re-runs seven of its fifteen systems with the open-source harness.