Whisper Lolo Transcription Jobs
Overview
Run transcription asynchronously with Inngest, storing results in Postgres, and keep a provider abstraction for Whisper now and Voxtral later.
Job workflow
- •Emit
recording.uploadedafter successful Blob upload. - •In Inngest, start
transcribeRecordingon that event. - •Download audio from
blob_url. - •Chunk before transcription to fit provider limits.
- •Call the provider (Whisper now) and store text + segments.
- •Update statuses and handle errors with retries.
Provider abstraction
- •Maintain a
TranscriptionProviderinterface withtranscribe(audioUrl). - •Implement
WhisperProvidernow; leaveVoxtralProviderstubbed. - •Avoid provider-specific logic in job orchestration.
Status discipline
- •
recordings.status: uploaded -> transcribing -> done/error. - •
transcriptions.status: pending -> done/error. - •Persist timestamps for observability where possible.
Error handling
- •Log failures with enough context to retry safely.
- •Avoid duplicate transcription on retry (idempotency checks).
References to consult
- •
documentation/inngest-background-jobs.md - •
documentation/inngest-demo-nextjs-full-stack.md - •
documentation/openai-node-audio-example.md - •
documentation/openai-speech-to-text.md - •
documentation/openai-audio-api-reference.md