Someone sent a voice note instead of writing
Three minutes of speech, and your client cannot hear it. Short audio is not queued: the transcription comes back inside the same call.
Somebody recorded three minutes on their phone rather than typing four lines. It arrives as an .m4a in a chat, and it contains an address, a date and a change of plan, which is to say everything the next step depends on.
Your agent cannot open it. Not because three minutes is a lot, but because audio is not something most clients can put in front of a model at all, and the file is the only place the information exists. Nobody wrote it down. That is the whole point of a voice note.
This is a small problem that blocks a large one. The task is not transcription, it is booking the thing or answering the person, and it is stopped at the first step by three minutes of speech.
The client does not listen. Whatever is holding the conversation reads text, and a file it cannot decode is a file it cannot reason about: there is no partial answer here, no degraded mode, just a gap where the content was.
Three minutes of talking is also not three minutes of clean dictation. It is speech: false starts, a sentence abandoned halfway and restarted, background noise from wherever the person was walking, and proper nouns. Names of people, streets and companies are the part that fails first and matters most, because a wrong name is not a typo, it is a wrong answer that reads as a right one. A small local model gets the easy sentences and mangles exactly those tokens.
And running a speech model on your own machine is real time or worse on a laptop, so the cheapest case by price becomes one of the slower ones by wall clock, inside a tool call that has to answer.
Short audio is not queued. listen transcribes it and returns the text in the same response, with no handle to poll.
upload(filename="note.m4a", content_type="audio/mp4")
-> key, upload_url
curl -T note.m4a "<upload_url>"
listen(key="<key>")
-> handle, engine, cost_eur, chars, structure
-> text # the whole transcription, inline
# longer than a few minutes, the same call answers:
# -> handle, status: running, estimated_minutes
# and result(handle="<handle>") serves it once readyThis is the cheapest thing here. listen is priced per minute of audio, 0.005 EUR in balanced mode, so a three-minute note costs about 0.015 EUR. exact is 0.008 EUR per minute and is worth it when the recording is noisy or the names matter.
The 0.10 EUR of trial credit covers a lot of voice notes before you have paid anything. Duration is measured from the file rather than estimated from its weight, and a duration declared in the file's header that disagrees with its size is not taken at face value, so a three-minute note is charged as three minutes.
The same note sent twice is charged once: files are recognised by their content, not their name, and the second call returns the first result for nothing. If the transcription fails, nothing is charged at all.
- Under a few estimated minutes the text comes back inline. Above that the job is queued and you get a handle with
status: runninginstead, which is the same tool behaving correctly, not a different one. - Speakers are separated here too, and on a one-person note that means a single
Speaker A. Nothing identifies who that person is. - You get the transcription, not a reading of it. No summary, no translation, no tone.
- Language is detected automatically. Pass
language="it"when you already know it and the recording is poor: it removes a guess the engine would otherwise make.
Without markup
This page in markdown: /problems/transcribe-a-voice-note.md. All 20 of them in one file: /llms-full.txt.