Home/Docs/Pipecat

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.

StackAutomatic pullSeparate channelsContract-grade defaultNetwork use
VapiYes: capture fetches by call idYes, out of the boxYesOne call: fetch the recording
TwilioYes: capture fetches by recording SIDNo by default: must request RecordingChannels=dual at creationNo, opt-inOne call: fetch the recording
RetellYes: capture fetches by call idYes, once call recording is turned onOpt-in: enable recording firstOne call: fetch the recording
LiveKitNo: egress runs in your own infraYes, if egress records both tracksOpt-in: configure egress for two tracksNone from Hotato
PipecatNo: the setup recorder runs in your pipelineYes, the scaffold writes caller ch0 / agent ch1Yes, once the recorder is addedNone: 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.

bash
uvx hotato setup --stack pipecat
TWO CHANNELcaller (ch 0)agent (ch 1)overlap has an ownerMONO-MIXEDcaller + agent, one track?summed onto one trackoverlap has no ownertime
Same call, two ways to record it. Two channel: the scorer can tell which party owns the overlap. Mono-mixed: caller and agent are summed onto one track before scoring, so the overlap can’t be attributed to either party.

2. Score the recording

Point Hotato at the WAV the recorder wrote. --expect yield/hold = interruption vs. backchannel.

bash
uvx hotato capture --stack pipecat --stereo captured.wav --expect yield

Scoring 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.

bash
uvx hotato analyze ./recordings
The dual-channel gate

Separated 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.