Materials Speech-to-speech: literature review

Speech-to-speech: literature review

Streaming conversational modelling

Rates, frames and clocks

A speech system runs several clocks at once, and "the frame rate" can mean any of them. Keep the clocks apart and every number in this chapter becomes easy to check. The anchor to remember is 12.5 Hz, which is one frame every 80 ms.

How numbers are labelled

Every number carries its source. Arithmetic done for this chapter is marked derived. The 16 kHz input, 25 ms window, 10 ms hop and Whisper's stride-2 convolution come from the Whisper paper (arXiv 2212.04356); see Whisper and the Whisper encoder.

The ladder from waveform to LLM

Stage Rate Period Worked arithmetic
Waveform 16 kHz (typical ASR input); 24 kHz (Mimi, WavTokenizer); 44.1 kHz (DAC) 1/16000=62.5 μs 1/16000 = 62.5\ \mu\text{s} at 16 kHz Fisher telephone audio is 8 kHz and was upsampled to 24 kHz for Moshi (arXiv 2410.00037)
STFT / mel frames 100 Hz 10 ms hop 25 ms window and 10 ms hop at 16 kHz are 400 and 160 samples (derived)
Encoder output (Whisper) 50 Hz 20 ms Conv stride 2: 100/2=50 100 / 2 = 50 . A 30 s chunk is 1,500 frames (derived)
Adaptor output 12.5 Hz 80 ms Voxtral 4x adapter (arXiv 2507.13264): 50/4=12.5 50 / 4 = 12.5 . A 30 s chunk is 375 frames (derived)
Codec frame (Mimi) 12.5 Hz 80 ms 24000/12.5=1920 24000 / 12.5 = 1920 samples per frame (derived)

The whole chain for one Whisper-style input path:

16000 Hz→ hop 160 100 Hz→ ÷2 50 Hz→ ÷4 12.5 Hz 16000\ \text{Hz} \xrightarrow{\ \text{hop } 160\ } 100\ \text{Hz} \xrightarrow{\ \div 2\ } 50\ \text{Hz} \xrightarrow{\ \div 4\ } 12.5\ \text{Hz}

Other encoders reach 12.5 Hz by other routes. Step-Audio 2 runs a frozen audio encoder at 25 Hz and a 2x adaptor, giving 12.5 Hz (arXiv 2507.16632).

The reason to stop at 12.5 Hz is sequence length. Thirty minutes is 1,800 s, so 50 Hz gives 1800×50=90,000 1800 \times 50 = 90{,}000 positions (derived). At 12.5 Hz the same audio is 1800×12.5=22,500 1800 \times 12.5 = 22{,}500 positions (derived).

Codec frame rates, tokens per second, bitrate

A codec frame is a vector in time. A token is one integer id. A residual quantiser (RVQ) turns each frame into one id per codebook, so token rate and frame rate differ.

tokens/s=fframe×Ncodebooksbitrate=fframe×Ncodebooks×log⁡2V \text{tokens/s} = f_{\text{frame}} \times N_{\text{codebooks}} \qquad \text{bitrate} = f_{\text{frame}} \times N_{\text{codebooks}} \times \log_2 V

Mimi has f=12.5 f = 12.5 Hz, N=8 N = 8 and V=2048=211 V = 2048 = 2^{11} , so 12.5×8=100 12.5 \times 8 = 100 tokens/s and 100×11=1100 100 \times 11 = 1100 bps. That matches the 1.1 kbps in the Mimi paper (arXiv 2410.00037). Confirmed

Codec or tokenizer Frame rate Codebooks Tokens/s Bitrate
Mimi (arXiv 2410.00037) 12.5 Hz 8 × 2048 12.5×8=100 12.5 \times 8 = 100 1.1 kbps (authors report; re-derived here)
X-Codec2 (arXiv 2502.04128) 50 Hz 1 × 65,536 (16 kHz input, downsampling ratio 320) 16000/320=50 16000 / 320 = 50 (derived) 50×16=800 50 \times 16 = 800 bps (derived)
WavTokenizer (arXiv 2408.16532) 40 or 75 tokens/s 1 (single quantiser) 40 or 75 not stated here
CosyVoice 2 tokenizer (arXiv 2412.10117) 25 Hz 1 (FSQ, 6,561 codes) 25 not stated here
GLM-4-Voice tokenizer (arXiv 2412.02612) 12.5 Hz 1 (VQ on Whisper) 12.5 175 bps, so 175/12.5=14 175 / 12.5 = 14 bits per token (derived)
VibeVoice tokenizer (arXiv 2508.19205) 7.5 Hz continuous latents none 3200x downsampling of 24 kHz audio
DAC (arXiv 2306.06546) about 86 Hz at 44.1 kHz 9 × 1024 86×9≈774 86 \times 9 \approx 774 (derived) about 8 kbps; 86×9×10≈7.7 86 \times 9 \times 10 \approx 7.7 kbps (derived)
Freeze-Omni decoder (arXiv 2411.00774) 40 Hz 1 × 1024 40 not stated here
Trap

"Mimi runs at 12.5 Hz" is the frame rate. The LM sees 100 tokens per second on the audio side alone, 200 for a user stream plus an agent stream (derived), and that is why the depth transformer exists (next section). Single-codebook codecs avoid this: their frame rate is their token rate.

In the interview, say:

"Mimi runs at 12.5 Hz, so one frame is 80 ms. With eight codebooks that is 100 tokens a second, and 1.1 kbps at eleven bits per token. Text and both audio streams share that one clock, which is why Moshi has no explicit turn state."

Text rate, audio rate and duplex clocks

Text is slow and audio is fast, so a model that emits both must choose how to align them. This section shows the two alignments and the clock a duplex model adds on top.

Text tokens against audio frames

Text is slow. Moshi puts text on the same 12.5 Hz grid as audio and fills the empty frames with a PAD token. In English conversational speech padding is about 65% of text-stream tokens (arXiv 2410.00037), so about 35% of frames carry a real token, roughly 0.35×12.5≈4.4 0.35 \times 12.5 \approx 4.4 text tokens/s (derived).

Interleaving models drop the shared grid and fix an order instead. GLM-4-Voice (arXiv 2412.02612) alternates 13 text tokens with 26 speech tokens (1:2). At 12.5 Hz, 26 speech tokens last 26/12.5=2.08 26 / 12.5 = 2.08 s, so the text runs at 13/2.08=6.25 13 / 2.08 = 6.25 tokens/s (derived).

System Ratio or chunk Clock Duration of one unit
Moshi (arXiv 2410.00037) 1 text slot per frame, ~65% PAD 12.5 Hz 80 ms per frame
GLM-4-Voice (arXiv 2412.02612) 13 text : 26 speech (1:2) 12.5 Hz speech 26 tokens = 2.08 s (derived); decoder block of 10 tokens = 0.8 s
MinMo (arXiv 2501.06282) 5 semantic vectors : 15 speech tokens not stated not computable
OmniFlatten (arXiv 2410.17799) text chunk 2, speech chunk 10 not stated not computable
LLaMA-Omni 2 (arXiv 2505.02625) read R = 3, write W = 10 25 Hz 1/25=40 1/25 = 40 ms per token; 10 tokens = 400 ms
SyncLLM (arXiv 2409.15594) time-synchronous chunks 25 Hz HuBERT 160 to 240 ms chunk = 4 to 6 tokens (derived)
DuplexSLA (arXiv 2605.20755) TA4 = 1 text + 4 audio per assistant step 160 ms chunk clock, 80 ms user stride 2 user strides per chunk (derived)

Duplex clocks

A duplex model needs one clock that both directions share. In Moshi, every 80 ms step reads the user's 8 audio codes and emits the agent's text token and 8 audio codes. There is no turn state; silence is just tokens. One temporal-transformer pass plus up to 17 depth sub-steps must finish before the next frame is due. Inference If the temporal pass were free, the budget is 80/17≈4.7 80 / 17 \approx 4.7 ms per sub-step (derived).

one frame = 80 ms user audio 8 codes/frame agent text mostly PAD agent audio 8 codes/frame PAD word PAD PAD PAD word PAD PAD word PAD PAD word 80 ms 0 0.25 s 0.5 s 0.75 s 1.0 s
One second on the shared 12.5 Hz clock. Every lane advances every 80 ms; the agent text lane is mostly PAD. Token placement is schematic.

Other systems decide less often than they run:

System Decision granularity
Moshi (arXiv 2410.00037) Every frame, 80 ms
DuplexSLA (arXiv 2605.20755) 160 ms chunk clock; user stream advances in 80 ms strides
SyncLLM 160 to 240 ms chunks (arXiv 2409.15594)
LLaMA-Omni 2 (arXiv 2505.02625) 400 ms speech chunks (10 tokens at 25 Hz, derived)
MiniCPM-o 4.5 (arXiv 2604.27393) Ablation compares 1.0, 0.2 and 0.1 s chunks, and the 0.2 and 0.1 s rows score lower (Table 1); the LLM backbone needs 3-4 decoding steps per second
DiffuPlex (arXiv 2610.12214) 12.5 Hz frames; one backbone wake predicts several future frames

Latency in frames, video alignment and vocabulary

Latency is easiest to reason about in frames. The same clock arithmetic also aligns audio with video, and fixes the vocabulary for the interview.

Seconds to frames, and Moshi's latency

Divide any delay by 0.08 s to count frames.

Delay Seconds Frames at 12.5 Hz (derived)
Moshi acoustic delay 1 (arXiv 2410.00037) 0.08 1
Moshi theoretical latency (acoustic delay 1) 0.16 2
Moshi theoretical latency (acoustic delay 2) 0.64 8
Moshi pretraining text-audio delay, randomised -0.6 to +0.6 -7.5 to +7.5
GLM-4-Voice streaming decoder block (arXiv 2412.02612) 0.8 10
DSM TTS audio delay (arXiv 2509.08753) 1.28 16
DSM ASR text delay, default (arXiv 2509.08753) 2.5 31.25 (source: about 31)
Hibiki minimum target lag (arXiv 2502.03382) at least 2 at least 25

Moshi's 160 ms is one 80 ms frame plus one 80 ms acoustic-delay step: 2×80=160 2 \times 80 = 160 ms (derived decomposition). The paper reports about 200 ms in practice. With acoustic delay 2 the paper states a theoretical latency of 8 timesteps, 640 ms (arXiv 2410.00037). Confirmed

Trap

Do not generalise the 160 ms into a formula such as "(1 + delay) frames". Delay 2 would give 240 ms, not the 640 ms the paper quotes, and this chapter does not derive how the 8 timesteps decompose. Quote the two numbers as stated and say which acoustic delay each belongs to.

Video alignment

Video frames run at 25 or 30 fps, against 12.5 Hz for audio tokens. At 25 fps there are exactly 2 video frames per audio frame. At 30 fps there are 30/12.5=2.4 30 / 12.5 = 2.4 , which is not an integer, so the two streams cannot share a frame grid (derived).

Video latents are coarser than pixel frames. Wan 2.1's causal VAE has a latent length of about 1+T/4 1 + T/4 for T T frames (arXiv 2503.20314), so 25 fps becomes 6.25 latent frames per second and 30 fps becomes 7.5 (derived).

Ovi aligns the two token rates without resampling. It runs RoPE on both streams and scales the audio RoPE frequencies by 31/157≈0.197 31/157 \approx 0.197 , so 31 video latent frames line up with 157 audio tokens (arXiv 2510.01284). That is about 157/31≈5.06 157 / 31 \approx 5.06 audio tokens per video latent frame (derived).

Say it right in the interview

Term What it counts Example Common slip
Sample rate Waveform samples per second (Hz, kHz) 24 kHz audio into Mimi Calling it the frame rate
Hop Spacing between STFT windows (ms) 10 ms hop gives 100 Hz mel frames Confusing it with the LLM's step
Frame rate Latent vectors per second after an encoder or codec Mimi 12.5 Hz, 80 ms per frame Treating a frame as one token
Token rate Discrete ids per second, summed over codebooks Mimi 100 tokens/s Saying "12.5 Hz" for it
Bitrate Bits per second of the code Mimi 1.1 kbps Quoting it without codebook size
Chunk size Audio processed or emitted per step; a multiple of frames LLaMA-Omni 2: 400 ms; DuplexSLA: 160 ms Using "chunk" and "frame" interchangeably
Stride How far the input advances per step DuplexSLA user stream: 80 ms Equating it with the chunk
Delay (lookahead) Offset between streams, or future context a model waits for Moshi acoustic delay 1; DSM ASR text delay 2.5 s Equating it with end-to-end latency
Latency Time from an event to the response Moshi 160 ms theory, about 200 ms practice Comparing theory with measured numbers
In the interview, say:

"I keep four numbers apart: sample rate, frame rate, token rate and chunk size. Mimi is 24 kHz in, 12.5 Hz frames, 100 tokens a second, and chunks are whatever the system batches on top."

Timing logic: choosing input and output rates

Two rates matter when you design a speech model: how fast audio enters the LLM, and how fast the LLM must emit audio frames. They are set by different forces, and the output rate is the one that fixes your latency floor. The clocks themselves are defined in Rates, frames and clocks; this section covers how to choose them. Numbers are cited to the paper; arithmetic is marked derived, reasoning is marked Inference.

INPUT: continuous, fast, then pooled Waveform 16 kHz Mel frames 100 Hz Encoder 50 Hz Adapter 12.5 Hz LLM hop 10 ms stride 2 pool 4x embeds OUTPUT: discrete, slow, one step per frame one frame per step Depth / MTP Q codes per frame Codec decoder 12.5 Hz frames Audio out 24 kHz 8 x 12.5 1920 samples 100 tokens/s for Q = 8 (derived) Rates shown for a Mimi-style 12.5 Hz, Q = 8 design.
Figure: the input ladder shrinks the rate before the LLM; the output ladder expands one LLM frame into Q codes and then into samples.

The input path, step by step

  1. 16 kHz waveform, cut into 25 ms windows with a 10 ms hop: 100 Hz mel frames (arXiv 2212.04356).
  2. A Whisper-style encoder has a stride-2 convolution: 50 Hz, 20 ms per frame (arXiv 2212.04356; 50 Hz is derived).
  3. A pooling or adapter stage cuts the rate again, to 10 to 25 Hz before the LLM.
System Encoder rate Rate into the LLM How
Whisper (arXiv 2212.04356) 50 Hz (derived) not applicable (ASR model) Conv stride 2 on 100 Hz mel
Qwen2-Audio (arXiv 2407.10759) Whisper-large-v3 init, 25 ms window, 10 ms hop 25 Hz (derived from 40 ms) Pooling stride 2; the paper says each output frame is about 40 ms
Voxtral (arXiv 2507.13264) 50 Hz 12.5 Hz 4x adapter
Granite-speech (arXiv 2505.08699) 100 Hz log-mel, then 50 Hz 10 Hz 2x stacking, then Q-Former (K = 15, N = 3)
Qwen3-Omni AuT (arXiv 2509.17765) 8x Conv2D downsample 12.5 Hz; each temporal ID is 80 ms Conv downsample inside the encoder
Kimi-Audio (arXiv 2504.18425) 50 Hz Whisper features 12.5 Hz Adaptor "from 50Hz to 12.5Hz"; discrete semantic tokens also at 12.5 Hz
GLM-4-Voice tokenizer (arXiv 2412.02612) 25 Hz encoder output 12.5 Hz 2x downsample, then VQ (single codebook)
Step-Audio 2 (arXiv 2507.16632) 25 Hz tokenizer 12.5 Hz 2x adaptor on the LLM side

Inference Input can be fast and continuous because the audio already exists. The encoder reads it in parallel with no sampling loop, so a high rate only costs encoder compute. Output must be generated one step at a time, each step conditioned on the last, so every extra frame per second is an extra serial LLM step. The pooling stage exists to move that cost out of the LLM, where each position is expensive.

The output path: what fixes the rate

The output rate is the frame rate of the audio codec (or tokenizer) the LLM predicts. Each frame becomes one id per codebook, so tokens/s=f×Q \text{tokens/s} = f \times Q , and the bitrate adds the bits per id:

bitrate=f×Q×log⁡2K \text{bitrate} = f \times Q \times \log_2 K

Mimi: 12.5×8×11=1100 12.5 \times 8 \times 11 = 1100 bps (derived), matching the 1.1 kbps in the paper (arXiv 2410.00037). The paper states frame and stride correspond to 80 ms, and that 8 codebooks at 12.5 Hz give "a sequence length of 100 steps per second", against around 3 to 4 text tokens per second for English.

Codec Frame rate Codebooks Bitrate Stated rationale
Mimi (arXiv 2410.00037) 12.5 Hz 8 1.1 kbps 100 steps per second at Q = 8, against 3 to 4 text tokens per second
DAC (arXiv 2306.06546) 44.1 kHz / 512, about 86 Hz (derived) 9 (10 bits each) not stated here "A lower frame rate is desirable when training a language model", shorter sequences
SNAC speech (arXiv 2410.14411) 12 / 23 / 47 Hz 3 scales 984 bps Multi-scale, coarse to fine
WavTokenizer (arXiv 2408.16532) 40 or 75 tokens/s 1 0.5 / 0.9 kbps Single quantizer, 24 kHz
X-Codec 2 (arXiv 2502.04128) 50 Hz 1 (65,536 codes) 800 bps (derived) none given
CosyVoice 2 (arXiv 2412.10117) 25 Hz 1 (FSQ, 6,561 codes) not stated here none given here
GLM-4-Voice (arXiv 2412.02612) 12.5 Hz 1 175 bps "Ultra-low bitrate"
VibeVoice (arXiv 2508.19205) 7.5 Hz continuous VAE, no codebooks not applicable Lower rate "substantially reduces the number of decoding steps"
TaDiCodec (arXiv 2508.16790) 6.25 Hz 1 87.5 bps Needs the text at decode time
SiTok (arXiv 2602.06602) 12.5 Hz default not covered here not covered here Default "to balance efficiency and performance"

The deeper table of codec bitrates is in Codec frame rates, tokens per second, bitrate.

How to choose the output rate

  • Sequence length and compute. Mimi's 100 steps per second is the figure the paper weighs against 3 to 4 text tokens per second (arXiv 2410.00037). VibeVoice's 7.5 Hz is chosen to cut decoding steps (arXiv 2508.19205).
  • Reconstruction quality. WavTokenizer scores PESQ 1.70 and UTMOS 3.60 at 40 tokens/s against 2.37 and 4.05 at 75 (arXiv 2408.16532, Table 1). Pooling X-Codec 2 to a 25 Hz variant raises UTMOSv2 on seven languages, for example Dutch 2.168 to 2.457 (arXiv 2601.20185).
  • Intelligibility and LM difficulty. SiTok WER is 23.0 at 6.25 Hz, 4.06 at 12.5 Hz and 3.05 at 25 Hz (arXiv 2602.06602). TaDiCodec reaches 6.25 Hz with WER 3.02, but removing the text input at decode causes "significant performance degradation under extremely low token rate" (arXiv 2508.16790). A probing study measures WavTokenizer WER at 11.37% (75 tokens/s) against 24.36% (40 tokens/s) (arXiv 2606.16969, Table 1); it says models below 50 Hz without architectural accommodations degrade, and it attributes its own DAC cliff to a training misconfiguration, so it is not evidence of an intrinsic floor.
  • Text-rate matching. GLM-4-Voice alternates 13 text tokens and 26 speech tokens, a 1:2 ratio chosen so text generation is "consistently faster than speech" (arXiv 2412.02612). Details: text and audio clocks.
  • Reaction granularity. Inference One frame is the smallest unit the model can emit or react to: 80 ms at 12.5 Hz, 40 ms at 25 Hz.

Why 12.5 Hz

Three pressures meet at 12.5 Hz, and a fourth sets the cost.

  • Sequence length and compute. Voxtral cuts its 50 Hz encoder output with a 4x adapter to 12.5 Hz (arXiv 2507.13264). Thirty minutes (1,800 s) at 50 Hz is 1800×50=90,000 1800 \times 50 = 90{,}000 positions; at 12.5 Hz it is 22,500 (derived).
  • Text-rate matching. Moshi puts English at around 3 to 4 text tokens per second against 100 audio steps per second at 8 codebooks (arXiv 2410.00037). At 12.5 Hz that is about 12.5/4≈3 12.5 / 4 \approx 3 frames per text token (derived).
  • The quality knee. SiTok WER is 23.0, 4.06 and 3.05 at 6.25, 12.5 and 25 Hz (arXiv 2602.06602). Going from 12.5 to 25 Hz buys little; going to 6.25 Hz costs a lot.
  • Reaction quantum. An 80 ms frame is shorter than the median 151 ms by which human listeners start speaking before the other turn ends in smooth floor transfers (arXiv 2608.25218). Inference So the frame is not the binding constraint on human-like timing.
  • The cost. Pooling discards fine acoustic detail. Kimi-Audio keeps continuous 50 Hz Whisper features alongside its 12.5 Hz discrete semantic tokens (arXiv 2504.18425).

Who emits what, per frame

The LLM does not predict one text token per input speech frame. How text lines up with frames depends on the design:

Design What happens per frame or chunk Source
Encoder + adapter (understanding, ASR) Frames are context only. No per-frame prediction; text is generated afterwards, with no 1:1 alignment Qwen2-Audio (arXiv 2407.10759), Voxtral (arXiv 2507.13264)
Chunked streaming ASR Text tokens are generated per chunk until an end-of-chunk token; 1.28 s chunks SpeechLLM-XL (arXiv 2410.03752)
Time-aligned delayed streams One text-stream token per 80 ms frame, mostly PAD (about 65% in Moshi); DSM's ASR text lags audio by a default 2.5 s Moshi (arXiv 2410.00037), DSM (arXiv 2509.08753)
Interleaved output User speech is context; output alternates 13 text : 26 speech tokens, text leading GLM-4-Voice (arXiv 2412.02612)
Full-duplex dual stream Each frame: read user audio tokens, emit own text token and own audio tokens (K = 17 sub-steps) Moshi (arXiv 2410.00037)

So text and speech are 1:1 per frame only in time-aligned designs, and that is why those designs pad the text stream.

Decoupling the backbone rate from the output rate

If every codebook needed its own backbone step, Q codebooks at 12.5 Hz would force a 12.5×Q 12.5 \times Q Hz backbone. Designs avoid this by letting one backbone step cover many tokens:

  • Moshi: a depth transformer fills K = 2Q + 1 = 17 sub-tokens within each 80 ms frame (arXiv 2410.00037).
  • Qwen3-Omni Talker: a linear head predicts codebook 0 per frame, and an MTP module generates the residual codebooks (arXiv 2509.17765).
  • VITA-Audio: ten audio tokens in a single forward pass, 3 to 5x speed-up (arXiv 2505.03739).
  • MusicGen: a delay pattern shifts codebook k by k-1 steps, so one pass predicts all codebooks (arXiv 2306.05284).
  • Patches: VibeVoice and DiTAR predict a patch per step, see continuous autoregression.
  • DiffuPlex predicts multiple future user and assistant frames in one backbone wake: 1.46x and 1.59x wall-clock speedups (arXiv 2610.12214).

Minimums and rules of thumb

  1. Pool the encoder to 12.5 to 25 Hz before the LLM (arXiv 2507.13264, 2509.17765, 2412.02612, 2504.18425).
  2. Default output rate 12.5 Hz (arXiv 2410.00037, 2412.02612, 2509.08753, 2602.06602); SiTok shows a steep WER penalty below it.
  3. Go to 25 Hz when reconstruction is the bottleneck (arXiv 2412.10117, 2601.20185; SiTok has its best WER at 25 Hz, arXiv 2602.06602).
  4. A lower frame rate is cheaper for the LM (arXiv 2306.06546, 2410.00037).
  5. When interleaving, let text lead speech (arXiv 2412.02612 at 1:2; Moshi's 3 to 4 text tokens/s, arXiv 2410.00037).
  6. With many codebooks, emit several tokens per backbone step (arXiv 2410.00037, 2509.17765, 2505.03739, 2610.12214).
  7. Inference The minimum reaction time is one frame. Practical chunks are larger: Moshi's latency is 160 ms in theory and 200 ms in practice (arXiv 2410.00037); SyncLLM uses chunks of 160 to 240 ms (arXiv 2409.15594).
  8. Inference from the source 6.25 Hz is viable only when the transcript is available at decode time (arXiv 2508.16790, ablation).

Worked example

Derived from the rates above, not measured.

12.5 Hz, 8 codebooks, depth transformer 25 Hz, 1 codebook (CosyVoice 2 style)
Tokens per second 12.5×8=100 12.5 \times 8 = 100 25×1=25 25 \times 1 = 25
Frame period, deadline 80 ms per frame 40 ms per frame
Backbone steps per second 12.5 (the depth pass fills the other 7 codebooks) 25
Minimum reaction quantum one frame, 80 ms one frame, 40 ms

The 25 Hz design reacts twice as finely but runs the backbone twice as often (derived). The 12.5 Hz design runs the backbone half as often but adds a depth pass inside each 80 ms deadline. See the per-frame deadline.

In the interview, say:

"I keep five numbers apart. Sample rate is samples per second, like 24 kHz. Feature rate is the 100 Hz mel hop, encoder frame rate is 50 Hz, and the rate into the LLM is pooled to 12.5 Hz. Token rate is frame rate times codebooks, 100 per second for Mimi, and bitrate adds bits per token, 1.1 kbps. A chunk is a batch of frames, so it is a latency choice and not a rate."

Producing text and speech together: Moshi

Voice-to-voice models that "reason and talk" must emit text and audio at the same time. The sources show three coupling patterns. This section covers Moshi, the delayed parallel stream; the next covers delay as a knob and fixed interleaving. The control head that decides when to speak is in the full-duplex sections.

Pattern How text and audio line up Models
Delayed parallel stream Same clock; text and audio are separate token streams offset by a chosen delay Moshi (arXiv 2410.00037), DSM (arXiv 2509.08753), Hibiki (arXiv 2502.03382)
Fixed interleave One sequence; N text tokens, then M speech tokens, in a fixed ratio GLM-4-Voice (arXiv 2412.02612), Step-Audio 2 (arXiv 2507.16632)
Thinker-Talker The Talker uses the Thinker's hidden representations to produce audio tokens Qwen2.5-Omni (arXiv 2503.20215), Qwen3-Omni (arXiv 2509.17765)

Moshi: the codec and the clock

Moshi (arXiv 2410.00037) models speech with Mimi tokens at 12.5 Hz. Mimi has 8 RVQ levels of 2048 codes. The first level is a semantic code distilled from WavLM; the other seven are acoustic. The codec is causal, with an 80 ms frame. Confirmed

Each 80 ms frame holds 17 streams: 1 text token, 8 Moshi audio tokens and 8 user audio tokens (K=2Q+1=17 K = 2Q + 1 = 17 with Q=8 Q = 8 ). The user stream is just another input: the model hears the user continuously while it speaks.

Two transformers per frame

Temporal frame t-1 Temporal transformer frame t, 4096-d, 32 layers Temporal frame t+1 state over time context vector sampled tokens Depth transformer: 1024-d, 6 layers, up to 17 sub-steps in order txt a1 a2 a3 a4 a5 a6 a7 a8 u1 u2 u3 u4 u5 u6 u7 u8 text agent audio, Mimi levels 1 to 8 user audio, levels 1 to 8 within one 80 ms frame
Moshi at one 80 ms frame. The temporal transformer runs over frames; the depth transformer expands each context vector into up to 17 sub-tokens, which are fed back as input to the next frame.
  • Temporal transformer: 4096-dim, 32 layers, run once per frame over time. It is initialised from the Helium text LM (about 2.1T training tokens) and outputs a context vector.
  • Depth transformer: 1024-dim, 6 layers, random initialisation. It turns the context vector into up to 17 sub-tokens inside the frame.
  • The split keeps the big model at 12.5 steps per second. Only the small model runs 17 times per step. Inference

Inner Monologue: text, PAD and delays

Moshi predicts a text token for the agent's own speech on the same 12.5 Hz grid. Frames with no new word carry PAD. The paper also defines an EPAD token, inserted before the next word to mark the end of the padding. Padding is about 65% of text-stream tokens in English conversational speech.

Text is the first sub-step of each frame, so that frame's audio tokens are conditioned on it (derived from the sub-step order: text, Moshi audio, user audio). Inference

Delay Pretraining Fine-tuning
Text-audio delay Randomised from -0.6 s to +0.6 s 0
Acoustic delay 2 steps 1 step

Latency follows from the delay: 160 ms theoretical with acoustic delay 1, about 200 ms in practice. The paper also gives 640 ms for acoustic delay 2. The recipe: Helium text LM, then 7M h of audio transcribed with Whisper large-v3 (single stream), then multi-stream post-training on diarised audio, a Fisher fine-tune (2,000 h of phone conversation), and instruction tuning on more than 20k h of synthetic speech (arXiv 2410.00037). Reported

In the interview, say:

"Moshi keeps text and audio on one 12.5 Hz clock and pads the text stream, about 65% PAD. A small depth transformer expands each 80 ms frame into 17 sub-tokens, so the big model runs only 12.5 times a second."

Ways to model streaming ASR and TTS in speech LLMs

Streaming ASR and streaming TTS each split into a handful of families, and each family answers two questions. For ASR: what sets the latency floor, and who decides when to emit a word? For TTS: does the text arrive complete or incrementally, how far does the decoder look ahead, and how many tokens come out per step? Numbers are the authors' own, on different hardware and test sets, so compare shapes, not digits. Background is in Streaming approaches for ASR, Streaming and low latency, Moshi and Delay and interleaving.

Streaming ASR families

Family Latency source Future context Quality trade-off Examples
1. Chunked encoder, LLM emits per chunk Chunk length plus decode per chunk Bounded by the chunk WER 2.5 / 6.5 at 2.56 s, 2.7 / 6.7 at 1.28 s, 3.1 / 7.8 at 0.32 s SpeechLLM-XL (arXiv 2410.03752)
1b. Per-embedding wait token 240 ms input frame plus 960 ms encoder right context About 960 ms 80M model, WER 3.0 / 7.4 on LibriSpeech; RTF 0.79 greedy Speech ReaLLM (arXiv 2406.09569)
2. Transducer with LLM predictor Segment size Depends on segment 160 ms segment: 2.47 / 6.53 against 3.65 / 8.96 for a standard RNN-T Transducer-Llama (arXiv 2412.16464)
3. Time-aligned delayed text stream Fixed delay (2.5 s default for ASR) Supplied by the delay 1.7 / 4.3 against 3.3 / 4.7 for streaming Parakeet-TDT-v2; delay precision about 300 ms Kyutai DSM (arXiv 2509.08753)
4. Read/write policies on an offline model Chunk size and policy Some look-ahead LocalAgreement: 3.3 s long-form latency; Simul-Whisper: 1 s chunk, 1.46% average degradation (abstract) LocalAgreement (arXiv 2307.14743), Simul-Whisper (arXiv 2406.10052)
5. One encoder for streaming and offline Attention window size The window 1.7B offline 2.69 average against streaming 3.33 Qwen3-ASR (arXiv 2601.21337)
Chunked text per chunk audio chunk audio chunk audio chunk audio chunk words + EOC words + EOC words + EOC Wait token decision per frame f1 f2 f3 f4 f5 f6 f7 f8 wait wait the wait cat wait wait sat Delayed stream text lags audio audio audio audio audio text text text delay d Read / write commit the agreed prefix update n: the cat sat update n+1: the cat sat on common prefix emit: the cat sat
Four ways to decide when a word is final. Chunked models emit text after each chunk (EOC is the end-of-chunk token), wait-token models decide per frame, delayed-stream models shift text behind audio by a fixed d, and read/write policies commit only what successive hypotheses agree on.

Chunked (SpeechLLM-XL). A decoder-only model reads audio in fixed chunks and emits the chunk's text followed by an end-of-chunk token. Training uses CTC forced alignment and an auxiliary CTC loss weighted 0.5. Chunk length is the latency dial: test clean / other WER is 2.5 / 6.5 at 2.56 s, 2.7 / 6.7 at 1.28 s and 3.1 / 7.8 at 0.32 s (arXiv 2410.03752).

Wait token (Speech ReaLLM). An RNN-T-style blank or wait token is predicted after every input embedding, so the LLM decides per frame whether to emit. Latency is the 240 ms input frame plus 960 ms of encoder right context. The 80M model reaches WER 3.0 / 7.4 on LibriSpeech, with RTF 0.79 under greedy decoding (arXiv 2406.09569).

Transducer with an LLM predictor (Transducer-Llama). The transducer keeps its streaming alignment and uses a Llama as the prediction network. With 160 ms segments and a Llama3-8b predictor, WER is 2.47 / 6.53 against 3.65 / 8.96 for a standard RNN-T. The paper uses a weak-to-strong LM swap and MWER fine-tuning (arXiv 2412.16464).

Delayed stream (Kyutai DSM). Text and audio share a clock and the text is simply delayed, 2.5 s by default for ASR. DSM-ASR scores 1.7 / 4.3 on LibriSpeech clean / other, against 3.3 / 4.7 for streaming Parakeet-TDT-v2, with delay precision of about 300 ms (arXiv 2509.08753). This is the family from Delay and interleaving.

Read/write policies. These wrap an offline model. LocalAgreement takes the longest common prefix of n = 2 successive updates over a buffer of about 30 s trimmed at sentence boundaries, at 3.3 s latency on long-form audio in the abstract (Table 3: 3.62 s at a 1.0 s minimum chunk; arXiv 2307.14743). Simul-Whisper stops decoding at the end of the received audio using cross-attention, with truncation detection (arXiv 2406.10052). Its abstract reports 1.46% average degradation at a 1 s chunk; Table 1 gives 2.34 for Large-v2, so I treat the abstract figure with care.

Unified streaming and offline (Qwen3-ASR). The AuT encoder runs at 12.5 Hz with a flash-attention window of 1 to 8 s, so one model serves both modes. The 1.7B model averages 2.69 offline and 3.33 streaming (2 s chunks in the evaluation); the 0.6B model reaches a time to first token as low as 92 ms with vLLM (arXiv 2601.21337).

Inference Two families are not covered because I found no primary source: CTC partials with LLM correction, and learned read/write agents.

Streaming TTS families

Family Latency source Text input Key knob Examples
1. Full text, AR codec LM plus causal decoder LM time to first packet plus decode Complete (sentence) Packet of 4 tokens = 320 ms Qwen3-TTS (arXiv 2601.15621), Llasa (arXiv 2502.04128)
2. Incremental text, interleaved Text tokens needed before the first speech Arrives incrementally Ratio N : M CosyVoice 2 (arXiv 2412.10117), SyncSpeech (arXiv 2502.11094), SpeakStream (arXiv 2505.19206)
3. AR LM plus chunk-wise causal flow Flow chunk plus look-ahead Either Chunk size, look-ahead CosyVoice 2, Kimi-Audio (arXiv 2504.18425)
4. Multi-token prediction Forward passes per audio token Model dependent Tokens per pass, audio delay VITA-Audio (arXiv 2505.03739)
5. Fixed text : speech ratio in dialogue First text chunk plus first speech chunk From the model's own reply Ratio, block size GLM-4-Voice, MinMo, OmniFlatten, LLaMA-Omni 2
Full text text first, then audio all text known packet packet packet packet Interleaved N : M text chunk, speech chunk N text N text N text M speech M speech M speech Chunk-wise flow look-ahead before decode tokens c1 tokens c2 tokens c3 tokens c4 flow c1 flow c2 flow c3 first n tokens of c2 audio c1 audio c2 audio c3
What differs is when speech may start. Full-text models wait for all the text but stream audio in small packets, interleaved models alternate N text and M speech tokens so speech can start early, and chunk-wise flow waits for a few look-ahead tokens before decoding each chunk.

1. Full text, causal decoder (Qwen3-TTS). The tokenizer runs at 12.5 Hz and is causal with no look-ahead, so a packet of 4 tokens covers 320 ms. For the 0.6B model, time to first packet is 93 ms for the LM plus 4 ms of decode, 97 ms in total; the 1.7B model takes 101 ms (Table 2; arXiv 2601.15621). The Sesame CSM README documents a single generate call that returns a complete clip and no streaming mode (github.com/SesameAILabs/csm).

2. Incremental text, interleaved. CosyVoice 2 streaming mixes text and speech tokens at N = 5 to M = 15 (arXiv 2412.10117). SyncSpeech starts speaking after 2 text tokens, where CosyVoice 2 needs 5; its first packet takes 0.06 s against 0.22 s for CosyVoice 2 on LibriSpeech test-clean (arXiv 2502.11094). SpeakStream emits each word's speech after the word, using forced-aligned boundaries, at about 30 ms TTS latency (arXiv 2505.19206). This family fits a TTS that consumes another LLM's streamed output.

3. AR LM plus chunk-wise causal flow. CosyVoice 2 trains one flow-matching model under four masks: full-causal, chunk-M, chunk-2M and non-causal. Each mask sets how much future context a chunk sees (arXiv 2412.10117). The paper gives latency formulas, not a measured first packet. Kimi-Audio cuts audio into chunks of about 1 s and appends the next n semantic tokens (for example 4) from the following chunk before decoding. This is training-free and delays the first chunk by n tokens (arXiv 2504.18425, section 2.4).

4. Multi-token prediction (VITA-Audio). The MCTP module predicts about 10 audio tokens per forward pass. The audio token delay is 0, against 1 for Moshi and 13 for GLM-4-Voice (Table 1). The streaming first chunk drops from 236 ms to 53 ms (Table 9; arXiv 2505.03739).

5. Fixed ratio in dialogue models. GLM-4-Voice interleaves 13 text : 26 speech tokens in 0.8 s blocks (arXiv 2412.02612). MinMo uses 5 semantic : 15 speech tokens, with about 600 ms end to end (arXiv 2501.06282). OmniFlatten uses 2 : 10 and reports 193 ms against Moshi at 553 ms (arXiv 2410.17799). LLaMA-Omni 2 reads R = 3 and writes W = 10 tokens; its first speech chunk takes about 583 ms on 7B, the sum of LLM, TTS, flow and vocoder time (arXiv 2505.02625).

Inference A sixth family, non-autoregressive or flow models run chunk by chunk, is not covered because I found no primary streaming paper for F5 or ZipVoice.

How to choose

Design rules (labelled opinion, derived from the sources above)
  • Text is complete before speech starts: use a full-text AR codec LM with a causal decoder (Qwen3-TTS reaches 97 ms).
  • Text arrives token by token from another LLM: use an interleaved ratio model (CosyVoice 2, SyncSpeech).
  • ASR needs partials at a fixed, acceptable delay: use a DSM-style delayed stream. SpeechLLM-XL gives the WER-versus-chunk curve if you prefer chunks.
  • You already run Whisper: use Simul-Whisper for no retraining, or LocalAgreement for simplicity at the cost of more WER at the same latency.

Inference This maps onto the unified speech LLM design. The listen head is a delayed-stream or chunked ASR. The speak head is incremental-text interleaved TTS, consuming the tokens that the downstream reasoning LLM streams out.

In the interview, say:

"Streaming ASR comes in a few families: chunks with an end-of-chunk token, a per-frame wait token, a delayed text stream, or a read/write policy on top of Whisper. Streaming TTS depends on whether text arrives complete or token by token, so I would use interleaved text and speech for a speak head fed by another LLM. For listening I would take a delayed stream or chunked ASR, because chunk length or delay is the one dial that trades WER for latency."

Trap

The sources contradict themselves in places. DSM-TTS appears with 1.28 s in one place and 1.6 s in another. Simul-Whisper's abstract and its Table 1 disagree, and MinMo's abstract (about 100 ms speech to text) differs from section 4.5 (95 and 150 ms). Numbers from different hardware and test sets are not comparable.

Delay as a knob and interleaved decoders

Moshi's text-audio offset is a design choice, and other systems make the same choice differently. This section covers delay as a knob (DSM, Hibiki) and the fixed-ratio interleaving families.

DSM: delay as a knob

Delayed Streams Modeling (arXiv 2509.08753) pre-aligns streams and applies a fixed delay per stream. In the paper's framing, ASR corresponds to the text stream being delayed relative to audio, and TTS to the opposite.

Task Delayed stream Delay Authors' result
ASR Text, behind audio 2.5 s default, about 31 frames Short-form average WER 6.4 (Canary-Qwen-2.5B 5.6; Whisper large-v3 7.5)
TTS Audio, behind text 1.28 s, 16 steps Latency 150 ms at batch size 1

Inference Delay becomes a per-stream setting, not an architecture. ASR needs audio lookahead before it commits a word. TTS needs text lookahead before it commits prosody. For "text and voice at once", the same decoder with a chosen offset is the lever.

Hibiki: per-word delay

Hibiki (arXiv 2502.03382) is a multistream decoder-only model for speech translation. It sets a delay per word, using the perplexity of an off-the-shelf text translation model (MADLAD-3B) on source prefixes. The target is required to lag the source by at least 2 s. The authors report LAAL of 3.4 s on short-form and 5.0 s on long-form audio, against Seamless at 2.8 s and 4.2 s. On the same tables Hibiki scores ASR-BLEU 35.5 against Seamless at 33.8 (short-form) and 26.6 against 23.9 (long-form).

Interleaving and streaming decoders

Model Mechanism Rates and latency
GLM-4-Voice (arXiv 2412.02612) Interleave 13 text : 26 speech tokens; open weights 12.5 Hz single codebook, 175 bps; streaming decoder block of 10 tokens = 0.8 s
Mini-Omni (arXiv 2408.16725) Text-delay parallel decoding over the 8 codebook layers of SNAC; batch-parallel inference to carry text reasoning into audio Not stated here
Mini-Omni2 (arXiv 2410.11190) Command-based interruption ("Stop Omni") through frame-level irq / n-irq tokens Not stated here
LLaMA-Omni 2 (arXiv 2505.02625) Streaming decoder from Qwen2.5-0.5B; read R = 3 fused representations, write W = 10 speech tokens 25 Hz; 400 ms chunk (derived); response latency 542.7 ms (0.5B) to 663.3 ms (14B), authors' Table 1
VITA-Audio (arXiv 2505.03739) Multiple Cross-modal Token Prediction (MCTP) module emits several audio tokens per forward pass; trained on open-source data only The authors report a 3 to 5x inference speedup at 7B
Qwen2.5-Omni (arXiv 2503.20215) Talker uses Thinker hidden representations to produce audio tokens; sliding-window DiT with a lookback of 2 blocks and a lookahead of 1 Not stated here
Qwen3-Omni (arXiv 2509.17765) Talker predicts codebook 0 per frame; ~80M MTP module predicts residual codebooks; causal ConvNet Code2Wav decodes frame by frame 12.5 Hz; theoretical cold-start first-packet latency 234 ms (audio), 547 ms (video)
Step-Audio 2 (arXiv 2507.16632) Text and audio tokens interleaved at a fixed ratio; flow-matching module + HiFi-GAN vocoder; Step-Audio 2 mini is open-source Encoder 25 Hz, adaptor 12.5 Hz
Kimi-Audio (arXiv 2504.18425) Parallel text and audio heads; flow-matching detokenizer turns 12.5 Hz semantic tokens into 50 Hz mel, then a vocoder, chunk-wise with look-ahead Not stated here

Reported All latencies are the authors' own figures under different hardware and definitions.

Inference Moshi aligns text to the clock (padding fills the gaps). Interleaving aligns text to the order (no clock, so no padding, but no free time axis). Thinker-Talker separates the two jobs: the Thinker can finish a thought before the Talker voices it. I found no source here that shows sustained reasoning and live speech together in one duplex model.

Trap

A ratio is not a duration. "13:26" tells you the mix of tokens, and only the speech token rate turns it into seconds. "First chunk" latency is also not the same as steady-state delay.

In the interview, say:

"DSM shows the offset between streams is a setting: delay the text for ASR, delay the audio for TTS. Interleaving models fix an order instead of a clock, so a ratio like 13:26 only becomes a duration through the speech token rate."

Full-duplex models compared

A full-duplex model listens while it speaks. Backchannels, overlaps and barge-in then come from the model's own decisions, not from a VAD timer. The sources group the designs by where the "speak or listen" decision lives.

Survey levels L0 to L3

A 2026 survey (arXiv 2606.19453) defines four levels. L0 is an external scheduler around a half-duplex model. L1 is a control head reading the LLM's hidden states. L2 encodes the duties in the token stream itself. L3 is representation-level and not realised yet. Its line to remember: "architecture sets capacity, training realizes it".

Inference My mapping: control-head models are L1; dual-stream, flattened, chunked and action-channel models are L2.

Families and numbers

Family Model How it works Reported numbers
Dual-stream Moshi (arXiv 2410.00037) User and agent audio plus agent text on one 80 ms clock 160 ms theory, about 200 ms practice
Dual-stream PersonaPlex (arXiv 2602.06053) Moshi-based duplex model; hybrid system prompt of a text role prompt plus a voice-cloning speech sample Model card, Full-Duplex-Bench: smooth turn-taking latency 0.170, user-interruption latency 0.240 (units not stated); NVIDIA Open Model License (model card)
Time-synchronous chunks SyncLLM (arXiv 2409.15594) 160 to 240 ms chunks of 25 Hz HuBERT tokens Designed for Internet latencies of up to 240 ms
Flattened OmniFlatten (arXiv 2410.17799) Input speech, output text and output speech interleaved in one sequence; text chunks of 2, speech chunks of 10 Average assistant turn-taking response time 193 ms against Moshi's 553 ms (authors' Table 4)
Control head MinMo (arXiv 2501.06282) Full-duplex predictor (one Transformer layer, about 18M parameters); still needs separate AEC and VAD modules; voice token LM interleaves 5 semantic vectors : 15 speech tokens About 600 ms in theory, 800 ms in practice (authors)
Control head Freeze-Omni (arXiv 2411.00774) Frozen LLM; chunk-wise state prediction from the LLM's last layer: keep receiving speech, or the chunk ends the user's speech (with or without interrupting) 745 ms total latency in the authors' latency breakdown
Time-division multiplexing MiniCPM-o 4.5 (arXiv 2604.27393) "Omni-Flow" groups visual, audio and output per chunk Ablation of 1.0, 0.2 and 0.1 s chunks: the 0.2 and 0.1 s rows score lower; backbone needs 3-4 decoding steps per second
Three channels DuplexSLA (arXiv 2605.20755) 160 ms chunk clock; assistant TA4 (1 text + 4 audio); action channel: response, interrupt, backchannel; initialised from Step-Audio 2 mini Turn-taking delay 0.27 s normal, 0.40 s interrupt, 0.32 s backchannel (authors' benchmark)
Rolling masked diffusion DiffuPlex (arXiv 2610.12214) 12.5 Hz; maximum look-ahead W = 16 frames; one backbone wake predicts several future frames 1.46x to 1.59x deployment-path wall-clock speed-up (authors)
Latency is not comparable across this table

Moshi's 160 ms is theoretical; MinMo gives theory and practice; Freeze-Omni averages total latency; PersonaPlex and DuplexSLA report turn-taking delays on their own tests. Hardware and definitions differ. Quote a number with its definition, never as a ranking.

Reported Most figures are authors' own. On DuplexSLA-Bench (self-reported, arXiv 2605.20755), backchannel accuracy is 0.33% for gpt-realtime-1.5 (semantic-vad-high), 40.00% for gemini-3.1-flash-live and 98.33% for DuplexSLA. Instruct-FD (arXiv 2607.20460) finds the best of six full-duplex systems follows turn-taking instructions 64.4% of the time.

Wiring the decision and the turn-taking feel

The same families can be read as three wirings of one decision. The wiring explains most of what makes a duplex model feel like, or unlike, a person talking.

Three ways to wire the decision

A Dual-stream (Moshi, PersonaPlex) one 80 ms clock user agent B Flattened single stream (OmniFlatten) one sequence, three roles user chunk text x2 speech x10 user chunk text x2 speech x10 user chunk C Control head (Freeze-Omni, MinMo) User audio chunk LLM mostly unchanged Speech output State head response tokens hidden states keep listening / interrupted / turn ended
Where the speak-or-listen decision lives: in every frame of two parallel streams (A), in the order of one interleaved sequence (B), or in a small head that reads LLM hidden states (C).
  • Dual-stream: no separate decision; speaking and listening are both tokens on every frame.
  • Flattened: one sequence, so who speaks is decided by which role's tokens come next.
  • Control head: a small classifier reads hidden states and gates a mostly unchanged LLM. This is why Freeze-Omni can keep its LLM frozen.

The 2026 survey (arXiv 2606.19453) calls SyncLLM an L2-shaped but "apparent (not substantive)" full-duplex system.

What causes the turn-taking feel

Inference Two causes follow from the sources, both about the decision and not about speech quality:

  1. Decisions quantised at chunk boundaries. A decision waits for the next boundary, c/2 c/2 on average for chunk length c c (derived). That is 40 ms for an 80 ms frame, 120 ms for a 240 ms chunk and 500 ms for a 1.0 s chunk.
  2. Scarce interaction data. The 2025 survey names synchronous data scarcity (arXiv 2509.14515). The 2026 survey finds that observed behaviour is constrained by the interaction patterns in training and evaluation (arXiv 2606.19453).

A related finding: audio foundation models miss when to speak, interrupt too aggressively and rarely backchannel (Talking Turns, arXiv 2503.01174). Inference My reading: the speech path is not the bottleneck. The bottleneck is the duplex decision, plus ingesting user audio while the model is speaking its own.

Fit for a Synthesia voice agent

The closest patterns are DSM-style delay streams plus an action channel (DuplexSLA), or a token-level L2 design like Moshi. I found no source here that shows sustained reasoning and speech together in a duplex model, so name that as the open problem.

In the interview, say:

"The speech path is not the hard part. The hard part is the decision, which is quantised by chunk size and limited by the interaction patterns in the training data. So I would compare duplex systems on interaction metrics at a fixed operating point, not on a single latency number."

Turn-taking prediction and the human baseline

Turn-taking is a prediction problem: when does the other speaker stop, and should I start? The field moved from stand-alone predictors to end-of-turn detectors in cascades, and now to duplex models that fold the decision into generation.

Predictors: TurnGPT and VAP

  • TurnGPT (Ekstedt and Skantze, Findings of EMNLP 2020, arXiv 2010.10874): a transformer language model that predicts turn shifts in spoken dialogue from text.
  • Voice Activity Projection, VAP (Ekstedt and Skantze, Interspeech 2022, arXiv 2205.09812): a self-supervised predictive objective on the voice activity of both speakers, so turn-taking models train without labels.
  • Multilingual VAP (LREC-COLING 2024, arXiv 2403.06487): English, Mandarin and Japanese. A model trained on one language predicts poorly on the others; one multilingual model performs on par with the monolingual ones and learns to identify the input language.

End-of-turn models in production

Model Design Reported by the vendor
LiveKit Turn Detector v1 (17 Jun 2026) Semantic branch (audio encoder, adapter, fine-tuned LLM) fused with an acoustic branch; works from speech, not a transcript 14 languages. On LiveKit's eot-bench: 9.9% false cutoffs at a 300 ms budget, 4.5% at 600 ms; 543 ms mean latency at 5% false cutoffs, 295 ms at 10%
Pipecat Smart Turn v3 (Daily) About 8M parameters: Whisper Tiny encoder plus a linear classifier; BSD 2-clause 23 languages; 8 MB quantised; as little as 10 ms on some CPUs, under 100 ms on most cloud instances
Deepgram Flux End-of-turn detection inside the STT model "~260ms end-of-turn detection" (Deepgram docs)

Reported These are vendor numbers, measured on different benchmarks and conditions, so do not rank the vendors from this table. The eot-bench framing is worth borrowing: false-cutoff rate at a fixed latency budget (300 or 600 ms), and mean latency at a fixed false-cutoff target (5% or 10%). It compares systems at an operating point, not at a single threshold.

The human baseline

On smooth transfers, humans start speaking a median of 151 ms before the other turn ends (TurnBench, arXiv 2608.25218). Define the floor-transfer offset as

Δ=tagent onset−tuser end,Δhuman, median=−151 ms. \Delta = t_{\text{agent onset}} - t_{\text{user end}}, \qquad \Delta_{\text{human, median}} = -151\ \text{ms}.

A cascade that waits for silence can only produce Δ>0 \Delta > 0 . A negative offset needs prediction, which is what VAP and duplex models do. Inference

TurnBench (arXiv 2608.25218, Aug 2026) is an annotated benchmark of end-of-turn (EOT) and interruption detection. The authors report about 30 h of dual-channel dyadic speech in 154 dialogues, each triple-annotated. A segment is gold when at least 2 of 3 annotators give the same label with endpoints within ±200 \pm 200 ms. Results are recall, false-positive rate (FPR) and median latency, across 14 turn-taking systems.

VAP baseline Recall FPR Median latency
End of turn 0.845 0.055 368 ms
Interruption 0.945 0.107 994 ms

The TurnBench authors state the open problem: no current system matches human timing without excessive false positives.

1 Floor transfer user agent user turn agent reply offset: human median -151 ms (agent starts early) 2 Backchannel user agent user keeps the floor mm-hm agent overlaps but does not take the turn 3 Barge-in user agent agent speaking user barges in stop latency agent stops after user onset
Not to scale. 1: humans start a median 151 ms before the other turn ends. 2: a backchannel leaves the floor with the user. 3: stop latency runs from user onset to the last audible agent sample.
In the interview, say:

"Humans start a median 151 ms before the other turn ends, so the target offset is negative, which needs prediction. I would report floor-transfer offset against that baseline, at a stated false-interruption rate."

Backchannels, barge-in and self-voice

A good duplex agent tells a backchannel from a barge-in, and does not mistake its own voice for the user's. Both are decision problems with an echo problem underneath.

Backchannel against barge-in

A backchannel ("mm-hm") signals attention and leaves the floor with the speaker. A barge-in takes the floor. Inference A characteristic failure follows: the system treats a backchannel as a barge-in and stops talking.

  • Reported DuplexSLA-Bench (arXiv 2605.20755, Table 6, context-prefill setting, authors' numbers): backchannel accuracy 0.33% for gpt-realtime-1.5 with semantic VAD, 40.00% for gemini-3.1-flash-live, 98.33% for DuplexSLA.
  • Talking Turns (ICLR 2025, arXiv 2503.01174): in a user study, audio foundation models sometimes miss when to speak, interrupt too aggressively and rarely backchannel. It uses a supervised turn-event model as judge, with test benchmarks curated from Switchboard.
  • Full-Duplex-Bench v1.5 (arXiv 2507.23159) scores user interruption, user backchannel, talking to others and background speech. It measures categorical behaviour, stop and response latency, and prosodic adaptation.

Inference Two numbers define good barge-in handling: stop latency, the time from user onset to the last audible agent sample, and the false-yield rate, how often a backchannel, laugh or background voice stops the agent. Optimising only one of them breaks the other.

Lstop=tlast audible agent sample−tuser onset L_{\text{stop}} = t_{\text{last audible agent sample}} - t_{\text{user onset}}

The full metric proposals, with operating points, are in conversational evaluation; training for these behaviours is in online RL and rewards.

Self-voice and echo

A duplex model hears the speaker output it just produced, unless something removes it. MinMo's duplex module still requires separate acoustic echo cancellation (AEC) and VAD modules (arXiv 2501.06282). SALMONN-omni (arXiv 2411.18138) is instead described as listening to its own generated speech and background sounds while speaking, and SALM-Duplex (arXiv 2505.15670) targets barge-in and turn-taking.

Inference A model that hears its own output needs an explicit reference-signal path: the playback signal goes in as an extra input, so the model or the AEC can subtract what it said from what the microphone heard. Measure stop latency on echo-cancelled output, or a barge-in test passes for the wrong reason.

Trap

A low stop latency alone is not good turn-taking. An agent that stops at every cough scores well on stop latency and badly on false yields. Report both at a stated operating point.

In the interview, say:

"A key failure is treating a backchannel as a barge-in. I would report stop latency on echo-cancelled output together with false-yield rate, at one operating point."

Streaming inference: deadlines and first packets

A duplex model is a real-time loop, not a request-response call. It must produce a frame on a fixed clock for as long as the session lasts, even when nobody is talking. This section turns the earlier rates into engineering budgets.

The per-frame deadline

Inference Moshi (arXiv 2410.00037) runs at 12.5 Hz, so it has a hard deadline of 80 ms per frame: one temporal pass plus up to 17 depth sub-steps (the paper's K = 17 streams). A missed deadline is an audible gap, because the audio must keep flowing.

The standard check is the real-time factor (RTF), compute time divided by audio time:

RTF=tcomputetaudio \text{RTF} = \frac{t_{\text{compute}}}{t_{\text{audio}}}

RTF below 1 is necessary and not sufficient: the worst frame must still fit in 80 ms. MiniCPM-o 4.5 reports RTF 0.21 (INT4) to 0.27 (FP16) with llama.cpp-omni on an RTX 4090 (arXiv 2604.27393). Reported That is 210 to 270 ms of compute per second of audio (derived).

LLaMA-Omni 2 (arXiv 2505.02625) shows the chunk version of the same arithmetic. Speech tokens run at 25 Hz, so each is 40 ms and a 10-token chunk is 400 ms. The authors report a 542.7 to 663.3 ms first chunk, so roughly 140 to 260 ms of overhead sits on top of the chunk (derived). Inference

The deadline can be relaxed by waking the backbone less often than once per frame. DiffuPlex (arXiv 2610.12214) predicts several future user and assistant frames in one backbone wake, using rolling masked diffusion over an 80 ms interaction interval. The authors report 1.46× (LISTEN) and 1.59× (SPEAK) deployment wall-clock speedups, and 1.61× and 1.80× for the core LM alone.

Chunk size trade-offs

System Chunk or block
Moshi (arXiv 2410.00037) 80 ms frame
DuplexSLA (arXiv 2605.20755) 160 ms chunk, 80 ms user stride
SyncLLM (arXiv 2409.15594) 160, 200 or 240 ms chunks
LLaMA-Omni 2 (arXiv 2505.02625) 400 ms (10 tokens at 25 Hz)
GLM-4-Voice decoder (arXiv 2412.02612) 0.8 s (10 tokens at 12.5 Hz)
MiniCPM-o 4.5 (arXiv 2604.27393) 1.0 s preferred in ablation over 0.2 s and 0.1 s

MiniCPM-o's ablation (arXiv 2604.27393) finds 1.0 s gives the best balance. The authors report that shorter chunks leave less modelling budget for control and generation, and that too-short chunks lack enough information per window, causing substantial degradation. Inference Shorter chunks cut the average wait for a decision (c/2 c/2 , derived) but pay the per-step cost more often. Smaller is not automatically better.

First packet against chunk

The first packet is the time until the first playable audio. The chunk is the granularity after that. They are different numbers.

System First-audio figure Condition
Qwen3-TTS (arXiv 2601.15621) 97 ms Authors, 12 Hz tokenizer
DSM TTS (arXiv 2509.08753) 150 ms latency Batch 1 (about 380 ms at batch 32), 1.8B model
VITA-Audio (arXiv 2505.03739) 236 ms vanilla, 53 ms Boost First audio token chunk only, not end to end
Qwen3-Omni (arXiv 2509.17765) 234 ms audio, 547 ms video Cold start, concurrency 1
FlashTTS (arXiv 2606.09141) First-packet latency 325 ms, against 843 ms for CosyVoice 2 2 NFE decoder
LLaMA-Omni 2 (arXiv 2505.02625) 542.7 to 663.3 ms Total first chunk, one L40, 0.5B to 14B
Trap

These are authors' numbers on different hardware, batch sizes and definitions (first packet, first chunk, cold start). Never rank systems from this table.

Streaming inference: memory and many sessions

Memory, not compute, often sets how many duplex sessions one GPU can hold. This section covers the cache, long sessions and batching.

KV-cache growth

Inference This arithmetic is derived under stated assumptions: full multi-head attention, bf16 storage, and only the temporal transformer counted (32 layers, model dimension 4096, from Moshi's Table 1, arXiv 2410.00037). The depth transformer's cache can be discarded each frame.

2×32×4096×2 B=524,288 B≈512 KiB per frame 2 \times 32 \times 4096 \times 2\ \text{B} = 524{,}288\ \text{B} \approx 512\ \text{KiB per frame}

The leading 2 is keys plus values; the trailing 2 is bytes per bf16 value. At 12.5 frames per second that is 512 KiB ×12.5≈6.3 \times 12.5 \approx 6.3 MiB per second, or about 23 GB for one hour (derived). Grouped-query attention would shrink it.

The cache grows linearly with session length and with the number of sessions. Inference For many concurrent sessions, cache memory, not weights, sets capacity.

Long sessions

  • The Moshi paper states the model follows multi-turn conversations across 5 minutes (arXiv 2410.00037). Ask what happens beyond that before claiming more.
  • One windowing pattern for audio is block-local attention in Qwen2.5-Omni's streaming codec DiT: 2 blocks of lookback and 1 of lookahead (arXiv 2503.20215).
  • For video, Self Forcing (arXiv 2506.08009) uses a rolling KV cache for autoregressive video extrapolation at inference. It is a related pattern for unbounded streams, but it is a video model.

Batching many duplex sessions

Inference A turn-based server pays nothing for an idle chat. A duplex session is always active: it needs one frame every 80 ms, including silence. Batching sessions into one GPU step helps throughput, but the whole batched step still has to finish inside 80 ms. The sustainable batch size is the largest B B with tstep(B)<80 t_{\text{step}}(B) < 80 ms.

DSM-TTS reports 150 ms latency at batch size 1 and about 380 ms at batch size 32 (arXiv 2509.08753, Table 6), so latency figures depend on load.

Streaming decoders and the latency budget

The decoder streams too, and its lookahead is latency. This section ends with the end-to-end budget and a checklist.

Streaming codec decoding

The decoder must also stream, and any lookahead it needs is added latency.

System Streaming decode
Mimi (arXiv 2410.00037) Causal encoder and decoder; 80 ms frames
Qwen3-Omni (arXiv 2509.17765) Lightweight causal ConvNet (Code2Wav) replaces block-wise diffusion
Qwen2.5-Omni (arXiv 2503.20215) Codec DiT with 2 blocks lookback, 1 block lookahead
CosyVoice 2 (arXiv 2412.10117) Chunk-aware causal flow matching for streaming and non-streaming synthesis
Kimi-Audio (arXiv 2504.18425) Chunk-wise autoregressive detokenizer with look-ahead (example: 1 s chunk, 4 future semantic tokens)
GLM-4-Voice (arXiv 2412.02612) 0.8 s decoder blocks; at least 10 speech tokens needed for the first output

Inference One block of lookahead costs one block of delay. A fully causal decoder such as Mimi's pays none, which is part of why 160 ms is achievable.

Where latency hides

Stage Contribution Source status
Network SyncLLM (arXiv 2409.15594): handles latencies up to 240 ms; performance holds to about 200 ms and drops at 240 ms Reported
Input framing Up to one frame, 80 ms at 12.5 Hz Derived
Model delay Moshi (arXiv 2410.00037): acoustic delay of 1 step (80 ms) in post-training, 2 in pre-training Confirmed
Decision wait c/2 c/2 on average for chunk c c Derived
Decode lookahead One block per block of lookahead Inference
Echo cancellation, VAD, playout buffer No figure cited here Gap
Gap between theory and practice Moshi abstract: 200 ms in practice against 160 ms theoretical, so about 40 ms Derived

Checklist

  • Report latency with its definition: theory, first packet, first chunk, turn-taking delay or total.
  • State batch size, GPU and whether the run was cold start.
  • Measure the worst frame, not just RTF; a missed 80 ms deadline is audible.
  • Compute the KV-cache cost per session before promising concurrency.
  • Test barge-in on echo-cancelled output and report stop latency.
  • Add the decision wait c/2 c/2 when comparing chunked and per-frame systems.
  • Run a session past the reported context (Moshi: 5 minutes) to see what happens at the limit.
In the interview, say:

"A duplex model has an 80 ms deadline every frame, silent or not. So I budget the worst frame, the cache per session and the decision wait, and I quote latency with its definition and load."

Pre-training and post-training speech-to-speech models

Nearly every open speech-to-speech model follows one recipe. Start from a strong text LLM, add speech tokens, pretrain on ASR, TTS and interleaved speech-text, run spoken-dialogue SFT, then apply DPO or RL on the text side and sometimes the speech side. The real choice is whether the text backbone stays frozen or trains on a mixed corpus.

Every recipe below is the authors' own account in the cited paper. For the TTS-only post-training view (WER and SIM rewards, hacking), see Post-training and evaluation for speech generation. The reward details for online RL are in the next section.

1 Modality alignment Trains: encoder + adaptor (ASR) Frozen: text LLM 2 Tokenizer Trains: 12.5 Hz semantic VQ + codec Frozen after reconstruction gate 3 Joint pretraining Trains: LLM, high text fraction Frozen: tokenizer 4 Spoken SFT Trains: LLM or LoRA + adaptor Frozen: tokenizer 5 Preference Trains: DPO-LN on text tokens Frozen: tokenizer, codec 6 Duplex Trains: small head, then GRPO Frozen: LLM states (head step) Gate after each stage: ASR WER, text QA (strict), duplex timing
Figure: the proposed training pipeline for a full-duplex text and voice model (Inference, built from the cited recipes), with what trains and what is frozen at each stage.

Stage-by-stage recipes

System Recipe Frozen vs trained
Moshi (arXiv 2410.00037) Helium text LM on 2.1T tokens; 7M h unsupervised audio, with half the batches text-only; multi-stream post-training; Fisher (2,000 h) fine-tuning; instruction tuning on >20k h of synthetic speech Temporal Transformer built on the Helium text LM
GLM-4-Voice (2412.02612) 12.5 Hz single-codebook tokenizer (VQ on whisper-large-v3, 700k h); init GLM-4-9B-Base; interleaved data synthesised from text corpora; SFT template alternates 13 text and 26 speech tokens; no DPO or RL stage described All trained, with a text-only share in pretraining
Kimi-Audio (2504.18425) >13M h audio; 585B audio + 585B text tokens, one epoch; init Qwen2.5-7B; 12.5 Hz semantic tokens plus 50 Hz continuous Whisper features; SFT ~300K h Whisper extractor frozen for the first ~20% of pretraining
Step-Audio 2 (2507.16632) 1.356T tokens: adaptor only on 100B ASR tokens, then +6.6K audio tokens, 800B tokens, 200B cooldown with synthesised S2S; SFT 4B tokens; PPO then GRPO Audio encoder frozen throughout
Qwen2.5-Omni (2503.20215) Stage 1 encoders; stage 2 all parameters; stage 3 32k context. Talker: context continuation, DPO, multi-speaker instruction tuning LLM frozen in stage 1 only
Qwen3-Omni (2509.17765) AuT encoder from scratch on 20M h; Thinker stage 2 ~2T tokens. Talker: monotonic mapping, long-context pretraining, DPO, speaker fine-tuning. Then SFT, strong-to-weak distillation, GSPO LLM frozen in stage 1 only
MinMo (2501.06282) Alignment in four stages: speech-to-text ~1.2M h, text-to-speech ~170k h, speech-to-speech ~10k h, duplex 4k h human-human. No DPO or RL LLM frozen in full alignment, LoRA in SFT; duplex trains only an ~18M predictor
LLaMA-Omni 2 (2505.02625) Qwen2.5 0.5B to 14B; 200K multi-turn speech dialogues; I(a) speech-to-text, I(b) TTS LM, II gate fusion and TTS LM Speech encoder frozen in stage I(a); encoder, adapter and LLM frozen in stage II
Freeze-Omni (2411.00774) CTC encoder on ~110k h ASR; prompt embedding on 60k multi-round QA; ~120M speech decoder on ~3,000 h; three-state duplex classifier LLM frozen throughout
VITA-Audio (2505.03739) Four stages; ASR and TTS ~100k h each; MCTP modules added in stages 2 to 3; SFT on 1.4M speech QA samples Audio encoder and decoder frozen in stage 1
Baichuan-Audio (2502.17239) 887k h pretraining; 12.5 Hz 8-layer RVQ tokenizer; flow-matching decoder on ~270k h Stage 1 LLM frozen; stage 2 all but text embedding and LM head

Reported All rows are the authors' own accounts.

Frozen backbone or mixed text: fighting forgetting

Freeze the LLM

  • Freeze-Omni and MinMo keep the text capability by construction.
  • LLaMA-Omni 2 freezes the LLM in stage II; Qwen2.5-Omni and Baichuan-Audio freeze it in stage 1.
  • Inference The cost is a ceiling on how deeply speech can shape the representations.

Train on a mixed corpus

  • Moshi keeps half the pretraining batches text-only; Kimi-Audio uses 585B text tokens beside 585B audio tokens; Step-Audio 2 mixes text and audio tokens.
  • Speech and text share one set of weights, so the mix ratio is a tuned hyperparameter.
  • An unbalanced mix is the main risk.

Confirmed Adding speech capability can degrade knowledge and reasoning even for text inputs, and more for spoken queries (arXiv 2509.14930). SALAD (arXiv 2510.13632) reports that speech-adapted LLMs underperform their text counterparts and attributes the gap to forgetting and cross-modal misalignment.

Interleaved synthetic pretraining and spoken instruction data

Interleaved pretraining (arXiv 2411.17607) synthesises interleaved speech tokens from text spans with a text-to-token model and a 12.5 Hz supervised tokenizer. It used 1T tokens including 600B synthetic interleaved. Spoken QA rose from 13% (Moshi) to 31%.

Spoken instruction data is synthetic almost everywhere: an LLM writes the dialogue and TTS renders it. Moshi uses over 20k h of synthetic speech (arXiv 2410.00037), and Step-Audio 2 adds synthesised speech-to-speech data in its cooldown (arXiv 2507.16632). Inference The risk is TTS voice and prosody leakage into the model's own speaking style; mix in real recorded turns and many TTS voices.

Preference, RL and distillation

  • DPO on text tokens. Moshi-Aligned (arXiv 2506.21463) applies length-normalised DPO to text-token probabilities only, because audio-token probabilities are unstable. It uses 93,490 pairs (27% timing, 73% content), judged by Mistral Large 2. Averaged QA moved 36.1 to 39.2 and safety 70.9 to 77.8 (Moshi-Instruct to Moshi-Aligned).
  • Talker DPO. Qwen2.5-Omni ranks preference triplets by WER and punctuation-pause error. Qwen3-Omni runs DPO on multilingual pairs in a four-stage Talker.
  • RL. Step-Audio 2 runs PPO with a binary conciseness reward on the thinking trace (60 iterations), PPO with a learned reward model (120), then GRPO for audio perception (400). Qwen3-Omni uses GSPO with rule-based and model-based rewards.
  • Distillation. Qwen3-Omni distils strong to weak: off-policy, then on-policy KL against Qwen3-32B and 235B teachers.

Duplex post-training and evaluation gates

DuplexPO (arXiv 2607.07148) runs GRPO-style RL on selected windows from long human conversations. Its four-part reward (FCDR) covers turn initiation, backchanneling, yielding and regularised participation, with a Qwen2.5-7B-Instruct backbone. Reported Intelligence gains are small (Llama Questions 75.3 versus 72.0 for the SFT baseline, Table 4). The point is that timing is optimised without touching content.

Synthesis

Stage Objective Typical data Main risk
Tokenizer Discrete semantic tokens, 12.5 to 25 Hz Whisper-based VQ, ASR pseudo-labels (GLM-4-Voice 700k h) Collapse, acoustic loss at low rate
Modality alignment Audio encoder into the LLM ASR ~100 to 110k h Forgetting if unfrozen
Speech-text pretraining Joint next-token Interleaved synthetic plus unlabelled (Moshi 7M h, Kimi 13M h) Forgetting, unbalanced mix
Speech decoder Token to waveform TTS pairs, ~3k h (Freeze-Omni) to 270k h (Baichuan) Prosody drift, speaker leakage
Spoken SFT Instruction following Synthetic dialogues (LLaMA-Omni 2 200K; Kimi 300k h) TTS voice overfit, weak paralinguistics
Preference Better spoken replies Pairs (Moshi-Aligned 93k) Audio-token instability, judge bias on timing
RL Quality, reasoning length Rule and model rewards Hacking, length collapse
Distillation Text capability into speech Teacher outputs Teacher-student mismatch
Duplex Turn-taking, barge-in Human conversation (MinMo 4k h, Fisher) Latency versus false interruption

Proposed recipe for a full-duplex text+voice model

Inference: my recipe, assembled from the sources above
  1. Freeze a trusted text LLM; train the encoder and adaptor on ASR.
  2. Train a semantic-first 12.5 Hz supervised tokenizer plus codec; freeze after a reconstruction gate.
  3. Unfreeze the LLM with a high text fraction: interleaved synthetic speech (2411.17607) plus unlabelled speech with Whisper pseudo-labels.
  4. Spoken SFT on LLM-written dialogues rendered with many TTS voices, plus real recorded turns.
  5. DPO-LN on text tokens, with timing pairs.
  6. A small duplex head on frozen states (MinMo style), then gated GRPO duplex RL on event windows (DuplexPO style).
  7. Gates at every stage: ASR WER, text QA (strict), duplex timing.
Trap: the audio-token DPO shortcut

Applying DPO to audio-token probabilities looks natural but Moshi-Aligned found them unstable, so it optimised text tokens only. Reward signals also miss timing: the Dual-Axis Generative Reward Model (arXiv 2604.14920) argues existing metrics are superficial proxies, so it scores semantic quality and interaction timing separately.

In the interview, say:

"I would keep the text LLM frozen through alignment, unfreeze it with a high text fraction and interleaved synthetic data, then do DPO on text tokens and GRPO on duplex timing windows. Every stage is gated on ASR WER, strict text QA and timing, because speech training erodes text ability."

Online RL and rewards for speech generation

The common pattern: the policy is a codec or discrete-token LM (sometimes flow matching), sampled in groups. Rewards come from the decoded audio: ASR error for intelligibility, speaker-verification (SV) cosine for similarity, a quality or preference predictor for naturalness. The main failure is reward hacking on any single optimised score. Duplex timing is the newest axis, with per-axis rewards derived from VAD events.

Evidence quality

Every claim below cites a paper or an official repository or model card. Kyutai publishes RL-tuned Moshi and PersonaPlex checkpoints on its Hugging Face account. Numbers are the authors' own and come from different setups, so they are not comparable across rows.

The TTS-side summary (DiffRO, F5R-TTS, hacking signatures, listening gates) is in Post-training and evaluation for speech generation. This section adds reward implementations, the duplex rewards, and infrastructure.

Policy G rollouts Decode to audio ASR: WER or CER Speaker cosine Quality RM Timing (VAD events) Group advantages Update + KL next iteration scores Held-out judges never in the reward
Figure: the online RL loop for speech generation. Each prompt gets a group of rollouts, decoded and scored by several reward models. Advantages are normalised within the group, and held-out judges watch for hacking.

Reward taxonomy and concrete implementations

Reward Implementation Status
Intelligibility (ASR) F5R-TTS uses ASR WER as one of two GRPO rewards (arXiv 2504.02407). GRPO for LLM-based TTS uses CER plus NLL from an off-the-shelf ASR model (arXiv 2509.18798). Confirmed
CosyVoice GRPO The official FunAudioLLM/CosyVoice README lists GRPO training support for CosyVoice 2 and an RL model of Fun-CosyVoice3-0.5B with training and inference scripts. Confirmed
Reward granularity Japanese kana-level scoring cuts target-kanji reading error by ~26% under matched GRPO (arXiv 2610.07575). Confirmed
Speaker similarity Speaker-verification similarity to the reference, paired with WER (F5R-TTS, arXiv 2504.02407; GROW, arXiv 2608.03215). Confirmed
Naturalness predictors UTMOS, DNSMOS, SCOREQ. The authors report that optimising a single score induces reward hacking while held-out judges and listeners get worse; an equal-weighted ensemble resists hacking, and a calibrated composite performs best (arXiv 2609.13150). Reported
SpeechJudge Generative RM on Qwen2.5-Omni-7B: SFT on chain-of-thought rationales, then GRPO. 77.2% agreement with human pairwise preferences versus 72.7% for Bradley-Terry; the best audio-LLM judge, Gemini-2.5-Flash, is under 70% (arXiv 2511.07931). The authors say it can serve as an RL reward. Confirmed
GSRM Reasoning RM for naturalness: acoustic features, then reasoning; 31k expert ratings; verifier for online RLHF (arXiv 2602.13891). Confirmed
AudioJudge Audio-LLM judges show verbosity and position bias. A multi-aspect ensemble (content, quality, paralinguistics) reaches up to 0.91 Spearman with human system rankings (arXiv 2507.12705). Confirmed
Emotion and prosody The official zai-org/GLM-TTS README describes GRPO with multiple reward functions (similarity, CER, emotion, laughter and others). Prosody has no verifiable reward: GRPO on CER and NLL gave monotone prosody, and iterative DPO on a few hundred human preference pairs fixed it on a Korean call-centre set (arXiv 2509.18531). Reported

Duplex timing rewards

  • DuplexPO (arXiv 2607.07148). The Factorized Conversational Dynamics Reward covers turn initiation, backchanneling, yielding and regularised participation. It optimises only windows around annotated agent events, GRPO-style.
  • Kyutai multi-faceted alignment (arXiv 2606.11167). Reported RL post-training of Moshi and PersonaPlex with one reward per axis (pause handling, turn-taking, backchanneling, user interruption) plus an LLM-based response-quality reward against semantic degradation. Per the official model card, GRPO uses rule-based rewards, segments come from Meta's Seamless Interaction corpus via VAD, and evaluation uses Full-Duplex-Bench v1 and v2. Checkpoints: kyutai/moshika-rl-seamless and kyutai/personaplex-rl-seamless.
  • ASPIRin (arXiv 2604.10065). GRPO with a binary speaking-or-silence mapping of text tokens. The authors report over 50% fewer duplicate n-grams than standard GRPO.
  • Multi-reward DPO for blockwise duplex. Semantic, audio-quality and emotion-consistency rewards aggregated in one DPO objective, studied on blockwise duplex models (arXiv 2601.19063).

Algorithms

GRPO dominates for codec LMs: sample a group of G G rollouts per prompt, normalise rewards within the group, and keep a KL penalty to the SFT reference. Standard notation for the advantage of rollout i i :

A^i=ri−mean⁡(r1,…,rG)std⁡(r1,…,rG) \hat{A}_i = \frac{r_i - \operatorname{mean}(r_1,\dots,r_G)}{\operatorname{std}(r_1,\dots,r_G)}

With several rewards, a common choice is to normalise each reward within the group before summing. Inference GROW (arXiv 2608.03215) standardises its rewards within the group; I have not checked other papers.

Method What it adds
GSPO Qwen3-Omni Thinker post-training with rule-based and model-based rewards (arXiv 2509.17765). Speech-enhancement GSPO with DNSMOS, WER and UTMOS rewards: the composite is preferred over any single-metric variant in human evaluation (arXiv 2606.21458).
Flow-GRPO SDE trick Converts the deterministic ODE into an SDE that matches the original marginals, which enables exploration for online RL; the image-domain authors report very little reward hacking (arXiv 2505.05470).
F5R-TTS GRPO on flow matching with WER and SIM rewards; the authors report a 29.5% relative WER reduction and 4.6% relative SIM gain on zero-shot cloning (arXiv 2504.02407).
GROW On-policy group-standardised rewards that reweight flow-matching regression. On DiTAR, average WER 2.016 to 1.558 and SIM 0.676 to 0.715 (arXiv 2608.03215).
FlowSE-GRPO Speech enhancement. A single reward gives fast metric gains but degraded fidelity; a multi-metric reward balances them (arXiv 2601.16483).
FlowTTS-GRPO Online RL for flow-matching TTS with a weighted multi-objective reward; improves speaker similarity and perceptual quality on CosyVoice 3.0 and F5-TTS (arXiv 2606.23190).

Reward hacking: cases and guards

Case Guard
A single quality predictor improves its own score while held-out judges and listeners degrade (arXiv 2609.13150) Equal-weighted or calibrated composite; held-out judges
A single enhancement metric degrades fidelity (FlowSE-GRPO, arXiv 2601.16483) Multi-metric reward
Judge verbosity and position bias (AudioJudge, arXiv 2507.12705) Randomise order; multi-aspect ensemble; validate on human labels
CER and NLL reward make prosody monotone (arXiv 2509.18531) Iterative DPO with human preference pairs
Semantic drift while optimising timing LLM-based response-quality reward (Kyutai, arXiv 2606.11167)

Inference The guards in the right column are my pairing of cases with mitigations, except where a source is named.

Trap: the train reward is not the metric

If the reward ASR is also the evaluation ASR, WER improvements may be hacking. Evaluate with a second ASR, a second SV model, and a listening panel.

Infrastructure and cost

Every rollout must be decoded to a waveform, then passed through an ASR and an SV model. Inference A SpeechJudge-style reward model dominates the cost. Cheaper options are token-level rewards, cached reference embeddings and a small ASR for the reward.

Bridge from GRPO on streaming ASR

Inference: what transfers
  • Group sampling, per-group advantage normalisation, KL to a reference and clip monitoring are the same machinery.
  • WER is a reward I already know how to shape; here it runs on decoded audio, so it is a reward through a second model.
  • New in TTS: rollouts need waveform decode, SV and quality rewards compete, and hacking shows up as monotone prosody rather than a bad transcript.
  • New in duplex: rewards are timing events on audio, not text metrics, so windows around events replace whole-sequence rollouts.

Practical recipes

Inference: three starting points
  1. Zero-shot TTS. WER or CER from a fixed ASR that differs from the evaluation ASR; SV cosine with cached references; a small-weight UTMOS or DNSMOS composite; GRPO with KL; per-group normalisation per reward; a duration-ratio penalty; held-out judges (second ASR, second SV, listening panel).
  2. Expressive TTS. Add a reasoning RM or audio-LLM judge with a rubric, or an emotion classifier, gated by an ensemble; track F0 variance, energy and rate against human references.
  3. Full-duplex. Per-axis timing rewards from VAD on generated audio against annotated events (DuplexPO, Kyutai); a text-level LLM-quality reward against content drift; train on windows around events.

Monitor: per-reward mean and variance, fraction of zero-advantage groups, held-out metrics, F0 spread, silence ratio, speaking rate, duration distribution, KL, clip fraction and end-of-sequence behaviour. Stop when held-out metrics degrade even if the train reward rises, and spot-check audio.

In the interview, say:

"I would run GRPO with a composite of ASR error, speaker cosine and a quality model, normalised per group, with KL and held-out judges. For duplex I would add per-axis timing rewards from VAD events plus a text-quality term so timing gains do not cost content. Single-score rewards get hacked, so I would validate every reward against held-out judges and listeners."

Evaluating conversational systems

Evaluation moved from demos to automated overlap benchmarks (Full-Duplex-Bench) and annotated dual-channel benchmarks (TurnBench, arXiv 2608.25218, Aug 2026). Latency alone is a weak number: it only means something at a stated false-interruption rate. The open problem, per the TurnBench authors, is that no current system matches human timing without excessive false positives.

User turn Agent reply User barge-in User Agent TTFA stop latency gold EOT first audio barge-in onset agent stop time
Figure: where each latency metric is measured. TTFA runs from the gold end of turn (not the VAD stop) to the agent's first audio. Stop latency runs from the gold barge-in onset to the last audible agent sample, measured on echo-cancelled output.

Latency definitions and operating points

LiveKit's eot-bench (LiveKit blog) reports two views of the same detector: the false-cutoff rate at a fixed latency budget (300 or 600 ms), and the mean latency at a fixed false-cutoff target (5% or 10%). Reported For LiveKit's own v1, the blog gives 9.9% false cutoffs at 300 ms and 4.5% at 600 ms, and 543 ms mean latency at 5% and 295 ms at 10%. It is a vendor benchmark, but the operating-point framing is reusable for any turn-taking system.

Vendor latency claims are not comparable. Deepgram's Flux docs state "~260ms end-of-turn detection" inside the STT model, without a stated benchmark. That cannot be compared with the eot-bench operating points above.

Benchmarks

Benchmark What it measures Notes
Full-Duplex-Bench v1 (arXiv 2503.04721) Pause handling, backchanneling, turn-taking, interruption Automatic, reproducible metrics; released with code
Full-Duplex-Bench v1.5 (2507.23159) User interruption, user backchannel, talking to others, background speech Categorical behaviour, stop and response latency, prosodic adaptation; on five agents the authors find "responsive" and "floor-holding" strategies (ICASSP 2026)
Full-Duplex-Bench v2 (2510.07838) Multi-turn streaming interaction Automated examiner with staged goals under Fast and Slow pacing; task families daily, correction, entity tracking and safety; supports commercial APIs and open models
FLEXI (2509.22243) Latency, response quality and conversational effectiveness across six scenarios, including emergency interruption The authors report gaps between open-source and commercial models in recognising emergencies, ending turns and latency
TurnBench (2608.25218) End-of-turn and interruption detection ~30 h dual-channel, 154 dialogues, triple-annotated, plus a 104 h training set and public leaderboard; gold is 2 of 3 annotators within ±200 ms; 14 systems scored on recall, false-positive rate, median latency
Talking Turns (ICLR 2025, 2503.01174) When to speak, interrupt, backchannel Audio foundation models sometimes miss when to speak, interrupt too aggressively and rarely backchannel; supervised turn-event model as judge; benchmarks curated from Switchboard

Reported numbers

  • TurnBench. Confirmed The VAP baseline scores end-of-turn recall 0.845, false-positive rate (FPR) 0.055, median latency 368 ms; interruption recall 0.945, FPR 0.107, median 994 ms. Humans on smooth transfers start a median 151 ms before the current turn ends.
  • DuplexSLA-Bench (arXiv 2605.20755). Reported Authors' backchannel accuracy, context-prefill setting: gpt-realtime-1.5 0.33% (semantic VAD), gemini-3.1-flash-live 40.00%, DuplexSLA 98.33%.
  • Instruct-FD (arXiv 2607.20460). Reported The authors report that the best of six full-duplex systems achieves only 64.4% adherence to turn-taking instructions.
  • PersonaPlex (arXiv 2602.06053). Reported The authors report 0.170 s smooth turn-taking and 0.240 s user-interruption latency for the released 7B checkpoint, against 0.265 s and 0.257 s for Moshi.
Trap: self-reported numbers and unvalidated judges

DuplexSLA-Bench, Instruct-FD and PersonaPlex numbers come from the authors, and systems are measured under different conditions. LLM and audio judges need validation against human labels before their scores gate a release.

Ten proposed latency-aware and interaction-based metrics

Inference This list is my proposal, built on the benchmarks above. Every timing metric uses gold event labels and echo-cancelled agent output, never the system's own VAD.

# Metric Definition and how to compute
1 Floor-transfer offset Distribution of agent onset minus gold EOT, compared with a human baseline (anchor: 151 ms before the turn ends, TurnBench)
2 Time to first audio Gold EOT to first agent audio; report p50, p90, p95. Use gold EOT, not the VAD stop
3 Latency at fixed false-yield rate Threshold sweep; read mean latency at 5% and 10% false yield (eot-bench framing)
4 Stop latency after barge-in Gold onset to last audible agent sample on echo-cancelled output; plus the fraction of agent speech after onset
5 False-yield rate per minute Count of stops caused by backchannels, laughter or background speech, divided by conversation minutes
6 Premature-takeover rate Fraction of user mid-turn pauses in which the agent starts speaking
7 Backchannel rate and placement Rate versus human; share within a window after a prosodic boundary; Jensen-Shannon divergence of inter-event intervals
8 Overlap quality Cooperative versus competitive overlap share, and the overlap-duration distribution
9 Interrupted-thread recovery Does the agent resume or address the interrupted thread? LLM judge, validated on a human-labelled subset
10 Turn-taking naturalness MOS Human ratings of 10 s clips, paired against human-human conversation

The set separates timing from content, in line with DuplexPO, and ties latency to an operating point.

In the interview, say:

"I would never report latency alone. I would report time to first audio from gold end-of-turn at a fixed false-yield rate, stop latency after barge-in on echo-cancelled output, and false yields per minute, anchored to the human 151 ms offset. Judge-based metrics get validated on a human subset first."