File size: 3,489 Bytes
7b6f332
 
 
 
 
 
 
 
5d5bd90
7b6f332
 
 
 
5d5bd90
f66141c
7b6f332
f66141c
 
 
 
 
 
 
 
 
5d5bd90
 
 
7b6f332
f66141c
 
 
 
 
 
 
 
 
 
 
7b6f332
5d5bd90
7b6f332
5d5bd90
f66141c
 
7b6f332
5d5bd90
 
 
f66141c
5d5bd90
f66141c
 
5d5bd90
 
 
 
f66141c
 
 
 
 
 
 
 
 
 
 
 
 
5d5bd90
 
 
f66141c
5d5bd90
 
 
f66141c
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
---
license: cc-by-nc-4.0
base_model: google/gemma-4-12B-it
tags:
- full-duplex
- speech
- gemma-4
- csm
- lora
---

# Parley

Parley is a full-duplex speech model. It listens while it talks and decides every 80 ms
whether to speak, keep speaking, or listen.

It's the model from the blog post
[Inside Frankenstein's lab: a full-duplex model at home](https://walln.dev/blog/full-duplex-at-home/),
which covers how it works, how it was trained, and where it falls short.

## What it is

- **Thinker:** Gemma 4 12B (audio-native, no speech encoder), adapted with LoRA. It hears
  16 kHz audio in 40 ms slices and writes text or control tokens on an 80 ms clock: `SIL`
  while listening, `EPS` while still speaking, or words when it has them.
- **Talker:** CSM-1B (Sesame) speaks the words Gemma writes, in chunks, through a playout
  queue that handles interruption and yielding.
- **Codec:** Mimi (Kyutai) provides the audio codes CSM renders.

This repo holds the thinker's LoRA adapter and processor. CSM-1B and Mimi are used as
released.

## Training

- **Supervised:** synthetic spoken conversations, with replies rewritten to sound like
  speech and training examples where the user interrupts mid-reply. User audio is synthetic
  voices only.
- **Reinforcement learning:** GRPO on the decision to speak only, on mid-sentence pause clips
  from Meta's Seamless Interaction, heard over room tone. This is what teaches the model to
  wait through pauses. The released adapter is the step-20 save of that run.

## Intended use

Research, experimentation, and demos of full-duplex voice interaction. Not a production
voice agent. The code is at https://github.com/walln/parley, including a live demo you can
run yourself: `parley serve` starts a full-duplex server with a browser page to talk to it.

## Limitations

- Trained on synthetic voices only; recorded human speech is weaker.
- It waits through pauses well, but answers later than it should at the end of a turn.
- One voice (the CSM reference clip).
- Gemma gets one text token per frame, so long text and tool calls don't fit.
- It stops for any interruption, including backchannels like "okay".
- Research-only weights.

## Components and licenses

- Gemma 4 12B (`google/gemma-4-12B-it`): Apache 2.0.
- CSM-1B (`sesame/csm-1b`): Apache 2.0, built on Llama 3.2 (Llama Community License).
- Mimi (`kyutai/mimi`): CC BY 4.0.

## Training data and attributions

- [Seamless Interaction](https://ai.meta.com/research/seamless-interaction/) (Meta): CC BY-NC 4.0.
  Pause clips for reinforcement learning.
- [databricks-dolly-15k](https://huggingface.co/datasets/databricks/databricks-dolly-15k) (Databricks): CC BY-SA 3.0.
- [alpaca-cleaned](https://huggingface.co/datasets/yahma/alpaca-cleaned): CC BY 4.0. Answers originally written by an OpenAI model.
- [no_robots](https://huggingface.co/datasets/HuggingFaceH4/no_robots) (Hugging Face H4): CC BY-NC 4.0.
- [hh-rlhf](https://huggingface.co/datasets/Anthropic/hh-rlhf) (Anthropic), helpful split: MIT. Source of the multi-turn conversations.
- Training replies were partly rewritten by a teacher model.

## Weights license

Research-only, under CC BY-NC 4.0. Commercial use requires a separate agreement.

## Citation

```bibtex
@misc{wall2026fullduplex,
  author = {Nick Wall},
  title = {Inside Frankenstein's lab: a full-duplex model at home},
  year = {2026},
  month = {oct},
  howpublished = {\url{https://walln.dev/blog/full-duplex-at-home/}},
  note = {Blog post}
}
```