
Do not treat the reply as the words the audio contained, and do not ask the model what the caller said, until you can name the text. Tonight, three proofs, in a log you stored. Name the text that audio returned: the model, the text, and the duration. If the response stored no duration, write that, and write the usage object that is actually there. Show a different file whose text, or whose duration, is not this one. Show another customer's log that does not hold this text. If any of the three needs the person who wired the call, you have not named the text. You have a paragraph and a guess.
This is the text on one transcription. It is not the run. Which run did that thread start? is the run id, the status, and the assistant. A run can complete while this transcription stores no run id, and a run id is not a duration. It is not the message. Which message did that run append? is a message id, a role, and a text. A message can quote a caller while the audio file was never stored. It is not the file. Which file did that message attach? is a file id, a purpose, and a byte count. A byte count is not a duration in seconds. It is not the balance a customer held, and it is not the team a member joined. Those are different objects, and they are not this text.
None of what follows is a score for this product, and none of it is legal advice. The fields below are one vendor's current description of a transcription, and the default sample, the diarized sample, and the word-timestamp sample are not the same object. The counts below that are a 2022 paper about a model trained on other people's audio. A word error rate on a benchmark is not the text on this file. A paper that never opened your log cannot name the duration on the call you stored tonight. They do tell you which numbers people mix up when they try to sound precise about a sentence they have not opened.
The default transcription example does not agree with itself about the file. The curl command sends audio.mp3, 9 characters, and model gpt-4o-transcribe, 17 characters. The Python snippet in the same example opens speech.mp3, 10 characters. 10 is not 9. The JavaScript and C# snippets go back to audio.mp3. One example, two filenames. The response text is Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that. 185 characters. usage.type is tokens. input_tokens is 14. input_token_details.text_tokens is 0. audio_tokens is 14. 0 plus 14 is 14. That addition matches the input. output_tokens is 45. total_tokens is 59. 14 plus 45 is 59. That addition also matches. 185 is not 45, and 45 is not a character count. 0 text tokens is not a claim that the sentence was empty. The response does not print a duration. A token total is not a number of seconds (OpenAI, API specification, create transcription).
The diarized example is a second object, and its duration does not match its usage. The file in the curl is meeting.wav, 11 characters. 11 is not 9, and it is not 10. The model is gpt-4o-transcribe-diarize, 25 characters. duration is 27.4. usage.type is duration, and usage.seconds is 27. 27 is not 27.4. The difference is 0.4, which the page does not print. The text field is 126 characters and contains two line breaks plus the labels Agent and A. The three segments do not contain those labels. Their texts are 34, 37, and 36 characters. 34 plus 37 plus 36 is 107. 126 minus 107 is 19, which is the labels and the breaks, and the page does not print 19. Segment ids are seg_001, seg_002, and seg_003. Each id is 7 characters. The first runs from 0.0 to 4.7. The second runs from 4.7 to 11.8, a span of 7.1. The third runs from 12.1 to 18.5, a span of 6.4. 4.7 plus 7.1 plus 6.4 is 18.2. 27.4 minus 18.2 is 9.2. The page does not print 18.2 or 9.2. Between the second segment's end and the third segment's start the gap is 0.3. 12.1 minus 11.8 is 0.3. The request names one known speaker, agent. The second segment's speaker is A. A is not agent. The first and third speakers are agent. A known-speaker list of one name does not make the middle speaker that name.
The word-timestamp example is a third object, and it rounds a duration the long fields do not round. The curl again sends audio.mp3 and now model whisper-1, 9 characters, the same length as the filename and not the same string. response_format is verbose_json. The Python snippet again opens speech.mp3. task is transcribe. language is english, 7 characters. duration is 8.470000267028809. usage.type is duration, and usage.seconds is 9. 9 is not 8.470000267028809. 9 minus that duration is 0.529999732971191, which the page does not print. The text is The beach was a popular spot on a hot summer day. People were swimming in the ocean, building sandcastles, and playing beach volleyball. 136 characters. 136 is not 185, and 136 is not 126. The first word, The, starts at 0.0 and ends at 0.23999999463558197. The page does not print 0.24. The last word shown, volleyball, is 10 characters, starts at 7.400000095367432, and ends at 7.900000095367432. The difference of those two floats is 0.5 exactly. 8.470000267028809 minus 7.900000095367432 is 0.570000171661377. The audio's printed duration outlasts the last printed word, and the page does not print that remainder. usage.seconds 9 is not the diarized example's 27, and it is not the default example's total_tokens 59.
The lists around those samples are longer than the sentences that introduce them. The file description names nine formats: flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, and webm. Nine names. The three examples use mp3 and wav. Two names. The response-format enum is json, text, srt, verbose_json, vtt, and diarized_json. Six names. The default is json. The summary sentence above the examples names json, diarized_json, or verbose_json. Three names. Three is not six. text, srt, and vtt are in the enum and not in that sentence. The model enum is whisper-1, gpt-4o-mini-transcribe, gpt-4o-mini-transcribe-2025-12-15, gpt-4o-transcribe, and gpt-4o-transcribe-diarize. Five names. The dated mini model is 33 characters, and none of the three examples sends it. The description says whisper-1 is powered by the open-source Whisper V2 model. That sentence is about a product string. It is not a word error rate. gpt-4o-mini-transcribe, used by the streaming example, is 22 characters. 22 is not 17, and 17 is not 9.
The paper people quote when they want an error rate did not open this file. Alec Radford, Jong Wook Kim, Tao Xu, Greg Brockman, Christine McLeavey, and Ilya Sutskever describe a model trained on 680,000 hours of labeled audio. Of those hours, 117,000 cover 96 other languages, and the dataset also includes 125,000 hours of translation into English. 680,000 minus 117,000 minus 125,000 is 438,000. The paragraphs that print the three hour counts do not print 438,000. A later sentence says the training data covers speech recognition in 75 languages. 75 is not 96. The prose then gives the best zero-shot model a LibriSpeech clean-test word error rate of 2.5. Table 2 prints 2.7 for Large V2 on LibriSpeech Clean, next to 2.7 for the other model, and a relative reduction of 0.0. 2.5 is not 2.7. The difference is 0.2, which the page does not print beside those two figures. The appendix beam-search table prints 2.5 for Whisper large-v2 on LibriSpeech.test-clean. 2.5 matches the prose and does not match Table 2. The Table 2 caption says the two models perform within 0.1% of each other on LibriSpeech. The clean row differs by 0.0. The LibriSpeech Other row is 6.2 and 5.2, a difference of 1.0. 1.0 is not 0.1 (Radford et al., Robust Speech Recognition via Large-Scale Weak Supervision).
The average in Table 2 is a sum you can redo, and it does not include every row. The fourteen Large figures add to 383.1. 383.1 divided by 14 is 27.36, not the printed average 29.3. Drop the LibriSpeech Clean row and the remaining thirteen Large figures add to 380.4. 380.4 divided by 13 is 29.26, which rounds to 29.3. The thirteen Large V2 figures, clean row removed, add to 166.4. 166.4 divided by 13 is 12.8 exactly, the printed average. The thirteen relative reductions, clean row removed, add to 717.9. 717.9 divided by 13 is 55.22, which rounds to the printed 55.2%. The average is thirteen rows, not fourteen, and it still includes LibriSpeech Other. The caption's phrase about other datasets does not say that it kept one LibriSpeech split in the mean. Table 6 then prints dataset sizes 3405, 6811, 13621, 27243, 54486, and 681070. Doubling does not hold. 3405 times 2 is 6810, and the next cell is 6811, one high. 6811 times 2 is 13622, and the next cell is 13621, one low. 13621 times 2 is 27242, and the next cell is 27243, one high. 27243 times 2 is 54486, which matches. 54486 times 12.5 is 681075. The full-data cell is 681070, five low. The prose says 3,000, 13,000, 54,000, a 12.5 times increase, and 680,000. 680,000 is not 681,070. The difference is 1,070, which the page does not print. 54,000 is not 54,486. Multilingual error moves from 36.4 to 29.2, a drop of 7.2. The prose says a further 7 points. 7.2 is not 7. English moves from 10.9 to 9.9, a drop of 1, which matches the sentence that says one point. A sentence about 7,000 hours or less calls translation performance practically zero. The 6811 row prints a BLEU of 1.7, and the 3405 row prints 0.2. 1.7 is not 0. None of these is usage.seconds 9, and none of them is the 185 characters on the default sample.
Do the three proofs on one real transcription, in the log that actually holds it. First, the binding. Copy the model, the text, the duration if one was stored, and the usage object. If usage.type is tokens, write the input, the output, and the total, and add them. If usage.type is duration, write seconds next to the duration field and do not pretend they are the same number when they are not. If the file name in the request is not the file name in another snippet on the same page, that is a documentation sample. Your log should have one name. Do not paste the beach sentence because a sample prints it, and do not paste 27.4 because a different sample prints it. Second, the other file. A different text, or a different duration, is not this transcription. A word error rate of 2.5 is not that second file. If you cannot show a file that is not this one, you have a counter, not a record. Third, the other customer. A log that belongs to someone else does not contain this text. If the only store is one bucket for every caller, write that. A caller you cannot name is the finding.
Three moves feel like the proof and are a second problem. Re-running the audio, or asking the model to say it again, because the sentence was embarrassing, before you have copied the text and the duration. A new call gets a new usage object. It does not tell you which text the customer heard. Quoting 2.5 because it looks precise, while the call you were asked about is one file, and the paper that printed 2.5 had already printed 2.7 for a LibriSpeech clean figure in another table. Asking the model what the caller said. The model will produce a plausible sentence. It will not open the log. A message you have not kept, while the customer is arguing about a chat line, is which message did that run append?. Opening that screen does not name the duration.
The path is ordinary when an operator can open one recording without opening the next recording as the way to prove it. ReUniting AI turns a recording into an interactive companion, with the voice produced for that recording. The shape that matters here is one recording you can point at, distinct from the next recording. That case is not a transcript ledger. Nothing in that sentence is a headcount, a duration, or a result figure. If the only screen plays a voice and will not show the text and the duration that were stored, you do not have this proof. You have a playback.
There is a version of this afternoon where hiring the path is the wrong purchase. Nothing is in production, because the feature has not reached a customer. No model is being called. The request was not logged, so there is no text to name. A customer has already seen another customer's data. Naming a sentence does not close a leak. The wrong value was already a write. Or no metric was ever named, so a rescue would have nothing to move. The criteria for a system that is already in front of customers and still cannot show the text sit on the page for an AI pilot failed to reach production. That page is the symptom. It does not name this file, and it does not turn 2.5 into a duration.
When the words are already in front of a customer and the log cannot name them, the missing object is specific. The model, the text, and the duration, a different file that is not that text, and another customer's log that does not hold it. An AI pilot failed to reach production engagement is for the system that is already in front of customers and cannot yet show those three: audit in the first one to two weeks, finished in 8 to 12 weeks, scoped after the audit, unpaid if the agreed metric does not move, rollout behind a human-review gate. The transcription you failed to store tonight is the kind of case the harness has to include, or the next release will speak and still be unable to say which text it stored. The harness is AI evaluation and observability. An AI integration sprint is the shape where the acceptance sentence can require the text and the duration on every stored call. If you do not yet know whether the pilot can be saved, a two-week AI readiness assessment hands you the findings either way. Those are the terms. They are not 27.4, and they are not 680,000.
The balance a customer held, and the team a member joined, are different objects: which balance did that customer hold? and which team did that member join?. Do not record either on this page. An ending balance is not a duration. A team slug is not a transcript.
Before you tell them what the caller said, do the three proofs and write the text. Name the model, the text, and the duration, or write that the response stored tokens and no duration. Show a different file that is not that text. Show another customer's log that does not hold it. Do not round 8.470000267028809 to 9 because a usage field already did, and do not ask the model to repeat the sentence in place of the log. A paper can tell you how far a benchmark moved, including the 2.5 that is not the 2.7 in Table 2. The binding is the text you can defend.
Questions
You stop treating the reply as the words the audio contained, and you stop asking the model what the caller said, until you can name the model, the text, and the duration, or the usage object if no duration was stored. Show a different file whose text or duration is not this one, and show that another customer's log does not hold this text.
No. A word error rate on someone else's audio is not the text on this file. A transcription you can defend is the model, the text, and the duration on this call, or a written line that the response stored tokens and no duration. 2.5 on one table is not 2.7 on another, and 9 seconds is not 8.470000267028809.
When nothing is in production, when no model is being called, when the request was not logged, when a customer has already seen another customer's data, when the wrong value was already a write, or when no metric was ever named.
Related: AI pilot failed to reach production
Find this useful? Tell Google to show you more of it.
