Home/Docs/Corpus
Level 2 · human-labeled

The corpus, every clip labeled and licensed

A fixture earns a place here only when it carries explicit permission to publish, MIT self-consent or CC BY 4.0, nothing else. These are the recordings behind every talk-over and missed-yield number cited on this site.

Every card below is a human-confirmed label, not a raw candidate: someone listened and set the expected behavior before the recording became a fixture. That is what Level 2 means.

Generated from Hotato 1.0.0 · artifact captured 2026-07-09 · source revision 33985d1 (v0.8.0 tag) · reproduce: run hotato over the corpus/probe-defaults clips, the command sits on each card

17 pass, the agent yielded when it should 12 fail, the agent talked over or missed the yield 1 latency-only, no yield verdict applies
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 qualify; consent is documented before a recording is used, not fitted to it afterward.

35labeled fixtures, each with its own consent basis
29real-audio clips, embedded to play
1synthetic schema example, also embedded
2licenses: MIT and CC BY 4.0
0clips shown without documented release consent
caller channel agent channel onset / talk-over measured yield

Every number is a hotato run, shown with the command that produced it: no accuracy percentage, just reproducible timings. Waveforms are drawn from the audio, both channels normalized. Rows are collapsed by default; open one for the waveform, field note, and raw JSON. Jump to the synthetic suites, 125 more scenarios, not embedded here.

Label
Source

Showing all 35 fixtures.

Source 1 of 3 · MIT

Default-configuration probe calls

Scripted calls against a named voice platform's assistant, stock default settings, dual channel, self-consented.

16probe calls
9pass, agent yielded correctly
6fail, talked over or missed the yield
1latency-only, no yield verdict applies
What this section does not prove

One config, one platform, one day. Not a vendor ranking or a tuned product. Energy-VAD timing only, no transcription or intent.

PASSprobe-default-01-hard-interruptionhard interruption (a loud cut-in).talk-over 0.35sMIT
PASSMITprobe-default-01-hard-interruption
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

field note agent yielded to the interruption

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-01-hard-interruption.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-01-hard-interruption",
  "title": "Real call: loud hard interruption mid-paragraph (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "hard-interruption"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
FAILprobe-default-02-one-word-stopunder-yield to a short hard stop (“Stop.”).talk-over 0.45sMIT
FAILMITprobe-default-02-one-word-stop
0s1s2s3s4s5s6s7s8sonsetyieldCallerAgent

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

yesdid yield
1.46stime to yield
0.45stalk-over

field note the did-yield flag reads yes only because it caught the agent's own inter-sentence gap, not a real stop: in substance the agent did NOT yield to the 'Stop.', it kept talking and then restarted its paragraph, and the 1.46s to yield still fails the 1.0s bound either way.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-02-one-word-stop.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-02-one-word-stop",
  "title": "Real call: a single firm 'Stop.' mid-paragraph (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "short-command",
    "missed-interruption"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-03-backchannel-mhmbackchannel false-trigger (a soft “mhm”).talk-over 0.35sMIT
PASSMITprobe-default-03-backchannel-mhm
0s1s2s3s4s5s6s7s8sonsetCallerAgent

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

yesheld the floor
0.35stalk-over
0.65sresponse gap

field note agent finished its sentence, then stopped at 'so we can quickly locate' and never resumed; the call died on the silence timeout. why PASS the stop lands 4.19s after the mhm, outside the 3.0s attribution window, so the scorer does not count it as a yield to the backchannel, even though the agent never spoke again.

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-03-backchannel-mhm.example.wav --onset 2.0 --expect hold
fixture JSON
{
  "id": "probe-default-03-backchannel-mhm",
  "title": "Real call: a single soft 'mhm' backchannel (provider defaults)",
  "category": "should_not_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "backchannel",
    "false-trigger"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
FAILprobe-default-04-backchannel-restartbackchannel false-trigger (agent restarts on “right”).talk-over 0.32sMIT
FAILMITprobe-default-04-backchannel-restart
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

field note agent yielded on a backchannel and restarted its answer from the top (operator note: the word 'right' appears to trigger it)

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-04-backchannel-restart.example.wav --onset 2.0 --expect hold
fixture JSON
{
  "id": "probe-default-04-backchannel-restart",
  "title": "Real call: soft backchannel makes the agent restart its answer (provider defaults)",
  "category": "should_not_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "backchannel",
    "false-trigger"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
FAILprobe-default-04-backchannel-haltbackchannel false-trigger (agent halts and goes silent).talk-over 0.32sMIT
FAILMITprobe-default-04-backchannel-halt
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

field note agent halted at 'This include,' and went silent; operator hung up

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-04-backchannel-halt.example.wav --onset 2.0 --expect hold
fixture JSON
{
  "id": "probe-default-04-backchannel-halt",
  "title": "Real call: soft backchannel halts the agent mid-word for good (provider defaults)",
  "category": "should_not_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "backchannel",
    "false-trigger"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
FAILprobe-default-05-backchannel-yeahbackchannel false-trigger (a soft “yeah”).talk-over 0.37sMIT
FAILMITprobe-default-05-backchannel-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

field note agent WRONGLY yielded and restarted its answer

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-05-backchannel-yeah.example.wav --onset 2.0 --expect hold
fixture JSON
{
  "id": "probe-default-05-backchannel-yeah",
  "title": "Real call: soft 'yeah' backchannel, moment 1 of 2 (provider defaults)",
  "category": "should_not_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "backchannel",
    "false-trigger",
    "dual-moment"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-05-hold-onmulti-word interruption (“wait, actually, hold on”).talk-over 0.33sMIT
PASSMITprobe-default-05-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

field note agent CORRECTLY yielded and acknowledged ('Of course. Take your time...')

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-05-hold-on.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-05-hold-on",
  "title": "Real call: loud 'wait, actually, hold on', moment 2 of 2 (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "dual-moment"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-06-double-talkdouble-talk (sustained overlap).talk-over 0.40sMIT
PASSMITprobe-default-06-double-talk
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

field note agent CORRECTLY yielded, stopped at 'seasonal flu shot' and pivoted

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-06-double-talk.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-06-double-talk",
  "title": "Real call: sustained overlapping full sentence (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "double-talk"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
FAILprobe-default-07-correctionmid-answer correction, talked over, delayed resume.talk-over 1.16sMIT
FAILMITprobe-default-07-correction
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

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

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-07-correction.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-07-correction",
  "title": "Real call: mid-answer correction, then 21 s of dead air (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "correction",
    "dead-air"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-08-rapid-1rapid-turns barge-in (1 of 3).talk-over 0.34sMIT
PASSMITprobe-default-08-rapid-1
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

field note agent yielded (leading words clipped by default endpointing)

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-08-rapid-1.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-08-rapid-1",
  "title": "Real call: rapid interrupt 1 of 3 (where are you located) (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "rapid-turns"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-08-rapid-2rapid-turns barge-in (2 of 3).talk-over 0.33sMIT
PASSMITprobe-default-08-rapid-2
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

field note agent yielded but 'and the nearest' registered as 'In the nearest'; this attempt needed a retry

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-08-rapid-2.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-08-rapid-2",
  "title": "Real call: rapid interrupt 2 of 3 (nearest downtown) (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "rapid-turns"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-08-rapid-3rapid-turns barge-in (3 of 3).talk-over 0.00sMIT
PASSMITprobe-default-08-rapid-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

field note agent yielded; 'and what about parking' registered as just 'parking' after about 3 attempts

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-08-rapid-3.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-08-rapid-3",
  "title": "Real call: rapid interrupt 3 of 3 (what about parking) (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "rapid-turns"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
FAILprobe-default-10-quiet-interruptquiet interruption, missed below the default threshold.talk-over 0.25sMIT
FAILMITprobe-default-10-quiet-interrupt
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

field note the quiet interrupt did NOT trip the default threshold; the agent kept talking

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-10-quiet-interrupt.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-10-quiet-interrupt",
  "title": "Real call: half-volume 'sorry, one second' is ignored (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "quiet-interruption",
    "missed-interruption"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-10-quiet-retryquiet-interruption retry, louder, yielded.talk-over 0.59sMIT
PASSMITprobe-default-10-quiet-retry
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

field note after raising volume 30 to 40 percent a garbled fragment registered and the agent yielded

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-10-quiet-retry.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-10-quiet-retry",
  "title": "Real call: the louder retry after the ignored quiet interrupt (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "quiet-interruption"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
PASSprobe-default-12-greeting-overlapimmediate overlap, barge-in over the greeting.talk-over 0.37sMIT
PASSMITprobe-default-12-greeting-overlap
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

field note agent yielded over its own greeting and responded, though STT caught only a partial ('I need help with it')

8s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-12-greeting-overlap.example.wav --onset 2.0 --expect yield
fixture JSON
{
  "id": "probe-default-12-greeting-overlap",
  "title": "Real call: barge-in over the greeting itself (provider defaults)",
  "category": "should_yield",
  "source_type": "role-played",
  "tags": [
    "real-audio",
    "probe",
    "defaults",
    "barge-in",
    "greeting-overlap"
  ],
  "audio": "probe-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 named voice platform's assistant on DEFAULT interruption settings",
    "assistant": "hotato-probe",
    "assistant_id": "37995a11-3b7e-41e7-87b5-198f08b6161a",
    "model": "openai/gpt-4o",
    "voice": "provider/Elliot",
    "recorded": "2026-07-06",
    "interruption_settings": "provider 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_probe_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
ANALYSISprobe-default-09-pause-jump-inmid-utterance-pause jump-in: a latency / analysis clip, not a yield or hold verdict.response gap 3.44s, no yield verdict appliesMIT
ANALYSISMITprobe-default-09-pause-jump-in
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
10s dual-channel clip · caller left, agent right · 32 kbps
hotato run --stereo corpus/probe-defaults/audio/probe-default-09-pause-jump-in.example.wav
where it livesprobe-defaults on GitHub
Source 2 of 3 · CC BY 4.0

Real human conversation, from a published corpus

Floor-takes and backchannels from the AMI Meeting Corpus, attributed. The hardest ground truth to fake, which is why it's 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.

13AMI takes
7pass, agent yielded correctly
6fail, talked over or missed the yield
What this section does not prove

Meeting-room headset audio, not a phone call; labels are AMI's own word alignments. Headset bleed can trip auto-detection early, so the labeled onset is authoritative.

PASSami-es2002a-take-0677floor-take / barge-in (a real human interruption).talk-over 0.58sCC-BY-4.0
PASSCC-BY-4.0ami-es2002a-take-0677
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

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). Headset bleed puts B's voice on the caller channel before the labeled onset, so the time to yield stat is measured from that earlier auto-detected onset.

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
PASSami-en2002b-take-0149floor-take / barge-in (a real human interruption).talk-over 0.58sCC-BY-4.0
PASSCC-BY-4.0ami-en2002b-take-0149
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

field note D takes the floor with a long explanation while C is mid-utterance; C stops within 1.1 s per the alignments. Headset bleed can trip auto-detection early on these clips, so the time to yield stat is measured from an earlier onset than the alignment gives.

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
PASSami-en2002b-take-0772floor-take / barge-in (a real human interruption).talk-over 0.65sCC-BY-4.0
PASSCC-BY-4.0ami-en2002b-take-0772
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

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.

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
PASSami-en2002b-take-0913floor-take / barge-in (a real human interruption).talk-over 0.57sCC-BY-4.0
PASSCC-BY-4.0ami-en2002b-take-0913
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

field note D pushes back while C is talking; C stops in about half a second.

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
PASSami-en2002b-take-0930floor-take / barge-in (a real human interruption).talk-over 0.00sCC-BY-4.0
PASSCC-BY-4.0ami-en2002b-take-0930
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

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.

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
PASSami-en2002b-take-1069floor-take / barge-in (a real human interruption).talk-over 0.35sCC-BY-4.0
PASSCC-BY-4.0ami-en2002b-take-1069
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

field note C takes the turn while D is mid-utterance; D stops within 1.1 s.

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
FAILami-es2002a-bc-0526backchannel / false-trigger (a real human “mm-hmm”).talk-over 0.45sCC-BY-4.0
FAILCC-BY-4.0ami-es2002a-bc-0526
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

field note D drops one 'Okay' inside B's turn; B keeps the floor per the transcript.

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."
  },
  "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
FAILami-es2002a-bc-0687backchannel / false-trigger (a real human acknowledgement).talk-over 0.33sCC-BY-4.0
FAILCC-BY-4.0ami-es2002a-bc-0687
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

field note D acknowledges mid-turn; B keeps talking per the transcript.

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."
  },
  "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
FAILami-es2002a-bc-1049backchannel / false-trigger (a real human acknowledgement).talk-over 0.26sCC-BY-4.0
FAILCC-BY-4.0ami-es2002a-bc-1049
0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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

noheld the floor
0.26stalk-over
n/aresponse gap

field note B acknowledges while D talks; D keeps the floor per the transcript.

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."
  },
  "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
FAILami-en2002b-bc-0859backchannel / false-trigger (“Mm-hmm, yeah”).talk-over 0.37sCC-BY-4.0
FAILCC-BY-4.0ami-en2002b-bc-0859
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

field note C acknowledges while D explains; D talks through it per the transcript.

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."
  },
  "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
FAILami-en2002b-bc-1049backchannel / false-trigger (a real human acknowledgement).talk-over 0.47sCC-BY-4.0
FAILCC-BY-4.0ami-en2002b-bc-1049
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

field note C acknowledges mid-turn; D keeps the floor for many more seconds per the transcript.

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."
  },
  "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
PASSami-en2002b-bc-1114backchannel / false-trigger (a real human acknowledgement).talk-over 0.63sCC-BY-4.0
PASSCC-BY-4.0ami-en2002b-bc-1114
0s1s2s3s4s5s6s7s8s9sonsetCallerAgent

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

yesheld the floor
0.63stalk-over
n/aresponse gap

field note D drops one 'Okay' inside C's turn; C keeps talking. The energy reference also measures no yield here.

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
FAILami-en2002b-bc-1416backchannel / false-trigger (a real human acknowledgement).talk-over 0.13sCC-BY-4.0
FAILCC-BY-4.0ami-en2002b-bc-1416
0s1s2s3s4s5s6s7s8s9sonsetyieldCallerAgent

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

noheld the floor
0.13stalk-over
n/aresponse gap

field note C reacts with a short 'Oh right' while D explains; D keeps the floor for a long stretch per the transcript.

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."
  },
  "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
Source 3 of 3 · MIT, no human 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. The defect suites are built to fail, which is what gives the passing ones meaning.

4standalone classes, 13 scenarios, mixed yield / hold / latency
112scenarios across 4 regenerable suites
32defect-suite scenarios, built to fail on purpose
What this section does not prove

Shaped noise, not real speech. It proves the scorer's plumbing and guards regressions, not a real call.

PASSsample-contribution-synthetic-interruptsynthetic schema/validator example (hard mid-sentence interruption).talk-over 0.50sMIT
PASSMITsample-contribution-synthetic-interrupt
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

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.

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.90]]
  },
  "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

From here, one card rolls up many scenarios instead of one clip: classes bundles 13 scenarios by family, the four suites below bundle 16 to 40 scenarios each by regression tier.

SYNTHETICclassesfour standalone turn-taking classes, 13 scenarios, mixed yield / hold / latency.13 scenarios across four families, 10 pass / 3 fail.MIT
SYNTHETICMITcorpus/classes
  • 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)

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
SYNTHETICcorpus/suites/goldgold suite: hard conditions, noise floors, 8 kHz telephony, gain extremes, echo, edge timings, endurance.40 scenarios, 40 pass / 0 fail; the run exits 0 (all reference renders pass).MIT
SYNTHETICMITcorpus/suites/gold

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)
0exit code

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
SYNTHETICcorpus/suites/gold-defectsgold-defects: the same hard conditions with deliberately bad agent renders.16 scenarios, 2 pass / 14 fail; the run exits 1 by design (defect suite: most scenarios fail on their labeled axis).MIT
SYNTHETICMITcorpus/suites/gold-defects

Most scenarios are built to fail on their labeled axis: missed yields, false barges, stubborn double-talk. Two of sixteen still pass. The negative control.

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

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
SYNTHETICcorpus/suites/silversilver suite: clean conditions at 16 kHz, parametric sweeps over onset, duration, speed, gap, repeat.40 scenarios, 40 pass / 0 fail; the run exits 0 (all reference renders pass).MIT
SYNTHETICMITcorpus/suites/silver

Every reference render is a labeled pass across the clean-condition sweeps.

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

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
SYNTHETICcorpus/suites/silver-defectssilver-defects: clean conditions with injected missed / over-eager / sluggish failures.16 scenarios, 4 pass / 12 fail; the run exits 1 by design (defect suite: most scenarios fail on their labeled axis).MIT
SYNTHETICMITcorpus/suites/silver-defects

Most scenarios fail on their labeled axis; four of sixteen still pass. The clean-condition negative control.

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

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
Add a fixture

The contribution standard

Consent on file, separated tracks, an open license, no PII or PHI: the full bar, the validator, and the submission form live on docs/contributing.html.