Materials Speech-to-speech: literature review

Speech-to-speech: literature review

Speech understanding

Speech input for LLMs

Three ways to feed speech to an LLM: continuous encoder embeddings, discrete semantic tokens, or codec tokens. Most models use the first.

Speech 1 Continuous embeddings 2 Discrete semantic tokens 3 Codec tokens Speech encoder ASR-pretrained Projector MLP, 4x down (Voxtral) Speech encoder ASR-pretrained Single-codebook VQ GLM-4-Voice, 175 bps Codec encoder causal RVQ, 8 codebooks Mimi, distilled 1st LLM 50 Hz 50 Hz latents embeddings 12.5 Hz tokens 12.5 Hz codes 12.5 Hz
Three input paths into the LLM. All land near 12.5 Hz; Whisper-style encoders emit 50 Hz first.
Option What it is Used by
Continuous embeddings ASR-pretrained encoder, then a small projector into LLM space Voxtral (arXiv 2507.13264), Qwen3-Omni (arXiv 2509.17765), Granite-speech (arXiv 2505.08699), Phi-4-multimodal (arXiv 2503.01743), Step-Audio 2 (arXiv 2507.16632), Canary-Qwen
Discrete semantic tokens Single-codebook VQ on an ASR encoder, built for AR generation GLM-4-Voice (12.5 Hz, 175 bps; arXiv 2412.02612)
Codec tokens Multi-codebook RVQ, first layer distilled toward a semantic teacher Moshi's Mimi (12.5 Hz, 8 codebooks, WavLM-distilled first layer; arXiv 2410.00037)
Hybrid Discrete and continuous summed Kimi-Audio (12.5 Hz semantic tokens from a VQ layer in the Whisper encoder, plus continuous Whisper features downsampled to 12.5 Hz; arXiv 2504.18425)

Per-model paths

Model Encoder and adapter Rate to LLM
Voxtral (arXiv 2507.13264) Whisper large-v3 encoder, 30 s chunks, MLP adapter with 4x downsample 12.5 Hz
Qwen3-ASR (arXiv 2601.21337) / Qwen3-Omni (arXiv 2509.17765) AuT encoder, 8x conv downsample, 1-8 s dynamic attention window 12.5 Hz
Granite-speech (arXiv 2505.08699) CTC-trained Conformer plus windowed Q-Former; 100 Hz log-mel reduced 2x at the encoder input, then 5x in the Q-Former 10 Hz
Step-Audio 2 (arXiv 2507.16632) Frozen encoder at 25 Hz, adaptor with 2x downsampling 12.5 Hz
Qwen2-Audio (arXiv 2407.10759) Encoder initialised from Whisper-large-v3, plus a stride-2 pooling layer 25 Hz (40 ms per frame)

Why 12.5 Hz converges

Whisper emits 50 Hz frames. Voxtral notes that 30 minutes of audio at 50 Hz is a sequence of 90k tokens, which is why it adds a 4x downsampling adapter (arXiv 2507.13264). Moshi's Mimi codec also runs at 12.5 Hz (arXiv 2410.00037).

Trade-offs

  • Continuous: richest acoustic and paralinguistic signal, easy to train as ASR, but the output side needs a separate path.
  • Discrete: one vocabulary for input and output, enables self-supervised next-token training, loses detail.
  • Codec: the model hears and speaks the same tokens, but multi-codebook streams cost more per frame. Inference This suits duplex.
  • Inference Downsampling to 10-12.5 Hz is the main sequence-length lever. It costs fine acoustic detail, which motivates hybrids like Kimi-Audio.
In the interview, say:

"Input is converging on an ASR-pretrained encoder, a small projector and about 12.5 Hz. Discrete tokens appear when the same vocabulary must also be generated."

ASR with speech LLMs: offline and streaming

ASR is one more speech-to-text task on the encoder, projector and LLM stack. The design questions are how much to train, and how to stream.

Training recipes

Model Recipe
Canary-Qwen (NVIDIA) LLM frozen; train encoder, projection and LoRA. Trained on about 234K h of public speech; the card reports 5.63 mean WER and RTFx 418 on the Open ASR Leaderboard (NVIDIA model card)
Granite-speech (arXiv 2505.08699) Encoder, projector and LoRA (rank 64 on q, v) trained jointly
Phi-4-multimodal (arXiv 2503.01743) Two stages: ASR pre-training updates encoder and projector with the language decoder frozen; post-training freezes the encoder and updates projector and speech LoRA
Voxtral (arXiv 2507.13264) Pretraining, then SFT, then DPO and online DPO
  • Freezing the LLM is the direct guard against forgetting. Granite-speech states that in text mode it calls the underlying LLM without LoRA, which preserves its text capabilities.
  • Canary-Qwen's LLM mode takes a text transcript only, not raw audio (NVIDIA model card).

Streaming approaches

audio chunk 1 chunk 2 look-ahead time Causal encoder chunk + look-ahead Projector LLM Text out partial transcripts chunk + look-ahead audio frames embeds tokens Inference: look-ahead trades latency for WER
Chunked streaming ASR: the causal encoder sees each chunk plus a short look-ahead, and the LLM emits partial text.
audio in text out a1 t1 a2 t2 a3 t3 a4 t4 a5 t5 a6 t6 delay d time
Delayed streams: ASR is the text stream delayed by d relative to audio (Kyutai DSM).
Approach Mechanism
Chunked or causal encoder Qwen3-ASR's AuT encoder uses a 1-8 s dynamic attention window, so one model serves streaming (short chunks) and offline inference; the authors report an average TTFT as low as 92 ms for the 0.6B model (arXiv 2601.21337)
Delayed streams Kyutai DSM: a decoder-only LM over time-aligned streams. ASR corresponds to delaying the text stream relative to the audio, and the reverse gives TTS (arXiv 2509.08753)
Chunked decoder SpeechLLM-XL: decoder-only model over configurable audio chunks; the authors report 2.7 / 6.7 WER on LibriSpeech test clean / other with 1.28 s chunks. CTC forced alignment segments the training transcripts (arXiv 2410.03752)

Inference Chunk size and lookahead trade latency against WER.

Multilingual scale

Omnilingual ASR (Meta) covers over 1,600 languages, in models from 300M to 7B parameters (arXiv 2511.09690). Qwen3-ASR covers 52 languages and dialects (arXiv 2601.21337).

Leaderboard state

The Open ASR Leaderboard compares 86 systems on 12 datasets, with English short- and long-form and multilingual tracks (arXiv 2510.06961). Its authors observe that Conformer encoders paired with Transformer decoders reach the best average WER, while CTC and TDT decoders give the best RTFx.

Open question and scope

  • Not covered here: transducer plus LLM hybrids and CTC-prefix joint decoding.
In the interview, say:

"From my streaming ASR work: chunk size and lookahead set the latency/WER trade-off. The new twist is delayed text streams, so ASR becomes a special case of a multistream LM."

How encoder audio and ASR text meet inside the LLM

A speech LLM must decide where audio positions and text positions sit in one sequence. That choice sets when text can be emitted, whether the model streams, and what alignment the training data needs. This section lays out six layouts from the papers; encoder rates are in Speech input, the Whisper front end is in Whisper, and the full streaming-ASR taxonomy is in Streaming ASR families.

1 Prefix (soft prompt): text comes after all the audio e1 e2 … eT prompt y1 y2 y3 2 Chunk-interleaved: audio chunk, its text, then an end-of-chunk token audio c1 text c1 $ audio c2 text c2 $ audio c3 … 3 Per-frame wait: after each 240 ms embedding, words then BLANK e1 BLANK e2 w w BLANK e3 BLANK e4 w BLANK 5 Time-aligned streams: one summed input vector per 80 ms step (ASR text lags audio) text stream audio tokens LLM input PAD a1 sum PAD a2 sum PAD a3 sum PAD a4 sum PAD a5 sum w1 a6 sum PAD a7 sum PAD a8 sum w2 a9 sum audio embedding or token text token special or pad token
Four sequence layouts as rows of positions, time running left to right. Grey boxes are audio, outlined boxes are text, dashed boxes are special tokens.

Six layouts

1. Prefix (soft prompt). [audio e1 … eT] <asr prompt> → text tokens Qwen2-Audio models each text token given the previous text and the encoded audio, P(xt∣x<t,Encoder(a)) P(x_t \mid x_{<t}, \mathrm{Encoder}(a)) , with the objective stated over the next text token (Section 2; arXiv 2407.10759). Its encoder is initialised from Whisper-large-v3, and a stride-2 pooling makes each frame about 40 ms (arXiv 2407.10759). The official repo prompt for the pretrained model is <|audio_bos|><|AUDIO|><|audio_eos|>Generate the caption in English:, and its chat example puts the audio item before the text item (QwenLM/Qwen2-Audio). Voxtral passes encoder output through an MLP adapter that downsamples 4x (50 to 12.5 Hz), and its decoder predicts text conditioned on the audio and text inputs (arXiv 2507.13264). Its pretraining uses an audio segment followed by its transcript (<repeat>), or alternating audio and text segments (<next>), and a special token selects transcribe mode with no text prompt (arXiv 2507.13264). Neither paper states whether the loss is masked to text positions, and neither describes the audio positions beyond conditioning. Inference The <|AUDIO|> placeholder suggests encoder frames replace those positions in the input embeddings.

2. Chunk-interleaved streaming. [audio chunk 1] [text 1] $ [audio chunk 2] [text 2] $ … SpeechLLM-XL splits the audio into 1.28 s chunks and trains the LLM to emit each chunk's text plus an end-of-chunk token $ (Sections III and IV-A; arXiv 2410.03752). The target transcript is segmented per chunk, with a $ after each chunk's tokens, and the audio encodings are interleaved with text embeddings by audio-text alignment (Section III, Fig. 1; arXiv 2410.03752). When reference alignments are missing, CTC forced alignment between audio encodings and text tokens gives each token's end time (Section III; arXiv 2410.03752). Self-attention caches the previous b b chunks, and at inference each chunk's text is generated until $ is predicted, then $ is dropped from the transcript (arXiv 2410.03752).

3. Per-frame wait or blank. e1 BLANK e2 w w BLANK e3 BLANK … In Speech ReaLLM an input embedding arrives every 240 ms, the model appends it and keeps predicting tokens until it predicts BLANK (Section 2, Algorithm 1; arXiv 2406.09569). A frame can therefore yield zero, one or several words. Training targets come from fixed alignments produced by an external CTC "alignment-teacher", with cross-entropy loss; the paper found it better to give the encoder 960 ms of right context than to delay the labels (Sections 3 and 4.2; arXiv 2406.09569).

4. Transducer with an LLM predictor. LLM(text history) + encoder frame → joint network → token or blank Transducer-Llama uses the LLM as the non-blank predictor at decoding; encoder output enters through the joint network, not the LLM input (Sections II and III; arXiv 2412.16464). The non-blank distribution combines both scores:

Pnb=(1−Pb) softmax⁡(log⁡Pac+log⁡Pilm) P_{nb} = (1 - P_b)\,\operatorname{softmax}(\log P_{ac} + \log P_{ilm})

Here Pb P_b is the blank probability, Pac P_{ac} comes from the acoustic encoder and Pilm P_{ilm} from the internal LM, which the LLM replaces after RNN-T training (Sections II and III-C; arXiv 2412.16464). The LLM is frozen apart from new embedding and output layers for the ASR vocabulary (Section III-A; arXiv 2412.16464). The paper does not state the predictor's input. Inference As in any transducer predictor, it sees the previous non-blank labels, not audio.

5. Time-aligned parallel streams. step t: emb(text token) + emb(audio tokens) → one vector → text out Moshi gives each stream its own embedding table and sums them: the Temporal Transformer takes "the sum of K learnt embedding tables" for the previous step, with K=2Q+1=17 K = 2Q + 1 = 17 streams for Q=8 Q = 8 (Section 3.4; arXiv 2410.00037). One stream holds the aligned text, with PAD between words and EPAD before each word, and PAD is about 65% of tokens in English conversation (Section 3.4.4; arXiv 2410.00037). Steps are 80 ms (12.5 Hz). DSM does the same, "the embeddings are summed before going into the backbone" (Section 3; arXiv 2509.08753). For ASR it teacher-forces the audio tokens, computes loss on the text stream including PAD and WORD, and delays the text by a default 2.5 s (Sections 3.2 and 4; arXiv 2509.08753). More in Inner Monologue and who emits what per frame.

6. Hybrid continuous plus discrete input. per 12.5 Hz step: whisper_feature(t) + emb(semantic_token(t)) Kimi-Audio downsamples Whisper features from 50 to 12.5 Hz with an adaptor, then adds them to the semantic-token embeddings as the audio LLM input (Sections 2.2 and 4.1; arXiv 2504.18425). Confirmed The paper is inconsistent: its Introduction says it concatenates the two (arXiv 2504.18425). Inference The method sections are more specific, so treat it as addition.

Comparison

Layout When text is emitted Streaming? Alignment needed Example
1. Prefix After the audio and a task prompt No, audio is complete first None Qwen2-Audio (arXiv 2407.10759), Voxtral (arXiv 2507.13264)
2. Chunk-interleaved After each 1.28 s chunk, closed by $ Yes Token end times, from references or CTC forced alignment SpeechLLM-XL (arXiv 2410.03752)
3. Per-frame blank After each 240 ms embedding: zero or more words, then BLANK Yes Fixed alignments from an external CTC teacher Speech ReaLLM (arXiv 2406.09569)
4. Transducer, LLM predictor When the joint network picks a non-blank token Yes (160 ms segments) RNN-T loss; no external aligner stated Transducer-Llama (arXiv 2412.16464)
5. Time-aligned streams One text slot per 80 ms step, mostly PAD; ASR text lags by a delay Yes Word timestamps place words on the grid DSM (arXiv 2509.08753), Moshi (arXiv 2410.00037)
6. Hybrid input Not a text layout; changes the audio input only Set by the host model None Kimi-Audio (arXiv 2504.18425)

Position encoding for audio

Qwen3-Omni uses TM-RoPE, which splits the rotary embedding into temporal, height and width components (24, 20 and 20 rotary angles) (Section 2.3; arXiv 2509.17765). For text, all three components share one position ID, which makes it equal to 1D RoPE. For audio, each temporal ID spans 80 ms, and the AuT encoder emits 12.5 Hz tokens (Sections 2.2 and 2.3; arXiv 2509.17765). Each modality starts at one plus the largest position ID of the previous one, and audio and video align through absolute-time IDs (arXiv 2509.17765).

Inference The Qwen2-Audio and Voxtral papers state no separate audio position scheme, so I assume ordinary sequential positions there. In layout 5 a position is a time step by construction, since all streams sum into one backbone input per step (arXiv 2509.08753).

Where ASR text leaves the speech model

Inference: the hand-off in the target design

Inference In the unified speech LLM design and in the cascade, the speech model's streaming transcript goes to the downstream reasoning LLM as plain text. The text would carry tags such as partial or final, and the reasoning LLM would start only on a stable transcript, as in partials, finals and when to start the LLM. Layouts 2 and 3 give that stream natively; a prefix model gives it only after the utterance ends; layout 5 gives it with a fixed lag.

Supporting facts: SpeechLLM-XL drops $ from the final transcript (arXiv 2410.03752), and Speech ReaLLM's response after each embedding is often empty (arXiv 2406.09569). Streaming ASR trade-offs are in Streaming approaches and Look-ahead.

In the interview, say:

"Audio and text meet in the LLM in a few ways: offline models put projected audio frames first and decode text after, while streaming models interleave chunks with an end-of-chunk token, emit a blank after each frame, run a transducer, or sum time-aligned streams per 80 ms step. The trade-off is alignment: chunk and frame layouts need CTC alignments for training targets, time-aligned streams need word timestamps, and a prefix needs neither but waits for the whole utterance. For a voice agent I want text while the user is still speaking, so I would pick chunk interleaving or time-aligned streams."

Whisper and the Whisper encoder

Whisper is an encoder-decoder Transformer trained on 680,000 hours of weakly supervised audio. Its encoder became the default front end for speech LLMs. Source: arXiv 2212.04356 unless stated.

Architecture

16 kHz 100 Hz stride 2 50 Hz text tokens Audio Log-mel 80 or 128 bins Conv stem 2 conv, GELU Encoder 1,500 frames / 30 s Decoder cross-attention SOT, language, task, timestamps as speech-LLM front end 4x adapter 50 to 12.5 Hz LLM
Whisper end to end, with the branch that speech LLMs use: the encoder output goes through an adapter to the LLM, and the decoder is dropped.
  • Confirmed Input is 16 kHz audio turned into an 80-channel log-magnitude mel spectrogram (25 ms window, 10 ms stride), in 30 s segments.
  • Confirmed The stem is two conv layers (width 3, GELU); the second has stride 2, so one encoder frame covers 20 ms.
  • Derived: the 10 ms hop gives 100 mel frames per second (100 Hz). The stride-2 conv halves that to one frame per 20 ms (50 Hz). A 30 s window is therefore 30 s / 10 ms = 3,000 mel frames and 3,000 / 2 = 1,500 encoder frames. Short audio is padded to 30 s, so compute is paid for the full window.

Rule (derived arithmetic):

rate (Hz)=1000ms per frame \text{rate (Hz)} = \frac{1000}{\text{ms per frame}}
Rate ms per frame Where it comes from
100 Hz10Log-mel hop (arXiv 2212.04356)
50 Hz20Whisper encoder after the stride-2 conv (arXiv 2212.04356)
25 Hz40Qwen2-Audio: stride-2 pooling on the encoder output, each frame about 40 ms (arXiv 2407.10759)
12.5 Hz80Voxtral: 4x downsampling adapter on 50 Hz embeddings (arXiv 2507.13264)
Model Layers Width Heads Params
Tiny4384639M
Base6512874M
Small1276812244M
Medium24102416769M
Large321280201550M
  • large-v3: same architecture, 128 mel bins instead of 80, and a Cantonese token. Reported OpenAI reports a 10% to 20% error reduction over large-v2 (OpenAI model card).
  • large-v3-turbo: a fine-tuned, pruned large-v3 with the decoder cut from 32 to 4 layers (OpenAI model card). The card lists it at 809M parameters.

Multitask token format

The decoder prompt carries the task as tokens: start-of-transcript, language, task (transcribe or translate), then timestamps or no-timestamps. One model therefore does ASR, X-to-English translation and language ID. Timestamps are quantised to 20 ms.

Training data and recipe

Model Data
v1 / v2 680,000 h weakly supervised: 117,000 h of non-English transcription across 96 other languages, 125,000 h of X-to-English translation, the rest English (paper).
large-v3 1 million hours of weakly labelled audio and 4 million hours of audio pseudo-labelled with large-v2 (OpenAI model card).
  • Filtering: drop machine-generated transcripts (all caps or all lower, no punctuation). Compare audio language ID (VoxLingua107-trained) with CLD2 on the transcript and drop mismatches; English transcripts of other-language audio are kept as translation data.
  • Optimiser: AdamW, gradient-norm clipping, linear decay after 2,048 warmup steps, batch 256, FP16 with activation checkpointing, 2 to 3 passes over the data.
  • Augmentation: none for the first models. Large-v2 trained 2.5x more epochs with SpecAugment, stochastic depth and BPE dropout.

Long-form decoding

Whisper slides a 30 s window over long audio and decodes with heuristics (paper section 4.5).

  • Beam search with beam 5.
  • Temperature fallback from 0, in steps of 0.2 up to 1.0, when average log-probability is below -1 or the gzip compression ratio exceeds 2.4.
  • Condition on the previous window's text only when temperature is below 0.5.
  • No-speech threshold 0.6 to skip silent windows.

Limitations

  • The model card warns that predictions may include text that was not spoken (hallucination) and that the sequence-to-sequence architecture is prone to repetitive text. It also states that the models cannot be used for real-time transcription out of the box.
  • The fixed 30 s window, non-causal encoder and autoregressive beam decoder make streaming hard.
Traps

Hallucination and repetition are documented limitations on the model card. Do not rank checkpoints on hallucination without your own measurement.

The encoder as a speech-LLM front end

System How it uses Whisper
Qwen2-Audio (arXiv 2407.10759) Encoder initialised from Whisper-large-v3
Voxtral (arXiv 2507.13264) Whisper large-v3-based encoder, 128 mels, each 30 s chunk independent, 4x downsampling adapter
GLM-4-Voice (arXiv 2412.02612) Fine-tuned whisper-large-v3 ASR model with a VQ bottleneck gives a 12.5 Hz, 175 bps single-codebook tokenizer; made causal (see below)
LLaMA-Omni 2 (arXiv 2505.02625), Kimi-Audio (arXiv 2504.18425) LLaMA-Omni 2 uses the Whisper-large-v3 encoder; Kimi-Audio takes continuous Whisper features at 50 Hz and downsamples them to 12.5 Hz with an adaptor
Moshi (arXiv 2410.00037) Whisper large-v3 transcribes the training audio to produce the time-aligned text for the inner monologue; it is not the encoder
Qwen3-Omni (arXiv 2509.17765) Replaced it with AuT (see below)

Inference Three issues recur. Padding to 30 s wastes compute on short turns. 50 Hz is too long a sequence for an LLM, so every system adds an adapter (50 Hz / 4 = 12.5 Hz). Bidirectional attention blocks streaming, so teams either make the encoder causal (GLM-4-Voice) or replace it (AuT).

Making the Whisper encoder stream

Whisper does not stream for three reasons.

  • The encoder takes a fixed 30 s window (arXiv 2212.04356), and Voxtral describes it as a fixed receptive field of 30 s (arXiv 2507.13264).
  • Streaming wrappers pad every buffer to the full context length, so each partial result pays for 30 s (arXiv 2506.12154).
  • Encoder attention is bidirectional, so every frame sees later audio (GLM-4-Voice replaces it with block-causal attention, arXiv 2412.02612). The model card states the models cannot do real-time transcription out of the box.
Full bidirectional attention over the 30 s window (12 of 1,500 frames drawn) time, left to right (20 ms per frame) Block-causal attention over chunks (here 4 frames per chunk) chunk 1 (past, cached) chunk 2 (current) chunk 3 (future, masked)
One query frame (accent) in each scheme. Full attention reads the whole window, so its output changes when later audio arrives. Block-causal attention reads its own chunk and earlier chunks only, so past states can be cached.

Four families fix this, with different cost.

  • Causal fine-tuning. CarelessWhisper fine-tunes Whisper with LoRA so each encoder frame attends only to its own chunk and earlier chunks, and it caches encoder keys and values instead of re-encoding padded buffers (arXiv 2508.12301). It trains on 960 h of LibriSpeech with chunk sizes of 40 to 300 ms. The U2-style variant puts a CTC head on the Whisper encoder, trains with dynamic chunk masks (0.1 to 1.0 s) on inputs shorter than 30 s, and rescores with the original decoder (arXiv 2506.12154). GLM-4-Voice makes the encoder causal inside its tokenizer: causal convolution before the Transformer and block-causal attention, then pooling and vector quantisation give 12.5 Hz tokens (arXiv 2412.02612).
  • Replace the encoder. Qwen3-Omni trains AuT (Audio Transformer) from scratch on 20 million hours of supervised audio, with 8x Conv2D downsampling to 12.5 Hz and block-wise window attention for real-time prefill caching (arXiv 2509.17765). Qwen3-ASR reuses AuT with a dynamic flash-attention window of 1 s to 8 s, so one model serves streaming (short chunks) and offline (long queries) (arXiv 2601.21337).
  • Wrap the offline model. whisper_streaming re-runs Whisper on a growing buffer and commits words once consecutive runs agree (LocalAgreement), at 3.3 s latency (arXiv 2307.14743). Simul-Whisper uses the cross-attention alignment to guide decoding on chunks, with a truncation detector for cut words (arXiv 2406.10052). The U2 authors note that wrappers reprocess the same audio and leave a training-inference mismatch (arXiv 2506.12154).
Approach Change to Whisper Retraining? Latency and compute Example
Buffer wrapper None; re-decode a growing buffer, commit on agreement No 3.3 s latency; re-encodes padded buffers (arXiv 2307.14743, 2506.12154) whisper_streaming
Alignment-guided wrapper Cross-attention alignment steers decoding; truncation detector No Whisper fine-tuning 1.46% average absolute WER degradation at 1 s chunks (arXiv 2406.10052) Simul-Whisper
Causal LoRA fine-tune Chunked causal mask in the encoder; encoder KV cache LoRA, 960 h Large-v2, 300 ms chunks: 0.081 s average latency (greedy) vs 0.426 s for Ufal-Whisper (beam 5); test-clean WER 4.98% vs 7.50% (arXiv 2508.12301) CarelessWhisper
Causal fine-tune with CTC Dynamic chunk masks, CTC head, decoder rescoring, KV cache Full fine-tune, about 5,800 h of earnings calls 17.30% WER at 1 s chunks; about 267 ms per partial transcript on four CPU cores (arXiv 2506.12154) U2-style Whisper
Causal tokenizer Causal conv, block-causal attention, pooling, VQ Fine-tune the ASR model 12.5 Hz, 175 bps (arXiv 2412.02612) GLM-4-Voice
New windowed encoder Replace the encoder entirely From scratch, 20M h 12.5 Hz; window 1 to 8 s (arXiv 2509.17765, 2601.21337) AuT in Qwen3-Omni, Qwen3-ASR
In the interview, say:

"Whisper streams in three ways: wrap it and pay for re-encoding, fine-tune it causal with a chunked mask and an encoder cache, or replace the encoder. Wrappers need no training but cost latency; causal fine-tuning gets sub-second latency; a new windowed encoder like AuT costs a from-scratch run but serves streaming and offline from one model."

Streaming audio encoders beyond Whisper

Most streaming encoders do one of two things: restrict attention to a causal or windowed context, or cache past activations.

Encoder Causal or windowed Frame rate Streaming mechanism Used in
AuT Windowed 12.5 Hz (about 80 ms per frame) Dynamic flash-attention window of 1 to 8 s; 8x downsampling (arXiv 2509.17765, 2601.21337) Qwen3-Omni, Qwen3-ASR
Qwen2.5-Omni audio encoder Windowed (2 s blocks) About 40 ms per frame (25 Hz, derived) Initialised from Whisper-large-v3; full attention changed to attention in blocks of 2 s to support prefilling (arXiv 2503.20215) Qwen2.5-Omni
Mimi Causal 12.5 Hz (80 ms) All convolutions causal; theoretical latency 160 ms, 200 ms in practice (arXiv 2410.00037) Moshi; DSM-ASR (arXiv 2509.08753)
GLM-4-Voice tokenizer Causal conv plus block-causal attention 12.5 Hz Whisper-based encoder made causal, then pooled and quantised (arXiv 2412.02612) GLM-4-Voice
Cache-aware FastConformer Limited look-ahead 80 ms (8x downsampling of a 10 ms hop, derived) Caches past activations and trains with limited context, so no overlapping recomputation (arXiv 2312.17279) NVIDIA NeMo; parakeet_realtime_eou_120m-v1
  • Qwen3-ASR numbers: the paper reports 2.69 average WER offline vs 3.33 streaming for the 1.7B model, and 3.48 vs 4.40 for 0.6B, with streaming run at a 2 s chunk size (arXiv 2601.21337). It also reports an average time to first token as low as 92 ms for the 0.6B model.
  • DSM-ASR: feeds Mimi tokens (12.5 Hz) and delays the text stream by a default 2.5 s, with timestamp precision of 80 ms (arXiv 2509.08753).
  • Cache-aware Conformer: with a regular look-ahead, latency compounds with depth (1,360 ms for 17 layers and one token of look-ahead); chunk-aware look-ahead does not. On LibriSpeech test-other with an RNNT decoder, the cache-aware model reaches 6.3% WER at 1,360 ms, against 11.3% for buffered inference at 2,000 ms (arXiv 2312.17279).
  • The model card lists a 120M-parameter cache-aware FastConformer-RNNT with 17 layers and latency of 80 to 160 ms.

Ecosystem

Tool What it adds
faster-whisper CTranslate2 reimplementation; its README claims up to 4 times faster than openai/whisper at the same accuracy with less memory (README benchmark: 1m03s vs 2m23s, fp16, beam 5); batched inference; Silero VAD filter
whisper.cpp C/C++ port for CPU and edge
WhisperX (arXiv 2303.00747) VAD-based pre-segmentation ("VAD Cut & Merge") with batched inference for a twelve-fold speedup reported in the paper, and forced phoneme alignment for word-level timestamps; the repo notes that the alignment model is language-specific and overlapping speech is not handled well
distil-whisper (arXiv 2311.00430) distil-large-v2: 2 decoder layers, 756M params, 5.8x faster, 51% fewer parameters; pseudo-labels filtered with a 10% WER threshold (45.4% dropped); less prone to long-form hallucination; works as a speculative-decoding assistant with identical outputs

Interview insights

Inference, not sourced fact
  • Whisper got the recipe right: scale plus weak supervision gives robustness, and multitask tokens put ASR, translation and language ID in one model.
  • It is wrong for voice products as shipped: fixed window, non-causal encoder and beam decoding hurt latency, and silence hallucination matters for agents.
  • Newer encoders address this: the Open ASR Leaderboard authors find Conformer encoders with Transformer decoders give the best average WER (arXiv 2510.06961), and Qwen3-ASR uses a dynamic 1 to 8 s attention window to cover both streaming and offline (arXiv 2601.21337).
  • AuT is the synthesis: Whisper-scale data with a streaming-friendly encoder.
In the interview, say:

"Whisper's recipe is right, but the architecture is wrong for voice agents: a fixed 30 s window and a bidirectional encoder. That is why GLM-4-Voice makes it causal and Qwen3-Omni replaces it with AuT, and why I would start from a streaming encoder."

Look-ahead (right context) in streaming encoders

Look-ahead, also called right context, is how much future audio an encoder may see before it commits to an output for the current frame. Zero look-ahead means each output depends only on the past, so it can be emitted as soon as its frame arrives. N frames of look-ahead means each output waits for N more frames, which helps resolve ambiguous sounds and word boundaries but adds latency.

Reading "0LA" and "12LA"

Inference Shorthand such as 0LA and 12LA names a streaming configuration by its look-ahead in encoder frames: 0 frames or 12 frames. What 12 frames costs depends on the frame duration after subsampling, and on whether the look-ahead is applied per layer or per chunk (below).

Frame duration after subsampling 12 frames of look-ahead (derived)
40 ms (4× subsampling of a 10 ms hop) 480 ms
80 ms (8× subsampling of a 10 ms hop) 960 ms

For comparison, Speech ReaLLM uses 240 ms input frames with 960 ms of encoder right context (arXiv 2406.09569).

The latency and accuracy trade-off

NVIDIA's cache-aware streaming FastConformer paper measures the trade-off directly (arXiv 2312.17279). On LibriSpeech test-other with a hybrid model and chunk-aware look-ahead, the authors report:

Look-ahead latency RNNT WER (%) CTC WER (%)
0 ms 9.5 10.6
40 ms 9.0 10.1
240 ms 7.8 8.8
520 ms 7.5 8.4
680 ms 7.3 8.0
1,360 ms 6.3 7.1
Offline (full context) 5.0 5.7

Zero look-ahead costs about 50% relative WER against the 1,360 ms setting (derived, RNNT), and most of the gain arrives within a few hundred milliseconds. In the same paper, buffered (non-cache-aware) streaming reaches only 11.3% WER at 2,000 ms with RNNT, worse than cache-aware streaming with zero look-ahead.

Regular against chunk-aware look-ahead

How look-ahead is implemented matters as much as how much is allowed (arXiv 2312.17279).

Regular: M future frames per layer layer 1 layer 2 layer 3 reaches further ahead Look-ahead = M × layers 17 layers, 1 frame each: 1,360 ms Chunk-aware: cached past + own chunk previous current chunk next look-ahead cached left context not visible Look-ahead: C−1 frames down to 0 Past chunks come from the cache Does not compound with depth
Regular look-ahead grows with each layer; chunk-aware look-ahead is bounded by the current chunk, while earlier chunks stay visible through the cache. Mechanisms as described in arXiv 2312.17279.
Regular look-ahead Chunk-aware look-ahead
Mechanism Each self-attention layer sees M future steps Input split into chunks of size C; every frame sees its whole chunk, plus earlier chunks as cached left context, but never the next chunk
Effective look-ahead M × number of layers From C−1 frames (first frame in a chunk) to 0 (last frame)
Paper's example 17 layers, one frame each: 1,360 ms Average latency is half the look-ahead size
RNNT WER at 1,360 ms 7.1% 6.3%

So "12LA" is cheap or expensive depending on whether it means 12 frames once at the chunk level, or 12 frames per layer that compound through the stack. Inference

One model, several look-aheads

The same paper trains a single model with multiple look-ahead settings and compares it to separate single-setting models on LibriSpeech test-other (arXiv 2312.17279). With RNNT, the multi-look-ahead model reports 6.2%, 5.5% and 5.2% WER at 40, 240 and 520 ms, against 6.4%, 5.9% and 5.4% for single-look-ahead models. That lets a product pick the latency at inference time.

NVIDIA's Parakeet realtime end-of-utterance model card lists a cache-aware streaming FastConformer-RNNT with 80 to 160 ms latency.

Inference: where each setting fits in a voice agent

Zero look-ahead suits barge-in detection, end-of-turn signals and the fastest partials, where reacting early matters more than a perfect word. Larger look-ahead suits final transcripts handed to the reasoning LLM. A multi-look-ahead encoder can serve both from one model.

In the interview, say:

Look-ahead is the future audio the encoder waits for before committing a frame, so it trades latency for accuracy. NVIDIA's cache-aware FastConformer shows RNNT WER going from 9.5% at zero look-ahead to 6.3% at 1,360 ms, and chunk-aware look-ahead beats per-layer look-ahead at the same latency because it does not compound with depth. I would train one encoder with several look-aheads and use zero for turn-taking and a larger one for final transcripts.