synops/migrations/015_ai_preset_seeds.sql
vegard cad3f4b699 Fullfører oppgave 18.1: AI-preset node-type
Implementerer node_kind 'ai_preset' med metadata-validering og
8 standardprompter som seed-data.

Validering i maskinrommet (create_node + update_node):
- prompt (påkrevd, ikke-tom streng)
- model_profile (flash | standard)
- category (standard | custom)
- default_direction (tool_to_node | node_to_tool | both)
- icon (påkrevd, ikke-tom streng)
- color (påkrevd, hex-farge #RRGGBB)

Seed-presets: Rens tekst, Korrektør, Oppsummering, Oversett,
Skriv om for publisering, Trekk ut fakta, Forenkle, Endre tone.

8 enhetstester for valideringsfunksjonen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 06:13:09 +00:00

168 lines
8.7 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 015_ai_preset_seeds.sql
-- Oppgave 18.1: AI-preset standardprompter som seed-data.
-- Oppretter 8 gjennomarbeidede AI-presets med node_kind 'ai_preset'.
-- Ref: docs/features/ai_verktoy.md § 3, § 5
BEGIN;
-- =============================================================================
-- 1. Rens tekst
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000001',
'ai_preset',
'Rens tekst',
'open',
'{
"prompt": "Du mottar tekst som er kopiert fra en nettside eller et dokument. Teksten inneholder sannsynligvis navigasjonselementer, annonser, knappetekster, og annet støy i tillegg til selve innholdet.\n\nDin oppgave:\n1. Identifiser og behold kun det faktiske innholdet (artikkel, tekst, data).\n2. Fjern all støy: navigasjon, menyer, annonser, knappetekster, copyright-tekst, cookie-varsler.\n3. Behold og fiks formatering: overskrifter, avsnitt, lister, sitater.\n4. Fiks åpenbare skrivefeil og ødelagt formatering.\n5. Oppgi kilde (URL eller publikasjon) hvis det fremgår av teksten.\n\nOutput kun den rensede teksten. Ikke legg til kommentarer om hva du har gjort.",
"model_profile": "flash",
"category": "standard",
"default_direction": "tool_to_node",
"icon": "sparkles",
"color": "#8B5CF6"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 2. Korrektør
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000002',
'ai_preset',
'Korrektør',
'open',
'{
"prompt": "Du er en grundig korrektør for norsk tekst.\n\nDin oppgave:\n1. Fiks alle skrivefeil og grammatiske feil.\n2. Rett tegnsetting (komma, punktum, bindestrek, anførselstegn).\n3. Sørg for konsistent rettskriving (ikke bland bokmål og nynorsk).\n4. Behold forfatterens stemme, stil og ordvalg — ikke skriv om.\n5. Behold all formatering (overskrifter, lister, avsnitt) uendret.\n\nOutput kun den korrigerte teksten. Ikke legg til kommentarer eller forklaringer.",
"model_profile": "flash",
"category": "standard",
"default_direction": "tool_to_node",
"icon": "check-circle",
"color": "#10B981"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 3. Oppsummering
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000003',
'ai_preset',
'Oppsummering',
'open',
'{
"prompt": "Oppsummer denne teksten.\n\nRegler:\n1. Kondensr til 25 setninger som dekker det viktigste.\n2. Behold nøkkeltall, navn og konkrete påstander.\n3. Skriv i tredjeperson, saklig tone.\n4. Ikke legg til informasjon som ikke finnes i originalen.\n5. Skriv på norsk med mindre originalen er på engelsk.\n\nOutput kun oppsummeringen.",
"model_profile": "flash",
"category": "standard",
"default_direction": "node_to_tool",
"icon": "file-text",
"color": "#3B82F6"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 4. Oversett
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000004',
'ai_preset',
'Oversett',
'open',
'{
"prompt": "Oversett denne teksten.\n\nRegler:\n1. Hvis teksten er på norsk, oversett til engelsk.\n2. Hvis teksten er på engelsk, oversett til norsk (bokmål).\n3. Hvis teksten er på et annet språk, oversett til norsk (bokmål).\n4. Behold formatering (overskrifter, lister, avsnitt).\n5. Bevar fagtermer der det ikke finnes gode norske/engelske alternativer.\n6. Hold deg tro mot originalen — ikke forenkle eller utvid.\n\nOutput kun oversettelsen.",
"model_profile": "flash",
"category": "standard",
"default_direction": "both",
"icon": "languages",
"color": "#F59E0B"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 5. Skriv om for publisering
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000005',
'ai_preset',
'Skriv om for publisering',
'open',
'{
"prompt": "Skriv om denne teksten til et publiseringsklart artikkelformat.\n\nStruktur:\n1. Tittel (kort, fengende, informativ)\n2. Ingress (12 setninger som oppsummerer essensen)\n3. Brødtekst (ryddig, med avsnitt og eventuelt mellomtitler)\n\nRegler:\n- Behold alle fakta og påstander fra originalen.\n- Skriv i en saklig, profesjonell tone.\n- Bruk aktive setninger og unngå unødvendig fyord.\n- Skriv på norsk med mindre originalen er på engelsk.\n- Ikke legg til informasjon som ikke finnes i kilden.",
"model_profile": "standard",
"category": "standard",
"default_direction": "node_to_tool",
"icon": "pen-line",
"color": "#EC4899"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 6. Trekk ut fakta
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000006',
'ai_preset',
'Trekk ut fakta',
'open',
'{
"prompt": "Analyser denne teksten og trekk ut alle verifiserbare fakta.\n\nOutput som punktliste:\n- Konkrete påstander og fakta\n- Tall, statistikk og målinger\n- Direkte sitater (med hvem som sa det)\n- Datoer og tidspunkter\n- Navn på personer, organisasjoner, steder\n\nRegler:\n1. Kun fakta som faktisk står i teksten — ikke trekk slutninger.\n2. Hvert punkt skal være selvstendig forståelig.\n3. Marker usikre påstander med [usikkert].\n4. Skriv på norsk med mindre originalen er på engelsk.",
"model_profile": "standard",
"category": "standard",
"default_direction": "node_to_tool",
"icon": "list-checks",
"color": "#6366F1"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 7. Forenkle
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000007',
'ai_preset',
'Forenkle',
'open',
'{
"prompt": "Skriv om denne teksten i enklere språk.\n\nRegler:\n1. Bruk korte setninger og vanlige ord.\n2. Forklar fagtermer i parentes eller erstatt dem.\n3. Behold all viktig informasjon — ikke kutt innhold.\n4. Behold strukturen (avsnitt, lister, overskrifter).\n5. Målgruppe: en som ikke er ekspert på temaet.\n\nOutput kun den forenklede teksten.",
"model_profile": "flash",
"category": "standard",
"default_direction": "tool_to_node",
"icon": "minimize",
"color": "#14B8A6"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
-- =============================================================================
-- 8. Endre tone
-- =============================================================================
INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by)
VALUES (
'e0000000-a100-4000-a000-000000000008',
'ai_preset',
'Endre tone',
'open',
'{
"prompt": "Endre tonen i denne teksten.\n\nVelg riktig retning basert på originalen:\n- Hvis teksten er formell → gjør den uformell og engasjert\n- Hvis teksten er uformell → gjør den formell og saklig\n- Hvis teksten er nøytral → gjør den mer engasjert og personlig\n\nRegler:\n1. Behold alt innhold og alle fakta.\n2. Behold strukturen (avsnitt, lister, overskrifter).\n3. Endre kun tone, stil og ordvalg.\n4. Ikke legg til eller fjern informasjon.\n\nOutput kun teksten med endret tone.",
"model_profile": "flash",
"category": "standard",
"default_direction": "tool_to_node",
"icon": "volume-2",
"color": "#F97316"
}'::jsonb,
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
);
COMMIT;