¿Qué es Whisper en chunks?
Es la forma en que PeopleWorks Meeting convierte audio en texto usable durante la reunión, no recién al final. WhisperTranscriptionService habla con la API de Whisper para transcribir archivos de audio; ChunkedTranscriptionService lo vuelve realtime practical: graba ventanas cortas, las manda a transcribir, borra el archivo temporal y emite un update. El default está pensado en ~30 segundos porque equilibra latencia, costo y calidad. Ese ritmo también le da al usuario una expectativa simple: cada medio minuto aparecen señales nuevas, sin fingir simultaneidad absoluta.
Qué habilita
Co-pilot con contexto actual
Mind map en vivo
Buffer acumulado
Language auto-detect
125+ idiomas Whisper
Post-proceso al detener
Lo que NO hace
- No mete un bot en la llamada — la captura ocurre en tu dispositivo y rota sub-grabaciones locales.
- No promete streaming palabra por palabra — el sistema entrega chunks completos; eso evita UI nerviosa y reduce errores de contexto.
- No sube archivos gigantes —
WhisperTranscriptionService corta en 25MB y valida extensiones soportadas antes de llamar a la API.
Cómo funciona por dentro
- Opciones explícitas —
ChunkedTranscriptionOptions define Language, ChunkSeconds, SampleRate y SessionId; el default es es, 30s y 16 kHz.
- Rotación cross-platform — en cada ciclo, el recorder arranca una sub-grabación WAV con realtime desactivado para evitar buffers nativos por plataforma.
- Transcripción robusta —
TranscribeFileAsync valida .m4a, .mp3, .wav, .webm, .mp4, .mpeg y .mpga, usa response_format=verbose_json y temperature=0.
- Reintentos — errores 429/5xx tienen retry con backoff; auth inválida y payload demasiado grande fallan con mensaje claro.
- Update acumulado — cada resultado produce
TranscriptionUpdate: texto nuevo, transcript completo, índice de chunk y hora UTC.
- Consumo en vivo —
MeetingWorkspace alimenta al assistant channel y a LiveMeetingContext; después el chat inyecta los últimos ~4000 caracteres en el prompt.
Ejemplo: latencia útil
AUDIO: minuto 08:00 a 08:30, discusión sobre renovar contrato enterprise.
WHISPER: chunk #16 transcripto · Co-pilot ya puede responder "¿qué se acaba de decidir?".
Privacidad, idioma y límites
La API key se resuelve primero desde SecureStorage (OpenAIApiKey) y después desde AppSettings.json. Si pasás language="auto", Whisper detecta idioma; si no, PeopleWorks manda el tag BCP-47 que eligió el usuario. La transcripción local-first significa que el archivo temporal vive solo lo necesario para transcribirse y luego se elimina. Si una llamada falla, el meeting no queda bloqueado: se registra el error, se sigue con el próximo chunk y el usuario conserva el audio/transcript que sí entró.
Por qué chunks y no batch: batch al final es más simple, pero deja ciegos al Co-pilot y al mind map durante la reunión. Los chunks le dan memoria reciente sin esperar una hora de audio.
What is chunked Whisper?
It is how PeopleWorks Meeting turns audio into usable text during the meeting, not only after it ends. WhisperTranscriptionService calls the Whisper API to transcribe audio files; ChunkedTranscriptionService makes it practical in realtime: it records short windows, sends them for transcription, deletes the temporary file, and emits an update. The default is tuned around ~30 seconds because it balances latency, cost, and quality. That cadence also gives users a clear expectation: new signals arrive about twice a minute, without pretending to be absolute word-level streaming.
What it enables
Co-pilot with current context
Live mind map
Running buffer
Language auto-detect
125+ Whisper languages
Post-process on stop
What it does NOT do
- Doesn't add a bot to the call — capture happens on your device and rotates local sub-recordings.
- Doesn't promise word-by-word streaming — the system emits complete chunks; that keeps the UI calmer and reduces context errors.
- Doesn't upload oversized files —
WhisperTranscriptionService enforces the 25MB limit and validates supported extensions before calling the API.
How it works under the hood
- Explicit options —
ChunkedTranscriptionOptions defines Language, ChunkSeconds, SampleRate, and SessionId; defaults are es, 30s, and 16 kHz.
- Cross-platform rotation — each cycle starts a WAV sub-recording with realtime transcription disabled, avoiding native per-platform buffer hooks.
- Robust transcription —
TranscribeFileAsync validates .m4a, .mp3, .wav, .webm, .mp4, .mpeg, and .mpga, then uses response_format=verbose_json and temperature=0.
- Retries — 429/5xx errors retry with backoff; invalid auth and oversized payloads fail with clear messages.
- Cumulative update — each result produces a
TranscriptionUpdate: new text, full transcript, chunk index, and UTC time.
- Live consumption —
MeetingWorkspace feeds the assistant channel and LiveMeetingContext; later the chat injects the last ~4000 characters into the prompt.
Example: useful latency
AUDIO: minute 08:00 to 08:30, discussion about renewing an enterprise contract.
WHISPER: chunk #16 transcribed · Co-pilot can now answer "what did we just decide?".
Privacy, language, and limits
The API key is resolved first from SecureStorage (OpenAIApiKey) and then from AppSettings.json. If you pass language="auto", Whisper detects the language; otherwise PeopleWorks sends the BCP-47 tag selected by the user. Local-first transcription means the temporary file exists only as long as needed for transcription, then gets deleted. If one call fails, the meeting is not blocked: the error is logged, the next chunk continues, and the user keeps the audio/transcript that did arrive.
Why chunks instead of batch: end-of-meeting batch processing is simpler, but it leaves the Co-pilot and mind map blind during the meeting. Chunks give them recent memory without waiting for an hour of audio.