Skip to content

feat(transcription): implement retranscribe_meeting (Track-B step 7)#15

Open
farce1 wants to merge 1 commit into
feat/asr-gpu-providerfrom
feat/asr-retranscribe
Open

feat(transcription): implement retranscribe_meeting (Track-B step 7)#15
farce1 wants to merge 1 commit into
feat/asr-gpu-providerfrom
feat/asr-retranscribe

Conversation

@farce1

@farce1 farce1 commented Jun 14, 2026

Copy link
Copy Markdown
Owner

Track-B step 7 — implement retranscribe_meeting

Replaces the stub that returned "not yet available" with a working re-transcription
of a meeting's saved recording. Invoked today from the Library view's re-transcribe
action (invoke('retranscribe_meeting', { meetingId })).

Stacked on feat/asr-gpu-provider (#14): #9 ← #10 ← #11 ← #12 ← #13 ← #14 ← this.

How it works

  • transcribe_samples_48k (worker.rs) drives the existing run_worker over the decoded file via its channels — reusing the proven VAD/resampler/engine streaming pipeline verbatim, so batch and live transcription can't drift. Audio uses a bounded channel (backpressure → bounded memory); results use an unbounded channel; closing the audio channel triggers the worker's final flush and clean exit.
  • retranscribe_audio_file (mod.rs) resolves the engine (resolve_asr_engine), checks model readiness, decodes the Ogg/Opus recording with the existing diarization::decode::decode_ogg_opus_to_f32, and refuses to wipe an existing transcript when no speech is found (returns an error, leaving the old transcript intact) — guarding against destructive data loss.
  • The command replaces transcripts rows in a transaction (DELETE + INSERT) and reindexes FTS via fts_upsert.
  • transcript_rows (pure, unit-tested) builds rows with sequential indices and padded end times.

Tests / gate

TDD: transcript_rows_assigns_sequential_indices_and_padded_end_times. BE: clippy clean, cargo build ✓, cargo test --lib 13 passed (only the 3 inherited maintainer-owned REPLACE_WITH_ SHA256 release-gate failures remain). FE unchanged on this branch.

Not runtime-verified here

End-to-end re-transcription needs downloaded models + a real recording, which this environment lacks; correctness rests on reusing the already-proven streaming worker and decode paths, with the empty-result guard preventing data loss. Recommend manual QA on a real meeting after main is unblocked.

Merges once main's vendor + REPLACE_WITH_ blockers are cleared and the chain rebases.

@farce1 farce1 force-pushed the feat/asr-retranscribe branch 2 times, most recently from d52e8ec to d332d95 Compare June 14, 2026 14:56
Re-run ASR on a meeting's saved recording and replace its transcript.
transcribe_samples_48k drives the existing streaming worker over the
decoded file (reusing the proven VAD/resampler/engine pipeline);
retranscribe_audio_file resolves the engine, checks readiness via the
shared model::check_engine_ready helper (also used by the live worker),
decodes the Ogg/Opus recording, and refuses to wipe an existing
transcript when no speech is found. The command replaces transcript rows
transactionally and reindexes FTS.
@farce1 farce1 force-pushed the feat/asr-retranscribe branch from d332d95 to ee8fb25 Compare June 14, 2026 18:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant