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>
40 lines
2.4 KiB
Markdown
40 lines
2.4 KiB
Markdown
# 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
|
|
1. **Lydkilde:** LiveKit server-side hooks (live) eller filopplasting (batch).
|
|
2. **Whisper-server:** `fedirz/faster-whisper-server` (Docker, OpenAI-kompatibelt API). Endepunkt: `POST /v1/audio/transcriptions`.
|
|
3. **Chunking (live):** Rust-tjeneste mater lyd i ~5-sekunders chunks. `small`-modellen prosesserer ~5x raskere enn sanntid, noe som gir <1s forsinkelse per chunk.
|
|
4. **Output:** SRT (batch) eller ren tekst (live).
|
|
|
|
## 4. Whisper-konfigurasjon
|
|
* **Språk:** Sett `language=no` eksplisitt for norsk — unngå auto-detect som kan velge dansk/svensk.
|
|
* **`large-v3`** KREVER `vad_filter=true` — uten hallusinerer modellen repeterende tekst.
|
|
* **Benchmark og modellvalg:** Se `docs/concepts/podcastfabrikken.md` seksjon 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_log` for 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 (se `docs/infra/jobbkø.md`).
|
|
* Config (prompts) hentes fra samlings-nodens metadata (JSONB).
|