Skip to content

docs(ML-93): answering machine detection for live STT - #139

Closed
jqueguiner wants to merge 3 commits into
mainfrom
jl/ml-93-answering-machine-docs
Closed

docs(ML-93): answering machine detection for live STT#139
jqueguiner wants to merge 3 commits into
mainfrom
jl/ml-93-answering-machine-docs

Conversation

@jqueguiner

@jqueguiner jqueguiner commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

What

Documents the answering_machine message for live STT.

  • chapters/live-stt/features/answering-machine-detection.mdx — the feature page
  • api-reference/v2/live/callback/answering-machine.mdx — payload reference, same shape as the existing speech-start / speech-end pages
  • asyncapi.yamlAnsweringMachineMessage schema with examples, the answeringMachine channel message, the onAnsweringMachine operation
  • docs.json — both pages in the navigation

The message

{
  "session_id": "550e8400-e29b-41d4-a716-446655440000",
  "created_at": "2026-09-09T12:34:11Z",
  "type": "answering_machine",
  "data": { "kind": "machine", "confidence": 0.78, "time": 5.24, "channel": 0 }
}

Three things stated explicitly, because all three are easy to get wrong

confidence is a ranking score, not a probability. 0.78 does not mean "78% chance of a machine". The page says so in a <Warning> and tells integrators to tune a threshold on their own traffic instead.

Silence is reported as human. A callee who never speaks produces no speech at all, and staying on the line beats hanging up on someone quiet.

time is the audio position, not wall clock. It shares its reference with speech_start, speech_end and transcript, so messages can be ordered against each other. A client pushing audio faster than real time will see time: 5.24 arrive within a fraction of a second, so created_at is the field to correlate with their own logs.

All three would otherwise surface as support tickets.

Verified

asyncapi.yaml parses and the new nodes resolve on the liveTranscription channel. docs.json is valid JSON with both entries in the navigation. Mintlify validation and link-rot checks pass on the branch.

Refs ML-93

Documents the new answering_machine message: what it is, why it uses speech
timing instead of the transcript, the payload, and how to act on it.

- chapters/live-stt/features/answering-machine-detection.mdx : the feature page
- api-reference/v2/live/callback/answering-machine.mdx : payload reference
- asyncapi.yaml : AnsweringMachineMessage schema, channel message and operation
- docs.json : both pages added to the navigation

Two points made explicit for integrators, because both are easy to get wrong:
confidence is a ranking score and not a calibrated probability, and silence is
reported as human rather than machine.

Refs ML-93
@jqueguiner jqueguiner self-assigned this Sep 9, 2026
@mintlify

mintlify Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
gladia 🟢 Ready View Preview Sep 9, 2026, 3:49 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

@jqueguiner jqueguiner changed the title docs: ML-93 answering machine detection for live STT docs(ML-93): answering machine detection for live STT Sep 9, 2026
This repo is public. The first version described how the detector works
internally, which does not belong in customer documentation:

- benchmark figures from our evaluation (accuracy percentages, CPU latency,
  training set size)
- the named features the model relies on and their relative importances
- the exact decision window length
- the ablation result comparing timing against transcription
- a link to the third-party post the approach draws on

Kept what an integrator actually needs: the message shape, what each field
means, that confidence is a ranking score rather than a probability, that
silence is reported as human, and the limits.

Also relevant for ML-93: the patent filing on the address resolver set the
precedent that implementation detail stays internal until priority is
established.
time is the position in the AUDIO stream, not wall clock. It matters because a
client pushing audio faster than real time will see time: 5.24 arrive within a
fraction of a second: created_at is the field to correlate with their own logs.

Also fixes the examples, which showed time: 5.0 exactly and implied a fixed
value. The decision is triggered by a speech segment crossing the window rather
than by a timer, so the value sits a little past it.

Adds a Note explaining that answering_machine shares its clock with
speech_start, speech_end and transcript, which is what lets an integrator
verify the decision arrives before the first transcript.
@jqueguiner

Copy link
Copy Markdown
Contributor Author

Superseded by #140, which carries the same four files in a single commit.

@jqueguiner jqueguiner closed this Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant