Skip to main content

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

hotato

Find where your voice agent talks over callers, and keep it from coming back.

Offline regression tests from your own call recordings. MIT.

PyPI version PyPI monthly downloads License: MIT Python 3.9 to 3.13 offline: yes runtime deps: zero tests

Terminal recording of hotato scan, run, and fixture create on a recorded call

Turn-taking regression monitoring for voice agents.

Connect your stack once. Hotato pulls recent recordings, scans for candidate talk-over and false-stop moments, and lets you turn confirmed bugs into CI tests.

Your audio stays on your machine unless you explicitly pull it from your stack.

hotato connect vapi
hotato sweep --stack vapi --since 7d --out hotato-sweep.html

That opens one offline dashboard ranking every candidate moment across your last 7 days of calls. Run sweep on a schedule (cron, CI, wherever) and it becomes a passive monitor; promote a confirmed bug into a permanent fixture with hotato fixture promote, then gate CI so it never comes back. Full guide: docs/SET-AND-FORGET.md · runnable examples/set-and-forget/.

No stack connected yet? hotato sweep --demo runs the identical flow over two bundled real calls: no credentials, no network.

Have one call recording and nothing else? One command surfaces its candidate moments:

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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hotato-0.5.0.tar.gz (7.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hotato-0.5.0-py3-none-any.whl (2.9 MB view details)

Uploaded Python 3

File details

Details for the file hotato-0.5.0.tar.gz.

File metadata

  • Download URL: hotato-0.5.0.tar.gz
  • Upload date:
  • Size: 7.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for hotato-0.5.0.tar.gz
Algorithm Hash digest
SHA256 995cb6059494bd263c685df140344af82776ddd58591889e9382cbbcdd0b8063
MD5 8038e6f29078be354c9b28cb70378475
BLAKE2b-256 234952d43b328a7ccbb090f2f51b3927791cfbaf011bc3b813d5ee90b00c0f59

See more details on using hashes here.

File details

Details for the file hotato-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: hotato-0.5.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

Hashes for hotato-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa18582bd4b21f65065c833f0f041bb69e1ce898a7a8f92e3fd58643c19a22a8
MD5 5973f224fdfd63b281fd53fcf95170e5
BLAKE2b-256 0fcc33dda3e843ec537f7056a7d76c136022c9e0cf259a342f1db80eae8955ee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page