The corpus, every clip cleared for release
A fixture earns a place on this page only when it carries explicit permission to be published. Each card shows what the clip is, the label it was given and why, the timing hotato measures, its own JSON, and the exact consent that lets it be here. Two licenses, MIT and CC BY 4.0, and nothing else.
Turn-taking is measured from real voices, so redistribution is a permission question before it is a data question. A clip appears here only if its own attestation grants public release: MIT self-consent where the operator recorded and owns the call, or CC BY 4.0 where the source corpus was already published for reuse. Synthetic fixtures carry no human audio to consent for.
What stays out. Probe recordings whose consent does not explicitly cover public redistribution are excluded, even where they exist in a working directory. When the release basis is unclear, the clip is left off. Nothing here is de-identified after the fact to squeak through; the standard is affirmative, documented consent up front.
Every number on every card is a hotato run, quoted with the command that produced it. There is no accuracy percentage anywhere: the readings are reproducible timings with the method exposed. Waveforms are drawn from the audio, both channels normalized together so a quiet interrupt reads as quiet.
Default-configuration probe calls
Scripted calls the maintainers recorded against a Vapi assistant on its stock default interruption settings, dual channel, self-consented, released MIT. This is not a vendor benchmark. It is one assistant, one configuration, one date, and one scripted caller, kept here as provenance for the fixtures: what a provider-default agent does before anyone tunes it, not a ranking of platforms.
fd-01-missed-interruptionmissed interruption: a quiet, half-volume interrupt slips under the default threshold and is ignored
Labeled yield: the caller takes the floor (“sorry, one second (half volume)”); a good agent stops talking.
measured did_yield false, talk-over 0.25s
field note the quiet interrupt did NOT trip the default threshold; the agent kept talking
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo src/hotato/data/demo/failing/audio/fd-01-missed-interruption.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "fd-01-missed-interruption",
"title": "Real call: half-volume 'sorry, one second' is ignored (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"quiet-interruption",
"missed-interruption"
],
"audio": "fd-01-missed-interruption.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "sorry, one second (half volume)",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3929-9f73-7227-b1a8-2dfdf287c88c",
"source_file": "10-quiet-interruption.wav",
"source_sha256": "01b61e3069b9e5372bd9bb0c0b69b1558abc66ab40f974c721f028e054d9046e",
"window_source_sec": [
11.18,
19.18
],
"onset_derivation": "first caller run during agent activity: 13.18 s (0.25 s above the energy threshold, peak -43.8 dBFS, the audible core of the half-volume attempt); a second quiet attempt at 16.50 s (peak -50.4 dBFS) and the louder retry at 19.27 s are separate moments",
"field_note": "the quiet interrupt did NOT trip the default threshold; the agent kept talking",
"agreement_with_field_note": "matches: measured did_yield=false, no qualifying agent stop inside the 3.0 s window (the agent's inter-sentence gaps in that stretch are 0.15 and 0.17 s, shorter than the 0.20 s yield hangover)",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiofd-02-backchannel-yieldedbackchannel false-trigger: a soft acknowledgement halts the agent for good
Labeled hold: the caller only backchannels (“soft spaced backchannels (mhm / right / okay), later backchannel”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.32s
field note agent halted at 'This include,' and went silent; operator hung up
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo src/hotato/data/demo/failing/audio/fd-02-backchannel-yielded.example.wav --onset 2.0 --expect holdfixture JSON
{
"id": "fd-02-backchannel-yielded",
"title": "Real call: soft backchannel halts the agent mid-word for good (Vapi defaults)",
"category": "should_not_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"backchannel",
"false-trigger"
],
"audio": "fd-02-backchannel-yielded.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"transcript": {
"caller": "soft spaced backchannels (mhm / right / okay), later backchannel",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f390f-d0de-7991-a56c-e25d62d86b71",
"source_file": "04-backchannel-repeated.wav",
"source_sha256": "9b1c5d39d33deef692ca0316adefeb2787a3a235d5f0ca520b854467beb624d7",
"window_source_sec": [
34.49,
42.49
],
"onset_derivation": "second caller-active run during agent speech: 36.49 s (0.32 s, peak -16.9 dBFS); the agent halts 0.34 s later at 36.83 s and never speaks again (operator hung up during the dead air at 61.4 s)",
"field_note": "agent halted at 'This include,' and went silent; operator hung up",
"agreement_with_field_note": "matches: measured false yield 0.34 s after the backchannel; the agent's response_gap is null because it never spoke again",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-01-hard-interruptionhard interruption (a loud cut-in)
Labeled yield: the caller takes the floor (“loud cut-in mid-paragraph during the hours answer”); a good agent stops talking.
measured did_yield true, time to yield 0.35s, talk-over 0.35s
field note agent yielded to the interruption
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-01-hard-interruption.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-01-hard-interruption",
"title": "Real call: loud hard interruption mid-paragraph (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"hard-interruption"
],
"audio": "vapi-default-01-hard-interruption.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "loud cut-in mid-paragraph during the hours answer",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3905-f5cb-7991-a4b3-e45b8606b631",
"source_file": "01-hard-interruption.wav",
"source_sha256": "a763be90faf4fbebff4e5228f42eb58dba23d0bee2c6bc03b4a153c994816bfe",
"window_source_sec": [
19.41,
27.41
],
"onset_derivation": "the only caller-active run that starts during agent activity on this call: 21.41 s, 2.06 s long, peak -17.7 dBFS; matches the scripted loud cut-in",
"field_note": "agent yielded to the interruption",
"agreement_with_field_note": "matches: measured yield 0.35 s after onset",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-02-one-word-stopunder-yield to a short hard stop (“Stop.”)
Labeled yield: the caller takes the floor (“Stop.”); a good agent stops talking.
measured did_yield true, time to yield 1.46s, talk-over 0.45s
field note agent did NOT yield to the 'Stop.'; it kept talking and then restarted its paragraph
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-02-one-word-stop.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-02-one-word-stop",
"title": "Real call: a single firm 'Stop.' mid-paragraph (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"short-command",
"missed-interruption"
],
"audio": "vapi-default-02-one-word-stop.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "Stop.",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f390a-7293-7332-bc2d-f3e289d92a7e",
"source_file": "02-one-word-stop.wav",
"source_sha256": "fb50e4c85c4571ad752d48e0a6d0f1f59dca9b44229f57f396835d80bcea84d2",
"window_source_sec": [
45.6,
53.6
],
"onset_derivation": "speech-level caller runs during agent activity: 47.60 s (0.45 s, peak -26.7 dBFS) is the scripted 'Stop.' during the agent's paragraph; a second caller burst at 49.48 s (0.38 s, peak -25.9 dBFS) falls in an agent inter-sentence gap; three sub -47 dBFS blips (20.72, 43.97, 62.02 s) are below speech level",
"field_note": "agent did NOT yield to the 'Stop.'; it kept talking and then restarted its paragraph",
"agreement_with_field_note": "investigated disagreement on the binary: hotato measures did_yield=true at 1.46 s because the agent's own inter-sentence gap (48.86 to 49.49 s) coincides with the second caller burst at 49.48 s; the agent then spoke again at 49.49 s and restarted the whole paragraph at 51.24 s (an 8.7 s re-answer). The 1.46 s seconds_to_yield fails the stated 1.0 s bound, so the verdict is FAIL either way; a resume/restart signal is outside the current measurement set and is documented in RESULTS.md",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-03-backchannel-mhmbackchannel false-trigger (a soft “mhm”)
Labeled hold: the caller only backchannels (“mhm”); a good agent keeps the floor.
measured did_yield false (labeled hold), talk-over 0.35s
field note agent YIELDED to the mhm: stopped at 'so we can quickly locate', never resumed; the call died on the silence timeout
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-03-backchannel-mhm.example.wav --onset 2.0 --expect holdfixture JSON
{
"id": "vapi-default-03-backchannel-mhm",
"title": "Real call: a single soft 'mhm' backchannel (Vapi defaults)",
"category": "should_not_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"backchannel",
"false-trigger"
],
"audio": "vapi-default-03-backchannel-mhm.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"transcript": {
"caller": "mhm",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f390d-0b3f-7ddc-a92d-df916ed0e782",
"source_file": "03-backchannel-single.wav",
"source_sha256": "52d9a95d5b7f3b91f619ef68479beab11f02082adbc32bf3a17cb8595607fe8b",
"window_source_sec": [
20.74,
28.74
],
"onset_derivation": "the only caller activity during agent speech on this call: two tiny runs at 22.74 and 22.94 s (0.35 s total, peaks -55.4 and -43.5 dBFS), the scripted soft 'mhm'; onset is the first run",
"field_note": "agent YIELDED to the mhm: stopped at 'so we can quickly locate', never resumed; the call died on the silence timeout",
"agreement_with_field_note": "investigated disagreement: hotato measures did_yield=false because the agent kept talking for 4.19 s after the mhm (last agent activity ends 26.93 s) and the stop is both outside the 3.0 s attribution window and nowhere near caller activity; by the scorer's stated semantics an agent that finishes its phrase seconds later has not yielded TO the caller. The field failure is still visible in the measured timeline: after 26.93 s the agent never speaks again for the remaining 31.1 s of the call. The per-event hold verdict passes by measurement; RESULTS.md carries the full account",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-04-backchannel-restartbackchannel false-trigger (agent restarts on “right”)
Labeled hold: the caller only backchannels (“soft spaced backchannels (mhm / right / okay), first backchannel”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.32s
field note agent yielded on a backchannel and restarted its answer from the top (operator note: the word 'right' appears to trigger it)
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-04-backchannel-restart.example.wav --onset 2.0 --expect holdfixture JSON
{
"id": "vapi-default-04-backchannel-restart",
"title": "Real call: soft backchannel makes the agent restart its answer (Vapi defaults)",
"category": "should_not_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"backchannel",
"false-trigger"
],
"audio": "vapi-default-04-backchannel-restart.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"transcript": {
"caller": "soft spaced backchannels (mhm / right / okay), first backchannel",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f390f-d0de-7991-a56c-e25d62d86b71",
"source_file": "04-backchannel-repeated.wav",
"source_sha256": "9b1c5d39d33deef692ca0316adefeb2787a3a235d5f0ca520b854467beb624d7",
"window_source_sec": [
18.57,
26.57
],
"onset_derivation": "first of the two caller-active runs during agent speech: 20.57 s (0.32 s, peak -18.8 dBFS); after it the agent stops within 0.34 s and restarts its answer from the top at 21.91 s",
"field_note": "agent yielded on a backchannel and restarted its answer from the top (operator note: the word 'right' appears to trigger it)",
"agreement_with_field_note": "matches: measured false yield 0.34 s after the backchannel",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-04-backchannel-haltbackchannel false-trigger (agent halts and goes silent)
Labeled hold: the caller only backchannels (“soft spaced backchannels (mhm / right / okay), later backchannel”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.32s
field note agent halted at 'This include,' and went silent; operator hung up
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-04-backchannel-halt.example.wav --onset 2.0 --expect holdfixture JSON
{
"id": "vapi-default-04-backchannel-halt",
"title": "Real call: soft backchannel halts the agent mid-word for good (Vapi defaults)",
"category": "should_not_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"backchannel",
"false-trigger"
],
"audio": "vapi-default-04-backchannel-halt.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"transcript": {
"caller": "soft spaced backchannels (mhm / right / okay), later backchannel",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f390f-d0de-7991-a56c-e25d62d86b71",
"source_file": "04-backchannel-repeated.wav",
"source_sha256": "9b1c5d39d33deef692ca0316adefeb2787a3a235d5f0ca520b854467beb624d7",
"window_source_sec": [
34.49,
42.49
],
"onset_derivation": "second caller-active run during agent speech: 36.49 s (0.32 s, peak -16.9 dBFS); the agent halts 0.34 s later at 36.83 s and never speaks again (operator hung up during the dead air at 61.4 s)",
"field_note": "agent halted at 'This include,' and went silent; operator hung up",
"agreement_with_field_note": "matches: measured false yield 0.34 s after the backchannel; the agent's response_gap is null because it never spoke again",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-05-backchannel-yeahbackchannel false-trigger (a soft “yeah”)
Labeled hold: the caller only backchannels (“yeah (soft)”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.37s
field note agent WRONGLY yielded and restarted its answer
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-05-backchannel-yeah.example.wav --onset 2.0 --expect holdfixture JSON
{
"id": "vapi-default-05-backchannel-yeah",
"title": "Real call: soft 'yeah' backchannel, moment 1 of 2 (Vapi defaults)",
"category": "should_not_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"backchannel",
"false-trigger",
"dual-moment"
],
"audio": "vapi-default-05-backchannel-yeah.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"transcript": {
"caller": "yeah (soft)",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3912-986f-7dde-aba3-adc528d42266",
"source_file": "05-backchannel-then-real-interrupt.wav",
"source_sha256": "dcfff0416f678dbe5ceca997fb81e402a551709a76d040bb672c8df9e2b84ac4",
"window_source_sec": [
15.64,
23.64
],
"onset_derivation": "first caller-active run during agent speech: 17.64 s (0.38 s, peak -18.4 dBFS), the scripted soft 'yeah'; the second scripted moment on this call is scored separately",
"field_note": "agent WRONGLY yielded and restarted its answer",
"agreement_with_field_note": "matches: measured false yield 0.37 s after the backchannel",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-05-hold-onmulti-word interruption (“wait, actually, hold on”)
Labeled yield: the caller takes the floor (“wait, actually, hold on”); a good agent stops talking.
measured did_yield true, time to yield 0.36s, talk-over 0.33s
field note agent CORRECTLY yielded and acknowledged ('Of course. Take your time...')
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-05-hold-on.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-05-hold-on",
"title": "Real call: loud 'wait, actually, hold on', moment 2 of 2 (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"dual-moment"
],
"audio": "vapi-default-05-hold-on.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "wait, actually, hold on",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3912-986f-7dde-aba3-adc528d42266",
"source_file": "05-backchannel-then-real-interrupt.wav",
"source_sha256": "dcfff0416f678dbe5ceca997fb81e402a551709a76d040bb672c8df9e2b84ac4",
"window_source_sec": [
24.27,
32.27
],
"onset_derivation": "second scripted moment: caller bursts at 26.27, 26.67 and 27.32 s (the multi-word interruption); onset is the first burst, which starts during the agent's 19.67 to 26.63 s run",
"field_note": "agent CORRECTLY yielded and acknowledged ('Of course. Take your time...')",
"agreement_with_field_note": "matches: measured yield 0.36 s after onset",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-06-double-talkdouble-talk (sustained overlap)
Labeled yield: the caller takes the floor (“sustained overlapping sentence about the mother's medication”); a good agent stops talking.
measured did_yield true, time to yield 0.40s, talk-over 0.40s
field note agent CORRECTLY yielded, stopped at 'seasonal flu shot' and pivoted
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-06-double-talk.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-06-double-talk",
"title": "Real call: sustained overlapping full sentence (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"double-talk"
],
"audio": "vapi-default-06-double-talk.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "sustained overlapping sentence about the mother's medication",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3916-1917-7dde-abe9-9dff1c04d9bd",
"source_file": "06-double-talk.wav",
"source_sha256": "2ba17502f580e2a552b9acbc31236bc40d868df46c46fe30fab98da824e81fd5",
"window_source_sec": [
14.14,
22.14
],
"onset_derivation": "the only caller run starting during agent activity: 16.14 s (0.72 s, peak -12.8 dBFS), continuing as a 2.32 s run at 16.91 s (the rest of the overlapped sentence)",
"field_note": "agent CORRECTLY yielded, stopped at 'seasonal flu shot' and pivoted",
"agreement_with_field_note": "matches: measured yield 0.40 s after onset",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-07-correctionmid-answer correction, talked over, delayed resume
Labeled yield: the caller takes the floor (“correction: liquid pediatric suspension, not tablets”); a good agent stops talking.
measured did_yield true, time to yield 1.16s, talk-over 1.16s
field note first correction attempt NOT picked up, then dead air until the operator said 'Hello?'; the agent apologized and the correction landed on the retry
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-07-correction.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-07-correction",
"title": "Real call: mid-answer correction, then 21 s of dead air (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"correction",
"dead-air"
],
"audio": "vapi-default-07-correction.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "correction: liquid pediatric suspension, not tablets",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3917-ffb2-7dde-ac04-1ab2c20c42f1",
"source_file": "07-correction.wav",
"source_sha256": "78f9fbc9150f1facfcf19efda9c5852a2581c6222bef2d3e9d89df997f6f41cb",
"window_source_sec": [
19.32,
27.32
],
"onset_derivation": "the correction utterance starts at 20.87 s in an agent inter-word gap and becomes the 21.32 s run (1.52 s, peak -18.4 dBFS) that overlaps the agent's 21.04 to 22.48 s run; 21.32 s is the caller activity that begins while the agent is talking",
"field_note": "first correction attempt NOT picked up, then dead air until the operator said 'Hello?'; the agent apologized and the correction landed on the retry",
"agreement_with_field_note": "partial: the agent went quiet 1.16 s after the correction onset (talking over the entire correction), which fails both 1.0 s bounds; the 'not picked up' part is measured as a 21.38 s response_gap (agent's next speech at 44.63 s), the dead air the operator described",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-08-rapid-1rapid-turns barge-in (1 of 3)
Labeled yield: the caller takes the floor (“interrupt 1: where are you located”); a good agent stops talking.
measured did_yield true, time to yield 0.34s, talk-over 0.34s
field note agent yielded (leading words clipped by default endpointing)
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-08-rapid-1.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-08-rapid-1",
"title": "Real call: rapid interrupt 1 of 3 (where are you located) (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"rapid-turns"
],
"audio": "vapi-default-08-rapid-1.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "interrupt 1: where are you located",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f391d-99d5-7ccf-b511-18be9b148d02",
"source_file": "08-rapid-turns.wav",
"source_sha256": "a56cbd6dc64b098ba323ede8090dea8d2cfa53ae95dd70b6894b86fa5be55cb1",
"window_source_sec": [
17.75,
25.75
],
"onset_derivation": "first of three speech-level caller runs during agent activity: 19.75 s (0.91 s, peak -22.7 dBFS)",
"field_note": "agent yielded (leading words clipped by default endpointing)",
"agreement_with_field_note": "matches on timing: measured yield 0.34 s; the word clipping is a transcription artifact hotato does not measure",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-08-rapid-2rapid-turns barge-in (2 of 3)
Labeled yield: the caller takes the floor (“interrupt 2: and the nearest downtown”); a good agent stops talking.
measured did_yield true, time to yield 0.33s, talk-over 0.33s
field note agent yielded but 'and the nearest' registered as 'In the nearest'; this attempt needed a retry
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-08-rapid-2.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-08-rapid-2",
"title": "Real call: rapid interrupt 2 of 3 (nearest downtown) (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"rapid-turns"
],
"audio": "vapi-default-08-rapid-2.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "interrupt 2: and the nearest downtown",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f391d-99d5-7ccf-b511-18be9b148d02",
"source_file": "08-rapid-turns.wav",
"source_sha256": "a56cbd6dc64b098ba323ede8090dea8d2cfa53ae95dd70b6894b86fa5be55cb1",
"window_source_sec": [
34.62,
42.62
],
"onset_derivation": "second speech-level caller run during agent activity: 36.62 s (0.85 s, peak -15.4 dBFS)",
"field_note": "agent yielded but 'and the nearest' registered as 'In the nearest'; this attempt needed a retry",
"agreement_with_field_note": "matches on timing: measured yield 0.33 s; the front-clipped transcription is not a timing signal",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-08-rapid-3rapid-turns barge-in (3 of 3)
Labeled yield: the caller takes the floor (“interrupt 3: and what about parking”); a good agent stops talking.
measured did_yield true, time to yield 0.00s, talk-over 0.00s
field note agent yielded; 'and what about parking' registered as just 'parking' after about 3 attempts
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-08-rapid-3.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-08-rapid-3",
"title": "Real call: rapid interrupt 3 of 3 (what about parking) (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"rapid-turns"
],
"audio": "vapi-default-08-rapid-3.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "interrupt 3: and what about parking",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f391d-99d5-7ccf-b511-18be9b148d02",
"source_file": "08-rapid-turns.wav",
"source_sha256": "a56cbd6dc64b098ba323ede8090dea8d2cfa53ae95dd70b6894b86fa5be55cb1",
"window_source_sec": [
64.18,
72.18
],
"onset_derivation": "the landed third interrupt: 66.18 s (0.75 s, peak -13.8 dBFS), starting as the agent's 64.16 to 66.12 s run ends (inside the engine's 0.10 s lookback, so the agent counts as talking at onset); an earlier sub-speech blip at 61.64 s (peak -47.7 dBFS) is consistent with the operator's 'needed about 3 attempts'",
"field_note": "agent yielded; 'and what about parking' registered as just 'parking' after about 3 attempts",
"agreement_with_field_note": "matches on timing: the agent was quiet at the onset frame (seconds_to_yield 0.0); the dropped leading words are a transcription artifact",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-10-quiet-interruptquiet interruption, missed below the default threshold
Labeled yield: the caller takes the floor (“sorry, one second (half volume)”); a good agent stops talking.
measured did_yield false, talk-over 0.25s
field note the quiet interrupt did NOT trip the default threshold; the agent kept talking
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-10-quiet-interrupt.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-10-quiet-interrupt",
"title": "Real call: half-volume 'sorry, one second' is ignored (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"quiet-interruption",
"missed-interruption"
],
"audio": "vapi-default-10-quiet-interrupt.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "sorry, one second (half volume)",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3929-9f73-7227-b1a8-2dfdf287c88c",
"source_file": "10-quiet-interruption.wav",
"source_sha256": "01b61e3069b9e5372bd9bb0c0b69b1558abc66ab40f974c721f028e054d9046e",
"window_source_sec": [
11.18,
19.18
],
"onset_derivation": "first caller run during agent activity: 13.18 s (0.25 s above the energy threshold, peak -43.8 dBFS, the audible core of the half-volume attempt); a second quiet attempt at 16.50 s (peak -50.4 dBFS) and the louder retry at 19.27 s are separate moments",
"field_note": "the quiet interrupt did NOT trip the default threshold; the agent kept talking",
"agreement_with_field_note": "matches: measured did_yield=false, no qualifying agent stop inside the 3.0 s window (the agent's inter-sentence gaps in that stretch are 0.15 and 0.17 s, shorter than the 0.20 s yield hangover)",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-10-quiet-retryquiet-interruption retry, louder, yielded
Labeled yield: the caller takes the floor (“sorry, one second (about 30 to 40 percent louder)”); a good agent stops talking.
measured did_yield true, time to yield 0.60s, talk-over 0.59s
field note after raising volume 30 to 40 percent a garbled fragment registered and the agent yielded
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-10-quiet-retry.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-10-quiet-retry",
"title": "Real call: the louder retry after the ignored quiet interrupt (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"quiet-interruption"
],
"audio": "vapi-default-10-quiet-retry.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 7.73,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "sorry, one second (about 30 to 40 percent louder)",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3929-9f73-7227-b1a8-2dfdf287c88c",
"source_file": "10-quiet-interruption.wav",
"source_sha256": "01b61e3069b9e5372bd9bb0c0b69b1558abc66ab40f974c721f028e054d9046e",
"window_source_sec": [
17.27,
25.0
],
"onset_derivation": "the louder retry: 19.27 s (0.59 s, peak -26.5 dBFS) during the agent's 19.14 to 19.87 s run; this is the attempt the agent finally yielded to",
"field_note": "after raising volume 30 to 40 percent a garbled fragment registered and the agent yielded",
"agreement_with_field_note": "matches: measured yield 0.60 s after the retry onset",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-12-greeting-overlapimmediate overlap, barge-in over the greeting
Labeled yield: the caller takes the floor (“barge-in over the agent's greeting”); a good agent stops talking.
measured did_yield true, time to yield 0.37s, talk-over 0.37s
field note agent yielded over its own greeting and responded, though STT caught only a partial ('I need help with it')
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-12-greeting-overlap.example.wav --onset 2.0 --expect yieldfixture JSON
{
"id": "vapi-default-12-greeting-overlap",
"title": "Real call: barge-in over the greeting itself (Vapi defaults)",
"category": "should_yield",
"source_type": "role-played",
"tags": [
"real-audio",
"vapi",
"defaults",
"barge-in",
"greeting-overlap"
],
"audio": "vapi-default-12-greeting-overlap.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 8.0,
"caller_onset_sec": 2.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.0,
"max_talk_over_sec": 1.0
},
"transcript": {
"caller": "barge-in over the agent's greeting",
"note": "caller wording from the operator's call script and session notes, not an STT transcript; the agent side is the assistant's spoken answer"
},
"related_signals": [
"did_yield",
"seconds_to_yield",
"talk_over_sec"
],
"license": "MIT",
"provenance": {
"source": "operator-recorded probe call against a Vapi assistant on DEFAULT interruption settings",
"assistant": "hotato-probe",
"assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
"model": "openai/gpt-4o",
"voice": "vapi/Elliot",
"recorded": "2026-07-06",
"interruption_settings": "Vapi defaults (stopSpeakingPlan and startSpeakingPlan unset)",
"call_id": "019f3931-af2c-7229-b12d-bd37e4a937db",
"source_file": "12-immediate-overlap.wav",
"source_sha256": "956cac295bfa7e58b9046bc18ce9e83249a195c3ddf48a658b27f172d87b99dc",
"window_source_sec": [
4.48,
12.48
],
"onset_derivation": "the caller run starting during agent activity: 6.48 s (0.88 s, peak -21.8 dBFS) over the agent's 5.69 to 6.85 s greeting continuation; the caller's 2.57 s run precedes any agent speech activity in that window and is the operator opening the call",
"field_note": "agent yielded over its own greeting and responded, though STT caught only a partial ('I need help with it')",
"agreement_with_field_note": "matches on timing: measured yield 0.37 s; the partial transcription is not a timing signal",
"label_provenance": "the category comes from the operator's call script (what a good agent should do at this moment); the onset comes from the engine's energy-VAD tracks (caller onsets during agent activity); hotato measures the timing only"
},
"attestation": {
"contributor": "operator-recorded probe calls (build_vapi_defaults.py)",
"consent_on_file": true,
"consent_note": "the caller is the recording operator (self-consent); the agent voice is a synthetic TTS voice, no third-party speaker is present",
"pii_removed": true,
"pii_note": "the calls follow a fictional-pharmacy script; no real names, numbers, or identifiers are spoken",
"no_phi": true,
"right_to_release_mit": true,
"release_note": "the operator recorded and owns these calls and releases the clips and labels under the repository's MIT license"
}
}
source on GitHub · audiovapi-default-09-pause-jump-inmid-utterance-pause jump-in: a latency / analysis clip, not a yield or hold verdict
Analysis reading only. The manifest sets kind=analysis, category=null: there is no floor-yield to score, so hotato reports the response-gap timing and no pass/fail.
measured response gap 3.44s; hotato notes a yield verdict "has no meaning for this recording" (the agent is not talking at the detected onset).
what this does not prove One default configuration, one platform, one day. Not a vendor ranking and not a product's best-tuned behavior. Energy-VAD timing only: no transcription, no speaker identification, no intent.
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-09-pause-jump-in.example.wavwhere it lives
audio-only committed clip; see corpus/vapi-defaults/manifest.json
vapi-defaults on GitHubReal human conversation, from a published corpus
Floor-takes and backchannels lifted from the AMI Meeting Corpus, where participants consented to public release and the material is published under CC BY 4.0. These clips stay CC BY 4.0 and require attribution; they are the hardest ground truth to fake, which is why they are worth carrying.
Every clip in this section contains audio from the AMI Meeting Corpus, licensed CC BY 4.0. Changes: cut to short windows, two headset channels paired as caller and agent, resampled to 16 kHz PCM. The labels come from AMI's own manual word alignments.
ami-es2002a-take-0677floor-take / barge-in (a real human interruption)
Labeled yield: the caller takes the floor (“Yeah yeah Like how much does you know a remote control cost Well twenty five Euro I mean that's”); a good agent stops talking.
measured did_yield true, time to yield 0.61s, talk-over 0.58s
field note B breaks in with a question about remote control cost while D is talking; D stops almost immediately (0.38 s per the alignments).
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-es2002a-take-0677.example.wav --onset 3.0 --expect yieldfixture JSON
{
"id": "ami-es2002a-take-0677",
"title": "Real floor-take: caller interrupts and takes the turn (ES2002a)",
"category": "should_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"interruption",
"barge-in"
],
"audio": "ami-es2002a-take-0677.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.13,
"max_talk_over_sec": 1.13
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
6.38
],
[
7.51,
9.0
]
],
"agent_segments_sec": [
[
0.0,
3.38
],
[
6.37,
6.66
]
]
},
"transcript": {
"caller": "Yeah yeah Like how much does you know a remote control cost Well twenty five Euro I mean that's",
"agent": "the thi is this gonna to be like the premium product kinda thing or Uh-huh"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "ES2002a",
"window_global_sec": [
674.15,
683.15
],
"caller": {
"nxt_agent": "B",
"global_name": "FEE005",
"headset_wav": "ES2002a.Headset-1.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE008",
"headset_wav": "ES2002a.Headset-3.wav"
},
"annotation_files": [
"words/ES2002a.B.words.xml",
"words/ES2002a.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "B breaks in with a question about remote control cost while D is talking; D stops almost immediately (0.38 s per the alignments).",
"notes": "Headset bleed: the floor holder's voice is audible on the quiet caller channel, so onset AUTO-detection fires early on this clip. The labeled caller_onset_sec (from the word alignments) is the usable onset."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-take-0149floor-take / barge-in (a real human interruption)
Labeled yield: the caller takes the floor (“Yeah Well just sorta well the thing is yeah we're gonna be touching on all that during the other part for the progress and putting”); a good agent stops talking.
measured did_yield true, time to yield 1.25s, talk-over 0.58s
field note D takes the floor with a long explanation while C is mid-utterance; C stops within 1.1 s.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-take-0149.example.wav --onset 3.0 --expect yieldfixture JSON
{
"id": "ami-en2002b-take-0149",
"title": "Real floor-take: caller interrupts and takes the turn (EN2002b)",
"category": "should_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"interruption",
"barge-in"
],
"audio": "ami-en2002b-take-0149.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.85,
"max_talk_over_sec": 1.85
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
9.0
]
],
"agent_segments_sec": [
[
0.0,
4.1
],
[
8.3,
9.0
]
]
},
"transcript": {
"caller": "Yeah Well just sorta well the thing is yeah we're gonna be touching on all that during the other part for the progress and putting",
"agent": "uh if we need the outline of the prototype I mean what what are we gonna put into that Yeah because I mean"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
146.11,
155.11
],
"caller": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"agent": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"annotation_files": [
"words/EN2002b.D.words.xml",
"words/EN2002b.C.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "D takes the floor with a long explanation while C is mid-utterance; C stops within 1.1 s."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-take-0772floor-take / barge-in (a real human interruption)
Labeled yield: the caller takes the floor (“Um there is but I w I haven't made a lot of changes to it so I might just um delete what”); a good agent stops talking.
measured did_yield true, time to yield 0.72s, talk-over 0.65s
field note D breaks in ('Um there is but I haven't made a lot of changes...') while C is talking; C stops in 0.6 s.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-take-0772.example.wav --onset 3.0 --expect yieldfixture JSON
{
"id": "ami-en2002b-take-0772",
"title": "Real floor-take: caller interrupts and takes the turn (EN2002b)",
"category": "should_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"interruption",
"barge-in"
],
"audio": "ami-en2002b-take-0772.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.35,
"max_talk_over_sec": 1.35
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
9.0
]
],
"agent_segments_sec": [
[
0.0,
3.6
]
]
},
"transcript": {
"caller": "Um there is but I w I haven't made a lot of changes to it so I might just um delete what",
"agent": "um did you have you made uh another M_ browser Is there something that I should"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
769.04,
778.04
],
"caller": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"agent": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"annotation_files": [
"words/EN2002b.D.words.xml",
"words/EN2002b.C.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "D breaks in ('Um there is but I haven't made a lot of changes...') while C is talking; C stops in 0.6 s."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-take-0913floor-take / barge-in (a real human interruption)
Labeled yield: the caller takes the floor (“Well it's no but the thing is if you're looking if you could check them both um you wanna see all the results”); a good agent stops talking.
measured did_yield true, time to yield 0.58s, talk-over 0.57s
field note D pushes back while C is talking; C stops in about half a second.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-take-0913.example.wav --onset 3.0 --expect yieldfixture JSON
{
"id": "ami-en2002b-take-0913",
"title": "Real floor-take: caller interrupts and takes the turn (EN2002b)",
"category": "should_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"interruption",
"barge-in"
],
"audio": "ami-en2002b-take-0913.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.26,
"max_talk_over_sec": 1.26
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
7.8
]
],
"agent_segments_sec": [
[
0.0,
3.51
],
[
6.5,
9.0
]
]
},
"transcript": {
"caller": "Well it's no but the thing is if you're looking if you could check them both um you wanna see all the results",
"agent": "result the topic one topic result with one summary result would you Actually mm yeah Especially if you get"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
910.03,
919.03
],
"caller": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"agent": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"annotation_files": [
"words/EN2002b.D.words.xml",
"words/EN2002b.C.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "D pushes back while C is talking; C stops in about half a second."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-take-0930floor-take / barge-in (a real human interruption)
Labeled yield: the caller takes the floor (“Yeah I mean we could we could order them by meeting for example”); a good agent stops talking.
measured did_yield true, time to yield 0.00s, talk-over 0.00s
field note C comes in with a counter-proposal while D is talking; D trails off within 2.3 s per the alignments. The trailing words are quiet: the energy VAD reads the agent as done at the onset itself, earlier than the word alignment suggests.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-take-0930.example.wav --onset 3.0 --expect yieldfixture JSON
{
"id": "ami-en2002b-take-0930",
"title": "Real floor-take: caller interrupts and takes the turn (EN2002b)",
"category": "should_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"interruption",
"barge-in"
],
"audio": "ami-en2002b-take-0930.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 3.0,
"max_talk_over_sec": 3.0
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
7.12
]
],
"agent_segments_sec": [
[
0.0,
5.27
],
[
7.12,
9.0
]
]
},
"transcript": {
"caller": "Yeah I mean we could we could order them by meeting for example",
"agent": "Um or we could just put them all into one result pane on that same window and just indicate Yeah Yeah Oh yeah I guess that"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
927.8,
936.8
],
"caller": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"annotation_files": [
"words/EN2002b.C.words.xml",
"words/EN2002b.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "C comes in with a counter-proposal while D is talking; D trails off within 2.3 s per the alignments. The trailing words are quiet: the energy VAD reads the agent as done at the onset itself, earlier than the word alignment suggests."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-take-1069floor-take / barge-in (a real human interruption)
Labeled yield: the caller takes the floor (“Um yeah I mean um at the moment it works it works with highlighting in in the transcript window doesn't”); a good agent stops talking.
measured did_yield true, time to yield 0.42s, talk-over 0.35s
field note C takes the turn while D is mid-utterance; D stops within 1.1 s.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-take-1069.example.wav --onset 3.0 --expect yieldfixture JSON
{
"id": "ami-en2002b-take-1069",
"title": "Real floor-take: caller interrupts and takes the turn (EN2002b)",
"category": "should_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"interruption",
"barge-in"
],
"audio": "ami-en2002b-take-1069.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": true,
"max_time_to_yield_sec": 1.8,
"max_talk_over_sec": 1.8
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
9.0
]
],
"agent_segments_sec": [
[
0.0,
4.05
]
]
},
"transcript": {
"caller": "Um yeah I mean um at the moment it works it works with highlighting in in the transcript window doesn't",
"agent": "know Or delegates or whatever the all that stuff So Anyways"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
1066.55,
1075.55
],
"caller": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"annotation_files": [
"words/EN2002b.C.words.xml",
"words/EN2002b.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "C takes the turn while D is mid-utterance; D stops within 1.1 s."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-es2002a-bc-0526backchannel / false-trigger (a real human “mm-hmm”)
Labeled hold: the caller only backchannels (“Okay Mm-hmm Alright”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.45s
field note D drops one 'Okay' inside B's turn; B keeps the floor per the transcript.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-es2002a-bc-0526.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-es2002a-bc-0526",
"title": "Real backchannel: 'Okay' while the floor holder talks (ES2002a)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-es2002a-bc-0526.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.26
],
[
5.11,
5.35
],
[
7.79,
8.02
]
],
"agent_segments_sec": [
[
0.42,
6.41
],
[
8.04,
9.0
]
]
},
"transcript": {
"caller": "Okay Mm-hmm Alright",
"agent": "the um the retailer to uh sell it for whatever price they want Um But I I don't know I mean"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "ES2002a",
"window_global_sec": [
523.79,
532.79
],
"caller": {
"nxt_agent": "D",
"global_name": "MEE008",
"headset_wav": "ES2002a.Headset-3.wav"
},
"agent": {
"nxt_agent": "B",
"global_name": "FEE005",
"headset_wav": "ES2002a.Headset-1.wav"
},
"annotation_files": [
"words/ES2002a.D.words.xml",
"words/ES2002a.B.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "D drops one 'Okay' inside B's turn; B keeps the floor per the transcript.",
"notes": "The human floor holder pauses briefly right around the backchannel; the energy VAD counts a pause of 0.25 s or more with the caller nearby as a yield, so this clip measures did_yield=true even though the transcript shows the floor holder kept the turn. Real behavior, honestly labeled."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-es2002a-bc-0687backchannel / false-trigger (a real human acknowledgement)
Labeled hold: the caller only backchannels (“Mm-hmm Yep Yeah I'd say so yeah”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.33s
field note D acknowledges mid-turn; B keeps talking per the transcript.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-es2002a-bc-0687.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-es2002a-bc-0687",
"title": "Real backchannel: 'Mm-hmm' while the floor holder talks (ES2002a)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-es2002a-bc-0687.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.39
],
[
5.05,
5.26
],
[
6.44,
7.25
]
],
"agent_segments_sec": [
[
0.18,
6.86
],
[
7.7,
9.0
]
]
},
"transcript": {
"caller": "Mm-hmm Yep Yeah I'd say so yeah",
"agent": "that's about like eighteen pounds or something isn't it Or no is it as much as that Sixteen seventeen eighteen pounds Um"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "ES2002a",
"window_global_sec": [
684.72,
693.72
],
"caller": {
"nxt_agent": "D",
"global_name": "MEE008",
"headset_wav": "ES2002a.Headset-3.wav"
},
"agent": {
"nxt_agent": "B",
"global_name": "FEE005",
"headset_wav": "ES2002a.Headset-1.wav"
},
"annotation_files": [
"words/ES2002a.D.words.xml",
"words/ES2002a.B.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "D acknowledges mid-turn; B keeps talking per the transcript.",
"notes": "The human floor holder pauses briefly right around the backchannel; the energy VAD counts a pause of 0.25 s or more with the caller nearby as a yield, so this clip measures did_yield=true even though the transcript shows the floor holder kept the turn. Real behavior, honestly labeled."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-es2002a-bc-1049backchannel / false-trigger (a real human acknowledgement)
Labeled hold: the caller only backchannels (“Mm-hmm”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.26s
field note B acknowledges while D talks; D keeps the floor per the transcript.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-es2002a-bc-1049.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-es2002a-bc-1049",
"title": "Real backchannel: 'Mm-hmm' while the floor holder talks (ES2002a)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-es2002a-bc-1049.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.5
]
],
"agent_segments_sec": [
[
0.63,
9.0
]
]
},
"transcript": {
"caller": "Mm-hmm",
"agent": "Before we wrap up just to make sure we're all on the same page here um do we We were given sort of an example of a coffee"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "ES2002a",
"window_global_sec": [
1046.54,
1055.54
],
"caller": {
"nxt_agent": "B",
"global_name": "FEE005",
"headset_wav": "ES2002a.Headset-1.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE008",
"headset_wav": "ES2002a.Headset-3.wav"
},
"annotation_files": [
"words/ES2002a.B.words.xml",
"words/ES2002a.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "B acknowledges while D talks; D keeps the floor per the transcript.",
"notes": "The human floor holder pauses briefly right around the backchannel; the energy VAD counts a pause of 0.25 s or more with the caller nearby as a yield, so this clip measures did_yield=true even though the transcript shows the floor holder kept the turn. Real behavior, honestly labeled."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-bc-0859backchannel / false-trigger (“Mm-hmm, yeah”)
Labeled hold: the caller only backchannels (“Mm-hmm Yeah”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.37s
field note C acknowledges while D explains; D talks through it per the transcript.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-bc-0859.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-en2002b-bc-0859",
"title": "Real backchannel: 'Mm-hmm' while the floor holder talks (EN2002b)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-en2002b-bc-0859.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.36
],
[
7.83,
8.21
]
],
"agent_segments_sec": [
[
0.0,
9.0
]
]
},
"transcript": {
"caller": "Mm-hmm Yeah",
"agent": "window um so it'll be on the search window bottom half of the search window Um I don't know if we still wanna keep it that way but that's uh that's what I was gonna be working So so it's just like"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
856.8,
865.8
],
"caller": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"annotation_files": [
"words/EN2002b.C.words.xml",
"words/EN2002b.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "C acknowledges while D explains; D talks through it per the transcript.",
"notes": "The human floor holder pauses briefly right around the backchannel; the energy VAD counts a pause of 0.25 s or more with the caller nearby as a yield, so this clip measures did_yield=true even though the transcript shows the floor holder kept the turn. Real behavior, honestly labeled."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-bc-1049backchannel / false-trigger (a real human acknowledgement)
Labeled hold: the caller only backchannels (“Oh mm-hmm Yeah yeah I can imagine”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.47s
field note C acknowledges mid-turn; D keeps the floor for many more seconds per the transcript.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-bc-1049.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-en2002b-bc-1049",
"title": "Real backchannel: 'Oh mm-hmm' while the floor holder talks (EN2002b)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-en2002b-bc-1049.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.95
],
[
6.45,
7.61
]
],
"agent_segments_sec": [
[
0.0,
9.0
]
]
},
"transcript": {
"caller": "Oh mm-hmm Yeah yeah I can imagine",
"agent": "to the actual highlight the transcript or highlight the topic or highlight the summary At that point that's sorta where it starts getting a little bit tricky 'cause you're working with an event handler within the one"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
1046.91,
1055.91
],
"caller": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"annotation_files": [
"words/EN2002b.C.words.xml",
"words/EN2002b.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "C acknowledges mid-turn; D keeps the floor for many more seconds per the transcript.",
"notes": "The human floor holder pauses briefly right around the backchannel; the energy VAD counts a pause of 0.25 s or more with the caller nearby as a yield, so this clip measures did_yield=true even though the transcript shows the floor holder kept the turn. Real behavior, honestly labeled."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-bc-1114backchannel / false-trigger (a real human acknowledgement)
Labeled hold: the caller only backchannels (“Okay”); a good agent keeps the floor.
measured did_yield false (labeled hold), talk-over 0.63s
field note D drops one 'Okay' inside C's turn; C keeps talking. The energy reference also measures no yield here.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-bc-1114.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-en2002b-bc-1114",
"title": "Real backchannel: 'Okay' while the floor holder talks (EN2002b)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-en2002b-bc-1114.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.54
]
],
"agent_segments_sec": [
[
0.0,
5.24
],
[
7.65,
9.0
]
]
},
"transcript": {
"caller": "Okay",
"agent": "is a special sort of pane made by NITE So I am not sure what it's called now Um Um some"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
1111.86,
1120.86
],
"caller": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"agent": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"annotation_files": [
"words/EN2002b.D.words.xml",
"words/EN2002b.C.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "D drops one 'Okay' inside C's turn; C keeps talking. The energy reference also measures no yield here."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioami-en2002b-bc-1416backchannel / false-trigger (a real human acknowledgement)
Labeled hold: the caller only backchannels (“Oh right”); a good agent keeps the floor.
measured did_yield true (labeled hold), talk-over 0.13s
field note C reacts with a short 'Oh right' while D explains; D keeps the floor for a long stretch per the transcript.
what this does not prove Meeting-room headset audio under CC BY 4.0, not a phone call; the labels are AMI's own word alignments. Headset bleed can trip onset auto-detection early, so the labeled onset is the authoritative one.
Contains audio from the AMI Meeting Corpus, CC BY 4.0. Adapted: cut to a short window, two headset channels paired as caller/agent, 16 kHz PCM.
hotato run --stereo corpus/real/audio/ami-en2002b-bc-1416.example.wav --onset 3.0 --expect holdfixture JSON
{
"id": "ami-en2002b-bc-1416",
"title": "Real backchannel: 'Oh right' while the floor holder talks (EN2002b)",
"category": "should_not_yield",
"source_type": "real",
"tags": [
"real-audio",
"ami",
"meeting",
"backchannel",
"false-trigger"
],
"audio": "ami-en2002b-bc-1416.example.wav",
"channels": {
"caller_channel": 0,
"agent_channel": 1
},
"sample_rate": 16000,
"duration_sec": 9.0,
"caller_onset_sec": 3.0,
"expected": {
"yield": false,
"max_time_to_yield_sec": null,
"max_talk_over_sec": null
},
"reference_render": {
"caller_segments_sec": [
[
3.0,
3.54
]
],
"agent_segments_sec": [
[
0.0,
9.0
]
]
},
"transcript": {
"caller": "Oh right",
"agent": "transforms um like um style sheet the um X_M_L_ style sheet And then it's kinda like there's usually things built in to well should be built into Java I mean to process"
},
"related_signals": [
"did_yield"
],
"license": "CC-BY-4.0",
"attribution": {
"dataset": "AMI Meeting Corpus",
"dataset_url": "https://groups.inf.ed.ac.uk/ami/corpus/",
"license": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"notice": "Contains audio from the AMI Meeting Corpus (https://groups.inf.ed.ac.uk/ami/corpus/), licensed under CC BY 4.0. Changes: cut to a 9 second window, two headset channels paired as caller/agent, 16 kHz 16-bit PCM."
},
"provenance": {
"meeting": "EN2002b",
"window_global_sec": [
1413.84,
1422.84
],
"caller": {
"nxt_agent": "C",
"global_name": "FEO072",
"headset_wav": "EN2002b.Headset-2.wav"
},
"agent": {
"nxt_agent": "D",
"global_name": "MEE073",
"headset_wav": "EN2002b.Headset-3.wav"
},
"annotation_files": [
"words/EN2002b.C.words.xml",
"words/EN2002b.D.words.xml"
],
"label_provenance": "caller_onset_sec, segments, and the category come from the AMI manual word alignments; the category states what the human floor holder actually did in the recording.",
"description": "C reacts with a short 'Oh right' while D explains; D keeps the floor for a long stretch per the transcript.",
"notes": "The human floor holder pauses briefly right around the backchannel; the energy VAD counts a pause of 0.25 s or more with the caller nearby as a yield, so this clip measures did_yield=true even though the transcript shows the floor holder kept the turn. Real behavior, honestly labeled."
},
"attestation": {
"contributor": "build_real.py (AMI Meeting Corpus extraction)",
"consent_on_file": true,
"consent_note": "AMI participants consented to recording and public release; the corpus is published under CC BY 4.0 by its creators.",
"pii_removed": true,
"pii_note": "Speakers are identified only by AMI's anonymised codes (e.g. FEE005). Audio content is the corpus's published, publicly released speech.",
"no_phi": true,
"right_to_release_mit": false,
"release_note": "These clips remain CC BY 4.0 (they are adapted AMI material); they are NOT relicensed MIT and are not part of the MIT contribution corpus. See LICENSES.md."
}
}
source on GitHub · audioSynthetic suites and classes
The runnable floor: deterministic shaped noise rendered from each label's own timings, seeded so two renders are byte-identical. No human audio, so nothing to consent for. These prove the scorer does what the spec says and catch regressions; the defect suites are built to fail, which is what gives the passing ones meaning.
sample-contribution-synthetic-interruptsynthetic schema/validator example (hard mid-sentence interruption)
Labeled yield: the caller takes the floor (“wait, I need to change the shipping address first”); a good agent stops talking.
measured did_yield true, time to yield 0.50s, talk-over 0.50s
field note Deterministic synthetic render reused from the bundled 01-hard-interruption fixture, included ONLY to exercise the corpus schema and validator. It is a floor, not a real call, and is labelled synthetic so it can never be mistaken for one.
what this does not prove The audio is deterministic shaped noise rendered from the label's own timings, not real speech. It proves the scorer's plumbing and guards against regressions; it is not evidence about a real call.
hotato run --stereo corpus/examples/sample-contribution.example.wav --onset 2.4 --expect yieldfixture JSON
{
"id": "sample-contribution-synthetic-interrupt",
"title": "SCHEMA EXAMPLE (synthetic audio): hard mid-sentence interruption",
"category": "should_yield",
"source_type": "synthetic",
"tags": ["example", "schema", "interruption", "synthetic"],
"audio": "sample-contribution.example.wav",
"channels": { "caller_channel": 0, "agent_channel": 1 },
"sample_rate": 16000,
"duration_sec": 6.0,
"caller_onset_sec": 2.40,
"expected": {
"yield": true,
"max_time_to_yield_sec": 0.70,
"max_talk_over_sec": 0.80
},
"reference_render": {
"caller_segments_sec": [[2.40, 4.70]],
"agent_segments_sec": [[0.20, 2.75]]
},
"transcript": {
"agent": "Great, so your order will ship on Thursday and arrive within three to five business...",
"caller": "wait, I need to change the shipping address first"
},
"related_signals": ["did_yield", "time_to_yield", "talk_over"],
"license": "MIT",
"provenance": {
"recorded_date": "n/a-synthetic",
"description": "Deterministic synthetic render reused from the bundled 01-hard-interruption fixture, included ONLY to exercise the corpus schema and validator. It is a floor, not a real call, and is labelled synthetic so it can never be mistaken for one.",
"notes": "A real contribution would set source_type to real-call or role-played, fill in the consent block, and attest the PII policy."
},
"pii": {
"removed": true,
"method": "role-played-no-pii",
"phi_free": true
},
"attestation": {
"contributor": "hotato maintainers (schema example)",
"consent_on_file": true,
"pii_removed": true,
"no_phi": true,
"right_to_release_mit": true
}
}
source on GitHub · audiocorpus/classesfour standalone turn-taking classes, 13 scenarios, mixed yield / hold / latency
backchannel-multilingual, backchannel tokens across languages (5)mid-utterance-pause, a thinking pause the agent must not treat as a floor-yield (3)noise-hold, hold the floor through cafe / TV background noise (3)telephony-degraded, 8 kHz codec-degraded interrupt and missed-yield (2)
measured 13 scenarios across four families, 10 pass / 3 fail.
what this does not prove The audio is deterministic shaped noise rendered from the label's own timings, not real speech. It proves the scorer's plumbing and guards against regressions; it is not evidence about a real call.
Synthetic renders are not embedded; regenerate with corpus/classes/build_classes.py --check.
hotato run --suite barge-in --scenarios corpus/classes/noise-hold/scenarios --audio corpus/classes/noise-hold/audiocorpus/suites/goldgold suite: hard conditions, noise floors, 8 kHz telephony, gain extremes, echo, edge timings, endurance
Every reference render is a labeled pass; a mix of hard-interrupt, backchannel, double-talk, echo-hold, latency and multiturn scenarios.
measured 40 scenarios, 40 pass / 0 fail; the run exits 0 (all reference renders pass).
what this does not prove The audio is deterministic shaped noise rendered from the label's own timings, not real speech. It proves the scorer's plumbing and guards against regressions; it is not evidence about a real call.
Synthetic renders are not embedded; every WAV is regenerated byte-identically by corpus/suites/build_suites.py.
hotato run --suite barge-in --scenarios corpus/suites/gold/scenarios --audio corpus/suites/gold/audiocorpus/suites/gold-defectsgold-defects: the same hard conditions with deliberately bad agent renders
Every scenario is built to fail on its labeled axis: missed yields, false barges, stubborn double-talk. The negative control.
measured 16 scenarios, 2 pass / 14 fail; the run exits 1 by design (defect suite: every scenario fails on its labeled axis).
what this does not prove The audio is deterministic shaped noise rendered from the label's own timings, not real speech. It proves the scorer's plumbing and guards against regressions; it is not evidence about a real call.
Synthetic renders are not embedded; every WAV is regenerated byte-identically by corpus/suites/build_suites.py.
hotato run --suite barge-in --scenarios corpus/suites/gold-defects/scenarios --audio corpus/suites/gold-defects/audiowhere it lives
corpus/suites/gold-defects/scenarios · corpus/suites/gold-defects/audio
scenarios on GitHubcorpus/suites/silversilver suite: clean conditions at 16 kHz, parametric sweeps over onset, duration, speed, gap, repeat
Every reference render is a labeled pass across the clean-condition sweeps.
measured 40 scenarios, 40 pass / 0 fail; the run exits 0 (all reference renders pass).
what this does not prove The audio is deterministic shaped noise rendered from the label's own timings, not real speech. It proves the scorer's plumbing and guards against regressions; it is not evidence about a real call.
Synthetic renders are not embedded; every WAV is regenerated byte-identically by corpus/suites/build_suites.py.
hotato run --suite barge-in --scenarios corpus/suites/silver/scenarios --audio corpus/suites/silver/audiocorpus/suites/silver-defectssilver-defects: clean conditions with injected missed / over-eager / sluggish failures
Every scenario fails on its labeled axis. The clean-condition negative control.
measured 16 scenarios, 4 pass / 12 fail; the run exits 1 by design (defect suite: every scenario fails on its labeled axis).
what this does not prove The audio is deterministic shaped noise rendered from the label's own timings, not real speech. It proves the scorer's plumbing and guards against regressions; it is not evidence about a real call.
Synthetic renders are not embedded; every WAV is regenerated byte-identically by corpus/suites/build_suites.py.
hotato run --suite barge-in --scenarios corpus/suites/silver-defects/scenarios --audio corpus/suites/silver-defects/audiowhere it lives
corpus/suites/silver-defects/scenarios · corpus/suites/silver-defects/audio
scenarios on GitHubThe contribution standard
The rules a new clip must meet, drawn from docs/CORPUS-GOVERNANCE.md, the normative document. In one breath: every audible party consents in writing, every identifier is stripped, no PHI ever, and a clip enters only if it can be released under an open license.
- Consent, affirmative and documented. Every party audible on the recording agrees in writing to storage, redistribution, and publication of the clip and its derived timing labels. A generic "this call may be recorded" notice does not clear redistribution. Removal requests are honored in the next release.
- Separated tracks. Record dual channel, caller and agent physically separated at capture, the two legs of a SIP bridge or two streams that never mix. Overlap is only ground-truthable when the channels are real, so two channels every time.
- Rationale, not a guess. Set
source_typeaccurately, give the caller onset and the yield or hold bounds, and supply a reference render only where you have ground truth to defend by hand. The label states what a good agent should do at that moment and where that judgment came from. - License. A clip is redistributed under the project's MIT license, so it enters only if it can be released that way. Material from another corpus keeps its own license and attribution, as the AMI clips above stay CC BY 4.0.
- No PII, no PHI. Names, numbers, addresses, and account identifiers are stripped or replaced with same-duration tone so the timing stays aligned. Any recording containing protected health information is out of scope regardless of consent.
Validate a contribution before opening a pull request. The validator checks structure, category and expectation consistency, timings in range, the attestation booleans, and that the audio is a readable two-channel WAV. A pass means the pair conforms; a human still reviews consent and PII before anything merges.
python3 corpus/validate.py your-label.json your-audio.wav # must PASS before a PR
The full walkthrough, from recording through the issue form to maintainer intake, is docs/CORPUS-GOVERNANCE.md and docs/SUBMITTING.md.