- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper - Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster) - Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev - Oppdater synkronisering.md med implementeringsstatus og designvalg - Oppdater lokal.md med SpacetimeDB og AI Gateway - Utvid PG-skjema med channels, messages, media_files, message_revisions - Legg til seed_dev.sql, migration_safety.md, .env.example - Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl. - Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl. - SpacetimeDB og AI Gateway i docker-compose.dev.yml - collect-docs.sh inkluderer erfaringer/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
101 lines
4.7 KiB
Markdown
101 lines
4.7 KiB
Markdown
# Feature: Prompt-Laboratorium
|
||
**Filsti:** `docs/features/prompt_lab.md`
|
||
|
||
## 1. Konsept
|
||
Et internt kvalitetssikringsverktøy der redaksjonen kan teste, sammenligne og godkjenne LLM-prompts mot faktiske data fra eget workspace — før de ruller ut i produksjon. Integrert med AI Gateway (LiteLLM) og Promptfoo-testsettene.
|
||
|
||
## 2. Problemet det løser
|
||
- Modellkvalitet på norsk varierer kraftig mellom leverandører og versjoner.
|
||
- Leverandører oppdaterer modeller uten varsel — kvaliteten kan degraderes over natten.
|
||
- Redaksjonen må kunne verifisere at en prompt fungerer *med deres data* (transkripsjoner, artikler, aktørnavn) før den settes i produksjon.
|
||
- I dag krever prompt-testing kommandolinje og Promptfoo — det bør være tilgjengelig i nettleseren.
|
||
|
||
## 3. Brukeropplevelse
|
||
|
||
### 3.1 Playground (Ad-hoc testing)
|
||
1. Bruker velger en **jobbtype** (research_clip, whisper_postprocess, metadata_extract, dictation_cleanup, etc.).
|
||
2. Systemet laster inn gjeldende system-prompt fra `workspaces.settings`.
|
||
3. Bruker kan redigere prompten i et tekstfelt.
|
||
4. Velger **testdata**: enten paste inn tekst manuelt, eller velg fra faktiske transkripsjoner/artikler i workspace-et.
|
||
5. Velger **modeller** å teste mot (f.eks. `sidelinja/rutine` + `sidelinja/resonering`).
|
||
6. Kjører testen — ser resultatene side-om-side.
|
||
7. Kan iterere: endre prompten, kjør igjen, sammenlign.
|
||
|
||
### 3.2 Batch-evaluering (Promptfoo-integrasjon)
|
||
1. Bruker velger et lagret **testsett** (fra `tests/prompts/` i Git).
|
||
2. Kjører testsettene mot valgte modeller via AI Gateway.
|
||
3. Ser en matrise: testcase × modell × resultat, med pass/fail-markering.
|
||
4. Kan sammenligne mot tidligere kjøringer for å oppdage regresjoner.
|
||
|
||
### 3.3 Deploy
|
||
Når en prompt er verifisert:
|
||
1. Bruker klikker "Deploy til workspace".
|
||
2. Prompten skrives til `workspaces.settings.llm_prompts[jobbtype]`.
|
||
3. Alle fremtidige jobber av den typen bruker den nye prompten.
|
||
4. Tidligere prompt lagres i en `prompt_history`-logg for rollback.
|
||
|
||
## 4. Teknisk arkitektur
|
||
|
||
### 4.1 Datamodell
|
||
|
||
```sql
|
||
prompt_test_runs (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
||
job_type TEXT NOT NULL,
|
||
system_prompt TEXT NOT NULL,
|
||
model_alias TEXT NOT NULL,
|
||
input_text TEXT NOT NULL,
|
||
output_text TEXT,
|
||
tokens_used INTEGER,
|
||
latency_ms INTEGER,
|
||
created_by TEXT NOT NULL REFERENCES users(authentik_id),
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE INDEX idx_prompt_runs_workspace ON prompt_test_runs(workspace_id, job_type, created_at DESC);
|
||
```
|
||
|
||
`prompt_test_runs` er **ikke** en node i grafen — det er en intern verktøytabell for utviklere/redaktører.
|
||
|
||
### 4.2 Prompt-historikk
|
||
|
||
```sql
|
||
prompt_history (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
||
job_type TEXT NOT NULL,
|
||
system_prompt TEXT NOT NULL,
|
||
deployed_by TEXT NOT NULL REFERENCES users(authentik_id),
|
||
deployed_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
);
|
||
```
|
||
|
||
Muliggjør rollback: "forrige prompt for research_clip fungerte bedre, rull tilbake."
|
||
|
||
### 4.3 Kjøring
|
||
- **Ad-hoc tester:** SvelteKit server-side sender request direkte til AI Gateway (`http://ai-gateway:4000/v1`) med brukerens prompt og testdata. Resultatet returneres synkront.
|
||
- **Batch-evaluering:** Oppretter en `prompt_eval`-jobb i jobbkøen. Rust-worker kjører testsettene mot AI Gateway og lagrer resultatene.
|
||
|
||
## 5. Dataklassifisering
|
||
|
||
| Data | Kategori | Detaljer |
|
||
|---|---|---|
|
||
| Test-kjøringer | Flyktig (TTL 90 dager) | For analyse, ryddes automatisk |
|
||
| Prompt-historikk | Kritisk (PG) | Muliggjør rollback |
|
||
| Testsett (Promptfoo) | Gjenskapbar (Git) | `tests/prompts/` — versjonskontrollert |
|
||
|
||
## 6. Jobbtyper
|
||
|
||
| Jobbtype | Modellalias | Beskrivelse |
|
||
|---|---|---|
|
||
| `prompt_eval` | (varierer) | Batch-evaluering av testsett mot valgte modeller |
|
||
|
||
## 7. Instruks for Claude Code
|
||
* Prompt Lab er et admin-verktøy — krev `admin` eller `owner`-rolle i workspace.
|
||
* Ad-hoc tester kjøres synkront (SvelteKit → AI Gateway → respons). Ikke bruk jobbkø for enkelt-tester.
|
||
* Batch-evaluering kjøres via jobbkø for å unngå timeouts.
|
||
* Vis alltid token-bruk og latens — dette er et kostnadsbevisst verktøy.
|
||
* Testdata fra workspace-et (transkripsjoner, artikler) lastes via SvelteKit server-side fra PG. Gjesten-UX vises aldri her.
|
||
* `prompt_test_runs` og `prompt_history` er workspace-scopet men trenger ikke RLS — de er kun tilgjengelige for admins via applikasjonslogikk.
|
||
* Alt er workspace-scopet.
|