Materials Speech-to-speech modelling

Chapter 1

Foundations

How to read this page

Scope: how to model speech-to-speech (S2S) systems, treating the reasoning LLM as a downstream component. It covers newer-generation models and strategies in ASR and speech generation, plus a system design for Synthesia.

Each section is one topic, at most two printed pages, and ends with a "Say this in the interview" line. The cheat sheet in the last chapter is the one-page recall aid.

Grounding legend

Every model detail and number on this page is traced to a research paper (cited inline as arXiv IDs) or to the vendor's own page (linked inline). Numbers that the authors or vendor measured on their own systems are phrased as "the authors report".

  • Reported A number from the authors' or vendor's own first-party source.
  • Inference Design opinion, not fact.

Three traps

Three traps to avoid out loud
  • MiniMax-Speech introduces a "Flow-VAE" (arXiv 2505.07916). Do not read the name as flow matching.
  • Qwen3-Omni's waveform decoder is a lightweight causal ConvNet over a multi-codebook codec (arXiv 2509.17765). It is not a DiT or flow model.
  • MaskGCT is mask-and-predict in both stages (arXiv 2409.00750). Do not call it flow matching.

The S2S design space in one picture

Every speech-to-speech system answers the same five questions. The model zoo looks large only because the answers combine in many ways.

4 Streaming / duplex scheme wraps the whole path Input rep decision 1 Backbone LLM swappable Output rep decision 2 Renderer acoustic, decision 5 speech in speech out Text stream scaffold / reasoning decision 3: text / speech coupling
The five decisions around one backbone LLM. Decision 4 (streaming/duplex scheme) wraps the whole path.
Decision Options Common pick Inference
1. Input representation Continuous encoder embeddings; discrete semantic tokens; codec tokens Continuous embeddings from an ASR-pretrained encoder at about 12.5 Hz
2. Output representation Multi-codebook codec tokens; single-codebook semantic tokens; continuous latents Semantic or codec tokens, rarely continuous
3. Text/speech coupling Cascade; text-first (half-cascade); Thinker-Talker; interleaved; parallel streams Text-first or interleaved
4. Streaming/duplex scheme Turn-based; chunked; time-multiplexed; dual-stream; state head Chunked, with a duplex layer on top
5. Acoustic renderer Codec decoder; flow-matching decoder plus vocoder; causal ConvNet AR LM for content, flow or ConvNet for acoustics

The core tension

Speech encoders emit frames at 50 Hz (Whisper, as used in Voxtral; arXiv 2507.13264), while text is far sparser. Every decision above is a way to give the LLM a sequence it can model at text-like cost. The goal is to do that without losing prosody, speaker identity or timing.

Why the LLM can be "downstream"

If the backbone sees speech as embeddings and emits tokens a separate renderer turns into audio, the reasoning model can be swapped, frozen or fine-tuned lightly. Freeze-Omni (arXiv 2411.00774) takes this to the limit by freezing the LLM.

The open problem

Keeping text-level intelligence once the model must speak. URO-Bench reports that open-source spoken dialogue models lag behind their backbone LLMs on instruction following and suffer from catastrophic forgetting (arXiv 2502.17810).

In the interview, say:

"I split any S2S system into five choices: input rep, output rep, text coupling, duplex scheme and renderer. Most new models differ in one or two of them, not all five."

Chapter 2

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."

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."

Chapter 3

Speech generation

Codecs and speech tokenizers

The tokenizer fixes the sequence length the LM sees and the ceiling on audio quality. Four families matter.

Waveform Encoder causal, low rate Residual vector quantizer (RVQ) q1 semantic q2 acoustic q3 ... qN acoustic distilled toward WavLM / HuBERT residual residual latents Decoder Waveform codes q1 ... qN audio
An RVQ codec: each quantizer codes the residual left by the previous one. The first is distilled toward a semantic teacher.
Family Examples Key facts
RVQ with semantic distillation Mimi (arXiv 2410.00037), SpeechTokenizer (arXiv 2308.16692) Mimi: causal, 12.5 Hz, 8 codebooks, 1.1 kbps, first codebook distilled from WavLM. SpeechTokenizer: RVQ whose first layers carry semantic information distilled from a HuBERT teacher, with acoustic detail in later layers.
Single-codebook, low rate WavTokenizer (arXiv 2408.16532), X-Codec2 (arXiv 2502.04128), BiCodec (arXiv 2503.01710) WavTokenizer: 40 or 75 tokens/s. X-Codec2: single-layer FSQ codec at a 50 Hz latent rate, with Wav2Vec2-BERT semantic features (arXiv 2502.04128, arXiv 2601.20185). BiCodec: semantic tokens plus fixed-length global speaker tokens.
FSQ tokens CosyVoice 2 (arXiv 2412.10117) Replaces VQ in the speech tokenizer with finite scalar quantization to improve codebook utilisation.
Continuous latents VibeVoice (arXiv 2508.19205), MELLE (arXiv 2407.08551) VibeVoice tokenizer: 7.5 Hz frame rate; the authors report 80x better compression than EnCodec at comparable performance. MELLE argues that vector quantization sacrifices fidelity compared to continuous representations.

Qwen3-TTS ships two tokenizers: 25 Hz single-codebook and 12 Hz multi-codebook (arXiv 2601.15621).

Trade-offs

Axis Low frame rate Semantic distillation Continuous latents
Gain Fewer AR steps, near text rate Easier LM modelling, better phonetic content No quantization loss
Cost Reconstruction quality Conflicts with reconstruction quality; the Moshi authors recover MUSHRA from 57.8 to 64.0 with a split RVQ, at a small ABX cost (arXiv 2410.00037) Needs a regression or diffusion head; no top-p sampling

Evidence on low frame rates

A controlled frame-rate ablation reproduces a quality cliff at 6.25 Hz. Its authors trace the cliff to the training configuration (fixed clip duration gives too few tokens at low rates), not to a fundamental barrier. After the fix, WER degrades smoothly with phonemic load down to 3.1 Hz and 1.6 Hz (arXiv 2606.16969). Another paper pools X-Codec-2.0 from 50 Hz to a 25 Hz latent rate and reports a 0.29 UTMOSv2-based MOS gain (arXiv 2601.20185).

Say this in the interview:

"The trade is rate against fidelity. Low rate and semantic distillation make the LM's job easy; continuous latents or a flow decoder win back what quantization loses."

Generation paradigms

There are four ways to generate speech from text or from an LM state. The dominant high-quality design is the hybrid.

Text or LM state AR LM Flow decoder Vocoder text / state speech tokens mel audio content + prosody acoustic detail, chunk by chunk HiFi-GAN / BigVGAN
Hybrid AR + flow: the LM decides content and prosody; the flow decoder and vocoder restore acoustics.
Paradigm Examples Core idea
AR codec LM Llasa (arXiv 2502.04128), Spark-TTS (arXiv 2503.01710), CSM, Moshi (arXiv 2410.00037) One Transformer predicts tokens left to right
NAR masked SoundStorm (arXiv 2305.09636), MaskGCT (arXiv 2409.00750) Parallel iterative filling of tokens
NAR flow/diffusion Voicebox (arXiv 2306.15687), F5-TTS (arXiv 2410.06885), Seed-TTS DiT (arXiv 2406.02430) Generate the whole utterance by ODE or diffusion
Hybrid AR + flow CosyVoice 2 (arXiv 2412.10117), Qwen3-TTS 25 Hz (arXiv 2601.15621), FlashTTS (arXiv 2606.09141) LM for content and prosody, flow for acoustics

AR codec LMs

  • Llasa: a single Llama-style Transformer over X-Codec2 tokens, 1B/3B/8B, with inference-time search using speech-understanding verifiers (arXiv 2502.04128).
  • Spark-TTS: Qwen2.5 LLM plus BiCodec (arXiv 2503.01710).
  • CosyVoice 2: an LLM predicts speech tokens, then a chunk-aware causal flow-matching model decodes them (arXiv 2412.10117).
  • Newer entries: IndexTTS2 (arXiv 2506.21619), Step-Audio-EditX (LLM-based audio editing with reinforcement learning; arXiv 2511.03601), Higgs Audio v2 (pretrained on over 10 million hours of audio, per the Boson AI repo).

Multi-codebook handling

An RVQ frame has several codes, so the model needs a trick.

Past frames codes Temporal model one step per frame Depth model small, per codebook codes state c1 c2 ... cN codebooks of frame t, one by one frame t codes become input for step t+1
RQ-style split: the temporal model advances once per frame; the depth model fills in that frame's codebooks.
  • Sesame CSM: a Llama backbone models the zeroth Mimi codebook from interleaved text and audio, and a smaller audio decoder with a linear head per codebook models the rest; Mimi runs at 12.5 Hz (Sesame blog).
  • Moshi: K=2Q+1=17 K = 2Q + 1 = 17 streams per step with Q=8 Q = 8 codebooks (8 user audio, 8 own audio, 1 text). Its RQ-Transformer splits temporal and per-codebook (depth) modelling (arXiv 2410.00037).
  • Qwen3-Omni's Talker uses an MTP module to emit codec frames (arXiv 2509.17765).

NAR notes

SoundStorm uses bidirectional attention and confidence-based parallel decoding to generate codec tokens, and the authors report 30 s of audio in 0.5 s on a TPU-v4 (arXiv 2305.09636). MaskGCT is two-stage (text to semantic tokens, then semantic to acoustic tokens), mask-and-predict in both, with no explicit alignment or phone-level duration model, trained on 100K h (arXiv 2409.00750).

Trap:

MaskGCT is a masked generative model (mask-and-predict). Do not cite it as a flow model.

The "LM for content, flow for acoustics" split

  • Inference Why the LM: text streaming, interleaving with text, reuse of LLM serving stacks, in-context learning.
  • Inference Why flow: it can restore acoustic detail lost to quantization, and CosyVoice 2 shows it can decode chunk by chunk (arXiv 2412.10117).
Inference:

The hybrid may be transitional, since Qwen3-Omni replaces block-wise diffusion with a lightweight causal ConvNet over a multi-codebook codec (arXiv 2509.17765).

Say this in the interview:

"The LM decides what is said and how, the renderer decides how it sounds. That split is why I can stream the LM and distil the renderer separately."

Diffusion and flow matching for speech

Flow matching is the objective behind many recent TTS systems. It plays two roles: fully NAR TTS, and the acoustic decoder after an AR LM.

Noise Data diffusion path: curved, more steps flow matching (OT) path: straight, fewer steps
Schematic: a straight path needs fewer steps than a curved one (inference). Lipman et al. report OT paths sample faster.

Diffusion objective (DDPM)

The forward process mixes clean data x0 x_0 with Gaussian noise ϵ∼N(0,I) \epsilon \sim \mathcal{N}(0, I) . The network ϵθ \epsilon_\theta learns to predict that noise from the noisy input and the timestep t t .

xt=αˉt x0+1−αˉt ϵ,L=E ∥ϵ−ϵθ(xt,t)∥2 x_t = \sqrt{\bar\alpha_t}\,x_0 + \sqrt{1-\bar\alpha_t}\,\epsilon, \qquad \mathcal{L} = \mathbb{E}\,\big\|\epsilon - \epsilon_\theta(x_t, t)\big\|^2

Here αˉt \bar\alpha_t is the cumulative noise schedule, so it fixes how much signal survives at step t t . Sampling runs the learned denoiser backwards from pure noise.

This is the noise-prediction objective of the DDPM paper (arXiv 2006.11239).

Conditional flow matching objective

Flow matching regresses a network onto a velocity field. With a linear (optimal-transport) path, x0 x_0 is noise and x1 x_1 is data.

xt=(1−t) x0+t x1,L=E ∥vθ(xt,t)−(x1−x0)∥2 x_t = (1-t)\,x_0 + t\,x_1, \qquad \mathcal{L} = \mathbb{E}\,\big\|v_\theta(x_t, t) - (x_1 - x_0)\big\|^2

The target velocity x1−x0 x_1 - x_0 is constant along the path, so training is plain regression. There is no noise schedule and no SNR weighting.

Sampling integrates the learned ODE from noise to data:

dxdt=vθ(x,t) \frac{\mathrm{d}x}{\mathrm{d}t} = v_\theta(x, t)

The linear path and velocity regression follow Flow Matching with optimal-transport paths (arXiv 2210.02747).

Classifier-free guidance (CFG)

CFG pushes the output toward the condition c c by extrapolating away from an unconditional prediction ∅ \varnothing . The guidance scale w w sets the strength.

v^=vθ(x,t,c)+w (vθ(x,t,c)−vθ(x,t,∅)) \hat v = v_\theta(x,t,c) + w\,\big(v_\theta(x,t,c) - v_\theta(x,t,\varnothing)\big)

The cost is two forward passes per sampling step, so CFG doubles inference compute. The same form applies to a diffusion network by swapping vθ v_\theta for ϵθ \epsilon_\theta .

Classifier-free guidance was introduced for diffusion models (arXiv 2207.12598); the form above applies it to a velocity network.

In speech, ZipVoice targets the CFG cost (arXiv 2506.13053). Lipman et al. show OT paths train and sample faster than diffusion paths (arXiv 2210.02747).

Inference, why flow matching won:

A plain regression target with no noise schedule or SNR weighting. Straighter paths mean fewer steps and better RTF. Infilling is natural (Voicebox, E2).

Where it sits

Role Models
Fully NAR TTS Voicebox (arXiv 2306.15687), E2 TTS (arXiv 2406.18009), F5-TTS (arXiv 2410.06885; the authors report RTF 0.15, trained on 100K h), ZipVoice (arXiv 2506.13053; the authors report 3x smaller and up to 30x faster than a DiT-based flow-matching baseline)
Diffusion, not flow DiTTo-TTS (latent diffusion DiT, 790M parameters, 82K h; arXiv 2406.11427); Seed-TTS DiT (fully diffusion-based NAR variant; arXiv 2406.02430)
Decoder after AR LM CosyVoice 2 (arXiv 2412.10117), GLM-4-Voice (conditional flow matching plus HiFi-GAN; arXiv 2412.02612), Kimi-Audio (chunk-wise flow matching from 12.5 Hz tokens to 50 Hz mel, then a BigVGAN vocoder; arXiv 2504.18425)

Counterexamples and traps

Do not mislabel these as flow matching:
  • Qwen3-Omni: the Talker emits AR codec frames with an MTP module; a lightweight causal ConvNet (Code2Wav) makes the waveform. Not flow. Qwen2.5-Omni used a sliding-window DiT (arXiv 2503.20215).
  • MiniMax-Speech has a "Flow-VAE" (arXiv 2505.07916). Do not call it flow matching.
  • MaskGCT: mask-and-predict in both stages (arXiv 2409.00750).

ASR has little flow work. Drax is the clearest, using discrete flow matching for NAR ASR (arXiv 2510.04162).

Say this in the interview:

"Flow matching is regression onto a velocity field, so training is simple and few-step sampling is natural. In S2S it is mostly the acoustic renderer behind an AR content model."

Continuous autoregression and next-token diffusion

A smaller, newer branch drops discrete tokens. An AR model predicts continuous latents, and a small diffusion or flow head samples each next frame or patch.

Model Design Notes
MELLE (arXiv 2407.08551) Regresses continuous mel frames; spectrogram flux loss; latent sampling replaces top-p The authors report a 47.9% relative WER reduction over VALL-E on continuation
DiTAR (ICML 2025; arXiv 2502.03930) LM over aggregated patch embeddings, bidirectional-attention diffusion transformer (LocDiT) generates each patch Temperature maps to the noise-injection point in the reverse ODE
VibeVoice (arXiv 2508.19205) LLM hidden states condition a light diffusion head predicting continuous VAE features; 7.5 Hz The authors report 80x better compression than EnCodec at comparable performance; up to 90 min of speech in a 64K context
dots.tts (arXiv 2606.07080) 2B continuous autoregressive TTS in a learned AudioVAE latent space; flow-matching head conditioned on full history The authors report first-packet latencies of 85 / 54 ms (output streaming / dual-streaming) after MeanFlow distillation
VoxCPM (arXiv 2509.24650) Tokenizer-free: a text-semantic LM and a residual acoustic LM guide a local diffusion decoder, trained end to end with a diffusion objective The authors report 1.8M h of bilingual training data for VoxCPM-0.5B

Inference The two lists below are design analysis, not results from the papers.

The case for

  • No quantization loss, so higher ceiling on naturalness.
  • Very low frame rates shorten the AR sequence (VibeVoice runs at 7.5 Hz).

The case against

  • Per-frame diffusion or flow cost on top of the LM step.
  • RL is harder without discrete tokens. GROW notes that trajectory-level policy-gradient RL for flow-matching TTS must track per-step likelihood ratios, which adds overhead (arXiv 2608.03215). CosyVoice 3's DiffRO optimises the speech tokens directly with a differentiable reward, and targets discrete-token models (arXiv 2505.17589).
  • Sampling control is weaker than top-p over a categorical.
  • Inference Qwen3-Omni uses a codec plus a causal ConvNet decoder (arXiv 2509.17765), which suggests continuous heads may stay niche for duplex products.
Say this in the interview:

"Continuous AR removes the quantization bottleneck, but you pay in per-step sampling cost and lose easy RL. For a duplex product I would start discrete and revisit."

Streaming and low-latency generation

Streaming TTS needs a causal, low-frame-rate codec on the AR side, and a chunkable, few-step decoder on the acoustic side.

LM tokens Flow decoder Audio out chunk 1 dec 1 pkt 1 chunk 2 dec 2 pkt 2 chunk 3 dec 3 pkt 3 chunk 4 dec 4 pkt 4 first-packet latency solid: chunk tokens; dashed: look-ahead tokens from the next chunk
Chunk-wise causal decoding: tokens arrive in chunks, each chunk is decoded with look-ahead, and audio streams out.

First-packet numbers

Do not compare across rows:

All figures are the authors' self-reports, and the definitions differ.

System Figure Source
Moshi 160 ms theoretical, about 200 ms in practice arXiv 2410.00037
Qwen3-TTS (12 Hz) 97 ms first packet arXiv 2601.15621
Qwen3-Omni 234 ms theoretical cold-start first packet arXiv 2509.17765
FlashTTS (Jun 2026) 325 ms first-packet latency with a 2-NFE decoder; its own table lists 843 ms for CosyVoice 2 at 10 NFE arXiv 2606.09141
Qwen3-ASR 0.6B Average TTFT as low as 92 ms (ASR side) arXiv 2601.21337

Latency levers

Lever How it works
Causal, low-rate codec Fewer AR steps per second of audio, no future context needed
Chunk-aware causal flow CosyVoice 2 samples one of four attention masks (non-causal, full-causal, chunk-M, chunk-2M) uniformly in training, so one model serves streaming and offline (arXiv 2412.10117)
Look-ahead Kimi-Audio uses chunk-wise causal masking with a look-ahead mechanism to fix chunk-boundary issues (arXiv 2504.18425); CosyVoice 2 also uses a look-ahead pre-convolution (arXiv 2412.10117)
Few-step distillation ZipVoice flow distillation reduces sampling steps and removes the CFG overhead (arXiv 2506.13053); MeanFlow learns average velocity over an interval (arXiv 2505.13447); Int-MeanFlow distils for speech (arXiv 2510.07979); FlashTTS uses an X-pred mean-flow decoder at 2 NFE (arXiv 2606.09141)
Multi-token prediction VITA-Audio emits several audio tokens per forward pass (arXiv 2505.03739); FlashTTS adds parallel MTP modules
Sampling schedule F5-TTS's Sway Sampling is an inference-time flow-step strategy that needs no retraining (arXiv 2410.06885)

MeanFlow's headline FID 3.43 is an ImageNet one-step result (arXiv 2505.13447). IntMeanFlow reports 1-NFE token-to-spectrogram and 3-NFE text-to-spectrogram inference for speech (arXiv 2510.07979).

Inference:

For flow decoders, step distillation is the biggest latency lever. For AR models, lower token rate plus a causal codec is.

Say this in the interview:

"I budget first-packet latency per stage. For the renderer the lever is NFE, so I would distil to 2 steps. For the LM it is token rate and multi-token prediction."

Chapter 4

Speech-to-speech systems

S2S architectures with the LLM as a downstream component

Six families, ordered by how tightly speech is fused into the LLM. The first three are the most conservative designs; the last three fuse speech into the LLM most tightly.

Cascaded ASR, LLM, TTS ASR LLM TTS text text speech Half-cascade Freeze-Omni Speech enc. LLM Speech dec. embeds text or hidden speech Thinker-Talker Qwen3-Omni Thinker Talker Renderer text speech codes speech Interleaved GLM-4-Voice LM text audio text audio text audio Parallel Moshi LM text audio t a t a t a t a text leads
Five families by how text and speech are coupled in time. Dashed arrows: streaming hand-off to the speech side.

The six families

Family Models How text and speech are produced together
Cascaded ASR, LLM, TTS Sequential; latencies add (Moshi, arXiv 2410.00037, cites a latency of several seconds)
Half-cascade LLaMA-Omni 2 (arXiv 2505.02625), Freeze-Omni (arXiv 2411.00774) Speech encoder into text LLM; a streaming speech decoder consumes LLM text or hidden states
Thinker-Talker Qwen3-Omni (arXiv 2509.17765), Qwen3.5-Omni (arXiv 2604.15804) Thinker produces text; Talker conditions on it and emits speech codes
Interleaved GLM-4-Voice (arXiv 2412.02612), Step-Audio 2 (arXiv 2507.16632), VITA-Audio (arXiv 2505.03739) One sequence alternates text and audio tokens
Parallel streams Moshi (arXiv 2410.00037), Kimi-Audio (arXiv 2504.18425) Moshi: text tokens run time-aligned with audio tokens (Inner Monologue). Kimi-Audio: shared transformer layers, then parallel text and audio heads
Codec-free SALMONN-omni (arXiv 2411.18138) Embeddings instead of codec tokens; a "thinking" mechanism facilitates asynchronous text and speech generation

Key facts per model

  • LLaMA-Omni 2: 0.5B to 14B on Qwen2.5, Whisper-large-v3 encoder, a streaming speech decoder inspired by CosyVoice 2, trained on 200K multi-turn dialogues; the authors report beating GLM-4-Voice (arXiv 2505.02625).
  • Freeze-Omni: frozen LLM, so the authors report speech-mode intelligence at the same level as the text mode of the backbone, plus chunk-wise state prediction for duplex dialogue (arXiv 2411.00774).
  • Qwen3-Omni: text in 119 languages, speech understanding in 19, speech generation in 10 (arXiv 2509.17765).
  • Qwen3.5-Omni (Apr 2026): hybrid-attention MoE Thinker and Talker, 256k context, and ARIA, which dynamically aligns text and speech units to stabilise streaming speech and prosody (arXiv 2604.15804). The authors claim SOTA on 215 audio and audio-visual subtasks.
  • Kimi-Audio: continuous audio features in, discrete tokens out, more than 13M h of audio pretraining (arXiv 2504.18425).
  • MiniCPM-o 2.6: 8B, built from SigLip-400M, Whisper-medium-300M, ChatTTS-200M and Qwen2.5-7B, with a time-division multiplexing mechanism for streaming (OpenBMB model card).
  • Commercial: OpenAI's Realtime API model "works directly with audio" (OpenAI docs). Google's Live API offers native audio output models (Gemini API docs).

The intelligence gap

Speaking costs reasoning quality. Causes reported: catastrophic forgetting and modality inequivalence (arXiv 2509.14930), and a bottleneck in condensing redundant speech into stable late-layer decisions (arXiv 2603.01502). Mitigations: a frozen LLM (arXiv 2411.00774), cross-modal distillation from a text teacher (arXiv 2509.14930), layer-wise hidden-state alignment with RL (arXiv 2601.05543), EchoX (arXiv 2509.09174).

Inference

Inference Half-cascade or Thinker-Talker with a frozen or lightly tuned LLM looks like the pragmatic route to keep text-level quality. Native interleaved is the frontier.

In the interview, say:

"I think of the LLM as swappable. The real design choice is how text and speech are coupled in time: sequentially, by a Thinker-Talker handoff, interleaved, or as parallel streams."

Full-duplex and backchannelling

Full duplex means the model listens and speaks at once, so it can overlap, interrupt and backchannel without explicit turn logic. This is the target capability for the Synthesia voice role.

user audio agent audio agent text backchannel barge-in user speaks user interrupts mm-hm agent speaks txt text (leads audio) time
Dual-stream timeline: both audio streams run at every step, so overlap, backchannel and barge-in need no turn logic.

Schemes

Scheme Models Mechanism
Dual-stream Moshi (arXiv 2410.00037), dGSLM (arXiv 2203.16502) Own and user audio as parallel streams, no explicit speaker turns. dGSLM is textless, trained on 2000 h of two-channel Fisher audio, and generates speech, laughter and other paralinguistic signals in both channels
Time-multiplexed / flattened OmniFlatten (arXiv 2410.17799) One flattened sequence; three stages: modality alignment, half-duplex, full-duplex; backbone architecture unchanged
State head Freeze-Omni (arXiv 2411.00774), MinMo (arXiv 2501.06282) Freeze-Omni: chunk-wise state prediction on the LLM's hidden state. MinMo: a duplex predictor plus a duplex alignment stage, about 8B parameters, 1.4M h of speech
Shared timeline MiniCPM-o 4.5 (arXiv 2604.27393) 9B parameters; "Omni-Flow" aligns omni-modal inputs and outputs on a shared temporal axis; runs on edge devices with under 12 GB RAM (authors)
Cascade-duplex DuplexCascade (arXiv 2603.09180) VAD-free cascade that aims for duplex behaviour while keeping cascade strengths

Reported Self-reported results. The DuplexSLA authors report 98.33% backchannel accuracy on their own benchmark, against 40% or less for the closed-source baselines they tested (arXiv 2605.20755). NVIDIA's PersonaPlex model card lists a smooth turn-taking rate of 0.908 and latencies of 0.170 and 0.240 on Full-Duplex-Bench, without units on the card (model card; paper arXiv 2602.06053).

Benchmarks

  • Full-Duplex-Bench v1 (arXiv 2503.04721): pause handling, backchanneling, turn-taking, interruption management; automatic metrics.
  • v1.5 (arXiv 2507.23159): overlap scenarios (user interruption, user backchannel, talking to others, background speech), stop and response latency. It finds two strategies: responsive and floor-holding.
  • ECHO (arXiv 2609.17360): paired Chinese yield-or-keep turn-taking benchmark; the authors find three of four systems over-yield on backchannels.
  • VoiceBench (arXiv 2410.17196): multi-faceted evaluation of LLM-based voice assistants.
  • URO-Bench (arXiv 2502.17810): open-source spoken dialogue models lag behind their backbone LLMs on instruction following.

Evaluation is maturing but not comparable across papers.

Data is the bottleneck

Source Detail
Fisher About 2,000 h of two-channel telephone conversation, 8 kHz; Moshi upsamples it to 24 kHz (arXiv 2410.00037)
Synthetic dialogue via TTS LLaMA-Omni 2 (200K dialogues, arXiv 2505.02625), Hibiki (aligned synthetic data, arXiv 2502.03382), Freeze-Omni (60,000 text Q&A, arXiv 2411.00774), SyncLLM (212k h synthetic plus 2k h real, arXiv 2409.15594)
Unlabelled audio Kimi-Audio more than 13M h (arXiv 2504.18425); MinMo 1.4M h (arXiv 2501.06282); Moshi 7M h (arXiv 2410.00037)

A 2026 survey (arXiv 2606.19453) proposes an L0-L3 hierarchy and an IDLE/LISTEN/SPEAK/WAIT/DUAL state machine. It finds that observed behaviour is constrained by the interaction patterns in training and evaluation, and that public training-data coverage is limited. A 2025 survey (arXiv 2509.14515) names synchronous data scarcity, architectural divergence and evaluation gaps as the main challenges.

In the interview, say:

"Architecture is mostly solved: dual-stream or state-head. The bottleneck is dual-channel conversational data with real overlap and backchannels, and a benchmark everyone shares."

Multimodal, multilingual S2S

Multilingual S2S is lopsided: models understand far more languages than they speak. Text is the bridge that makes the rest possible.

Coverage asymmetry

Model Text Speech understanding Speech generation
Qwen3-Omni (arXiv 2509.17765) 119 languages 19 10
Omnilingual ASR (arXiv 2511.09690) n/a 1,600+ languages (ASR only) n/a
SeamlessStreaming (arXiv 2312.05187) 96 target languages in text output 101 source languages 36 target languages

Qwen3-Omni (arXiv 2509.17765) and Qwen3.5-Omni (arXiv 2604.15804) each report speech generation in 10 languages. Inference Generation is likely the constraint, because it needs clean TTS-grade data per language.

Translation and code-switching

  • Hibiki (arXiv 2502.03382): simultaneous speech-to-speech translation with multistream modelling. It uses per-word delays from text machine translation to build aligned synthetic data. The authors' model has 2.7B parameters and translates French to English (the pair they evaluate).
  • SeamlessStreaming (arXiv 2312.05187): direct streaming translation from 101 source languages into speech in 36 target languages.
Code-switching gap

No dedicated study was found in the sources used here. Treat code-switching as an open question to test, not a solved capability.

How text streams serve S2S

Role Mechanism
Supervision ASR transcripts and TTS text give cheap aligned targets for speech understanding and generation, so unpaired audio can still be used (Kimi-Audio, over 13M h, arXiv 2504.18425)
Scaffold Text is generated first or alongside speech: Moshi's time-aligned Inner Monologue (arXiv 2410.00037), Thinker text before Talker (arXiv 2509.17765), Step-Audio 2 fixed-ratio interleaving (arXiv 2507.16632), ARIA alignment (arXiv 2604.15804)
Alignment Per-word delays (Hibiki, arXiv 2502.03382) and delayed streams (DSM, arXiv 2509.08753) turn transcripts into time-aligned training data
Capability transfer A frozen text LLM (Freeze-Omni, arXiv 2411.00774) or text-teacher distillation (arXiv 2509.14930) carries text-level multilingual knowledge into speech
Inference

Inference For a multilingual product, understand broadly with a multilingual encoder, generate in a short list of languages you can evaluate with native raters, and use the text stream to hold language identity.

In the interview, say:

"Understanding scales through ASR-style data; generation does not. The text stream is both the supervision signal and the scaffold that lets generation borrow the LLM's multilingual ability."

Chapter 5

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."

Chapter 6

Control and quality

Steering voice, tone and emotion

Five control channels, usually combined: a reference clip, a natural-language instruction, inline tags, duration targets, and style guidance at sampling time.

Text content Reference audio speaker, timbre NL instruction, tags style, emotion Duration target exact timing Token LM conditioned on all four Decoder tokens audio
Figure: each control channel enters the token language model as a separate condition; the decoder turns the resulting tokens into audio.

Control channels

Channel Examples Notes
In-context cloning Synthesia Express-Voice Synthesia describes a two-stage transformer with autoregressive and non-autoregressive parts (about 800M parameters each), operating on graphemes with Descript's RVQ tokenizer. It is conditioned on reference audio, with no fixed speaker embedding (Synthesia Express-2 post)
NL instructions CosyVoice 3, Parler-TTS, IndexTTS2, Hume Octave, gpt-4o-mini-tts, Qwen-Audio-3.0-TTS CosyVoice 3 prepends a natural-language description and an <endofprompt> token to the text; instruction-following data grew from 1,500 to 5,000 hours (arXiv 2505.17589). Parler-TTS reads gender, speaking rate, pitch and reverberation from the text description, with no reference audio; Parler-TTS Large is 2.3B parameters (Parler-TTS README). Hume Octave 1 takes a natural-language description and a separate speed multiplier from 0.5 to 2.0 (Hume docs). OpenAI's TTS guide shows an instructions field on gpt-4o-mini-tts. Qwen-Audio-3.0-TTS offers free-style instructions and inline tags (arXiv 2607.23938)
Inline tags ElevenLabs audio tags, CosyVoice 3, Qwen-Audio-3.0-TTS ElevenLabs lists bracket tags such as [whispers]; its docs say a tag for a delivery the voice was not trained on may be less reliable (ElevenLabs docs). CosyVoice 3 supports vocal bursts between text tokens and feature tags such as [laughter] and [breath] (arXiv 2505.17589)
Duration control IndexTTS2 (arXiv 2506.21619) Explicit token count for exact timing, or free mode that keeps prompt prosody
Style guidance CFG on the style or text condition Inference Reuses the CFG term from the flow-matching material in chapter 03 (Speech generation), with a style-only unconditional branch

Disentanglement

IndexTTS2 separates emotion from timbre: timbre comes from one prompt and emotional tone from a style prompt, so the two can come from different speakers (arXiv 2506.21619). Its text-based emotion control comes from fine-tuning Qwen3. The authors report better word error rate, speaker similarity and emotional fidelity than other zero-shot TTS models. Step-Audio-EditX takes a different route: large-margin synthetic data instead of representation-level disentanglement (arXiv 2511.03601).

In CosyVoice's own tests, the instruct model raised the share of generated speech that an emotion2vec classifier labelled sad, angry, surprised and disgusted, compared with the base model (arXiv 2407.05407, Table 10).

Duration control and lip-sync

The IndexTTS2 authors motivate exact durations by video dubbing, where speech must match a video block length (arXiv 2506.21619). Inference This is the hook for avatar sync.

Evaluation

emotion2vec (arXiv 2312.15185) is a self-supervised speech-emotion representation, usable as the basis for emotion similarity. Synthesia reports measuring Express-Voice with WavLM for speaker similarity and emotion2vec for emotional similarity.

Synthesia context

Synthesia's Express-2 (4 Sep 2025) pairs Express-Voice with Express-Video. The post reports a blind test with 100 native English-speaking evaluators across 17 accents, in which Express-Voice rated highest for matching the original speaker's identity, rhythm and accent (Reported company claim). The post gives no scores.

Gap

In-context cloning internals, speaker embeddings and timbre/prosody/content disentanglement were not researched beyond IndexTTS2 and Express-Voice.

In the interview, say:

"I would combine a reference clip for identity, an NL or tag channel for emotion, and a duration mode for sync, with emotion kept disentangled from timbre so style transfers across speakers."

Post-training and evaluation for speech generation

Post-training uses ASR and speaker-verification rewards. The recurring failure is reward hacking.

TTS policy Speech samples ASR: WER Speaker SIM Emotion, naturalness Policy update updated policy generates the next rollouts Human listening audit for reward hacking rollouts rewards
Figure: the RL loop for TTS. Automatic rewards score each rollout; human listening tests audit the rewards and gate release.

Methods

Method Idea
Seed-TTS RL (arXiv 2406.02430) RL for robustness, speaker similarity, controllability
DiffRO (CosyVoice 3; arXiv 2505.17589, 2507.05911) Computes rewards on neural codec tokens rather than synthesized audio; Gumbel-Softmax makes the reward differentiable; a multi-task reward model adds emotion and quality control
F5R-TTS (arXiv 2504.02407) Converts flow outputs to Gaussians so GRPO applies; WER and SIM rewards; 29.5% relative WER reduction, 4.6% relative SIM gain (authors)
Flow-GRPO (arXiv 2505.05470) ODE-to-SDE conversion that keeps the model's marginals, enabling the sampling that online RL needs for flow-matching models (text-to-image)
GROW (arXiv 2608.03215) Group-relative advantage-weighted on-policy RL that acts on the standard flow-matching objective, avoiding the ODE-to-SDE conversion and per-step likelihood ratios; on DiTAR the authors report WER 2.016 to 1.558 and SIM 0.676 to 0.715
SwanVoice (arXiv 2605.30993) DiffusionNFT post-training with phone-level and speaker-similarity rewards
FlowTTS-GRPO (arXiv 2606.23190) Online RL for flow-matching TTS: ODE-to-SDE conversion, weighted multi-objective reward; tested on CosyVoice 3.0 and F5-TTS
Step-Audio-EditX (arXiv 2511.03601) Large-margin synthetic data for iterative emotion and style editing, with no embedding priors or auxiliary modules
Preference optimisation EASPO: stepwise preference optimisation for diffusion TTS, scoring noisy intermediate states (arXiv 2509.25416)

Reward hacking

Trap: automatic rewards get gamed
  • RRPO reports that DiffRO-style reward models can be exploited with acoustic artifacts that earn spurious reward but degrade perceptual quality (arXiv 2512.04552).
  • A prosody study found GRPO on CER and NLL rewards lowered error rates but collapsed prosody into monotone speech; adding speaker similarity destabilised training. Its fix was iterative DPO with a few hundred human preference pairs per round (arXiv 2509.18531).
  • FlowSE-GRPO (speech enhancement): a single reward gives fast metric gains but degrades audio fidelity; multi-metric rewards mitigate this (arXiv 2601.16483).
Inference

Inference Always pair automatic rewards with a naturalness term and listening tests.

Metrics

Metric Notes
WER Seed-TTS-eval uses Whisper-large-v3 (English) and Paraformer-zh (Mandarin)
SIM Seed-TTS-eval uses WavLM-large fine-tuned for speaker verification. Inference Other benchmarks may use other verification models, so quote the variant
UTMOS Predicted MOS used as a naturalness check alongside WER and SIM (for example in GROW, arXiv 2608.03215)
emotion2vec Emotion similarity (arXiv 2312.15185)
Full-Duplex-Bench (arXiv 2503.04721) Pause handling, backchanneling, turn-taking and interruption management for spoken dialogue models
Human listening Needed because the automatic metrics are optimisable

The GRPO experience from online RL at Amazon transfers directly. The new part is making rollouts differentiable or likelihood-tractable for flow models.

In the interview, say:

"I would use WER and SIM rewards plus an emotion or naturalness term, watch for monotone prosody as a hacking signature, and gate releases on human listening tests."

Chapter 7

Multimodal generation

Audio-visual diffusion

Three threads have converged. Large DiT video backbones now take audio as a condition or generate it jointly. Avatar models bolt audio conditioning and long-video stitching onto those backbones. Causal few-step distillation turns the result into a streamer.

Real-time numbers in this section are author-reported, often multi-GPU, and not comparable across papers.

Video diffusion backbones

The shared recipe is a 3D causal VAE, a DiT denoiser, and a flow-matching or rectified-flow objective Inference. Models differ in attention sparsity, text encoders, and how causal the VAE is.

Model Design Notes
Wan 2.1 (arXiv 2503.20314) 3D causal VAE; GroupNorm replaced by RMSNorm to preserve temporal causality and enable a feature cache Open 1.3B and 14B models; the authors report 8.19 GB VRAM for the 1.3B model Reported
Wan2.2-S2V-14B Audio-driven video from audio, a reference image and optional text; optional pose video Model card says "built upon Wan"; Apache 2.0. The card gives no further architecture detail
HunyuanVideo 1.5 (arXiv 2511.18870) 8.3B open DiT for consumer GPUs; selective and sliding tile attention (SSTA); glyph-aware text encoding Includes an efficient video super-resolution network
LTX-2 (Lightricks) 19B DiT-based audio-video foundation model Model card: generates synchronized video and audio within a single model; community licence
Seedance 1.5 pro (arXiv 2512.13507) Dual-branch DiT with a cross-modal joint module; joint audio and video Reports more than 10x inference speedup Reported
Veo 3 (Google DeepMind) Generates audio natively: sound effects, ambient noise and dialogue Google's page describes the feature; no architecture report was retrieved
Caveat on Veo 3

Treat anything about its internals as unknown. Cite only what Google's own page says.

Audio-driven human animation

These models take a reference image plus audio and render a talking person. Most reuse a video foundation model (Wan, Hunyuan) and add audio cross-attention Inference.

Reference image Audio features Video DiT denoises latents identity cross-attention 3D causal VAE latents Frames
Figure: audio-driven human animation on a video foundation model. Audio features cross-attend into the DiT; the 3D causal VAE decodes the denoised latents.
  • OmniHuman-1 (arXiv 2502.01061): a DiT that scales up data by mixing motion-related conditions into training. OmniHuman-1.5 (arXiv 2508.19209): an MLLM writes a structured textual representation for semantic and emotional guidance; a "Pseudo Last Frame" design mitigates inter-modality conflicts. The authors argue earlier models sync to low-level cues such as audio rhythm and lack understanding of emotion and intent.
  • HunyuanVideo-Avatar (arXiv 2505.20156): an MM-DiT for multi-character, emotion-controllable dialogue video. A face-aware audio adapter isolates each character with a latent-level face mask, so audio is injected per character through cross-attention.
  • FantasyTalking (arXiv 2504.04842): audio-to-video in a pretrained video DiT, then lip-focused refinement. FantasyTalking2 (arXiv 2508.11255): preference optimisation (TLPO) with a reward model, Talking-Critic, and a 410K-pair dataset.
  • MultiTalk (arXiv 2505.22647): multi-person conversation with per-stream audio; Label RoPE (L-RoPE) resolves which audio stream binds to which person. InfiniteTalk (arXiv 2508.14033): sparse-frame dubbing for infinite-length sequences, editing full-body motion rather than only the mouth region.
  • EchoMimicV3 (arXiv 2507.03905): a 1.3B-parameter framework that unifies multi-task and multi-modal human animation.
  • Synthesia Express-2 (4 Sep 2025): Express-Voice, Express-Animate (co-speech motion from audio), Express-Eval and Express-Render (1080p, 30 fps, arbitrary length). Express-Render is distilled to two diffusion steps. The post makes no real-time claim Reported.

Joint audio and video generation

Joint models replace post-hoc lip sync by generating both streams together. Audio quality is still the open question.

Ovi (Character.AI, arXiv 2510.01284) is the clearest open recipe.

Video latents 31 frames Audio latents 157 tokens RoPE on both audio scaled to video rate Video DiT tower init from Wan2.2 5B Audio DiT tower same shape, from scratch bidirectional cross-attention in every block Video Audio
Figure: Ovi twin towers. The dashed arrows show RoPE applied to both streams, with the audio frequencies rescaled to align the token rates.
  • Twin DiT towers: video initialised from Wan2.2 5B; the audio tower has the same shape (30 blocks, dim 3072) and trains from scratch.
  • Bidirectional audio-video cross-attention in every block.
  • RoPE on both streams, with the audio frequencies scaled to match the coarser video resolution. Video latents span 31 frames while audio latents form 157 tokens.
  • The authors note that dense blockwise fusion costs time per sampling step, and name distillation such as DMD2 as a way to reduce steps.

UniVerse-1 (arXiv 2509.06155) takes the other route. It stitches pretrained experts, Wan2.1 (1.3B) for video and ACE-Step (3.5B) for music, with lightweight cross-modal MLP connectors in corresponding blocks. It was fine-tuned on about 7,600 hours of audio-video data.

Coupling therefore comes in two patterns: same-shape twin towers with per-block cross-attention (Ovi), or pretrained experts joined by connectors (UniVerse-1). Ovi handles the token-rate mismatch with RoPE rescaling.

Streaming and real-time

The recipe is to distil a bidirectional teacher into a causal few-step student with a KV cache. The failure mode is error accumulation over long rollouts (CausVid, Self Forcing and AvatarForcing all discuss it).

Frames out Denoise chunk KV cache Frames 1 Chunk 1 KV 1 Frames 2 Chunk 2 KV 2 Frames 3 Chunk 3 KV 3 Frames 4 Chunk 4 KV 4 rolling window: KV 1 is evicted time
Figure: chunked autoregressive generation (illustrative chunk count). Dashed arrows are cache reads; solid arrows write and decode.
System Idea Reported figures
CausVid (arXiv 2412.07772) DMD extended to video; 50-step bidirectional model distilled into a 4-step causal student with KV cache 9.4 FPS on a single GPU, 1.3 s initial latency; the bidirectional teacher needs 219 s for 128 frames
Self Forcing (arXiv 2506.08009) AR rollout with KV cache during training; rolling KV cache at inference; stochastic gradient truncation 17 FPS with sub-second latency on one H100
LiveTalk (arXiv 2512.23576) Improves Self Forcing under text, image and audio conditioning: condition quality, on-policy initialisation and schedule; Anchor-Heavy Identity Sinks for long video Matches full-step bidirectional baselines with 20x less inference cost and latency (authors)
StreamAvatar (arXiv 2512.22065) Autoregressive distillation plus adversarial refinement; Reference Sink and reference-anchored positional re-encoding for long-term stability No figure quoted
AvatarForcing (arXiv 2603.14331) One-step streaming over a local-future window; 1.3B student 34 ms per frame
Live Avatar (arXiv 2512.04677) 14B model distilled into a causal few-step streamer; Timestep-forcing Pipeline Parallelism 45 FPS, 1.21 s time to first frame on 5 H800 GPUs
SoulX-FlashTalk (arXiv 2512.23379) 14B; self-correcting bidirectional distillation keeps bidirectional attention within video chunks 0.87 s start-up latency, 32 FPS
Do not rank these rows

Figures are author-reported and use different GPUs (one H100 against five H800), resolutions and definitions of latency. All figures here come from the papers' own abstracts or text.

Error accumulation has several named causes and fixes. The train-test gap is closed by training on own rollouts (Self Forcing). LiveTalk reports flicker and black frames when Self Forcing meets multimodal conditioning, and repairs them with a better distillation recipe. Identity drift is handled with identity sinks (LiveTalk) and a reference sink (StreamAvatar). Mechanisms are rolling or sink KV caches, on-policy rollouts and distribution matching.

Decoupled Self-Forcing (arXiv 2609.10317) frames two routes: end-to-end audio-conditioned video diffusion (high quality, but only at large scale) against two-stage methods that generate an intermediate motion representation (cheaper, lower fidelity). Its own approach pairs a small causal AR motion generator with a diffusion renderer and reports 15.4 FPS at 1.3 s latency. SoulX-FlashTalk (arXiv 2512.23379) argues that strictly unidirectional attention often compromises visual fidelity.

Metrics and data

  • Lip sync: Ovi's data filter uses SyncNet to filter out clips lacking audio-video synchronization (arXiv 2510.01284); UniVerse-1 reports LSE-C (arXiv 2509.06155).
  • Identity: UniVerse-1 scores identity as mean DINOv3 feature similarity between the reference image and each generated frame (arXiv 2509.06155).
  • Datasets named in the papers above: HDTF, CelebV-HQ and EMTD (InfiniteTalk), and HDTF, AVSpeech and CelebV-HQ (LiveTalk).
  • Human preference studies (Ovi ran a blind pairwise study with 50 participants) and reward-model judges (Talking-Critic, arXiv 2508.11255) appear in the papers above.
  • Ovi's curation also filters clips on a minimum mean volume and adds captions (arXiv 2510.01284).
Comparability

Inference Papers use different benchmarks, baselines and sync definitions, so cross-paper sync and identity numbers should not be compared.

In the interview, say:

"Audio is moving into the backbone, and streaming is the frontier. The standard fix is distillation plus on-policy training, and multimodal conditioning is where it breaks. Because published sync numbers are not comparable, I would build a shared internal benchmark first."

Autoregressive and unified models

The field has moved from a discrete-versus-continuous fight to hybrids. Next-token AR dominates unified stacks, but the per-token head is increasingly diffusion or flow over continuous latents. Video is moving to chunked, causal AR with diffusion for streaming.

Discrete-token head (VAR, Emu3 style) Continuous-token head with a small diffusion head (MAR, Fluid style) AR transformer Token head softmax over codes Discrete token state sample token embedding is the next input AR transformer Diffusion head denoises one token Continuous latent state denoise latent is the next input
Figure: the two per-step heads on an AR transformer. The discrete head samples a code; the continuous head runs a small diffusion or flow process per token.

Discrete-token AR

  • VAR (arXiv 2404.02905): next-scale prediction. The authors report ImageNet 256 FID improving from 18.65 to 1.73 against an AR baseline, with around 20x faster inference.
  • Infinity (arXiv 2412.04431): bitwise token prediction with an infinite-vocabulary tokenizer and bitwise self-correction. The authors report GenEval 0.62 to 0.73 over SD3-Medium, and a 1024 px image in 0.8 s, 2.6x faster than SD3-Medium.
  • Emu3 (arXiv 2409.18869): one transformer trained from scratch with next-token prediction over discrete image, text and video tokens. The authors claim it surpasses SDXL and LLaVA-1.6.
  • Emu3.5 (arXiv 2510.26583): world-model framing on interleaved vision-language data, over 10T tokens, RL post-training. Discrete Diffusion Adaptation (DiDA) turns token-by-token decoding into bidirectional parallel prediction, accelerating per-image inference by about 20x (authors).

Continuous-token AR with diffusion heads

  • MAR (arXiv 2406.11838, NeurIPS 2024): no vector quantisation; each token's distribution is modelled with a diffusion procedure (Diffusion Loss), including masked autoregressive variants.
  • Fluid (arXiv 2410.13863): continuous tokens give clearly better visual quality than discrete; random order beats raster on GenEval. At 10.5B: zero-shot FID 6.16 on MS-COCO 30K, GenEval 0.69.
  • NOVA (arXiv 2412.14169, ICLR 2025): non-quantised AR video, frame by frame in time and set by set within a frame; 0.6B parameters.
Bridge to speech

MELLE, DiTAR and VibeVoice are the audio analogue of MAR and Fluid: an AR model over continuous latents with a small diffusion or flow head per step. Inference The same trade-offs likely apply (no quantisation loss, but per-step sampling cost and harder RL). See Speech generation.

Chunked AR video diffusion

  • MAGI-1 (Sand AI, arXiv 2505.13211): autoregressively predicts fixed-length video chunks, trained to denoise per-chunk noise that increases monotonically over time, which supports streaming generation. The largest variant has 24B parameters and supports context lengths up to 4 million tokens (authors).
  • Self Forcing (arXiv 2506.08009, NeurIPS 2025): trains on its own rollouts with a rolling KV cache. The authors report 17 FPS with sub-second latency on one H100. Inference It is the most relevant entry for interactive avatars.

Hybrid unified models

Model Text side Image side Notes
Transfusion (arXiv 2408.11039) LM loss Diffusion loss on image patches One transformer; scales significantly better than quantising images; scaled to 7B parameters and 2T multimodal tokens
Show-o2 (arXiv 2506.15564) AR head Flow-matching head on 3D causal VAE latents Dual-path of semantic layers and spatial (-temporal) fusion
BAGEL (arXiv 2505.14683) Unified decoder-only model Native image and video generation Pretrained on trillions of interleaved text, image, video and web tokens
UniAR (arXiv 2606.18249, ICML 2026) AR model One discrete visual tokenizer (lookup-free bitwise quantisation) for both tasks, plus a diffusion decoder on the discrete tokens Authors claim state of the art on image generation and editing

One related observation from the Kelix report: most VLMs pair discrete text tokens with continuous ViT features, which biases them toward understanding (arXiv 2602.09843).

Discrete diffusion language models

  • LLaDA (arXiv 2502.09992): 8B masked-diffusion LM trained from scratch; the authors report it is competitive with LLaMA3 8B in in-context learning.
  • MMaDA (arXiv 2505.15809): a multimodal diffusion language model with UniGRPO, a unified policy-gradient RL algorithm for post-training across reasoning and generation.

The convergence debate

  • Continuous tokens with a diffusion or flow head give better per-token quality (Fluid, MAR). Discrete tokens give a simpler LM interface and a single cross-entropy (Emu3, LLaDA) Inference.
  • Random-order or bidirectional-within-block generation is winning for images. Raster order is kept where causal streaming matters Inference.
  • Chunked, causal AR suits streaming video (MAGI-1, Self Forcing). Full-clip diffusion remains the offline quality leader Inference.
In the interview, say:

"For images the question is no longer discrete or continuous. It is where the diffusion sits: as a per-token head, as a chunk-level denoiser, or as a separate decoder. For a streaming avatar I would take chunked causal generation, and for speech the same logic gives an AR model with a flow head."

Tokenizers beyond speech

Across images, video and audio, the tokenizer matters more than the generator. The consensus design is a causal, heavily compressed latent, regularised toward semantic features Inference. Discrete codecs stay the default for audio LMs; continuous VAE latents stay the default for diffusion and flow.

Image and video tokenizers

  • MAGVIT-v2 (arXiv 2310.05737, ICLR 2024) uses lookup-free quantisation (LFQ). With this tokenizer, the authors show LLMs outperforming diffusion models on ImageNet and Kinetics, and title the paper "Tokenizer is Key to Visual Generation" Reported.
  • FSQ (arXiv 2309.15505) quantises each latent dimension to a small set of fixed values. The codebook is the implicit product of those sets, so the authors report no codebook collapse and no need for commitment losses or codebook reseeding Confirmed.
  • TiTok (arXiv 2406.07550) is a 1D tokenizer. It reduces a 256x256x3 image to 32 discrete tokens, with gFID 1.97 on ImageNet 256 using the same generator framework Reported.
  • The NVIDIA Cosmos tokenizer outputs either continuous latents or discrete tokens for images and video. Its README states total compression of up to 2048x (8x16x16) and running up to 12x faster than the best available tokenizers Reported.
  • Causal 3D VAEs compress time and space without peeking at future frames. Wan's VAE replaces GroupNorm with RMSNorm to preserve temporal causality, which enables a feature cache (arXiv 2503.20314) Confirmed.

FSQ in standard notation (not taken from the sources): bound each latent dimension, then round.

z^i=round⁡ ⁣(⌊Li/2⌋tanh⁡(zi)),∣C∣=∏iLi \hat z_i = \operatorname{round}\!\left( \left\lfloor L_i / 2 \right\rfloor \tanh(z_i) \right), \qquad |\mathcal{C}| = \prod_i L_i

Here Li L_i is the number of levels in dimension i i , and ∣C∣ |\mathcal{C}| is the implicit codebook size.

Semantic-aligned VAEs

A recent trend is to align the latent with, or build it directly on, vision foundation model features, then decode.

Tokenizer Idea Reported result
VA-VAE (arXiv 2501.01423) Vision-foundation-model alignment for high-dimensional tokenizers FID 1.35 on ImageNet 256 generation with LightningDiT
VFM-VAE (arXiv 2510.18457) Frozen foundation model used directly as the tokenizer encoder, with a new decoder gFID (w/o CFG) 2.22 in 80 epochs; 1.62 after 640 epochs
DINO-Tok (arXiv 2511.20565) Continuous and discrete tokenizers on a frozen DINO encoder ImageNet 256 rFID 0.28 (continuous) and 1.10 (discrete)

General audio and music codecs

Codec Type Key facts
DAC (arXiv 2306.06546) Discrete RVQ One universal model for speech, environment and music; about 90x compression of 44.1 kHz audio at 8 kbps
Stable Audio Open AE (arXiv 2407.14358) Continuous 156M-parameter autoencoder with a VAE bottleneck of latent size 64, for 44.1 kHz stereo audio
WavTokenizer (arXiv 2408.16532, ICLR 2025) Single quantiser One quantiser with 40 or 75 tokens per second of 24 kHz audio; evaluated on speech, audio and music (ICLR 2025)
Trap

Best reconstruction is not best downstream. The DASB benchmark (arXiv 2406.14294) reports that discrete audio representations are less robust than continuous ones, and that semantic tokens generally outperform acoustic tokens.

Unified and joint audio-visual tokenizers

  • UniCodec (arXiv 2502.20067): one codec with a single codebook across speech, music and sound, using a partitioned domain-adaptive codebook and domain Mixture-of-Experts.
  • MelTok (arXiv 2510.01903): a 2D mel-spectrogram tokenizer that compresses 44.1 kHz audio into a single codebook, with a token-based vocoder.
  • EntangleCodec (arXiv 2606.02739): a unified discrete audio tokenizer with caption-aligned semantic-acoustic representations and a flow-matching diffusion decoder.
  • AVTok (arXiv 2606.30811): a 1D joint audio-video tokenizer with a shared encoder-decoder, modality-specific learnable queries and a unified codebook Reported.
  • VideoPoet (arXiv 2312.14125) is the precedent: it concatenated MAGVIT-v2 and SoundStream vocabularies into one unified vocabulary rather than learning a joint tokenizer.

Trade-offs

Family Token Compression LM-friendliness Reconstruction Examples
VQ / LFQ / FSQ Discrete Moderate to high High (single CE) Lower at equal rate MAGVIT-v2, FSQ, Cosmos DV, DAC
1D tokens Discrete Very high High, short sequences Good for generation, weaker detail TiTok
Causal VAE Continuous High, temporal and spatial Needs diffusion or flow head High Wan VAE, Cosmos CV, Show-o2
Semantic-aligned VAE Continuous Moderate Diffusion or flow Strong generation FID VA-VAE, VFM-VAE
Audio RVQ Discrete High High for audio LMs High at 8 kbps DAC
Audio VAE Continuous Moderate Diffusion or flow Good Stable Audio Open

The table is directional, not a benchmark Inference.

Bridge to speech codecs

Speech codecs (Mimi, X-Codec2, BiCodec, CosyVoice 2 FSQ tokens) are covered in chapter 03. The same logic applies there: low rate and semantic distillation help the LM, continuous latents win back fidelity. Inference For a Voice team the new point is that audio-visual tokenizers may be converging on the same recipe as speech ones.

In the interview, say:

"The tokenizer sets the ceiling more than the generator does. The pattern is causal, compressed, semantically aligned latents: discrete for audio LMs, continuous with a flow head for quality."

Multimodal LLM architecture

Open multimodal LLMs (Qwen3-VL, InternVL3.5, Llama 4) share one template: a vision encoder, a token-reducing connector, and a decoder LLM with multimodal positional encoding. The differences are in positional encoding, visual token count and MoE. Each claim below is cited to the model's technical report, its arXiv paper or Meta's own post.

Image, video Vision encoder Connector Decoder LLM Text pixels features fewer tokens reply Text tokens Multimodal positional encoding is applied inside the LLM.
Figure: the shared template. The connector cuts the visual token count before the LLM; positional encoding differs between models.

Encoder, connector, LLM

  • Qwen3-VL uses DeepStack to integrate multi-level ViT features, plus an enhanced interleaved MRoPE and explicit text timestamps for video. It has dense 2B/4B/8B/32B and MoE 30B-A3B and 235B-A22B variants, with native 256K context (arXiv 2511.21631) Confirmed.
  • Its vision encoder is SigLIP-2, a two-layer MLP merger compresses visual features into tokens, and DeepStack routes visual tokens from several ViT layers into corresponding LLM layers through lightweight residual connections (arXiv 2511.21631) Confirmed.
  • InternVL3.5 compresses 1024 visual tokens per image patch to 256 with a pixel shuffle module. Its Visual Resolution Router (ViR) dynamically adjusts the resolution of visual tokens (arXiv 2508.18265) Reported.
  • Llama 4 uses a MetaCLIP-based vision encoder trained separately in conjunction with a frozen Llama, with MoE (Scout: 17B active, 16 experts, 109B total; Maverick: 17B active, 128 experts, 400B total; Meta's Llama 4 post) Reported.

Positional encoding

Video is handled as time-indexed positions. That one choice enables audio-video sync and streaming Inference.

  • Qwen3-Omni's TM-RoPE splits rotary dimensions into temporal, height and width (24/20/20 angles). Audio gets one temporal ID per 80 ms. Video frame IDs are adjusted to real timestamps (arXiv 2509.17765 section 2.3) Confirmed.

Early vs late fusion

Meta describes Llama 4 as using early fusion to integrate text and vision tokens into a unified model backbone (Meta's Llama 4 post) Reported.

Source conflict

The Qwen3-Omni paper (arXiv 2509.17765) is inconsistent on the Talker. Section 2.1 says the Talker no longer consumes the Thinker's high-level text representations; the Figure 2 caption says it receives high-level representations directly from the Thinker. Do not state either version as settled.

Omni models and time alignment

Qwen3-Omni is a Thinker-Talker MoE (arXiv 2509.17765). The AuT audio encoder runs at a 12.5 Hz token rate. The Talker generates one codec frame per step, an MTP module produces the residual codebooks, and a lightweight causal ConvNet (Code2Wav) renders the waveform Confirmed.

Audio AuT, 12.5 Hz Video real timestamps Thinker MoE LLM 80 ms ID time ID Text Talker 1 codec frame/step conditioning (disputed) MTP residual codebooks Code2Wav causal ConvNet Waveform
Figure: Qwen3-Omni. Audio and video IDs come from absolute time. The paper is inconsistent on how the Talker is conditioned (see the source conflict below).
Aspect Qwen2.5-Omni (arXiv 2503.20215) Qwen3-Omni (arXiv 2509.17765)
Audio-video alignment Interleaved in fixed 2 s chunks Absolute-time position IDs
Streaming input length Not stated Arbitrary duration, per the authors

Qwen3-Omni's theoretical first-packet latency in cold-start settings is 234 ms for audio and 547 ms for video. At 4 concurrency, Table 2 gives 728 ms and 1517 ms Confirmed. These are theoretical figures, not end-to-end measurements.

Training and RL

  • InternVL3.5 uses Cascade RL: offline RL for stable convergence, then online RL for refined alignment (arXiv 2508.18265) Reported.
  • A study of R1-like training for vision-language models reports that SFT before RL can undermine RL by inducing imitated "pseudo reasoning paths". Its GRPO variant with a mixed perception and cognition reward fostered more adaptive reasoning (arXiv 2504.11468) Reported.

Streaming video understanding

StreamingVLM (arXiv 2510.09608) keeps a fixed-size KV cache of attention sinks, recent vision tokens and recent text tokens. It uses contiguous RoPE. It runs at up to 8 FPS on one H100 on a Qwen2.5-VL-7B base Confirmed. Authors report a 66.18% win rate against GPT-4o mini on Inf-Streams-Eval and +4.30 on LongVideoBench Reported. Related: ReKV (arXiv 2503.00540) stores video KV caches in RAM and disk and retrieves only the query-relevant ones.

Evaluation caveat

Trap

Inference Quote benchmark numbers only from each model's own report, with the benchmark version, because third-party leaderboards may use different settings.

What an avatar that perceives the user needs

Inference
  • A streaming encoder with a fixed KV cache, as in StreamingVLM.
  • Audio and video timestamps on one common clock, as in absolute-time IDs.
  • An explicit latency budget; Qwen3-Omni suggests sub-second first packets are feasible, cold start only.
  • Emotion perception needs separate cited work; none was found here.

Qwen3-Omni's Talker is the closest published example of conditioning generation on multimodal understanding features.

Speech-LLM design, the audio half of this stack, is in chapter 02 and chapter 04.

In the interview, say:

"The template has converged: encoder, connector, LLM. The real choices are time-aligned positions and a streaming KV budget, which is what lets an avatar perceive the user live."

Chapter 8

Common problems

Speech generation problems

Thirteen failure modes recur in TTS and voice cloning. Most come from three places: weak text-to-audio alignment, conditioning on a flawed reference, and stochastic sampling. The table is the quick map; the subsections below cover the ones worth explaining aloud.

Grounding labels follow the rest of the page. Synthesia facts cite its Express-2 post and its docs; research claims cite arXiv. Mechanisms marked Inference are my reading, not a source. The Metric and Mitigation columns of the table are suggestions unless a subsection cites them.

Problem Symptom Metric Mitigation
A1 Hallucination Repeated, skipped or babbled words WER/CER by a fixed ASR; alignment score CTC loss, attention priors, alignment-score training
A2 Long-form drift Voice or prosody wanders over minutes Windowed speaker similarity vs first window Chunk with reference re-conditioning
A3 Mispronunciation Names, acronyms, numbers, heteronyms wrong Per-entity accuracy on a fixed list Respelling, glossary, text normalisation
A4 Accents, code-switching Accent slips or blends mid-sentence Per-accent and per-language-pair scores Accent-curated data; per-slice evaluation
A5 Flat prosody Wrong emphasis, monotone, odd pauses Human rating; emotion classifier Voice styles; punctuation as pause control
A6 Reference leakage Emotion, noise or channel copied from prompt emotion2vec similarity; noise floor Prompt quality gate; clean references
A7 Metric pitfalls Scores rise, listeners disagree Same-encoder SIM; human MOS Fix the speaker encoder; report both encoders
A8 Noisy prompts Output inherits room and noise DNSMOS-style quality of output Denoise, dereverb, reject bad prompts
A9 Sampling instability Some seeds are bad, others fine Failure rate across seeds Lower temperature; rerank candidates
A10 Chunk seams Clicks or prosody jumps at boundaries Boundary discontinuity; first-packet time Overlap, look-ahead, crossfade
A11 Codec artefacts Metallic or buzzy timbre Codec reconstruction scores; listening Better tokenizer; loudness normalisation
A12 Multilingual gaps Quality drops outside head languages Per-language WER and SIM Per-language data and test sets
A13 Misuse Cloning a person without consent Consent-check pass rate Consent gate, moderation at creation

A1 Hallucination and alignment

LLM-based TTS models can repeat words, drop words or produce misaligned speech Reported. The authors of arXiv 2406.17957 find that certain cross-attention heads implicitly learn the text-to-speech alignment, and that nothing in the loss forces that alignment to stay monotonic. Regotron adds a monotonic alignment loss to Tacotron 2 for the same class of problem (arXiv 2204.13437).

GOAT reports a strong positive correlation between hallucination and model uncertainty, and over 50% lower character error rate on challenging test cases (arXiv 2508.15442) Reported.

How to measure

  • WER and CER from one fixed, strong ASR model.
  • Optimal Alignment Score, a Viterbi measure of text-speech alignment quality (arXiv 2509.19852).

How to fix

  • CTC loss plus attention priors encourage monotonic cross-attention, with no new learnable parameters (arXiv 2406.17957).
  • Alignment-score training and attention-guided distillation of CosyVoice 2 (arXiv 2509.19852).
  • Post-training distribution alignment with GFlowNets (arXiv 2508.15442).

Flow-matching TTS is non-autoregressive, so it has no free-running attention to stall (see diffusion and flow). The cost is that the total duration must be chosen before generation, and that choice can be wrong Inference.

A3 Mispronunciation

Names, acronyms, numbers and heteronyms fail when grapheme-to-phoneme rules or text normalisation guess wrong Inference. Express-Voice operates on graphemes directly, so any fix has to live in the model or in the script Confirmed (Express-2 post).

Synthesia's documented workaround is a per-word pronunciation entry Confirmed. The script docs give a respelling example, "sin-THEE-zhuh" for Synthesia, and offer two previews: an IPA version and a respelling that replaces the text before it reaches the voice model. Constraints from the docs and the help article:

  • A saved pronunciation does not automatically apply to instances of the word added to the script later.
  • "Apply to all" covers every instance in the current video.
  • "Add to glossary" applies across the workspace and is available on Enterprise plans only.
  • Pronunciation reliability varies by voice and language; regenerating the scene can help.

The pattern is a manual patch around a grapheme model. A production fix would add a per-customer dictionary applied before synthesis and a fixed name list for regression tests Inference.

A2 Long-form drift

Over minutes, autoregressive generation can lose speaker identity or flatten prosody because errors compound and nothing re-anchors the voice Inference. Measure speaker similarity in sliding windows against the first window, and plot it against time. Mitigate by synthesising in chunks and re-conditioning each chunk on the original reference.

A6 and A8 Reference leakage

Express-Voice clones in context: the reference audio conditions the model with no fine-tuning Confirmed (Express-2 post). The same mechanism that copies timbre can copy emotion, background noise and microphone channel Inference.

  • Detect leakage with emotion2vec similarity between prompt and output, and a noise-floor check.
  • Gate prompts at upload: reject clipped, noisy or reverberant audio, or denoise first.
  • Prefer neutral, clean references when the target style is set by the script.

A7 Metric pitfalls and A11 codecs

Synthesia names WavLM for speaker similarity and emotion2vec for emotional similarity in its voice evaluation, and publishes no scores Confirmed (Express-2 post). A similarity score depends on which speaker encoder computes it, so scores from different encoders do not compare Inference.

Express-Voice uses Descript's residual vector-quantised tokenizer Confirmed. A metallic or buzzy timbre that survives every sampling setting points at the tokenizer, not the LM Inference. See codecs and tokenizers for the rate trade-offs.

A9 Sampling instability and reranking

Higher temperature plausibly raises the hallucination rate of A1, so a few samples fail even when the average looks good Inference. The cheap fix is best-of-N: sample several candidates, score each, return the best. Score with ASR error plus a speaker-similarity term.

Synthesia applies the same idea to video: Express-Eval scores audio-motion alignment and picks the best motion candidate Confirmed (see audio-visual problems). Pushing the reranking signal into training is online RL, which invites reward hacking. One report finds that GRPO on transcription signals (CER and NLL) lowers error rates but collapses prosody into monotone speech (arXiv 2509.18531) Reported. See online RL rewards for composite rewards and KL control.

A4, A5, A10, A12, A13 in brief

  • Accents. Express-Voice training data was curated for accent coverage, including YODAS and LibriLight. Synthesia reports a blind test with 100 native English-speaking evaluators across 17 accents and top ratings, but names no comparison systems and gives no scores Reported (Express-2 post). Report per accent and per language pair Inference.
  • Prosody. Express-2 offers voice styles for the same voice (for example Excited and Neutral) Confirmed. The script docs add a pause tool with durations from 0.1 s to 99 s (default 1 s) (script docs). That is coarse control, and a flat read needs a script edit Inference.
  • Chunk seams. Streaming trades first-packet time against boundary quality Inference. See streaming and low latency.
  • Languages. Synthesia's own pages disagree on language counts. The Synthesia 3.0 post says dubbing covers 30+ languages, while the title of its AI dubbing page says 130+. Quote the number only with its page.
  • Misuse. Synthesia states that it strictly prohibits cloning voices without explicit consent Confirmed (voice cloning page).
Trap:

Do not quote a similarity score from a paper next to Synthesia's. The speaker encoder changes the number, so only same-encoder comparisons mean anything.

Speech-to-speech and duplex problems

End-to-end and full-duplex models add failures that cascades do not have. The model must listen while it speaks, decide when to talk, and keep its text intelligence while operating on audio tokens. Synthesia's Video Agents "talk, listen, and act in real time" inside a video Confirmed (Synthesia 3.0 post), so these failures reach its interactive product, not only research systems.

Problem Symptom Metric Mitigation
Intelligence drop Worse answers in speech mode than text mode Speech-vs-text accuracy gap on the same questions Freeze or mix text data; interleaved speech-text data
Multi-turn degradation Instructions, corrections and entities lost over turns Full-Duplex-Bench v2 multi-turn tracks Multi-turn training data; state tracking in text
Backchannel as barge-in "mm-hm" makes the agent stop False-yield rate per minute Action channel; backchannel-aware training data
Self-echo Agent hears itself and reacts Stop latency on echo-cancelled output Echo cancellation; condition on own output stream
Latency spikes Occasional long pauses; stiff timing p50, p95, p99 response latency Smaller chunks; budget the tail, not the mean
Interruption recovery Agent talks on, or forgets what it did say Stop latency; speech after onset Truncate context to what was spoken
Long-session growth Memory climbs; early context fades GPU memory per hour; recall at turn N GQA, cache eviction, summarised state
Synthetic-data artefacts Regular backchannels; TTS voice overfit Backchannel timing vs human distribution Mix real calls; many TTS voices

Intelligence drop and forgetting

Adding speech capability can degrade an LLM's knowledge and reasoning even when inputs stay textual, and performance drops further on spoken queries (arXiv 2509.14930) Reported. The SALAD authors name the resulting shortfall the "text-speech understanding gap" (arXiv 2510.13632). Two recipes exist: freeze the text LLM (Freeze-Omni, arXiv 2411.00774), or keep a high share of text in the training mix (Moshi trains half of the time on text-only batches, arXiv 2410.00037; Kimi-Audio pretrains on text-only, audio-only and interleaved data, arXiv 2504.18425).

Interleaved synthetic speech-text data lifted spoken question answering from 13% (Moshi) to 31% in one report (arXiv 2411.17607) Reported. Gate every stage on a strict text QA score so forgetting shows up early Inference. See streaming conversation.

Multi-turn degradation

Full-Duplex-Bench v2 tests daily, correction, entity-tracking and safety task families. Its authors report that the tested systems often get confused when people talk at the same time, struggle with corrections and sometimes lose track of who or what is being discussed (arXiv 2510.07838) Reported. FLEXI reports significant gaps between open-source and commercial models in emergency awareness, turn terminating and interaction latency (arXiv 2509.22243) Reported.

Backchannel misread as barge-in

A 2026 survey calls this the single most-cited failure mode in user feedback: the system mistakes the user's acknowledgement ("uh-huh") for a barge-in and stops (arXiv 2606.19453) Reported. Talking Turns finds that audio foundation models can interrupt too aggressively and rarely backchannel themselves (arXiv 2503.01174). The open problem is the trade-off between responding early and yielding falsely Inference.

DuplexSLA reports backchannel accuracy of 98.33%, against 40.00% for gemini-3.1-flash-live and 0.33% for gpt-realtime-1.5 with semantic VAD (arXiv 2605.20755, Table 6) Reported. These numbers are self-reported by the DuplexSLA authors on their own scenarios. Quote them as a claim, not a ranking.

Self-echo, latency spikes and quantisation

  • Self-echo. A model that ingests user audio while speaking can hear its own voice. Mitigate with acoustic echo cancellation and by conditioning on the model's own output stream Inference.
  • Chunk quantisation. SyncLLM alternates 160 ms chunks of user and assistant tokens (arXiv 2409.15594), and the survey calls it an example of "apparent (not substantive)" full duplex, since transitions occur only at chunk boundaries (arXiv 2606.19453) Reported. Turn-taking feel plausibly suffers when decisions are quantised at 80 to 240 ms, trained on heuristic labels, or starved of backchannels in the data Inference.
  • Latency spikes. Reported latencies are measured under different conditions and do not compare Inference. Track p95 and p99, because a conversation is judged by its worst pauses. See streaming and low latency.

Interruption recovery and truncation

On barge-in the agent must stop, and its context must record only the words actually spoken. Otherwise it believes it said a sentence the user never heard. Measure stop latency from the gold onset to the last audible agent sample on echo-cancelled output, plus the fraction of agent speech after onset Inference.

Long-session context and synthetic data

Token-level duplex models grow the KV cache continuously. A back-of-envelope for Moshi's temporal transformer uses its published shape of 32 layers and 4096 dimensions (arXiv 2410.00037) and assumes full multi-head attention in bf16: 2×32×4096×2 2 \times 32 \times 4096 \times 2 bytes is about 512 KiB per frame, or roughly 23 GB per hour at 12.5 frames per second Inference. Grouped-query attention shrinks it.

Duplex training data is often synthetic: an LLM writes dialogue and TTS renders both sides. SyncLLM trains on 212k hours of synthetic dialogue and 2k hours of real speech (arXiv 2409.15594), and PersonaPlex on synthetic conversations from open LLMs and TTS (arXiv 2602.06053) Reported. Risks are TTS voice and prosody leakage, over-regular inserted backchannels, and circularity, since inserting backchannels needs dialogue that already contains them Inference. DuplexPO applies RL over selected windows of human conversations to learn when to speak separately from what to say (arXiv 2607.07148) Reported. See online RL rewards for per-axis timing rewards and the hacking risks.

Trap:

"Full duplex" in a demo is not full duplex in an evaluation. Ask for false-yield rate, stop latency and multi-turn results, not a recorded conversation.

Audio-visual problems, grounded in Synthesia

Synthesia's Express-2 stack (September 2025) has four parts: Express-Voice for speech, Express-Animate for motion, Express-Eval for motion scoring, and Express-Render for frames Confirmed (Express-2 post, 4 September 2025). Each stage can introduce its own failures, and later stages cannot always repair them. The figure shows where each problem (B1 to B11 and A-codes from the previous section) enters; the placement is my mapping Inference.

Script A3 names, numbers B7 translated length TTS (Express-Voice) A1 skips, A2 drift A6 leakage, A11 buzz Audio-to-motion B4 hands, B5 intent gap B6 face vs voice emotion text audio candidate motions + audio Motion scoring Express-Eval reranks B4, B5, B6 candidates Renderer B1 lip-sync, B2 identity B3 flicker, colour drift Output B8 A/V drift, B9 codec B11 consent, provenance best frames
Figure: the avatar pipeline with failure entry points. Errors from early stages (names, drift, motion choice) reach the renderer already baked in.
Problem Symptom Metric Mitigation
B1 Lip-sync Mouth misses p/b/m closures; fast speech; non-English Phoneme-stratified human rating; Sync-C with caveats AV speech expert; per-phoneme checks
B2 Identity drift Face changes over a long clip Face-embedding similarity per window Reference conditioning; sparse-frame conditioning
B3 Flicker, colour drift Texture shimmer; teeth and mouth interior unstable Frame-difference checks; human review Self-correcting distillation; frame-level review
B4 Hands, body Malformed hands; jerky gestures Human plausibility; hand-artefact rate Candidate reranking
B5 Gesture meaning Gestures match rhythm, not intent Human rating of fit Semantic conditioning
B6 Expressiveness Excited voice, blank face Audio vs facial emotion agreement Intensity controls; emotion-conditioned motion
B7 Dubbing Translation too long; voices change; lips off Fraction outside timing budget Duration-aware translation; re-render lips
B8 Streaming Flicker, black frames, A/V drift Time-to-first-frame; offset vs duration Causal few-step students; self-correction
B9 Compression Metric moves with the codec alone Fixed re-encode before scoring Score on one pinned pipeline
B11 Safety Likeness or voice used without consent Consent gate pass rate Consent video; moderation at creation

B1 Lip-sync, and why Sync-C misleads

Hard cases plausibly include bilabial closures (p, b, m), fast speech and non-English audio Inference. The standard metrics are Sync-C and Sync-D, also written LSE-C and LSE-D, which are based on SyncNet (arXiv 2403.06421). Evidence that they mislead:

  • THEval's authors say existing metrics show limited correlation with human evaluation and unreasonable values, such as ground truth being widely outperformed (arXiv 2511.04520).
  • In a psychophysical comparison of metrics on talking-head videos, only LSE-O showed moderate effectiveness (arXiv 2403.06421).

Both are Reported results from papers. One proposed replacement uses an audio-visual speech representation expert (AV-HuBERT) for a lip-sync loss and three new evaluation metrics (arXiv 2405.04327). Sync-C values from different papers use different protocols, so I treat cross-paper tables as unreliable Inference. See metrics and data.

B2, B3 Identity drift, flicker and colour drift

Express-Render is described as keeping identity consistent over long sequences, with no metric attached Confirmed (Express-2 post). A related evaluation framework studies lip leakage, where the identity reference image influences the lips instead of the driving audio (arXiv 2511.08613) Reported. Open avatar work offers fixes for long sequences: sparse-frame conditioning to preserve identity (InfiniteTalk, arXiv 2508.14033) and a multi-step retrospective self-correction mechanism against accumulated error (SoulX-FlashTalk, arXiv 2512.23379) Reported. Flicker around teeth and mouth interior is a plausible weak spot Inference. The mechanisms are explained in streaming and real-time.

B4, B5, B6 Gesture and expressiveness

Express-2 avatars combine facial expressions and lip sync with natural hand and body gestures, and the post publishes no failure rates Confirmed. Express-Animate generates gestures from audio alone, which decouples motion from appearance Confirmed. Audio-only conditioning plausibly yields rhythm without intent Inference. OmniHuman-1.5 makes the same argument: earlier avatar models synchronise with low-level cues such as audio rhythm and lack semantic understanding of emotion and intent, so it adds MLLM-written semantic guidance (arXiv 2508.19209) Reported.

Express-2 also exposes performance intensity and temporal diversity controls Confirmed. To measure voice-face mismatch, compare emotion2vec on the audio with a facial-expression classifier on the video Inference.

B7 Dubbing

Synthesia's dubbing translates uploaded video into 30+ languages with frame-accurate lip-sync Confirmed (Synthesia 3.0 post). The post gives no lip-sync or voice-retention metrics.

The hard constraint is duration: translated speech is often longer than the source line, so the system must shorten the translation, speed the speech, or retime the video Inference. Measure the fraction of segments outside a timing budget, then lip-sync quality after retiming.

B8, B9 Streaming, resolution and compression

The Express-2 post gives no latency numbers. It says generation times should stay similar after the two-step distillation, and describes Express-Render-Turbo as coming later Confirmed. The quality versus latency trade-off is unpublished Inference.

Causal streaming students show their own failures. LiveTalk reports that Self Forcing, the leading on-policy distillation approach, shows flickering, black frames and quality degradation under multimodal conditioning, and proposes an improved distillation recipe (arXiv 2512.23576) Reported. Error accumulation plausibly grows with rollout length, and audio and video clocks can drift apart Inference. Output is 1080p at 30 fps with no stated duration limit Confirmed. Because encoder settings can change metric values, pin the encode settings before scoring Inference.

B11 Safety

Synthesia requires a live consent video that must show the same person as the photo, and does not accept uploaded consent videos Confirmed (personal avatars docs). It states that it strictly prohibits cloning voices without explicit consent (voice cloning page) and moderates content at the point of creation Confirmed. Its AI governance page lists a Content Integrity Policy, EU AI Act Article 50 labelling and Content Authenticity Initiative engagement. The page does not mention C2PA or watermarking.

Express-2 component to problem map

Component (Confirmed) Problem it plausibly addresses Reading
Express-Eval, audio-motion scorer that picks the best candidate Motion sampling variance: B4, B5, B6 Reranking, the same idea as A9; targets motion plausibility, not lip-sync alone Inference
Express-Render, distilled to two diffusion steps per frame Render speed, at some fidelity cost: B8 A speed versus fidelity trade, unquantified Inference
Express-Animate, gestures from audio only Hands and body: B4 Creates B5, the intent gap Inference
Express-Voice, graphemes in, reference-audio conditioning A3 moved into the model; A4 accents Creates A6 leakage risk Inference
What the Express-2 post does not publish:

The post gives no quantitative results, failure cases or latency figures. That silence is the best interview question: which failure modes do they measure, and how?

Priorities, metrics and questions

Not every failure deserves equal effort. This ranking weighs how visible the failure is to a customer, how often it occurs in a voice and avatar product, and how cheaply it can be measured. The ranking, mitigations and metrics are my own judgement Inference, built on the sourced problems in the previous sections.

# Problem Mitigation Metric
1 Mispronounced names and brand terms Respelling, project dictionary, glossary Per-entity accuracy on a fixed name list, plus human rating
2 Hallucinated or skipped words in long scripts Monotonic alignment loss; alignment-score training WER on a stable ASR; Viterbi alignment score
3 Lip-sync on bilabials and fast speech AV sync expert; per-phoneme checks Human-rated sync on a phoneme-stratified set, not raw LSE-C
4 Identity and voice drift Windowed re-anchoring Speaker and face-embedding similarity per window vs first
5 Emotion and noise leakage from a bad reference Quality gate; denoising emotion2vec and noise floor on output
6 Voice-face expressiveness mismatch Emotion-conditioned motion; intensity controls Cross-modal emotion agreement
7 Hand and gesture artefacts Candidate reranking (Express-Eval style) Human plausibility; hand-artefact detector rate
8 Dubbing duration mismatch and lip re-render Duration-aware translation; retiming Fraction outside timing budget; sync after retiming
9 Streaming latency versus quality; A/V drift Faster renderer; seam smoothing Time-to-first-frame; A/V offset over duration
10 Duplex failures: barge-in misread, backchannels, multi-turn decay Echo cancellation; turn-taking evaluation Full-Duplex-Bench v1 and v2 interruption and multi-turn tracks

Why this order

  • Items 1 and 2 are audible on first listen and cheap to test automatically, so they belong in every regression run.
  • Items 3 to 7 are the avatar-specific problems; they need human rating because the automatic metrics are weak.
  • Items 8 to 10 depend on product shape (dubbing, streaming, Video Agents) and rank higher if that product is the focus.
  • Any metric that is optimised in training needs a held-out judge, or reward hacking will hide regressions (see online RL rewards).

Questions to ask Synthesia about failure modes

  1. Which failure modes do you track in production, and which of them have an automatic metric?
  2. How do you evaluate lip-sync, given the known weaknesses of Sync-C, and does it differ for non-English dubbing?
  3. What does Express-Eval catch in practice: gesture plausibility, lip-sync, or both, and how often does it change the pick?
  4. For Express-Voice, how do you protect against emotion or noise leakage from customer reference audio?
  5. For Video Agents, what is the p95 first-frame latency, and how do you handle barge-in and backchannels?
In the interview, say:

"The Express-2 post publishes no failure metrics, so I would start by asking which ones you track. My first three would be per-entity pronunciation, alignment-based hallucination rate, and phoneme-stratified lip-sync with human raters, because papers report that Sync-C correlates weakly with human judgement."

Chapter 9

System design

ML system design: a unified speech LLM with a downstream reasoning LLM (the target)

Inference

Inference The overall design is my opinion; the component facts are tagged and cite arXiv papers or Synthesia's own pages. Latency and size figures marked as targets are illustrative targets, not measurements, and have no source. The idea: one speech model owns everything that touches audio (listening, turn-taking, speaking), and a separate text LLM owns content, reached through a tool-call style interface. Native full-duplex (Moshi style) is the evolution of this design, and a cascade of independent ASR, LLM and TTS models is the baseline.

Why a unified speech LLM, and why a separate reasoning LLM

Axis Independent ASR + LLM + TTS Unified speech LLM + downstream LLM (target) Monolithic full-duplex model
Paralinguistics Lost at the text boundary Kept in the listen head; serialised as tags in the call Kept end to end
Clock and turn-taking Heuristic VAD and turn manager across three models One 12.5 Hz clock; joint listen and speak decisions in one model Native, every frame
Voice consistency TTS voice separate from what was heard One model hears the user and voices the reply Native
Swap or upgrade reasoning Easy Easy: the LLM sees text Hard; retrain or distil
Tools, grounding, safety In text In text: tool use, retrieval and moderation run on the transcript and reply Harder; text is a side stream
Evaluation Per stage Per head plus the LLM, so errors stay attributable End to end only
Latency Stages stack; one hop per model One extra hop (the LLM first token), covered by fillers Lowest; no hop
Serving and data Three models, abundant data Two models; speech data for the heads only One model; dual-channel data is scarce

Inference The honest costs of the target: an extra hop of LLM time to first token; paralinguistic information must be flattened into the call, so what the tags omit the LLM never sees; and two models to serve, version and evaluate together.

Precedents for each piece. Kyutai DSM applies one architecture to both jobs: ASR delays the text behind the audio (2.5 s default), and TTS delays the audio behind the text (1.28 s), with the delay set per stream Confirmed (arXiv 2509.08753). The DSM authors report a 150 ms first-chunk latency for TTS at batch size 1 Reported. Step-Audio 2 calls external tools such as web search against hallucination and audio search to switch timbres Confirmed (arXiv 2507.16632). Qwen3-Omni uses a Thinker-Talker design, the in-model analogue of this split (arXiv 2509.17765). Freeze-Omni keeps the LLM frozen and adds a state classifier (keep listening, interrupted, turn ended) (arXiv 2411.00774). MinMo adds an 18M-parameter Full Duplex Predictor beside the LLM (arXiv 2501.06282). Both show a small decision module beside a text LLM works. Moshi's Inner Monologue shows text and audio can share one clock (arXiv 2410.00037). Confirmed

Requirements

Requirement Status
Voice-to-voice agent that produces text and voice, can reason, backchannels, is interrupted and talks without the turn-taking feel Confirmed (per the job description)
Interactive dialogue "typically under one second", avatar included Confirmed (Synthesia, 2 Jul 2026)
Video Agents hold real-time two-way conversations; the voice drives the renderer Confirmed (Synthesia 3.0)
Cloned, expressive voice with accent and emotion preserved (Express-Voice does this offline) Confirmed offline; Inference in the interactive path
Multilingual: dubbing covers 30+ languages per the Synthesia 3.0 post; interactive speech starts with a short list I can evaluate with native raters Confirmed dubbing; Inference interactive
Listen and speak on one clock; the model handles barge-in, backchannels and pauses itself Inference (user requirement for this design)
Latency-aware: each frame fits its 80 ms deadline (a design choice from the 12.5 Hz clock); timing reported against the human baseline Inference
Consent-bound identity and voice; moderation on the text in both directions Confirmed consent gate; Inference the text-level hooks

Architecture

One backbone: listen + speak Listen head text + tags + action Speak head TTS with style control Mic + AEC playback ref in Causal encoder 12.5 Hz Downstream text LLM tools, RAG grounded in text tool call transcript, tags, turn state text stream + style cues filler, backchannel barge-in: played text, heard text Codec decoder causal, 80 ms Avatar renderer causal, few-step Client A/V playout video agent audio
The target architecture. One speech backbone has a listen head and a speak head; the text LLM sits behind a tool call. Dashed: the speech LLM generates fillers and backchannels itself, and a barge-in sends the played and heard text back to the LLM. The renderer reads agent audio, plus state and optional viseme timing from the speak head. Inference
  • Listen head. A causal streaming encoder at 12.5 Hz feeds a text-LLM-initialised backbone. The head emits streaming text (partials and stable finals), paralinguistic tags (emotion, rate, language, confidence) and an action token per frame. The user stream is ingested continuously, including while the agent speaks.
  • Tool call. On an end-of-turn decision the head emits a structured call: the stable transcript, the tags, the turn state (end-of-turn confidence, whether it interrupted a reply) and a pointer to what was actually played last. Start on the end-of-turn candidate and cancel on a resumed turn, as in the cascade baseline.
  • Downstream LLM. Any text LLM with tools and retrieval. It streams text back with style cues (emotion, pace) the speak head can use. It never touches audio, so it can be swapped or upgraded without retraining the speech model.
  • Speak head. It turns text chunks plus style and the voice prompt into codec tokens at 12.5 Hz (semantic then acoustic codebooks through a depth transformer or multi-token head), decoded by a causal codec decoder. A small first chunk cuts time to first audio; later chunks carry more lookahead for prosody.
  • Latency cover. While the call runs, the speak head says a short acknowledgement or filler, and the listen head can backchannel during long user turns. Neither waits for the LLM.
  • One clock. Every output chunk carries an absolute timestamp (Qwen3-Omni assigns one temporal ID per 80 ms, arXiv 2509.17765). Confirmed The renderer and client play audio on that clock and shed video frames first.
1 end of turn 2 backchannel ignored 3 barge-in, yield user audio frames in listen head text, tags, action downstream LLM text only agent audio speak head user speaks mm-hm user barges in ASR partials, tags EOT listening ignore YIELD listening call, TTFT reply tokens (cancelled at yield) truncate, re-plan filler reply audio 0 1 s 2 s 3 s 4 s 5 s 6 s
One exchange, not to scale. Partials stream while the user speaks; end of turn fires the call; a filler covers the call and the LLM's first token; the reply starts as soon as text arrives. A user "mm-hm" mid-reply is ignored; a real barge-in yields, stops the audio, cancels the tokens and sends the truncation to the LLM. Inference

Conversational behaviours: who decides what

Inference The speech LLM owns timing and the floor; the text LLM owns content. The action channel is one token per frame or chunk: listen, end-of-turn, backchannel, speak, yield. DuplexSLA is the precedent for such a channel (a textual action channel on a shared 160 ms chunk clock; 98.33% backchannel accuracy, self-reported; arXiv 2605.20755), and Freeze-Omni and MinMo show the same decision made by a small module beside a text LLM. Reported

Behaviour Signal and decision Who acts Metric
User pauses mid-turn Keep listening; end-of-turn from prosody and semantics, not silence Speech LLM Premature-takeover rate
User finishes End-of-turn fires the tool call; start early (floor-transfer target is negative) Speech LLM decides; text LLM answers Floor-transfer offset; time to first audio from gold end of turn
Agent waits for the LLM Filler or acknowledgement while the call runs Speech LLM Time to first audio
Agent backchannels Emit "mm-hm" at a prosodic boundary without taking the floor Speech LLM Backchannel rate and placement
User backchannels, laughs, talks to others Cooperative overlap: keep talking (a survey calls stopping the most-cited failure, arXiv 2606.19453) Speech LLM False-yield rate per minute
Real barge-in Yield: stop audio, flush buffers, truncate the reply to what was played, send played and heard text Speech LLM acts Stop latency on echo-cancelled output
After the interruption Resume the old thread or answer the new one, given the played text and what the user said Text LLM decides; speech LLM voices Interrupted-thread recovery
Own voice in the mic AEC plus the playback signal as an extra input, or conditioning on own output Client and speech LLM Stop latency, measured after echo cancellation

Definitions and operating points are in conversational evaluation; the behaviour list follows backchannels, barge-in and self-voice. The human anchor is that listeners begin speaking a median 151 ms before the other turn ends (TurnBench, arXiv 2608.25218), and a decision at a chunk boundary waits c/2 c/2 on average, so decide per 80 ms frame or short chunk. Confirmed (anchor) Inference (the design reading)

Key design decisions

Decision Options Pick Inference
Where reasoning lives In the model (Thinker-Talker, hidden states passed on); beside a frozen LLM (Freeze-Omni, MinMo); in a separate LLM behind a tool call Separate LLM: swappable, tool-capable, moderated in text. Cost: the extra hop and a lossy interface
Interface to the LLM Transcript only; transcript plus tags; speech embeddings Transcript plus tags and turn state: keeps the LLM swappable. Tags must be calibrated, or the LLM over-trusts them
Heads Two models; one backbone with a listen and a speak head One backbone (DSM shows ASR and TTS differ by a delay): shared representation and voice, one clock
Input representation Continuous encoder features through an adaptor; codec codes (Mimi) Continuous features for understanding quality; ablate against codes on WER and tag accuracy
Codec and rate Mimi 12.5 Hz, 1.1 kbps, causal (arXiv 2410.00037); single-codebook 12.5 Hz at 175 bps (GLM-4-Voice, arXiv 2412.02612); 25 Hz tokenizers (Qwen3-TTS, arXiv 2601.15621) Mimi-style causal RVQ at 12.5 Hz: expressive voice needs acoustic codebooks, and a causal decoder adds no lookahead
Decision cadence Every 80 ms frame; 160-240 ms chunks; 1.0 s chunks Per frame or 160 ms chunk (DuplexSLA); by the c/2 c/2 rule a 1.0 s chunk adds about 500 ms of average wait

Data

  • Listen head. Large unlabelled audio with pseudo-transcripts (Moshi uses 7M h, arXiv 2410.00037; Kimi-Audio over 13M h, arXiv 2504.18425), plus ASR data to align the encoder. Confirmed Paralinguistic tags come from pseudo-labellers (Synthesia names emotion2vec in its Express-Voice evaluation), checked on a human-labelled subset. Inference
  • Speak head. TTS-grade, speaker-diverse, consented speech with style labels; interleaved synthetic speech-text (1T tokens, 600B synthetic interleaved; spoken QA rose from 13% to 31% in arXiv 2411.17607). Confirmed
  • Action channel. Dual-channel conversation with real overlap: Fisher, about 2,000 h of phone conversations (arXiv 2410.00037), MinMo's 4,000 h of duplex data (arXiv 2501.06282), and Seamless Interaction conversations (used by Kyutai for RL, arXiv 2606.11167). Confirmed Synthetic dialogue has few real overlaps and regular backchannels, so mix real and synthetic.
  • Tool-call traces. An LLM writes dialogues with interruptions; a harness renders both sides with many TTS voices and logs the call, the reply and the truncation. Inference The baseline cascade is the generator and the first labeller.
  • Consent. Every voice clip carries a consent record and licence scope; withdrawn voices are removable from retrains. Inference

Training stages and rewards

  1. Align the encoder and adaptor on ASR with the LLM backbone frozen.
  2. Pretrain listen and speak on unlabelled and interleaved synthetic data, with a high text fraction.
  3. Train the listen head on streaming text, tags and the action channel; the speak head on text-to-speech with style.
  4. Spoken SFT on tool-call traces, including fillers, truncations and re-plans.
  5. DPO on text-token probabilities with timing pairs (the Moshi alignment work used 93,490 pairs and alignment over text tokens, arXiv 2506.21463).
  6. RL on windows around events with per-axis timing rewards (turn onset, backchannel, yield) and voice rewards (WER, speaker similarity, quality), plus a text-quality term against drift.

Inference The staging follows the proposed recipe. Rewards come from online RL and rewards: DuplexPO decouples when to speak from what to say (arXiv 2607.07148), and Kyutai's RL on Moshi and PersonaPlex adds a response-quality reward against semantic degradation (arXiv 2606.11167). Reported The forgetting guard: speech input erodes LLM knowledge Confirmed (arXiv 2509.14930), so the downstream text LLM stays untouched by design, and the speech backbone is gated at every stage on ASR WER, strict text QA and timing.

Evaluation

  • Latency and interaction. Time to first audio from gold end of turn at a fixed false-yield rate, floor-transfer offset against the human baseline, stop latency, false yields, premature takeovers, backchannel rate. Suites: Full-Duplex-Bench v1, v1.5 and v2 (arXiv 2503.04721, 2507.23159, 2510.07838) and TurnBench (arXiv 2608.25218); see conversational evaluation.
  • Per component. Listen head: WER on domain audio, tag accuracy, end-of-turn recall at fixed false-positive rate. Speak head: second-ASR WER, speaker similarity, UTMOS, native-speaker panels. Tool call: does the LLM answer correctly with and without tags (an ablation of the interface). Inference
  • Intelligence in speech mode. Spoken-dialogue suites (VoiceBench, arXiv 2410.17196; URO-Bench, arXiv 2502.17810) against the same LLM on text. DuplexPO's authors note that duplex gains often come with weaker reasoning (arXiv 2607.07148); here the LLM is unchanged, so I expect a small gap. Inference
  • Safety. Moderate the transcript and the reply text; check voice-clone abuse and consent binding; label output (Synthesia states EU AI Act Article 50 labelling on its governance page). Inference

Serving

  • Per-frame deadline. The speech LLM must finish each 80 ms frame, silent or not, and the worst frame matters, not the mean. Size it as a real-time loop; the LLM is a normal streaming text service. Inference
  • Memory and sessions. A Moshi-sized backbone (temporal transformer of 32 layers and 4096 dimensions, arXiv 2410.00037) needs about 512 KiB of KV per frame, about 6.3 MiB per second and 23 GB per hour (derived, assuming full attention and bf16). Cache, not weights, sets session capacity; use grouped-query attention, a rolling window and session caps. Batch sessions to the largest B B with tstep(B)<80 t_{\text{step}}(B) < 80 ms. Inference
  • The hop. Keep the LLM in the same region, use prefix caching for the system prompt, route simple turns to a small model, and let fillers cover the first-token wait. Inference
  • Echo. Browser AEC plus the playback reference; test stop latency after cancellation.
  • Fallback. If the speech model misses deadlines or is down, route new sessions to the cascade, and hand over mid-session at a turn boundary using the transcript. Inference

Evolution to full duplex, the cascade, and risks

Inference The research track is a native full-duplex model (Moshi and PersonaPlex style: user audio, agent text, agent audio and an action token on one 80 ms clock) that replaces the two heads. The tool-call contract survives, so the downstream LLM still supplies content while the duplex model keeps the floor. The DuplexPO authors describe a tension between interactive dynamics and reasoning ability in full-duplex models (arXiv 2607.07148), which is why I keep reasoning outside it for now. The cascade of independent models stays as the baseline everything is measured against, the launch fallback, and the first generator of synthetic dialogue. It is not the target.

  • Risks. Inference Tags the LLM cannot use; the hop erasing the latency gain; reward hacking (monotone prosody, an agent that never yields); scarce dual-channel data with real overlap; two models drifting apart across versions.
In the interview, say:

"I would build one speech LLM that owns everything audio: streaming ASR with emotion tags, turn-taking, backchannels, barge-in, and expressive TTS on one 12.5 Hz clock. Reasoning stays in a swappable text LLM behind a tool call, so we keep tool use, grounding and text-level safety, and fillers cover the extra hop. A cascade of independent models is the baseline and fallback, and native full-duplex is where the speech model goes next."

Baseline: a streaming ASR → LLM → TTS voice agent

This is the baseline, the launch fallback and the comparison point for the target design in the previous section, a unified speech LLM with a downstream reasoning LLM. The target replaces the independent ASR and TTS models with one speech model and keeps the LLM behind a tool call; much of this section (transport, end-of-turn, chunking, barge-in, budget) carries over to it.

A cascaded voice agent is three models plus turn logic, run as overlapping streams. The latency comes from how well the stages overlap, not from any single model. Labels: Confirmed is sourced to a paper or first-party page, Reported is a self-reported figure from the vendor's or authors' own page, Inference is design opinion.

Component pipeline

Mic WebRTC audio AEC + noise suppression VAD End-of-turn Streaming ASR partials, finals Turn manager LLM token stream Chunker clause, sentence Streaming TTS audio chunks Playback jitter buffer speech turn candidate barge-in: cancel + flush audio barge-in: cancel
Every box streams. The turn manager owns state: listening, thinking, speaking. Inference (layout is a design sketch).

This is the cascade of the earlier chapters with turn-taking added as an engineered heuristic. The text interface between stages carries no timing, so the pipeline cannot represent "the user is still talking" without the VAD and turn manager. That is the root of the trade-offs in the last subsection.

Transport

Use WebRTC between browser or phone client and server, with a data channel for control events. LiveKit and Pipecat are the two open frameworks that package this. Inference WebRTC gives you client-side echo cancellation, jitter buffering and congestion handling for free.

Between server components, use persistent bidirectional streams. A sensible pattern is a high-volume data plane (tokens, audio) plus a separate control plane for cancel, barge-in and feedback injection. REST is a poor fit because it has no native streaming and no clean channel for cancellation. Inference

VAD and end-of-turn detection

A bare VAD with a silence timeout is the half-duplex heuristic. It adds dead air to every turn, cannot tell a pause from a finished thought, and treats overlapping speech as noise.

The usual upgrade is a VAD that triggers a semantic end-of-turn model. Pipecat's Smart Turn is an open-source model that analyses the most recent 8 seconds of the user's turn, with a recommended VAD stop time of 0.2 s. The docs say inference can run "in under 100ms" on low-cost cloud instances. Reported (Pipecat docs, vendor numbers). LiveKit Agents documents an adaptive interruption mode that uses an audio model to distinguish real interruptions from backchannel acknowledgements. Reported (LiveKit docs).

Inference Treat the end-of-turn model as a latency lever, not just an accuracy one. A fast, aggressive endpoint gives a quick reply but cuts users off mid-thought. A conservative endpoint is safe but adds dead air. A learned detector shifts that curve; it does not remove it.

Streaming ASR: partials, finals and when to start the LLM

Streaming ASR emits partials (revisable) and finals (stable). The latency/WER trade-off is set by chunk size and lookahead. Confirmed examples: SpeechLLM-XL with 1.28 s chunks reports 2.7% / 6.7% WER on LibriSpeech test clean / other (arXiv 2410.03752); Qwen3-ASR's encoder uses an attention window of 1 to 8 s so one model serves streaming and offline (arXiv 2601.21337); Kyutai DSM treats ASR as a delayed text stream over audio (arXiv 2509.08753).

Inference: speculative start

Inference Never feed raw partials to the LLM; they change. Start the LLM when the end-of-turn candidate fires, using the current stable transcript. If the final transcript or a resumed user turn changes the text, cancel and restart. Skip speculation on long turns, which are likelier to change. Cost: wasted LLM (and, if enabled, TTS) compute on every cancel.

LiveKit ships a version of this: preemptive generation starts the LLM when a final transcript arrives, before the turn is confirmed. The docs list it as on by default, with preemptive TTS off, long utterances skipped (10 s default), and a retry cap of 3. They warn it does not always reduce latency, so check your metrics. Reported (LiveKit docs, read 2026-10-13; check your installed version).

LLM time-to-first-token levers

LLM time-to-first-token (TTFT) is plausibly the biggest single lever in the budget Inference. The levers below are standard serving techniques:

  • Prefix caching reuses KV for a shared system prompt. It needs identical token prefixes, so a prompt that changes per turn breaks the hit.
  • Chunked prefill stops one long prompt from inflating tail latency for other sessions.
  • Speculative decoding and quantization buy per-token speed; how hard to push is set by the budget.
  • Keep concurrency limits low enough that requests queue rather than slow each other.

Inference TTFT depends on load. Inworld reports about 27,000 aggregate tokens per second and a p50 TTFT around 1.7 s for Gemma 4 31B Dense on a B200 (Inworld guide, first-party measurement) Reported. A p50 of 1.7 s at that throughput is far above a voice-agent target, so tune for latency instead: a small model or router for simple turns, and a short reply style.

LLM text to TTS: chunking

Inference The default is sentence-level chunking: buffer LLM tokens until a sentence forms, then hand it to TTS. A sentence carries a full intonation contour, so it is a safe unit. Smaller chunks cut time to first audio but risk fragmenting prosody across the boundary. Make the first chunk small and cut at the first clause boundary (comma, dash, short sentence), with a minimum length so TTS has enough text to set intonation. Make later chunks full sentences; by then the first chunk's audio is hiding the wait.

FlashTTS replaces buffer-then-emit with a lagged multi-track autoregressive design for native streaming text input (arXiv 2606.09141) Reported.

Streaming TTS first packet

Pick TTS on first-audio latency at your real input lengths and concurrency. Reported first-packet figures are self-reports with different definitions, so do not compare across rows: Moshi 200 ms in practice, 160 ms in theory (arXiv 2410.00037), Qwen3-TTS 12 Hz 97 ms (arXiv 2601.15621), Kyutai DSM-TTS 150 ms at batch size 1 (arXiv 2509.08753), FlashTTS 325 ms first-packet latency (arXiv 2606.09141), Hume Octave about 200 ms in Instant Mode (Hume docs). Reported

Measure time to first byte, real-time factor, and p95/p99 under concurrent load, because a single median hides the tail Inference. Overlap stages inside the TTS server too. Inworld and Modular report that a streaming-aware scheduler returned the first 2 seconds of synthesized audio about 70% faster than a vanilla vLLM implementation (Modular case study). Reported

Barge-in

When VAD or the turn model detects user speech during agent speech, run these steps in order:

  1. Cancel the LLM stream and any queued TTS requests.
  2. Flush audio buffers on both server and client playout.
  3. Truncate the assistant turn in context to what was actually played, not what was generated.
  4. Return to listening and let ASR take the new input.

Step 3 matters because TTS runs faster than real time; the model "said" far more than the user heard. OpenAI's Realtime API exposes this as conversation.item.truncate with an audio_end_ms offset; it cuts the audio and removes the transcript for the unplayed portion Reported (OpenAI Realtime guide). Inference In your own stack, timestamp every audio chunk sent and track the client's playout position, then cut the text at the word boundary nearest that position.

Echo cancellation is the precondition. Without it the agent hears itself and interrupts itself. The W3C Media Capture and Streams spec defines an echoCancellation property that removes sound played by the speakers from the microphone recording Confirmed (W3C spec). Inference On telephony or server-side audio you must supply AEC yourself, or gate barge-in on a higher speech threshold while the agent talks. LiveKit adds false-interruption recovery: if no transcript follows within a window (2.0 s default), the agent can resume. Reported (LiveKit docs).

Stage-by-stage latency budget

Measure from end of user speech to first agent audio at the client. Sourced figures are sparse; the target column is my illustrative target, not a measurement and not from any source.

end of user speech first agent audio VAD 50-150 ms ASR 0-100 ms LLM 200-300 ms Chunk 50-100 ms TTS 100-200 ms Net 50-100 ms 0 time (up to 950 ms) Illustrative targets, not measurements. Total 450-950 ms; aim for 500-700 ms median.
Figure: the budget table as a timeline. Stages: uplink, VAD and end-of-turn; ASR final; LLM first token; chunker; TTS first packet; downlink and jitter buffer. All values are illustrative (Inference).
Stage Sourced figure Illustrative target (mine)
Uplink, VAD, end-of-turn None 50-150 ms Inference
ASR final after endpoint Qwen3-ASR-0.6B average TTFT as low as 92 ms, authors' benchmark (arXiv 2601.21337) Reported 0-100 ms (mostly hidden by streaming) Inference
LLM first token Load-dependent; Inworld reports p50 TTFT about 1.7 s for a 31B model (see above) Reported 200-300 ms Inference
Chunker to first clause None 50-100 ms Inference
TTS first packet 97 ms to about 200 ms across papers, self-reported (see above) Reported 100-200 ms Inference
Downlink, jitter buffer None 50-100 ms Inference
Total Tavus claims less than one second between utterances (Tavus blog); Synthesia says dialogue is "typically under one second" Reported About 450-950 ms by summing the column; aim for 500-700 ms median Inference
Trap: the headline number

Quoted figures differ because definitions differ: time to first token, time to first packet, or latency between utterances. State where you start and stop the clock, and report p95/p99 under real concurrency, not a median on one idle session.

Failure modes and mitigations

Failure Mitigation Inference
Cuts the user off mid-thought Semantic end-of-turn model; longer stop time when the transcript looks incomplete
Dead air before replies Speculative LLM start; shorter VAD stop time; a short filler only if it fits the product
Agent hears itself and self-interrupts AEC; stricter barge-in threshold while speaking; false-interruption resume
Backchannel ("mm-hm") kills the reply Adaptive interruption mode; require minimum duration or words before cancelling
Context shows words the user never heard Truncate to played position, timestamped per chunk
ASR error propagates with no recovery The LLM sees only the transcript, so log ASR confidence and let the agent ask to confirm names and numbers
Prosody breaks at chunk seams Larger later chunks; 1-2 sentences of look-ahead
Tail latency under load Separate GPU pools per stage; cap concurrency; alert on p99 per stage

How to evaluate

  • Latency: per-stage and end-to-end p50/p95/p99 under production concurrency. Track TTFB for TTS and real-time factor.
  • ASR: WER on your own domain audio (names, numbers, accents), not only a public leaderboard.
  • TTS: an automatic MOS predictor (UTMOS) and resynthesis WER on every change, with human CMOS panels as periodic gates.
  • Interruption handling: stop latency after barge-in, false-interruption rate, and backchannel handling, scored with Full-Duplex-Bench v1 (arXiv 2503.04721) and v1.5 (arXiv 2507.23159). Those benchmarks cover pause handling, backchannel, turn-taking, interruption and overlap scenarios. Confirmed
  • Online: time-to-first-audio next to an engagement metric, since a fluent reply that arrives late reads as broken.

The cascade against the target design

A cascade is the right baseline and fallback: each stage is swappable, data is abundant and errors are attributable. Its structural limits are stacked latency, information loss at each text boundary, no recovery from ASR errors, and no natural interruption or backchannel handling Inference. Native full-duplex models (Moshi, dGSLM, arXiv 2203.16502) learn turn-taking from data, and state-head designs like Freeze-Omni (arXiv 2411.00774) and MinMo (arXiv 2501.06282) add a small decision module beside the LLM instead of using external heuristics. Confirmed

The cost of going native is data: real dual-channel conversation with genuine overlap is scarce (Fisher is about 2,000 h, arXiv 2410.00037), and the DuplexPO authors describe a tension between interactive dynamics and reasoning in full-duplex models (arXiv 2607.07148). Reported Inference The target keeps the cascade's separation of content from audio but folds ASR, turn-taking and TTS into one speech model, so the turn logic is learned, not engineered. The cascade stays as the launch fallback, the comparison point and a generator of synthetic dialogue.

In the interview, say:

"I treat a voice agent as overlapping streams with a turn manager on top. Latency is the overlap: speculative LLM start at end-of-turn, a small first TTS chunk, and barge-in that cancels everything and truncates context to what was played."

First-party pages cited

ML system design: a real-time avatar that talks back

Inference

Inference Everything in this section is design opinion, not sourced fact. Component facts cite arXiv papers or Synthesia's own pages; latency figures marked as targets are mine. The target voice model is in a unified speech LLM with a downstream reasoning LLM; the cascade mechanics (turn detection, chunking, barge-in, latency budget) are in the previous section, Baseline: a streaming ASR → LLM → TTS voice agent. This section adds the renderer and how each voice path drives it.

Requirements

The user speaks, the avatar listens with visible motion, replies in a cloned voice with matched lip-sync, and can be interrupted. Synthesia's Video Agents "talk, listen, and act in real time" (Synthesia 3.0 post), while the Express-2 post makes no real-time claim and gives no latency figures. Confirmed

Latency budget

The cascade budget is the stage table in the previous section, with a render stage added. Indicative sources: the Moshi authors report 200 ms latency in practice (arXiv 2410.00037), Tavus claims less than one second between utterances (Tavus blog), and Synthesia says real dialogue is "typically under one second" (Synthesia post). Reported The targets in the table are mine, not measurements, and have no source.

Stage Speech LLM path Inference Cascade fallback Inference
Transport up and end-of-turn Under 100 ms (an 80 ms frame plus network) Under 150 ms
Reply start 200-300 ms to the filler or first audio; the LLM first token (200-300 ms) hides behind it LLM first token 200-300 ms, then TTS first chunk 100-200 ms
Render first video block 150-250 ms 150-250 ms
Total mouth-to-ear Under 1 s; about 430-650 ms by summing the column Under 1 s, ideally 500-700 ms

Two ways to drive the renderer

A. Unified speech LLM + downstream LLM (primary) B. Cascaded-streaming (dashed: launch fallback and baseline) Mic WebRTC, encoder Speech LLM listen + speak Text LLM via tool call Decoder codec, causal Audio-to-face causal, few-step the speech LLM handles overlap, backchannel and yield; the renderer reads audio and state Mic WebRTC VAD / turn Streaming ASR LLM Streaming TTS Audio-to-face same renderer WebRTC Client barge-in cancels LLM, TTS and render queues
Two ways to drive the same renderer. A is the target; B is the launch fallback and baseline. Inference

Inference The comparison below is my judgement.

Axis A. Unified speech LLM + text LLM (primary) B. Cascaded-streaming (fallback)
Backchannel and overlap Handled by the speech LLM's action channel Weak without extra turn logic
Swap the reasoning LLM Easy: the text LLM is behind a tool call Easy
Voice control Depends on the speak head and voice prompt Full TTS stack (Express-Voice style)
Data need Medium to high; action-channel data is the bottleneck Low
Risk Tags the LLM cannot use; one extra LLM hop Latency adds across stages

Inference Make A the interactive path: the speech LLM drives the streaming renderer, with fillers covering the LLM wait. Keep B as the launch fallback and the baseline on the same benchmark; route a session to B if A is down or misses its gates. Native full-duplex is the research track beyond A.

Data and training stages for A

Inference The full recipe is in the unified speech LLM section; the staging below follows OmniFlatten (modality alignment, half-duplex dialogue learning, full-duplex dialogue learning, arXiv 2410.17799):

  1. Pretrain on large unlabelled audio plus transcripts (scale references: Kimi-Audio over 13M h, arXiv 2504.18425; MinMo 1.4M h, arXiv 2501.06282).
  2. Modality alignment, then half-duplex dialogue, then full-duplex alignment on dual-channel data (Fisher, about 2,000 h, arXiv 2410.00037, plus synthetic TTS dialogue).
  3. Post-train with WER, speaker-similarity and emotion rewards, plus preference data for expressiveness. Gate on Full-Duplex-Bench v1 and v1.5 plus human tests.

Renderer and A/V sync

A sketch; the figures below are the papers' own reports on their own hardware and protocols.

Speak head or fallback TTS Audio-to-face causal, few-step Idle motion while user speaks Video blocks timestamped Client playout Audio buffer jitter buffer Video buffer audio chunks, timestamped audio audio is the clock: drop video frames before stalling audio
Figure: voice plus renderer. Audio and video chunks carry timestamps; the client plays audio on its own clock and sheds video frames first. In the fallback cascade, TTS duration mode matches video block length.
  • Streaming avatar generators distil a bidirectional teacher into a causal few-step student. CausVid: 1.3 s initial latency, about 9.4 FPS (arXiv 2412.07772). Self Forcing: 17 FPS, sub-second latency, one H100 (arXiv 2506.08009). AvatarForcing: 34 ms per frame, 1.3B student (arXiv 2603.14331). SoulX-FlashTalk reports that converting the student to a strictly unidirectional architecture disrupts spatiotemporal correlations and yields rigid full-body dynamics (arXiv 2512.23379).
  • Express-Render outputs 1080p at 30 fps and is distilled to two diffusion steps Confirmed (Express-2 post). A streaming student is the natural extension Inference.
  • Audio is the clock. Timestamp audio and video chunks, use a client jitter buffer, and drop video frames before stalling audio. In the speech LLM path, audio frames are already on the 80 ms clock, so video blocks align to whole frames; in the fallback cascade, use TTS duration mode to match video block length.
  • Play idle listening motion while the user speaks.

Barge-in and serving

In A, the speech LLM decides to yield, stops its audio, and the same decision flushes the render queue and sends the played and heard text to the text LLM. In B, barge-in follows the steps in the previous section, with the render queue added to the cancel list. Inference

For serving, use WebRTC transport (LiveKit or Pipecat) with a control data channel. Run a speech LLM pool sized for its per-frame deadline, a text LLM pool with prefix caching, and a render pool. Keep cascade pools only as failover capacity. Batch render across sessions only if the per-session budget allows. Inference

In the interview, say:

"I would drive the avatar from a unified speech LLM that owns listening, turn-taking and speaking, with a swappable text LLM behind a tool call and a causal few-step renderer on the same clock. The cascade is the launch fallback and the baseline, and native duplex is the research track, because the data and the evals for duplex are the long pole."

ML system design: an audio-visual avatar platform (Synthesia-style)

Inference

Inference Design choices and targets below are my opinion unless tagged Confirmed or Reported. Latency figures marked as targets are illustrative and have no source. The target voice model is in a unified speech LLM with a downstream reasoning LLM; the cascade baseline is in Baseline: a streaming ASR → LLM → TTS voice agent; the renderer and the two voice paths are in a real-time avatar that talks back. This section adds the platform around them: two products, shared assets, data, training, evaluation, serving and safety.

Requirements

One platform serves two products with different service levels. Batch video turns a script into a 1080p, 30 fps video in minutes, and dubs it into 30+ languages. Video Agents hold two-way conversations; Synthesia describes real dialogue as "typically under one second".

Id Requirement Status
F1 Stock and custom avatars (photo or video) behind a live consent gate Confirmed (personal avatars docs)
F2 Voice cloning from a short reference, accent and emotion preserved Confirmed (Express-2 post)
F3 Lip-synced dubbing into 30+ languages Confirmed (Synthesia 3.0 post)
F4 Async video API with webhooks or polling; render takes 3-10 minutes Confirmed (API docs)
Q1 1080p, 30 fps, no duration limit Confirmed (Express-2 post)
Q2 Interactive dialogue "typically under one second" Confirmed (Synthesia, 2 Jul 2026)
S1 Moderation at creation, EU AI Act Art. 50 labelling, ISO 42001 Confirmed (AI governance page)
I1 Identity and consent enforced as a hard pipeline stage, not a UI check Inference
I2 Separate SLOs: minutes for batch, sub-second first frame for interactive Inference
I3 Turn-taking and listening cues (nodding, attention) are their own model problem Inference
I4 Lip-sync error and identity targets come from an internal benchmark Inference

I would ask for cost per minute and rate limits in the interview. For comparison, Tavus claims less than one second between utterances for its conversational video interface (Tavus blog, a vendor's own claim). Reported

High-level architecture

Shared assets (read by every pipeline, dashed) Identity store avatars Consent gate live consent video; person must match photo Voice store Batch (minutes) Script / LLM TTS AR + codec Audio-to-motion Motion scoring Renderer few-step DiT QA + moderation Delivery webhook Dubbing (minutes) Video ASR MT Cloned TTS duration control Lip-sync re-render QA + moderation Delivery
Figure: shared assets and the two minutes-scale pipelines. The consent gate is a hard stage in front of the stores; both pipelines end in QA and moderation before delivery. Stage names follow Express-Voice, Express-Animate, Express-Eval and Express-Render. Inference (layout is a design sketch).
Interactive (sub-second) Mic + cam WebRTC Encoder causal, audio + video Speech LLM listen + speak Text LLM tool call, tools Codec decoder causal Causal renderer few-step WebRTC Client yield, listening state Cascade fallback ASR → LLM → TTS
Figure: the interactive pipeline. The speech LLM hands content to the text LLM through a tool call and speaks the reply; its action channel drives yield and listening cues in the renderer. Dashed: the cascade is the launch fallback.
  • Batch. Express-Voice is in-context cloning without fine-tuning, two transformers of about 800M parameters each conditioned on reference audio. Express-Animate makes motion, Express-Eval scores audio-motion agreement, and Express-Render synthesises frames, distilled to two diffusion steps. Confirmed Using Eval to select among motion candidates is my reading of its role. Inference
  • Dubbing. The chain is ASR, MT, cloned-voice TTS, lip-sync re-render. The TTS needs duration control so the translated line fits the original shot. Inference
  • Interactive. The voice is a unified speech LLM with a downstream text LLM, driving a causal renderer; the cascade is the launch fallback and baseline, and native full-duplex is the research track. Inference Perceiving the user needs a streaming encoder with a fixed-size KV cache (StreamingVLM reuses attention-sink states, a short window of recent vision tokens and a long window of recent text tokens; up to 8 FPS on one H100) (arXiv 2510.09608) or an omni model such as Qwen3-Omni (arXiv 2509.17765). Confirmed

Model choices and alternatives

Decision Option A Option B My pick Inference
Interactive voice Unified speech LLM (listen and speak heads) with a text LLM behind a tool call. Learned turn-taking and shared voice; one extra LLM hop and two models to serve. Independent ASR, LLM and TTS. Easy to build and attribute; heuristic turn-taking and paralinguistics lost at the text boundary. A as the target; B as launch fallback and baseline
Audio and video generation Cascade: TTS, then animate, then render. Voice control and data reuse are strong; audio and motion can disagree. Joint generation (Ovi, arXiv 2510.01284; Seedance 1.5 pro, arXiv 2512.13507). Sync comes from the backbone; audio quality is open and voice cloning control is weaker. Audio-then-motion cascade in production; joint as a research track, since voice identity is the product
Renderer Bidirectional DiT distilled to few steps. Used for batch (Express-Render, two steps). Causal AR video diffusion (Self Forcing, CausVid, LiveTalk). Streams; a strictly unidirectional student can give rigid full-body dynamics (arXiv 2512.23379), and multimodal conditioning causes flicker and black frames in Self Forcing (arXiv 2512.23576). A for batch, B for interactive, sharing the backbone where possible
Speech tokens Low-rate discrete codec: short sequences, near text rate, lower reconstruction quality. Continuous latents: no quantization loss, but a regression or diffusion head is needed. Discrete AR content model plus a flow or codec decoder for fidelity

The option descriptions are my summary Inference. Facts behind the table: Ovi uses twin DiT towers with blockwise cross-modal fusion (arXiv 2510.01284); CausVid distils a bidirectional model into a 4-step causal generator at about 9.4 FPS with 1.3 s initial latency (arXiv 2412.07772); Self Forcing reaches 17 FPS and sub-second latency on one H100 (arXiv 2506.08009). Real-time numbers are author-reported on their own hardware and not comparable. Confirmed Codec trade-offs are in Codecs and speech tokenizers.

One timeline for voice and video

The two teams need a shared clock, or sync becomes a post-hoc patch. Ovi scales audio RoPE frequencies by 31/157 so 31 video latent frames align with 157 audio tokens (arXiv 2510.01284). Qwen3-Omni instead assigns absolute-time IDs (one temporal ID per 80 ms of audio) and adjusts video frame IDs to real timestamps, which allows streaming inputs of arbitrary duration (arXiv 2509.17765). Confirmed Inference I would use absolute-time positions across every model, so a TTS chunk, a motion chunk and a rendered block all carry the same timestamps. The audio stays the clock, as in the real-time avatar section. A speech LLM on an 80 ms frame clock gives the voice side of that timeline for free.

Data

  • Capture studio against webcam or photo. Synthesia supports personal avatars from a single photo and an optional voice sample (personal avatars docs). Confirmed Inference Studio capture gives clean, controlled full-body data for the premium tier and for training. Webcam and photo give scale and diversity but noisy lighting and audio; tier them by capture quality.
  • Curation. Ovi filters clips with SyncNet (absolute offset at most 3, confidence above 1.5, mean volume at least -60 dB) and uses MLLM captions (arXiv 2510.01284). Confirmed
  • Multilingual speech. Inference Dubbing needs paired speech across 30+ languages with accent labels and speaker identity; emotion2vec tags give emotion coverage. Long-tail languages need synthetic or licensed data.
  • Consent provenance. Inference Every training clip carries a consent record and licence scope. A person who withdraws consent must be removable from the training set and from future retrains.

Training stages

  1. Pretrain backbones. Start from an open video DiT (Wan is an open suite of video foundation models, arXiv 2503.20314; Ovi initialises its video tower from Wan2.2 5B, arXiv 2510.01284) and a speech AR model with a codec. Confirmed
  2. Audio-conditioning finetune. Add audio conditioning for lip and motion; FantasyTalking adds a second, frame-level lip-refinement stage (arXiv 2504.04842). Confirmed
  3. Distillation. Reduce to few steps for batch; build a causal student for interactive, with autoregressive rollouts in training to close the train-test gap (Self Forcing, arXiv 2506.08009). Confirmed
  4. Preference optimisation. FantasyTalking2 trains a reward model (Talking-Critic), curates a 410K-pair preference dataset and optimises with TLPO (arXiv 2508.11255). Confirmed For voice, use the RL recipes from the control-and-quality chapter: WER and SIM rewards plus an emotion term, and add per-axis timing rewards for the speech LLM's action channel.
Trap: reward hacking

Automatic rewards get gamed; GRPO on CER and NLL rewards collapsed prosody into monotone speech (arXiv 2509.18531). Confirmed Inference Guard with multi-metric rewards, a naturalness term, held-out human panels, and a check on motion diversity (a lip-sync reward alone can freeze the head).

Evaluation

Layer What to measure Inference
Offline, voice WER, speaker similarity (SIM; quote the variant), emotion2vec, UTMOS
Offline, video Sync-C and Sync-D (SyncNet), CSIM (ArcFace identity), FVD
Human Preference studies and native-speaker panels (Express-Voice used 100 evaluators, 17 accents)
Online, interactive Latency p50/p95/p99, interruption handling (Full-Duplex-Bench), completion and engagement Inference

Papers report Sync-C under different protocols, so I treat cross-paper numbers as not comparable Inference. Build one internal benchmark with fixed identities, languages and scripts, run by both the Voice and video teams, and pin metric variants.

Serving and cost

  • Pools. Inference Separate GPU pools for the speech LLM, text LLM, motion and render; cascade pools only as failover capacity. Interactive gets reserved capacity with a hard concurrency cap; batch fills the gaps from a queue and can be pre-empted or delayed.
  • Caching. Inference Cache identity features and voice conditioning per avatar, so repeat renders skip the encoders.
  • Steps against quality. Express-Render uses two diffusion steps, and Render-Turbo is described as coming later (Express-2 post). Confirmed Inference Treat step count as a per-tier knob: fewer steps for previews and interactive, more for final export.
  • Autoscaling. Inference Scale batch on queue depth and interactive on session count, with warm pools because model load is slow.
Illustrative interactive budget (Inference only)
Stage Target Inference
Transport and input framing Under 100 ms
Speech LLM to first audio (filler or reply) 200-300 ms
First video block 150-250 ms
Total Under 1 s; about 430-650 ms by summing

These are the speech LLM path targets from the real-time avatar section, not measurements; the cascade fallback adds LLM first token (200-300 ms) and TTS first chunk (100-200 ms). No cost-per-minute figure is sourced.

Safety

  • Consent gate. Synthesia requires a live consent video (uploads not accepted) and the person must match the photo (personal avatars docs). Confirmed Inference Bind the voice store to the same verified identity, so a cloned voice cannot be used without it.
  • Moderation at creation. Synthesia says it moderates content at the point of creation and lists a Content Integrity Policy (AI governance page). Confirmed Inference Screen the script before generation and the output before delivery.
  • Labelling and provenance. The governance page states EU AI Act Article 50 labelling and lists Content Authenticity Initiative engagement. Confirmed The page does not mention C2PA or watermarking.
  • Voice-clone abuse. Synthesia states that it strictly prohibits cloning voices without explicit consent (voice cloning page). Confirmed Inference Add speaker verification of the reference against the consenting person, and rate limits on cloning and on interactive agents.

Risks and what I would do first

  • Risks. Inference Audio and video teams drift on clocks and metrics; distilled causal renderers degrade under audio conditioning; action-channel data with real overlap is scarce; tags the text LLM cannot use; reward models get gamed.
  • Days 1-30. Inference Learn the current Voice stack and its failures. Build the shared benchmark and metric pins with the video team, including latency percentiles, and put the cascade on it as the baseline.
  • Days 31-60. Inference Stand up the unified speech LLM path: listen head with tags and end-of-turn, tool call to the text LLM, speak head with fillers, absolute-time chunks and listening cues, scored on the benchmark. Ship the cascade as launch fallback behind the same gates.
  • Days 61-90. Inference Train the first in-house version on the shared timeline, add timing and voice rewards with hacking guards, gate it against the cascade, and start the native full-duplex research track.
In the interview, say:

"I see two products with two SLOs on one set of consent-gated identity and voice assets. Interactive voice is a unified speech LLM that owns listening, turn-taking and speaking, with a swappable text LLM behind a tool call; the cascade is the launch fallback and baseline. I would share an absolute-time clock between voice and video and build one internal benchmark first, because published sync numbers do not compare."

Chapter 10

Reference

Cheat sheet: key models

Every cell comes from the cited paper (arXiv). Years are the arXiv first-submission year; latency figures are the authors' own reports. A dash means I have no sourced value for that cell.

Model Year Input rep Output rep Renderer Streaming Why it matters
Moshi (arXiv 2410.00037) 2024 Mimi codec tokens Mimi codec tokens plus text Mimi decoder Yes; 160 ms theoretical, 200 ms in practice First real-time full-duplex spoken LLM (authors' claim); Inner Monologue
dGSLM (arXiv 2203.16502) 2022 Textless, two-channel audio Textless speech — — First textless dialogue model (authors' claim); trained on 2000 h of Fisher
Voicebox (arXiv 2306.15687) 2023 Text plus audio context Speech (infilled) Flow matching, non-autoregressive — Flow-matching infilling; 50K hours of speech
F5-TTS (arXiv 2410.06885) 2024 Text padded with filler tokens Speech DiT flow matching — Fully non-autoregressive flow TTS; RTF 0.15
CosyVoice 2 (arXiv 2412.10117) 2024 Text FSQ speech tokens Chunk-aware causal flow matching Yes LM plus flow; streaming and non-streaming in one model
CosyVoice 3 (arXiv 2505.17589) 2025 Text Speech tokens — — Differentiable reward model for post-training; 1M hours of data
GLM-4-Voice (arXiv 2412.02612) 2024 Discrete 12.5 Hz tokens Discrete tokens Flow matching plus HiFi-GAN Yes Interleaved text and speech; 175 bps tokenizer
Freeze-Omni (arXiv 2411.00774) 2024 Speech encoder Text, then speech Speech decoder Yes Frozen LLM keeps text intelligence
OmniFlatten (arXiv 2410.17799) 2024 Flattened tokens Flattened tokens — Yes Three-stage post-training on a flattened stream
Kimi-Audio (arXiv 2504.18425) 2025 Continuous features, 12.5 Hz tokens Discrete tokens Flow-matching detokenizer plus BigVGAN Yes, chunk-wise More than 13M hours of pretraining audio
Step-Audio 2 (arXiv 2507.16632) 2025 Audio encoder, 12.5 Hz output Text and audio tokens Flow matching plus HiFi-GAN — Calls tools: web search, audio search
LLaMA-Omni 2 (arXiv 2505.02625) 2025 Speech encoder Text, then speech Streaming speech decoder Yes Trained on only 200K dialogues
Qwen3-Omni (arXiv 2509.17765) 2025 AuT encoder Multi-codebook codec frames Causal ConvNet Yes; 234 ms theoretical first packet Thinker-Talker MoE; ConvNet replaces block-wise diffusion
Qwen3-TTS (arXiv 2601.15621) 2026 Text 25 Hz or 12.5 Hz tokens Block-wise DiT (25 Hz) or causal ConvNet (12.5 Hz) Yes; 97 ms first packet (12.5 Hz) Two tokenizers; Apache 2.0
Llasa (arXiv 2502.04128) 2025 Text Single-codebook VQ codec tokens — — Single Transformer; inference-time search with verifiers
MELLE (arXiv 2407.08551) 2024 Text Continuous mel frames — — Autoregressive without vector quantization
VibeVoice (arXiv 2508.19205) 2025 Text Continuous latents, 7.5 Hz tokenizer Diffusion head — Up to 90 minutes and 4 speakers
IndexTTS2 (arXiv 2506.21619) 2025 Text plus timbre and style prompts — — — Duration control; emotion and timbre disentangled
Hibiki (arXiv 2502.03382) 2025 Source speech, multistream Text and audio tokens — Yes, simultaneous Simultaneous speech translation, French to English
MiniCPM-o 4.5 (arXiv 2604.27393) 2026 Omni-modal streams Speech — Yes, full duplex 9B parameters; edge devices with under 12 GB RAM
FlashTTS (arXiv 2606.09141) 2026 Text Tokens, then mel Mean-flow decoder, 2 NFE Yes; 325 ms first packet Lagged multi-track; no sentence-level buffering

Five sentences to remember

Inference My synthesis of the table, not a sourced claim.

  1. Several systems here run audio at about 12.5 Hz (Moshi, GLM-4-Voice, Kimi-Audio, Step-Audio 2, Qwen3-Omni).
  2. Output is often an LM for content plus a flow or ConvNet renderer.
  3. Text is the scaffold and the supervision.
  4. Duplex looks limited by data and evaluation more than by architecture.
  5. Latency comes from token rate, NFE and chunking.