Impulse AI Docs
Intern dokumentasjon
skipLink.label

AI Pipeline

Dokumentasjon av Impulse AI sin AI-pipeline — fra workload-registrering og modellvalg til prompt-design og kostnadsovervaking. All AI-funksjonalitet drives av Anthropic Claude (via Vercel AI SDK) for tekstgenerering og Voyage AI for embedding-generering.

Arkitekturoversikt

heading.anchorLabel
apps/api/src/ai/
├── infrastructure/ # AI SDK, Anthropic-konfigurasjon, Voyage-klient
│ ├── ai-sdk.ts # Vercel AI SDK wrapper med logging og tracking
│ ├── anthropic/
│ │ └── config.ts # Modell-IDer, priser, timeouts, token-grenser
│ ├── voyage/
│ │ ├── client.ts # Voyage AI HTTP-klient
│ │ └── embedding.ts # Embedding-tjeneste (generering + sok)
│ ├── access/ # Tier-basert tilgangskontroll
│ ├── tracking/ # Brukssporing til ai_usage-tabell
│ └── safety/ # Innholdsvalidering
├── registry/
│ ├── workloads.ts # Sentralt register over alle AI-workloads
│ ├── types.ts # WorkloadType, WorkloadConfig, ModelTier
│ └── service.ts # Workload-utforing
├── shared/
│ ├── prompt-builder.ts # Prompt-konstruksjon med konvensjoner
│ ├── conventions.ts # Spraklige og stilistiske regler
│ ├── static-labels.ts # Statiske stegnavn (fallback)
│ ├── schemas/ # Zod-skjemaer for strukturerte outputs
│ └── concept-types.ts # Domene-spesifikke konsepttyper
├── impulses/
│ └── classification/ # Impulsklassifisering og anrikning
├── sessions/
│ ├── step-guidance.ts # 5-stegs veiledningsgenerering
│ └── session-summary.ts # Oppsummeringsgenerering
├── check-ins/
│ └── assessment/ # Sjekk-inn AI-vurdering
└── insights/
├── pulse.ts # Pulsanalyse (rask regenerering)
├── narrative.ts # Narrativ innsikt (dypere analyse)
├── embedding-analytics.ts # Embedding-basert monstergjenkjenning
└── transformation-distillation.ts # Transformasjonsekstrakt

AI-konfigurasjon er sentralisert i apps/api/src/ai/infrastructure/anthropic/config.ts. Alle modell-tier defaulter til Claude Sonnet 4.6, med mulighet for override via miljøvariabler.

Tre modell-tier

heading.anchorLabel
TierStandard modellFormaalOverride-variabel
fastclaude-sonnet-4-6Strukturert klassifisering der presisjon > prosekvalitetAI_MODEL_FAST
balancedclaude-sonnet-4-6Brukervennlig kreativ tekst der sprakkvalitet ER produktetAI_MODEL_BALANCED
qualityclaude-sonnet-4-6Hoyinnsats langform-innhold som krever dyp resonneringAI_MODEL_QUALITY

Konfigurasjon

heading.anchorLabel
export const AI_CONFIG = {
models: {
fast: process.env.AI_MODEL_FAST || 'claude-sonnet-4-6',
balanced: process.env.AI_MODEL_BALANCED || 'claude-sonnet-4-6',
quality: process.env.AI_MODEL_QUALITY || 'claude-sonnet-4-6',
},
tokenLimits: {
classification: 1024, // Impulsanrikning
guidance: 500, // Sesjonsveiledning
insight: 1500, // Innsiktgenerering
summary: 3000, // Sesjonsdokument
},
temperature: {
classification: 0.4, // Balansert for anrikningskvalitet
guidance: 0.7, // Moderat for naturlig sprak
creative: 0.8, // Hoy for dokumentgenerering
},
defaultTimeout: 30000, // 30 sekunder
longRunningTimeout: 60000, // 60 sekunder
maxRetries: 3,
}

Workload-register

heading.anchorLabel

Alle AI-workloads er registrert i WORKLOAD_REGISTRY — en sentral kilde til sannhet for konfigurasjon, modellvalg og kostnadsestimater.

Registrerte workloads

heading.anchorLabel
WorkloadKategoriTiermaks tokensTempKostnad/kall
classify_enrichmentimpulsebalanced4000.4~$0.004
classify_analyticalimpulsefast10240.2~$0.002
check_in_assesscheck_inbalanced5120.4~$0.002
guidancesessionbalanced5000.7~$0.003
summarysessionquality30000.8~$0.010
insightinsightquality15000.7~$0.005

Impulsklassifisering

heading.anchorLabel

Nar en bruker fanger en impuls, kjores to AI-workloads asynkront via BullMQ:

1. Analytisk klassifisering (classify_analytical)

heading.anchorLabel

Strukturert analyse med classification, confidence, lag og omrader. Bruker fast-tier.

Output:

  • Classification (contraction/expansion) med confidence score
  • Primaert og sekundaert transformasjonslag
  • Relevante livsomrader med relevans-score
  • Innholdsvalidering (valid/low_confidence/gibberish)

2. Kreativ anrikning (classify_enrichment)

heading.anchorLabel

Brukervennlig tekst: tittel, sammendrag og sesjonshook. Bruker balanced-tier.

Output:

  • Tittel (3-8 ord)
  • Sammendrag (3-5 setninger, empatisk)
  • Sesjonshook (kort invitasjon til prosessering)

Begge resultater kombineres i impulses.ai_analysis JSONB-kolonnen.

Sesjonsveiledning

heading.anchorLabel

Steg-for-steg AI-veiledning (guidance)

heading.anchorLabel

Hver av de 5 sesjonsstegene far personlig AI-veiledning basert pa brukerens impuls.

Prompt-spesifikasjoner:

EgenskapVerdi
Lengde50-80 ord, 4-6 setninger
ToneVarm-direkte (“klok venn”)
StilFlytende prosa, ingen punktlister
TilnærmingInvitasjoner (“Legg merke til…”, “Kjenn…”) — IKKE kommandoer
SprakBrukerens sprakpreferanse eller detektert fra impulstekst

Forbudte monstre:

  • Sporsmaalstegn i veiledningstekst
  • Sjekklister eller sekvensielle instruksjoner
  • Klinisk/terapeutisk sprak
  • Tall, vurderinger, skalaer

Contraction-steg

heading.anchorLabel
StegFormaalKjernemekanisme
C1: FeelSomatisk bevissthetApent invitasjon til a kjenne kroppen
C2: OwnErkjenn energi-investering”Jeg innrommer at jeg nyter folelsen av a tenke at…”
C3: ShiftTilstand definerer virkelighet”Din tilstand definerer din virkelighet” (MA vaere med)
C4: EnvisionVisualiser ny tilstandKroppsforankring — forankre ny folelse i kroppen
C5: ReleaseSlipp og affirmerPersonlig affirmering + slipp gammel moenster

Expansion-steg

heading.anchorLabel
StegFormaalKjernemekanisme
E1: FeelKjenn intensjonenKroppen som sannhetsdetektor — baerer dette ekte energi?
E2: OwnKlar motivasjonApent sporsmaal “Hvorfor er dette viktig for deg?”
E3: ShiftTilstand definerer virkelighetIdentisk med C3 (bevisst designvalg)
E4: EnvisionIdentitetsvisjon”Se hvem du ER nar dette allerede er sant”
E5: ReleaseSlipp med tillitLosrivelse med overveldende selvtillit

Sesjonoppsummering (summary)

heading.anchorLabel

Etter fullfort sesjon genererer quality-tier en komplett oppsummering med:

  • Tittel og sammendrag
  • Utgangspunkt og ny forstaelse
  • Gjennombrudd (lista)
  • Neste steg (handlingsanbefalinger)
  • Steg-for-steg prosessgjennomgang
  • Refleksjon

Sjekk-inn vurdering

heading.anchorLabel

BE->DO->RECEIVE filosofi

heading.anchorLabel

Sjekk-inn-funksjonen (check_in_assess) vurderer brukerens navaerende tilstand basert pa BE->DO->RECEIVE-rammeverket:

  • BE (vaere): Endre indre tilstand
  • DO (gjore): Handle fra riktig tilstand
  • RECEIVE (motta): Motta det du onsker

Vurderingens jobb: Avsløre hva brukerens GJORING (DO) skaper i deres VAEREN (BE) — tilstanden de ikke kan se fordi de er inni den.

KlassifiseringFargeBeskrivelse
Positive.brandBrukeren er i en god tilstand
Contraction.classContractionSammentrekning oppdaget — kan konverteres til impuls
Expansion.classExpansionUtvidelse oppdaget — kan konverteres til impuls

Contraction/expansion-sjekk-inn kan konverteres til impulser via convertToImpulse-funksjonen, som kobler den nye impulsen til sjekk-innen via source_check_in_id.

Innsiktgenerering

heading.anchorLabel

Innsikter genereres i to faser:

Pulse (rask regenerering)

heading.anchorLabel

pulse.ts genererer raske oppdateringer nar nye impulser fanges. Bruker quality-tier.

Narrative (dypere analyse)

heading.anchorLabel

narrative.ts genererer dypere narrative innsikter basert pa embedding-analytics. Krever at impulse-embedding er ferdig for denne kjores (to-fase regenerering).

Embedding-basert analytikk

heading.anchorLabel

embedding-analytics.ts bruker Voyage AI embeddings og pgvector for:

  • Omradefordeling (hvilke livsomrader dominerer)
  • Lagfordeling (fysisk, emosjonell, mental, spirituell)
  • Balanse mellom contraction og expansion
  • Semantisk klynging av lignende impulser

Transformasjons-destillering

heading.anchorLabel

transformation-distillation.ts ekstra vekstmonstre fra fullforte sesjoner for dypere innsikter.

Embedding-arkitektur

heading.anchorLabel

Embedding-generering bruker Voyage AI (voyage-3-lite) for 512-dimensjonale vektorer.

EgenskapVerdi
Modellvoyage-3-lite
Dimensjoner512
Lagringpgvector vector(512)
LikhetsmatriseCosine similarity
Standard terskel0.7

Hva embeddes?

heading.anchorLabel
InnholdstypeTabellKolonne
Impulstekstimpulsesembedding
Sesjonsrefleksjon + nokkelfunnsessionsembedding
Sjekk-inn-innholdcheck_insembedding

To-fase regenerering

heading.anchorLabel

Nar en ny impuls fanges, kjores embedding og innsiktregenerering i sekvens:

  1. Embedding-fase: embedImpulse genererer vektor via Voyage AI
  2. Regen-fase: Narrative-innsikter regenereres ETTER embedding er komplett

AI SDK-integrasjon

heading.anchorLabel

Impulse AI bruker Vercel AI SDK (@ai-sdk/anthropic) som tynt lag over Anthropic API.

Hva AI SDK hhandterer

heading.anchorLabel
  • Zod-til-JSON-Schema konvertering
  • Responsvalidering mot skjema
  • Anthropic prompt caching (kostnadsreduksjon)
  • Automatisk retry pa HTTP-feil (429, 500, 503)

Hva vi hhandterer selv

heading.anchorLabel
  • Timeout-retry: AI SDK retrier ikke pa AbortError — vi implementerer egen timeout-retry
  • Brukssporing: Logging til ai_usage-tabell etter hvert kall
  • Tier-basert tilgang: Sjekk av abonnement for AI-tilgang
  • Workload-routing: Valg av riktig modell og konfigurasjon per workload
// Forenklet workload-utforing
const result = await executeWorkload<MySchema>({
system: buildSystemPrompt(context),
prompt: buildUserPrompt(input),
model: AI_CONFIG.models.balanced,
maxTokens: 500,
temperature: 0.7,
workloadType: 'guidance',
userId: user.id,
})

Kostnadsmodell

heading.anchorLabel

Priser per modell

heading.anchorLabel
ModellInput (per 1M tokens)Output (per 1M tokens)
claude-sonnet-4-6$3.00$15.00
claude-haiku-4-5$1.00$5.00

Estimert kostnad per operasjon

heading.anchorLabel
OperasjonEstimert kostnad
Impulsklassifisering (analytisk + kreativ)~$0.006
Sesjonsveiledning (5 steg)~$0.015
Sesjonoppsummering~$0.010
Sjekk-inn-vurdering~$0.002
Innsiktgenerering~$0.005
Komplett sesjonssyklus~$0.056

Kostnadsovervaking

heading.anchorLabel

All AI-bruk logges i ai_usage-tabellen med:

  • workload_type: Type operasjon
  • model: Modell brukt
  • prompt_tokens / completion_tokens: Tokenforbruk
  • estimated_cost: Beregnet kostnad i USD
  • duration_ms: Tidsforbruk
  • user_id, impulse_id, session_id: Kontekstkobling

Rate Limiting

heading.anchorLabel

AI-bruk begrenses per bruker basert pa abonnementstier:

EgenskapVerdi
Per-minutt-grense100 requests
Tidsvindu15 minutter
Manedlig sporingai_rate_limits-tabell

Kvoter for impulsfangst og sjekk-inn konfigureres via subscription_config-tabellen og sjekkes med check_impulse_quota() PostgreSQL-funksjonen.