Score your LiveKit calls.
LiveKit records inside your own deployment. Run one track egress per participant, then hand Hotato the two WAVs: it scores the turn-taking timing locally. No recording leaves your environment.
Capture in your infra, one track per party.
hotato setup --stack livekit prints an Egress scaffold. A RoomComposite egress mixes both parties onto one channel, so run two audio-only Track egresses instead — one per participant — and keep them separate.
There is no vendor recording API for Hotato to pull from, so nothing calls out: you produce the WAVs in your deployment and Hotato scores the local files. Install the live-capture helpers with pip install 'hotato[livekit]'.
- your egress2 tracks
- →
- caller.wavagent.wav
- →
- capture--caller / --agent
- →
- scorelocal file
- →
- scorecard5 dimensions
Two mono WAVs in, one per-dimension scorecard out. The parties stay split all the way to the file, so every overlap keeps its owner.
$ hotato setup --stack livekit$ hotato capture --stack livekit --caller caller.wav --agent agent.wav$ hotato run --stereo captured.wav --expect yieldNo egress wired yet? hotato capture --stack livekit --demo runs the loop on a bundled call. Pass --onset <sec> if you already know the caller's onset.
Scaffold, record, then score locally.
setup prints the Egress scaffold. Point capture at the two mono WAVs your egress wrote, or hand run a single dual-channel file — caller on one channel, agent on the other.
--expect yield reads a caller who starts talking as an interruption the agent should yield to; --expect hold reads it as a backchannel.
Nothing calls out.
LiveKit capture runs entirely inside your deployment, and there is no vendor origination API, so Hotato scores what your pipeline writes and never places a call.
| Capability | LiveKit | Basis |
|---|---|---|
| Capture a recorded call | Yes | Two track egresses in your infra; Hotato scores the local WAVs |
| Drive a live call | Capture-only | No vendor origination API — Hotato never places LiveKit calls |
No key to hand over.
Stays in your infraCapture happens inside your own deployment, so no LiveKit credential ever reaches Hotato. When you connect a hosted stack elsewhere, hotato connect stores that key at file mode 0600 and sends it only to that vendor.
ScopeHotato reads turn-taking timing — did_yield, seconds_to_yield, talk_over_sec — from speech energy. No speaker identification, diarization scoring, transcription grading, emotion or intent. Energy is not intent.