Grunnleggende arkitekturbeslutninger tatt og dokumentert: - Alt er noder (brukere, team, innhold, mediefiler, samlings-noder) - Edges definerer hva en node er (freeform typer, metadata i JSONB) - Materialisert tilgangsmatrise (node_access) erstatter workspace-RLS - Visibility (hidden/discoverable/readable/open) på noder - Aliaser via usynlige system-edges - Maskinrommet eier all skriving (SpacetimeDB først, PG asynk) - SpacetimeDB holder hele grafen, PG er persistent backup - Node- og edge-skjema spesifisert (docs/primitiver/) Fjernet workspace-konseptet fra hele dokumentasjonen (~40 filer). Fem retninger besluttet, én åpen (rom, ikke forum). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
Feature: Live Transkripsjon (Whisper-pipeline)
Filsti: docs/features/live_transkripsjon.md
1. Konsept
Den felles Whisper-pipelinen som brukes av flere konsepter for å transkribere lyd. Abstraherer bort konfigurasjonsforskjeller (modellvalg, latenskrav) bak et felles grensesnitt.
2. Moduser
| Kontekst | Modell | Latenskrav | initial_prompt | Output |
|---|---|---|---|---|
| Studioet (live) | small |
<1s per chunk | Nei (hastighet prioritert) | Flyktig tekst → NER-pipeline |
| Møterommet (live) | small |
<1s per chunk | Nei | Flyktig tekst → AI-referent |
| Podcastfabrikken (batch) | medium + prompt |
Ingen (asynkront) | Ja (navneliste) | SRT → Git → PG |
3. Teknisk arkitektur
- Lydkilde: LiveKit server-side hooks (live) eller filopplasting (batch).
- Whisper-server:
fedirz/faster-whisper-server(Docker, OpenAI-kompatibelt API). Endepunkt:POST /v1/audio/transcriptions. - Chunking (live): Rust-tjeneste mater lyd i ~5-sekunders chunks.
small-modellen prosesserer ~5x raskere enn sanntid, noe som gir <1s forsinkelse per chunk. - Output: SRT (batch) eller ren tekst (live).
4. Whisper-konfigurasjon
- Språk: Sett
language=noeksplisitt for norsk — unngå auto-detect som kan velge dansk/svensk. large-v3KREVERvad_filter=true— uten hallusinerer modellen repeterende tekst.- Benchmark og modellvalg: Se
docs/concepts/podcastfabrikken.mdseksjon 4 for ytelsestall og anbefalinger.
4.1 initial_prompt (navneliste)
Brukes kun i batch-modus (Podcastfabrikken). Prompten bygges automatisk fra samlings-nodens metadata (metadata.whisper_prompt) + entiteter i kunnskapsgrafen.
Effekten er tydelig:
- Uten prompt: "Vegard Nøgnes", "SideLinja", "Sidlinja"
- Med prompt: "Vegard Nøtnæs", "Sidelinja" (riktig)
5. Lagring
- Live-modus: Transkripsjonen er flyktig (kategori 4, TTL 30 dager). Lagres i
live_transcription_logfor feilsøking. - Batch-modus: SRT committes til Git (Forgejo). Avledede formater (ren tekst, segmenter, søkeindeks) i PostgreSQL.
6. Instruks for Claude Code
- Live transkripsjon blokkerer ALDRI web-requests — prosesseres i Rust-worker eller separat tjeneste.
- Batch-transkripsjon kjøres som
whisper_transcribe-jobb i jobbkøen (sedocs/infra/jobbkø.md). - Config (prompts) hentes fra samlings-nodens metadata (JSONB).