Sổ Giỗ – family memorial book that admits what it didn’t hear
Description and use
Sổ Giỗ uses two local speech models to validate transcript text, rejects hallucinations, and produces accurate Vietnamese lunar anniversary dates for ten years, with a durable reminder workflow.
Problem
Vietnamese families need a reliable, long‑term record of ancestor death anniversaries (giỗ) that can be derived from a single recording of an elder, but speech models often invent text and uncertainty makes automated transcription unreliable.
Outcome
The workflow produces a family memorial book that only includes text confirmed by both models, rejects invented sentences, and generates accurate giỗ dates for ten years with a durable reminder system.
Workflow
- Record the elder’s narration on a phone.
- Run two local speech models (faster‑whisper/small and vinai/PhoWhisper‑small) on the same 16 kHz audio.
- Identify overlapping text segments with matching timestamps; discard non‑overlap and hallucinated segments.
- Generate claims (ancestor, lunar date, tray items) from the surviving text, attaching source quotes and timestamps.
- Validate lunar dates using a custom lunar engine (core/lunar.py).
- Compute the next ten years of giỗ dates from validated claims.
- Schedule durable yearly reminders via GioWorkflow, retrying on failure.
- Deliver reminders to family members and record acknowledgements.
- Persist state so the workflow survives restarts.
- Provide a static web demo for verification.
Evidence
Two different open speech models, both running on your own laptop with the network cable out, transcribe that recording independently.
Where they agree, the words become quotable. Where they disagree, the page shows both readings and marks the span.
A deterministic Vietnamese lunar engine — 200 lines, no dependencies — turns the surviving lunar dates into the next ten years of giỗ
One sentence: the model is allowed to suggest, and only code decides — and the thing code guarantees is the date, not the prose.
- Record date: 2026-11-01T09:13:50.876Z