Home/Docs/Corpus

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.

The consent gate

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.

37fixtures cleared for release
31real-audio clips, embedded to play
2licenses: MIT and CC BY 4.0
0clips shown without explicit release
caller channel agent channel onset / talk-over measured yield

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.

FAILMITfd-01-missed-interruption

missed interruption: a quiet, half-volume interrupt slips under the default threshold and is ignored

0s1s2s3s4s5s6s7s8sonsetCallerAgent

Labeled yield: the caller takes the floor (“sorry, one second (half volume)”); a good agent stops talking.

nodid yield
n/atime to yield
0.25stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo src/hotato/data/demo/failing/audio/fd-01-missed-interruption.example.wav --onset 2.0 --expect yield
fixture 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 · audio
FAILMITfd-02-backchannel-yielded

backchannel false-trigger: a soft acknowledgement halts the agent for good

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“soft spaced backchannels (mhm / right / okay), later backchannel”); a good agent keeps the floor.

noheld the floor
0.32stalk-over
n/aresponse gap

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo src/hotato/data/demo/failing/audio/fd-02-backchannel-yielded.example.wav --onset 2.0 --expect hold
fixture 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 · audio
PASSMITvapi-default-01-hard-interruption

hard interruption (a loud cut-in)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“loud cut-in mid-paragraph during the hours answer”); a good agent stops talking.

yesdid yield
0.35stime to yield
0.35stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-01-hard-interruption.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-02-one-word-stop

under-yield to a short hard stop (“Stop.”)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“Stop.”); a good agent stops talking.

yesdid yield
1.46stime to yield
0.45stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-02-one-word-stop.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-03-backchannel-mhm

backchannel false-trigger (a soft “mhm”)

0s1s2s3s4s5s6s7s8sonsetCallerAgent

Labeled hold: the caller only backchannels (“mhm”); a good agent keeps the floor.

yesheld the floor
0.35stalk-over
0.65sresponse gap

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-03-backchannel-mhm.example.wav --onset 2.0 --expect hold
fixture 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 · audio
FAILMITvapi-default-04-backchannel-restart

backchannel false-trigger (agent restarts on “right”)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“soft spaced backchannels (mhm / right / okay), first backchannel”); a good agent keeps the floor.

noheld the floor
0.32stalk-over
1.02sresponse gap

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-04-backchannel-restart.example.wav --onset 2.0 --expect hold
fixture 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 · audio
FAILMITvapi-default-04-backchannel-halt

backchannel false-trigger (agent halts and goes silent)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“soft spaced backchannels (mhm / right / okay), later backchannel”); a good agent keeps the floor.

noheld the floor
0.32stalk-over
n/aresponse gap

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-04-backchannel-halt.example.wav --onset 2.0 --expect hold
fixture 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 · audio
FAILMITvapi-default-05-backchannel-yeah

backchannel false-trigger (a soft “yeah”)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“yeah (soft)”); a good agent keeps the floor.

noheld the floor
0.37stalk-over
1.65sresponse gap

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-05-backchannel-yeah.example.wav --onset 2.0 --expect hold
fixture 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 · audio
PASSMITvapi-default-05-hold-on

multi-word interruption (“wait, actually, hold on”)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“wait, actually, hold on”); a good agent stops talking.

yesdid yield
0.36stime to yield
0.33stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-05-hold-on.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-06-double-talk

double-talk (sustained overlap)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“sustained overlapping sentence about the mother's medication”); a good agent stops talking.

yesdid yield
0.40stime to yield
0.40stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-06-double-talk.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-07-correction

mid-answer correction, talked over, delayed resume

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“correction: liquid pediatric suspension, not tablets”); a good agent stops talking.

yesdid yield
1.16stime to yield
1.16stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-07-correction.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-08-rapid-1

rapid-turns barge-in (1 of 3)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“interrupt 1: where are you located”); a good agent stops talking.

yesdid yield
0.34stime to yield
0.34stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-08-rapid-1.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-08-rapid-2

rapid-turns barge-in (2 of 3)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“interrupt 2: and the nearest downtown”); a good agent stops talking.

yesdid yield
0.33stime to yield
0.33stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-08-rapid-2.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-08-rapid-3

rapid-turns barge-in (3 of 3)

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“interrupt 3: and what about parking”); a good agent stops talking.

yesdid yield
0.00stime to yield
0.00stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-08-rapid-3.example.wav --onset 2.0 --expect yield
fixture 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 · audio
FAILMITvapi-default-10-quiet-interrupt

quiet interruption, missed below the default threshold

0s1s2s3s4s5s6s7s8sonsetCallerAgent

Labeled yield: the caller takes the floor (“sorry, one second (half volume)”); a good agent stops talking.

nodid yield
n/atime to yield
0.25stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-10-quiet-interrupt.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-10-quiet-retry

quiet-interruption retry, louder, yielded

0s1s2s3s4s5s6s7sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“sorry, one second (about 30 to 40 percent louder)”); a good agent stops talking.

yesdid yield
0.60stime to yield
0.59stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-10-quiet-retry.example.wav --onset 2.0 --expect yield
fixture 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 · audio
PASSMITvapi-default-12-greeting-overlap

immediate overlap, barge-in over the greeting

0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“barge-in over the agent's greeting”); a good agent stops talking.

yesdid yield
0.37stime to yield
0.37stalk-over

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.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-12-greeting-overlap.example.wav --onset 2.0 --expect yield
fixture 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 · audio
ANALYSISMITvapi-default-09-pause-jump-in

mid-utterance-pause jump-in: a latency / analysis clip, not a yield or hold verdict

0s1s2s3s4s5s6s7s8s9s10sCallerAgent

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.

3.44sresponse gap

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.

10s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/vapi-defaults/audio/vapi-default-09-pause-jump-in.example.wav
where it livesvapi-defaults on GitHub

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

Attribution

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.

PASSCC-BY-4.0ami-es2002a-take-0677

floor-take / barge-in (a real human interruption)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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.

yesdid yield
0.61stime to yield
0.58stalk-over

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-es2002a-take-0677.example.wav --onset 3.0 --expect yield
fixture 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 · audio
PASSCC-BY-4.0ami-en2002b-take-0149

floor-take / barge-in (a real human interruption)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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.

yesdid yield
1.25stime to yield
0.58stalk-over

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-take-0149.example.wav --onset 3.0 --expect yield
fixture 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 · audio
PASSCC-BY-4.0ami-en2002b-take-0772

floor-take / barge-in (a real human interruption)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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.

yesdid yield
0.72stime to yield
0.65stalk-over

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-take-0772.example.wav --onset 3.0 --expect yield
fixture 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 · audio
PASSCC-BY-4.0ami-en2002b-take-0913

floor-take / barge-in (a real human interruption)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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.

yesdid yield
0.58stime to yield
0.57stalk-over

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-take-0913.example.wav --onset 3.0 --expect yield
fixture 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 · audio
PASSCC-BY-4.0ami-en2002b-take-0930

floor-take / barge-in (a real human interruption)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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.

yesdid yield
0.00stime to yield
0.00stalk-over

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-take-0930.example.wav --onset 3.0 --expect yield
fixture 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 · audio
PASSCC-BY-4.0ami-en2002b-take-1069

floor-take / barge-in (a real human interruption)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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.

yesdid yield
0.42stime to yield
0.35stalk-over

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-take-1069.example.wav --onset 3.0 --expect yield
fixture 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 · audio
FAILCC-BY-4.0ami-es2002a-bc-0526

backchannel / false-trigger (a real human “mm-hmm”)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“Okay Mm-hmm Alright”); a good agent keeps the floor.

noheld the floor
0.45stalk-over
2.06sresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-es2002a-bc-0526.example.wav --onset 3.0 --expect hold
fixture 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 · audio
FAILCC-BY-4.0ami-es2002a-bc-0687

backchannel / false-trigger (a real human acknowledgement)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“Mm-hmm Yep Yeah I'd say so yeah”); a good agent keeps the floor.

noheld the floor
0.33stalk-over
n/aresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-es2002a-bc-0687.example.wav --onset 3.0 --expect hold
fixture 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 · audio
FAILCC-BY-4.0ami-es2002a-bc-1049

backchannel / false-trigger (a real human acknowledgement)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“Mm-hmm”); a good agent keeps the floor.

noheld the floor
0.26stalk-over
n/aresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-es2002a-bc-1049.example.wav --onset 3.0 --expect hold
fixture 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 · audio
FAILCC-BY-4.0ami-en2002b-bc-0859

backchannel / false-trigger (“Mm-hmm, yeah”)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“Mm-hmm Yeah”); a good agent keeps the floor.

noheld the floor
0.37stalk-over
0.16sresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-bc-0859.example.wav --onset 3.0 --expect hold
fixture 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 · audio
FAILCC-BY-4.0ami-en2002b-bc-1049

backchannel / false-trigger (a real human acknowledgement)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“Oh mm-hmm Yeah yeah I can imagine”); a good agent keeps the floor.

noheld the floor
0.47stalk-over
n/aresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-bc-1049.example.wav --onset 3.0 --expect hold
fixture 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 · audio
PASSCC-BY-4.0ami-en2002b-bc-1114

backchannel / false-trigger (a real human acknowledgement)

0s1s2s3s4s5s6s7s8s9sonsetCallerAgent

Labeled hold: the caller only backchannels (“Okay”); a good agent keeps the floor.

yesheld the floor
0.63stalk-over
n/aresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-bc-1114.example.wav --onset 3.0 --expect hold
fixture 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 · audio
FAILCC-BY-4.0ami-en2002b-bc-1416

backchannel / false-trigger (a real human acknowledgement)

0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

Labeled hold: the caller only backchannels (“Oh right”); a good agent keeps the floor.

noheld the floor
0.13stalk-over
n/aresponse gap

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.

9s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/real/audio/ami-en2002b-bc-1416.example.wav --onset 3.0 --expect hold
fixture 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 · audio

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

PASSMITsample-contribution-synthetic-interrupt

synthetic schema/validator example (hard mid-sentence interruption)

0s1s2s3s4s5s6sonsetyieldCallerAgent

Labeled yield: the caller takes the floor (“wait, I need to change the shipping address first”); a good agent stops talking.

yesdid yield
0.50stime to yield
0.50stalk-over

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.

6s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/examples/sample-contribution.example.wav --onset 2.4 --expect yield
fixture 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 · audio
SYNTHETICMITcorpus/classes

four 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)
13scenarios scored
10reference verdict PASS
3FAIL (labeled defects)

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/audio
where it livesclasses on GitHub
SYNTHETICMITcorpus/suites/gold

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

40scenarios scored
40reference verdict PASS
0FAIL (by design in defect suites)

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/audio
where it livesscenarios on GitHub
SYNTHETICMITcorpus/suites/gold-defects

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

16scenarios scored
2reference verdict PASS
14FAIL (by design in defect suites)

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/audio
where it livesscenarios on GitHub
SYNTHETICMITcorpus/suites/silver

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

40scenarios scored
40reference verdict PASS
0FAIL (by design in defect suites)

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/audio
where it livesscenarios on GitHub
SYNTHETICMITcorpus/suites/silver-defects

silver-defects: clean conditions with injected missed / over-eager / sluggish failures

Every scenario fails on its labeled axis. The clean-condition negative control.

16scenarios scored
4reference verdict PASS
12FAIL (by design in defect suites)

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/audio
where it livesscenarios on GitHub

The 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_type accurately, 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.

bash
python3 corpus/validate.py your-label.json your-audio.wav  # must PASS before a PR
Contribute a call

The full walkthrough, from recording through the issue form to maintainer intake, is docs/CORPUS-GOVERNANCE.md and docs/SUBMITTING.md.