AUDIO INTELLIGENCE / RAG
Beacon AI — The Second Brain That Shows Its Work
Records meetings, lectures and calls, transcribes them with speaker separation, and turns them into notes, tasks, flashcards and a memory you can talk to. Every sentence it writes is linked to the evidence supporting it — and every sentence that isn't supported is marked as such before you read it.
Public demo
0.07× — of realtime, 60-min session p95
The problem
Meeting-notes tools all share one unsolved problem: they generate text you cannot verify. You read a summary and either trust it or re-listen to the recording. For a meeting that is annoying; for a lecture you are examined on, or a client call you are about to act on, it is disqualifying. The hard part is not generating the summary — it is proving, per sentence, that the recording actually said it.
The approach
Twelve idempotent ARQ stages keyed on stage:session_id:input_hash, so any stage replays without duplicating data: capture at 16kHz Opus, a live pass ~1.5s behind speech, then whisper large-v3 + WhisperX for word-accurate offsets, pyannote 3.1 diarization, PII redaction, topic-shift chunking, BGE-M3 dense + sparse embedding, extraction, and attribution. Postgres 16 does relational, vector (pgvector/HNSW), full-text and graph (Apache AGE) work in one place — three databases at this stage is a self-inflicted wound. The API stays stateless and scales on request volume while ASR, embedding and NLI queue onto separate worker pools that scale on queue depth and can live on GPU hosts billed by the second. Retrieval fuses dense ⊕ Postgres FTS ⊕ entity 1-hop graph by RRF, filters on metadata, then reranks with a BGE cross-encoder to eight spans — and provenance travels with the text, so a chunk is never flattened into a prompt without its chunk_id.
The results
Attribution runs an NLI cross-encoder per generated sentence against the session's own chunks and labels it supported / partial / unsupported, with the thresholds fitted on a labelled dev set rather than picked in a function body. Unsupported sentences are flagged in place, never silently dropped — a summary that quietly deletes what it could not verify is indistinguishable from one that had something to hide. Every surface inherits it: summary bullets carry timecode chips that scrub the audio, action items link to the seconds where the commitment was made, flashcards cite the lecture minute. An eval harness reports precision/recall on the unsupported class over 200 labelled sentences plus recall@10 and MRR over a 50-query set, and both run in CI and fail the build on regression. A 60-minute session finishes in under four minutes p95 on a single A10G. Privacy is architecture, not a compliance chapter: local-only sessions never upload audio, redaction is a read-time policy over spans that are never destroyed, and the pause hotkey purges the buffer and draws a visible hatched gap — an honest hole in the record is more trustworthy than a seamless one.
Stack: Next.js 15, FastAPI, Tauri v2, Postgres + pgvector, Apache AGE, ARQ, faster-whisper, pyannote 3.1, BGE-M3, Redis