03Conversation
Backchannels
An agent that says "mhm" while the caller talks — at the moments a person would.
Backchannels are the small "mhm", "yeah" and "right" a listener says to show they're following. Without them, a caller telling a long story talks into silence and starts asking "are you there?".
turns:
backchannel: true
backchannel_model: maai # maai | vad
backchannel_hold: 1200 # ms to wait after a "mhm" before taking the turnWhen to say it
| Value | How it decides |
|---|---|
maai | MaAI's VAP-BC model predicts, from both voices, the moments a listener would say "mhm". The default. |
vad | A short pause after a few new words. Cheap, and less well timed. |
The policy plays a backchannel only while the agent is silent and no reply is on its way.
The hold
After the agent says "mhm", the caller usually keeps going. But end-of-turn
models often fire on that same pause, and the agent would answer a story that
isn't finished. backchannel_hold makes the agent wait after a backchannel:
- If the caller resumes inside the hold, the agent stays quiet.
- If they don't, the agent takes the turn when the hold ends.
The default of 1200 ms suits storytelling and support calls. 0 turns it off
for snappier replies and fewer backchannels.
Instant, in the agent's voice
Backchannels never wait on TTS. Cuelo synthesizes "mhm", "mhmm", "yeah",
"okay", "right" and "uh-huh" once per voice and caches them under
assets/phrases/<provider>-<voice>-<hash>/. They play the moment the model
fires, and they're re-rendered automatically when the voice changes.
Tuning
- Too many: raise the cooldown in a custom controller, or switch from
vadtomaai. - Interrupting the caller: they're timed on pauses, so this usually means
the caller pauses a lot. Lower the model threshold in
src/turns.py. - Replies feel slow after a "mhm": shorten
backchannel_hold.
The dashboard marks every backchannel on the call timeline (backchannel.played),
so you can hear exactly where they landed.