- Shipped
- November 6, 2026 at 11:23 PM UTC
- Author
- Kamo
- Commit
- 20e0701
Owner report 2026-11-06: transcripts "do not reflect the entirety of the call recordings", and separate channels should say who is speaking. Measured on 180 platform recordings with speech (read-only, against a fresh Whisper transcript of the same audio): 52% of stored transcripts held under 80% of the words spoken, 3 had none, 75.7% of all words were kept. The cut was not at the end (80 of 94 short ones still reach the last 10% of the call): the org's routing sent every chunk to gpt-4o-transcribe, which returns a chunk cut short after a pause. - Every chunk now asks AIService for timed segments (aiservice 6fd880a), so only models that give them answer; a 424 (no such model for the org) falls back to plain, as before. - Recordings are transcribed as timed turns (CallTurns): chunks stitched on the recording's clock in order; one-party channels (a leg's rx/tx files, when the uploader marks them in the manifest) are transcribed one by one and merged in time order with each channel's speaker (our member by extension, else the other party). A single mixed channel keeps a diarizing model's labels only when the recording went in one request. Stored in RECORDINGS.TRANSCRIPT_TURNS beside the plain TRANSCRIPT. A recording with no audio is stored as an empty transcript instead of failing ffmpeg. - TranscriptBackfill re-transcribes rows whose turns are null: one recording per 30 s tick, on one pod (SingletonTaskRunner), skipped while this pod has live transcription, audio and never writes it. Needs kamo-shared-library e1a4a4ee and aiservice 6fd880a.
