diff --git a/docs/10-ai-kostnad.md b/docs/10-ai-kostnad.md index 33e97b5..d3f4fe1 100644 --- a/docs/10-ai-kostnad.md +++ b/docs/10-ai-kostnad.md @@ -3,44 +3,41 @@ Priser verifierade 2026-08-02 (BenchLM, uppdaterad 2026-08-01, samt korsläst mot publika prislistor). **Kontrollera mot Anthropics officiella prissida innan avtal.** -> **RÄTTELSE (kontrollerad mot koden 2026):** Appen använder **Gemini 3.5 Flash Lite** för -> bildanalys/OCR (`GEMINI_MODEL`-default i `apps/api/src/config.ts` + `packages/ai-contracts/src/gemini.ts`), -> INTE Claude. Aktuellt standard-pris: **$0,30/1M input, $2,50/1M output** → **≈ $0,003 (0,03 kr) -> per skanning** i medelkvalitet. Claude-tabellen nedan är arv och överskattar AI-kostnaden ~3,3×. -> OBS: kodens egen `estimateCostUsd` använder gamla 2.5-Flash-priser ($0,075/$0,30) och -> UNDERSKATTAR därmed faktisk spend ~4–8× — bör rättas i koden. +> **Faktisk modell (kontrollerad mot koden):** All bildanalys, OCR och receptgenerering körs på +> **Gemini 3.5 Flash Lite** (`GEMINI_MODEL`-default i `apps/api/src/config.ts` + +> `packages/ai-contracts/src/gemini.ts`). Priserna nedan är verifierade mot Google (2026) och +> speglar `estimateCostUsd` i koden. ## Aktuella modeller och listpriser (USD per miljon tokens, in/ut) -| Modell | Input | Output | Roll i appen | -| ---------------- | ----- | ----------------------- | ----------------------------------------------------------- | -| Claude Haiku 4.5 | $1 | $5 | Arbetshäst: bildanalys, OCR, normalisering, craving-parsing | -| Claude Sonnet 5 | $2 | $10 (t.o.m. 2026-08-31) | Fallback vid låg confidence; receptstrukturering; veckoplan | -| Claude Opus 5 | $5 | $25 | Endast evals/svåraste moderering – inte i volymflöden | -| Claude Fable 5 | $10 | $50 | Används ej i volymflöden | +| Modell | Input | Output | Roll i appen | +| ------------------------------------- | ----- | ------ | -------------------------------------------------------------- | +| Gemini 3.5 Flash Lite (standard) | $0,30 | $2,50 | Arbetshäst: all bildanalys, OCR, receptstrukturering (Skiva 1) | +| Gemini 3.5 Flash Lite (batch) | $0,15 | $1,25 | Asynkrona nattjobb: minnesuppdatering, batch-generering | +| Premium-eskalering (Skiva 2, framtid) | – | – | Större modell vid låg confidence (spec §33) – ej i volym ännu | -Hävstänger: cache-träffar 10 % av inputpris; Batch API −50 % (perfekt för nattliga -minnes-/träningsjobb). AAMOS specialistmodeller ersätter över tid externa anrop för -de vanligaste bilduppgifterna (spec §33) → kostnaden nedan är ett tak, inte ett golv. +Hävstänger: batch-tier −50 %; context caching sänker upprepad input; AAMOS-specialistmodeller +ersätter över tid externa anrop för de vanligaste bilduppgifterna (spec §33) → kostnaden nedan +är ett tak, inte ett golv. -## Kostnad per uppgift (ANTAGANDEN markerade) +## Kostnad per uppgift -Antaget: bild ≈ 1 500 tokens (A1), systemprompt+kontext 1 000 in / strukturerad output -800 ut (A2), 80 % av anropen klaras av Haiku, 20 % eskalerar till Sonnet (A3), -växelkurs 10,50 SEK/USD (A4). +Antaget: bild ≈ 1 000 tokens (Gemini-tiling, A1), systemprompt+kontext ≈ 500–1 000 in, +strukturerad JSON-output 400–1 200 ut (A2), växelkurs 10,50 SEK/USD (A4). All bildanalys på +Gemini 3.5 Flash Lite standard-tier – ingen modell-eskalering i Skiva 1. -| Uppgift | Tokens (in/ut) | Haiku | Sonnet | Blandad (80/20) | -| ------------------------------- | -------------- | --------------- | ------ | -------------------- | -| Kyl-/skafferibild (2 bilder) | 4 000 / 800 | $0,008 | $0,016 | **$0,010 ≈ 0,10 kr** | -| Kvitto | 3 000 / 1 000 | $0,008 | $0,016 | $0,010 | -| Tallriksfoto | 2 500 / 500 | $0,005 | $0,010 | $0,006 | -| Näringsetikett/datum | 2 000 / 400 | $0,004 | $0,008 | $0,005 | -| Receptstrukturering (text) | 2 500 / 1 200 | – | $0,017 | $0,017 | -| Veckoplan | 3 000 / 800 | – | $0,014 | $0,014 | -| Minnesuppdatering (batch, natt) | 4 000 / 600 | $0,0035 (batch) | – | $0,0035 | +| Uppgift | Tokens (in/ut) | Kostnad (Gemini 3.5 Flash Lite) | +| ------------------------------- | -------------- | ------------------------------- | +| Kyl-/skafferibild (2 bilder) | 4 000 / 800 | **$0,003 ≈ 0,03 kr** | +| Kvitto | 3 000 / 1 000 | $0,003 | +| Tallriksfoto | 2 500 / 500 | $0,002 | +| Näringsetikett/datum | 2 000 / 400 | $0,002 | +| Receptstrukturering (text) | 2 500 / 1 200 | $0,004 | +| Veckoplan | 3 000 / 800 | $0,003 | +| Minnesuppdatering (batch, natt) | 4 000 / 600 | $0,0014 (batch-tier) | -**Tumregel: ≈ $0,003 ≈ 0,03 kr per AI-skanning.** Deterministiska flöden -(rekommendationer, nutrition, streckkod, FEFO) kostar $0. +**Tumregel: ≈ $0,003 ≈ 0,03 kr per AI-skanning.** Deterministiska flöden (rekommendationer, +nutrition, streckkod, FEFO) kostar $0. ## Kostnad per användartyp och månad @@ -77,9 +74,10 @@ intäkt sjunker från ~12 % till ~4 %. Firebase Auth tillkommer först vid 60 00 ## Känslighet -Dubbla bildstorleken (A1) → +60 % på skanningskostnad. Halverad Haiku-andel (A3) → -+50 %. Bevaka därför: tokens/bild i verklig trafik, eskaleringsandel, kostnad per -uppgiftstyp (finns i scan_jobs.cost_usd → adminpanelen) med larm på dagsbudget (§58). +Dubbla bildstorleken (A1) → +~30 % (fler bild-tokens). Fler upptäckta varor per bild → mer, +eftersom output ($2,50/1M) dominerar över input ($0,30/1M). Bevaka därför: tokens/bild och +output-tokens i verklig trafik, kostnad per uppgiftstyp (usageMetadata → ai_usage_counters / +scan_jobs.cost_usd → adminpanelen) med larm på dagsbudget (§58). ## Scenario: 100 000 trial-användare dag 1 (onboarding-toppen) @@ -93,7 +91,7 @@ upp alla 25 på bilder i **medelkvalitet** via **Gemini 3.5 Flash Lite** (~$0,00 | Firebase Auth (100k MAU) | 50k gratis + 50k × $0,0055 | $275/mån ≈ 2 900 kr/mån | | **Totalt onboarding-månaden** | | **≈ $7 775 ≈ 82 000 kr** | -AI står för ~97 %, men hela toppen är nu ~3,3× lägre än det gamla Claude-antagandet +AI står för ~97 %, men hela toppen är nu ~3,3× lägre än den tidigare felräkningen (263 000 kr → 79 000 kr) eftersom Flash Lite är långt billigare per token. Efter trial – om alla faller till gratis (5 skanningar/mån): 100 000 × 5 × $0,003 + Firebase diff --git a/packages/ai-contracts/src/gemini.ts b/packages/ai-contracts/src/gemini.ts index 0391e69..5aa2cb7 100644 --- a/packages/ai-contracts/src/gemini.ts +++ b/packages/ai-contracts/src/gemini.ts @@ -115,10 +115,10 @@ function requestOnce( } /** Estimated max cost per image call in USD (pessimistic). */ -const COST_ESTIMATE_PER_IMAGE_USD = 0.0015; +const COST_ESTIMATE_PER_IMAGE_USD = 0.004; /** Estimated max cost per simple OCR image call in USD. */ -const COST_ESTIMATE_PER_OCR_IMAGE_USD = 0.001; +const COST_ESTIMATE_PER_OCR_IMAGE_USD = 0.002; export interface BudgetStore { /** Return current daily spend in USD. */ @@ -1013,8 +1013,8 @@ Språk: ${lang}.`; } private estimateCostUsd(inputTokens: number, outputTokens: number): number { - // Gemini 2.5 Flash pricing (Aug 2025): ~$0.075/1M input, $0.30/1M output. - return inputTokens * 0.075e-6 + outputTokens * 0.3e-6; + // Gemini 3.5 Flash Lite standard-tier pricing (2026): $0.30/1M input, $2.50/1M output. + return inputTokens * 0.3e-6 + outputTokens * 2.5e-6; } private async isOverBudget(estimateUsd: number): Promise {