JoinIn.ai
Beta is live · Try Pulse
Baton by Join In · powers Pulse today · API in private beta

Baton smartly passes the floor to your AI.

The first turn-taking engine built for group conversation — and on the polyadic benchmark made to measure it, it beats both OpenAI and Google by 3×.

Drop a frontier voice model into a real meeting and it talks over people, fills thinking pauses, and can’t tell whether a question is for it or for someone else. That isn’t voice quality or knowledge — it’s timing in a group. Baton decides the one thing they all get wrong: when to hand the floor to your agent, and when to stay silent.

pol·y·ad·ic — involving more than two participants. A 1:1 is dyadic; a meeting is polyadic. Every voice AI on the market is built for the first case.

Alex Bailey Casey Dana You AI

The floor goes to whoever’s turn it is. Your AI is just another voice in the room.

Good at two. In a different league at four.

In a 1:1 we trade blows with the frontier — real, but percentage points. Add a third and fourth person and the comparison stops being close. Same stack, same harness, deterministic scoring, no LLM judge. Full-Duplex Polyadic is a new benchmark of ours, releasing soon — nothing existing measured turn-taking beyond two participants.

Each turn-taking signal vs. the best specialist model

Benchmark
Baton
Best other
Baseline
Baton vs best
End of turn · has the speaker finished?
eot-bench · cut-offsPublished. LiveKit’s public end-of-turn board lists Baton as “JoinIn AI Baton”, and LiveKit reproduced our numbers independently. Explore it on the interactive board or read the method in livekit/eot-bench. With a 300 ms latency budget, the share of pauses a model cut off: LiveKit Turn Detector v1 leads at 9.9%, Baton 12.3%, Deepgram Flux 12.9%. GPT Realtime 2 never reaches that budget. The baseline is the board’s own VAD entry (600 ms budget: Baton 4.8%).LiveKit · false cut-offs @ 300 ms · lower is better
12.3%
9.9%LiveKit Turn Detector v1
55.6%VAD baseline
🥈 #2 of 13
eot-bench · latencyThe other axis of the same board: how long a model waits to hand over the turn when it may cut off at most 5% of pauses. LiveKit Turn Detector v1 543 ms, Baton 577 ms, Soniox 647 ms; GPT Realtime 2 1143 ms; the VAD baseline 1600 ms (10% budget: Baton 350 ms). Ranks count the board’s 13 entries including that baseline.LiveKit · latency @ 5% cut-offs · lower is better
577 ms
543 msLiveKit Turn Detector v1
1600 msVAD baseline
🥈 #2 of 13
Speko turn-takingself-runSelf-run, not on Speko’s board. We scored Baton with the method of Speko’s turn-taking benchmark — end-of-turn vs. keep-waiting on real English speech from Pipecat’s smart-turn v3.1 test set, threshold set at the lowest false cut-off rate that still catches ≥85% of finished turns. We ran 1,000 clips (500 + 500); Speko’s 200 sample ids are unpublished. On the same clips, the leader of Speko’s board, Smart Turn v3.2, rerun with Pipecat’s own preprocessing: false cut-offs 1.2% vs 2.6% (paired difference significant), accuracy 93.2% vs 91.3% (not significant), AUC 0.993 vs 0.986.Speko publishes Smart Turn v3.2 at 94.0% accuracy / 1.0% false cut-offs on its 200 clips; on 200-clip draws our rerun of it spans 90.5–97.0% and Baton’s median is 95.0%, so a 200-clip board cannot separate the two. Baton was trained on Pipecat’s public smart-turn training data — no clip overlaps the test set, but it is the same distribution, as it is for Smart Turn. Speko’s latency column measures local CPU inference and does not apply to a hosted service.false cut-offs @ 85% recall · lower is better
1.2%
2.6%Smart Turn v3.2 · same clips
—
2.2× fewer
Barge-in · is that interruption for real?
SID-Bench · false interruptionsself-runSelf-run, zero-shot. SID-Bench asks whether a voice agent stops for a real interruption and ignores a “yeah” or “mm-hm”. Baton’s barge-in signal has never seen a SID clip: it learned from hand-labelled interruptions in real meetings. Scored with the benchmark authors’ own rules, firing once its confidence reaches 0.7, checked every 100 ms. Mandarin: 4.4% vs the paper’s 13.8%. Counting the silence and noise clips in the denominator: 4.2%.The 0.7 threshold was chosen on the test clips, so read it as an upper bound (at a pre-fixed 0.6, English penalty time is 0.93 s). SID clips are one speaker in isolation — no overlap, no other voice — so this measures recognising an interruption, not talking over a person in a meeting.English · 1,600 clips · lower is better
5.2%
14.0%SID model (paper)
66.9%Freeze-Omni
2.7× fewer
SID-Bench · penalty timeself-runClose, not ahead — shown anyway. SID-Bench’s headline metric (APT) adds the time taken to stop for a real interruption to the cost of stopping when nobody interrupted. Baton is far less jumpy (row above) but reacts later — about a second on average against the paper’s 0.44 s, ~50 ms of which is our 100 ms checking grid. That trade is deliberate: in a meeting, stopping for every “yeah” is the worse failure. Mandarin: 0.78 s vs 0.66 s.Zero-shot, no SID data in training; threshold 0.7 chosen on the test clips. The paper marks an interruption where an LLM finds the first content word; our training labels were judged by intent at onset.English · APT · lower is better
0.98 s
0.92 sSID model (paper)
2.43 sFreeze-Omni
+0.06 s

Each comparison names the model it is against. Self-run means we scored Baton with the benchmark’s published method ourselves; it is not on that benchmark’s own board.

The whole voice agent vs. frontier voice models

Benchmark
Baton
Gemini 3.1 Live
gpt-realtime 2.1
Std. CascadeA standard LiveKit-style STT→LLM→TTS agent with VAD endpointing (livekit-cascaded on τ³, published Cascaded on FDB-v3). It has not been run on the polyadic FDP sets, shown as “—”.
Baton vs best
Group conversation · 4–6 people
Full-Duplex Polyadicpending submissionFull-Duplex Polyadic (FDP) is a new benchmark — coming soon. We built it because nothing existing measured turn-taking with more than two participants. Scripted meetings, deterministic scoring, no LLM judge. The numbers shown are the Hardset — 51 meetings at 4–6 participants, built against our own measured failure modes, which is why every system scores lower on it than on the easier Showcase set (where Baton scores 95% against 40% and 5%).In the process of being published — as a standalone benchmark and as a proposed addition to existing voice-conversational benchmarks.Hard · 51 meetings · ours, releasing soon
69.3%
22.2%
14.3%
—
3.1×
1:1 conversation · third-party benchmarks
Full-Duplex-Bench v3pending submissionNTU + NVIDIA · n=100 · Pass@1
69.0%
54.0%
64.0%
45.0%
+8%
τ³-bench Voicepending submissionThe row we lose — deliberately shown. On a dyadic benchmark, holding the floor is a penalty: there is nobody else whose turn it could be. That is precisely why the polyadic segment needed its own measurement.airline · n=5 · Pass^1
60.0%
64.0%
58.0%
48.0%
−9%

Same stack, same harness, deterministic scoring, no LLM judge. OpenAI is gpt-realtime 2.1; Google is Gemini 3.1 Live. Hover the i marks for method notes and the row we lose.

Pending validationBenchmark results are pending independent validation and may change before product launch.

The hardest turn is the one you don’t take

Pick a meeting, then press play on each agent. You are hearing the identical room — same humans, same words, same timing — with only the agent swapped back in. The strip shows who held the floor: humans on top, the agent underneath. Red is the agent speaking over a human. In most of these the floor never opens, and the only correct behaviour is silence.

A child asks for the iPad

correct = stay silentNot a participant. Not for the agent. · 31s · 4 in the room
AlexLast thing — the pen-test report.
BaileyCasey said the draft was done.
CaseyFinal lands Thursday. I'll send it round.
Sam (child)( off-mic ) Daddy, where's the tablet charger? Can I have the iPad?
Casey( off-mic ) Sorry — one second.
Casey( off-mic ) It's in the kitchen drawer. Go on.
CaseySorry about that. Thursday for the report.
AlexNo problem. Thursday works.
Baton
PTP policy · diarized
agent silent — the room is undisturbed
✓ Held
said nothing
gpt-realtime-2.1
OpenAI · roster prompt
✗ Interrupted
4.4s over humans
Gemini 3.1 Flash Live
Google · polyadic prompt
agent silent — the room is undisturbed
✓ Held
said nothing
humans — each a colour agent speaking, floor free agent over a human question ends
1 / 8

Eleven of the fifteen FDP-Showcase meetings never open the floor to the agent at all. In those, the frontier models still fire — Baton stays out.

Pending validationClips and verdicts come from our own harness; scoring is pending validation and may change before product launch.

Bring your own LLM. Keep your pipeline.

Baton decides whether to speak. Your stack decides everything else — audio arrives constantly, and your LLM only wakes when the floor actually opens.

  • Any STTSoniox, Deepgram, Whisper, AssemblyAI — or whatever already runs in your stack.
  • Any LLMGPT-5.1, Claude, Gemini, Llama, or your own fine-tune. Baton never replaces the brain.
  • Any TTSElevenLabs, Cartesia, OpenAI, or Piper fully local.
  • Any shapeCascade, hybrid, realtime-native, on-prem — no audio-native model required.

Baton is a hosted WebSocket: stream it the audio your agent already hears and act on the events it sends back. Your STT, LLM and TTS stay exactly where they are.

Pending validationMeasured on our own runs. Figures are pending validation and may change before product launch.

Why it stays cheap

A realtime model is an LLM consuming every second of your meeting — reasoning about it, and billing for it, whether or not it has anything to say. Measured over the same 6.7 minutes of audio:

gpt-realtime 2.1
$7.40
per meeting-hour · 12,127 audio tokens ingested · 104 responses
Baton
$0.19
per meeting-hour · Baton policy + estimated STT & LLM pipeline

~39× less, on the same audio, at list pricing — and this figure is Baton plus estimated costs for the STT and LLM around it, not the policy alone. No GPU, no 7B audio model to serve, no per-second audio metering.

Pending validationCost figures are estimates from our own measurements at list pricing — pending validation and subject to change before product launch.

The API, endpoint by endpoint

Send 16 kHz mono audio over one WebSocket, get typed turn-taking events back. Both endpoints are in private beta on our test server, with production next; the end-of-turn engine behind them is what LiveKit measured. Read the docs for every event, option and limit.

Stream

Private beta
WS /v2/stream

One speaker — a voice agent and its caller. Decisions, not just raw scores.

  • Speech start and stop
  • Turn end, with its confidence and latency
  • Turn resumed — the speaker kept going, so cancel the reply
  • Barge-in: a real interruption, or just a “mm-hm”?
  • Reads the conversation so far, not just the audio
  • Presets by target cut-off rate, latency budget, or conversation mode
  • 14 languages; session summary at the end
Stream docs →

Room

Private beta
WS /v2/room

Several people on one live mixed feed. Everything Stream does, plus who is talking.

  • Every Stream event, for the room as a whole — speech start and stop, turn end, turn resumed, barge-in, presets
  • Adds live voice separation, up to 8 — who is speaking, when, and over whom
  • Adds a live transcript per speaker, with word timings
  • Adds language identified per voice; switches between the languages you allow, mid-meeting
  • Adds clean transcript cuts at turn boundaries, on your signal
  • One mixed feed in, processed as it arrives — nothing is kept
Room docs →

GET /v2/eot/profiles lists every end-of-turn preset, per language, with the latency and cut-off rate it measured — on /v2/stream in English, from 350 ms at 10% cut-offs to 875 ms at 2%.

Baton

Request information about Baton

Building group voice AI, or evaluating turn-taking for your own agent? We’ll walk you through the benchmark, the integration, and how Baton drops into your existing STT/LLM/TTS stack.