Find where your voice agent talks over callers, and keep it from coming back. Offline regression tests from your own call recordings, MIT.
Project description
hotato
Find where your voice agent talks over callers, and keep it from coming back.
Offline regression tests from your own call recordings. MIT.
One command finds every moment your agent talks over the caller:
uvx hotato scan --stereo your-call.wav # two-channel WAV: caller ch0, agent ch1
From there: run scores a call to a PASS/FAIL verdict and an HTML report, compare measures a before/after delta for one fixed moment (fixed/regressed/improved/worse), verify proves it at battery scale across every fixture (reporting coincidence, not causation), and fixture create saves any moment as a permanent regression test that fails CI if it comes back. Everything runs on your machine; the audio never leaves it.
Hotato catches the three talk-over failures callers feel: the agent talking over the caller, false-stopping on a backchannel ("mhm"), or yielding too slowly. You label the expected behavior (yield = stop for the caller, hold = keep talking through a backchannel); Hotato measures whether the timing matched. It reports what it measured, never a guess at intent.
Try it with no audio of your own:
uvx hotato demo # scores two real recorded calls a provider's default agent failed, so you see the FAILs, timelines, and fix cards
MCP
uvx --from "hotato[mcp]" hotato-mcp # one tool, voice_eval_run; client configs in docs/MCP.md
Install
uvx hotato runs any command with zero install. To add it to a project:
pip install hotato # core: stdlib-only, zero dependencies
pip install 'hotato[neural]' # optional Silero VAD cross-check
pip install 'hotato[livekit]' # LiveKit live capture
pip install 'hotato[pipecat]' # Pipecat live capture
Depth
- Bad call to CI regression test, step by step:
docs/BAD-CALL-TO-CI.md· runnableexamples/bad-call-to-ci/ - What it measures (the three timing signals, re-derivable by hand):
METHODOLOGY.md· Python APIdocs/API.md - The fix ladder (each failure names the setting to move, in your stack's own terms):
docs/FIX-PLANS.md - Rule out the non-turn-taking bugs first (STT, buffering, verbosity, refusals, wrong-language):
docs/WHY.md - Pull a call from your stack (Vapi, Twilio, Retell, LiveKit, Pipecat):
adapters/README.md· statusdocs/ADAPTER-STATUS.md - CI gates: GitHub Action
docs/CI.md· pytest plugindocs/PYTEST.md - Reports and analytics:
docs/REPORTS.md· Suitesdocs/SUITES.md· Stack benchmarksdocs/BENCHMARK-STACKS.md - Real battery: 12 scripted calls against a live voice agent on its provider's default settings, where a missed interruption and a false stop on a backchannel fail in the same run, so
diagnoserefuses to name one threshold:corpus/vapi-defaults/README.md - For agents:
llms.txt·llms-full.txt· MCP serverdocs/MCP.md· SecuritySECURITY.md - Contributing: the highest-value PR is a real, labelled call fixture:
docs/SUBMITTING.md
Why "hotato": good turn-taking is a game of hot potato. Speak, then pass the turn the moment the caller wants it. MIT licensed (LICENSE); the open core stays open.
mcp-name: io.github.attenlabs/hotato
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hotato-0.4.0.tar.gz.
File metadata
- Download URL: hotato-0.4.0.tar.gz
- Upload date:
- Size: 7.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60830cf2098d98e287807a779b1f561ef2f50f9cb2b4721e55333b42f3259b67
|
|
| MD5 |
03d98f344d7351e73b011de05f4bfe17
|
|
| BLAKE2b-256 |
3d31c9d5998e19cf7f06900df70fcab2c3b6f9ac35c56b3595c9be86a4dc5abb
|
File details
Details for the file hotato-0.4.0-py3-none-any.whl.
File metadata
- Download URL: hotato-0.4.0-py3-none-any.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f5cb62686ab0aae6ceab32103df60f43e09f64337548f51433bb43f313243cf
|
|
| MD5 |
6f48c1be6f172ec245eef185344e808c
|
|
| BLAKE2b-256 |
5f98407e11733ff8982afdd7747051ef1b12a9e73d6180f72af7ba65f791f4e3
|