Capture from Pipecat
setup drops a pipeline recorder: caller and agent on separate channels, to score offline.
The recording you capture feeds a five-dimension conversation-test: separated caller and agent channels are what the Conversation (turn-taking) and Speech (timing) dimensions read, and the same file drops into hotato test run beside a transcript and trace for the Outcome and Policy checks.
| Stack | Automatic pull | Separate channels | Contract-grade default | Network use |
|---|---|---|---|---|
| Vapi | Yes: capture fetches by call id | Yes, out of the box | Yes | One call: fetch the recording |
| Twilio | Yes: capture fetches by recording SID | No by default: must request RecordingChannels=dual at creation | No, opt-in | One call: fetch the recording |
| Retell | Yes: capture fetches by call id | Yes, once call recording is turned on | Opt-in: enable recording first | One call: fetch the recording |
| LiveKit | No: egress runs in your own infra | Yes, if egress records both tracks | Opt-in: configure egress for two tracks | None from Hotato |
| Pipecat | No: the setup recorder runs in your pipeline | Yes, the scaffold writes caller ch0 / agent ch1 | Yes, once the recorder is added | None: local recorder, no network call |
Automatic pull: does hotato capture fetch it for you. Separate channels: is caller/agent separation what you get. Contract-grade default: is that separation on without extra setup. Network use: what capture calls out to, not your infrastructure.
1. Add the recorder
setup prints an AudioBufferProcessor recorder: input (caller), output (agent), writing one WAV with caller on channel 0.
uvx hotato setup --stack pipecat2. Score the recording
Point Hotato at the WAV the recorder wrote. --expect yield/hold = interruption vs. backchannel.
uvx hotato capture --stack pipecat --stereo captured.wav --expect yieldScoring more than one call?
Pipecat has no vendor recording API to poll, so pull and sweep have nothing to fetch here. Point hotato analyze at the folder your recorder writes to instead: same ranking sweep produces, over every WAV inside.
uvx hotato analyze ./recordingsSeparated caller and agent audio is what makes overlap attributable; speech activity comes from exposed VAD thresholds, frame-inspectable. The scorer takes one two-channel WAV, or two aligned mono WAVs. A single mixed-down track has no channel to attribute overlap to, and unlike a vendor recording there is no fetch step to retry in degraded mode: keep caller and agent on separate channels straight out of the recorder (step 1), or the call is not scorable.