synops/docs/features/live_ai.md
vegard 00bf5d27ce Arkitekturbeslutninger: noder er sentrum, edges definerer alt
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>
2026-03-17 10:29:54 +01:00

3.2 KiB

Feature: Live AI (Faktoid-oppslag & Referent)

Filsti: docs/features/live_ai.md

1. Konsept

AI-drevet analyse av sanntids transkripsjon. Opererer i to moduser med samme underliggende pipeline (Whisper → NER → handling), men ulik output.

2. Studio-modus: Faktoid-oppslag

Brukes i Studioet (se docs/concepts/studioet.md). En "virtuell co-host" som dytter relevante faktoider til programlederne i sanntid.

2.1 Dataflyt

  1. Live transkripsjon (se docs/features/live_transkripsjon.md) leverer tekst-chunks.
  2. Rust-tjenesten analyserer for egennavn (Named Entity Recognition).
  3. Lynraskt oppslag i PostgreSQL: SELECT * FROM factoids JOIN actors... WHERE actor.name = $1.
  4. Treff dytter LiveFactoidEvent inn i SpacetimeDB.
  5. SvelteKit-studio viser faktoiden lydløst i en egen boks.

2.2 Lagring

Live-transkripsjonsloggen er flyktig (TTL 30 dager):

live_transcription_log (
    id SERIAL,
    session_id UUID,
    chunk_timestamp TIMESTAMPTZ,
    chunk_text TEXT,
    matched_entities TEXT[],
    pushed_factoids UUID[],
    created_at TIMESTAMPTZ DEFAULT now()
)

En nattlig jobbkø-jobb sletter rader eldre enn TTL.

3. Møte-modus: AI-Referent

Brukes i Møterommet (se docs/concepts/møterommet.md). Genererer referat og action points.

3.1 Dataflyt

  1. Under møtet: Whisper transkriberer i chunks. Aha-markører fra deltakerne lagres med tidsstempler.
  2. Ved møteslutt: En meeting_summarize-jobb opprettes i jobbkøen (se docs/infra/jobbkø.md).
  3. Rust-worker sender transkripsjonen + Aha-markører til AI Gateway (sidelinja/rutine) med instruksjon om å generere:
    • Referat (strukturert Markdown)
    • Action points (foreslåtte Kanban-kort)
    • Identifiserte #Temaer og @Aktører
  4. Referatet lagres som melding i relevant Tema-chat. Foreslåtte Kanban-kort vises for godkjenning.
  5. graph_edges opprettes automatisk mellom møtesegmenter og identifiserte Temaer/Aktører.

3.2 Off-the-record

Når off-the-record er aktivt, stopper Whisper-strømmen og ingen data lagres. Visuell indikator i alle deltakeres grensesnitt. Transkripsjonen får et gap i tidslinja.

4. Kill Switch

Studio-modus har en kill switch — en synlig "Stopp AI"-knapp i studio-grensesnittet som umiddelbart:

  1. Stopper NER-analyse av nye chunks
  2. Skjuler faktoid-boksen
  3. Logger tidspunkt og grunn (manuelt felt, valgfritt)

Nødvendig fordi AI-en kan dytte feil eller irrelevante faktoider under live innspilling. Programlederen må kunne slå den av uten å forlate studio-viewet.

Kill switch-status (ai_enabled: bool) lagres på LiveKit-rommet i SpacetimeDB og synkes til alle klienter i rommet.

5. Instruks for Claude Code

  • Begge moduser deler samme Whisper-pipeline — ikke dupliser transkripsjonskode.
  • Studio-modus krever lav latens — hold NER-oppslaget raskt (indekserte spørringer).
  • Møte-modus er asynkron — prosessér via jobbkøen etter møteslutt.
  • All AI-kode peker på http://ai-gateway:4000/v1, aldri direkte til leverandør.
  • Kill switch skal alltid være tilgjengelig i studio-modus — default: AI aktivert.
  • Tilgang styres via node_access-matrisen.