fix(cost): korrekt Gemini 3.5 Flash Lite priser i kod + docs
gemini.ts estimateCostUsd: 2.5-Flash-priser (0.075/0.30) -> 3.5-Flash-Lite standard (0.30/2.50). Pessimistiska per-bild-estimat 0.0015->0.004, OCR 0.001->0.002. docs/10: Claude-modelltabell + kostnad-per-uppgift omskrivna till Gemini. 36/36 gront.
This commit is contained in:
+32
-34
@@ -3,44 +3,41 @@
|
|||||||
Priser verifierade 2026-08-02 (BenchLM, uppdaterad 2026-08-01, samt korsläst mot
|
Priser verifierade 2026-08-02 (BenchLM, uppdaterad 2026-08-01, samt korsläst mot
|
||||||
publika prislistor). **Kontrollera mot Anthropics officiella prissida innan avtal.**
|
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
|
> **Faktisk modell (kontrollerad mot koden):** All bildanalys, OCR och receptgenerering körs på
|
||||||
> bildanalys/OCR (`GEMINI_MODEL`-default i `apps/api/src/config.ts` + `packages/ai-contracts/src/gemini.ts`),
|
> **Gemini 3.5 Flash Lite** (`GEMINI_MODEL`-default i `apps/api/src/config.ts` +
|
||||||
> INTE Claude. Aktuellt standard-pris: **$0,30/1M input, $2,50/1M output** → **≈ $0,003 (0,03 kr)
|
> `packages/ai-contracts/src/gemini.ts`). Priserna nedan är verifierade mot Google (2026) och
|
||||||
> per skanning** i medelkvalitet. Claude-tabellen nedan är arv och överskattar AI-kostnaden ~3,3×.
|
> speglar `estimateCostUsd` i koden.
|
||||||
> 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.
|
|
||||||
|
|
||||||
## Aktuella modeller och listpriser (USD per miljon tokens, in/ut)
|
## Aktuella modeller och listpriser (USD per miljon tokens, in/ut)
|
||||||
|
|
||||||
| Modell | Input | Output | Roll i appen |
|
| Modell | Input | Output | Roll i appen |
|
||||||
| ---------------- | ----- | ----------------------- | ----------------------------------------------------------- |
|
| ------------------------------------- | ----- | ------ | -------------------------------------------------------------- |
|
||||||
| Claude Haiku 4.5 | $1 | $5 | Arbetshäst: bildanalys, OCR, normalisering, craving-parsing |
|
| Gemini 3.5 Flash Lite (standard) | $0,30 | $2,50 | Arbetshäst: all bildanalys, OCR, receptstrukturering (Skiva 1) |
|
||||||
| Claude Sonnet 5 | $2 | $10 (t.o.m. 2026-08-31) | Fallback vid låg confidence; receptstrukturering; veckoplan |
|
| Gemini 3.5 Flash Lite (batch) | $0,15 | $1,25 | Asynkrona nattjobb: minnesuppdatering, batch-generering |
|
||||||
| Claude Opus 5 | $5 | $25 | Endast evals/svåraste moderering – inte i volymflöden |
|
| Premium-eskalering (Skiva 2, framtid) | – | – | Större modell vid låg confidence (spec §33) – ej i volym ännu |
|
||||||
| Claude Fable 5 | $10 | $50 | Används ej i volymflöden |
|
|
||||||
|
|
||||||
Hävstänger: cache-träffar 10 % av inputpris; Batch API −50 % (perfekt för nattliga
|
Hävstänger: batch-tier −50 %; context caching sänker upprepad input; AAMOS-specialistmodeller
|
||||||
minnes-/träningsjobb). AAMOS specialistmodeller ersätter över tid externa anrop för
|
ersätter över tid externa anrop för de vanligaste bilduppgifterna (spec §33) → kostnaden nedan
|
||||||
de vanligaste bilduppgifterna (spec §33) → kostnaden nedan är ett tak, inte ett golv.
|
ä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
|
Antaget: bild ≈ 1 000 tokens (Gemini-tiling, A1), systemprompt+kontext ≈ 500–1 000 in,
|
||||||
800 ut (A2), 80 % av anropen klaras av Haiku, 20 % eskalerar till Sonnet (A3),
|
strukturerad JSON-output 400–1 200 ut (A2), växelkurs 10,50 SEK/USD (A4). All bildanalys på
|
||||||
växelkurs 10,50 SEK/USD (A4).
|
Gemini 3.5 Flash Lite standard-tier – ingen modell-eskalering i Skiva 1.
|
||||||
|
|
||||||
| Uppgift | Tokens (in/ut) | Haiku | Sonnet | Blandad (80/20) |
|
| Uppgift | Tokens (in/ut) | Kostnad (Gemini 3.5 Flash Lite) |
|
||||||
| ------------------------------- | -------------- | --------------- | ------ | -------------------- |
|
| ------------------------------- | -------------- | ------------------------------- |
|
||||||
| Kyl-/skafferibild (2 bilder) | 4 000 / 800 | $0,008 | $0,016 | **$0,010 ≈ 0,10 kr** |
|
| Kyl-/skafferibild (2 bilder) | 4 000 / 800 | **$0,003 ≈ 0,03 kr** |
|
||||||
| Kvitto | 3 000 / 1 000 | $0,008 | $0,016 | $0,010 |
|
| Kvitto | 3 000 / 1 000 | $0,003 |
|
||||||
| Tallriksfoto | 2 500 / 500 | $0,005 | $0,010 | $0,006 |
|
| Tallriksfoto | 2 500 / 500 | $0,002 |
|
||||||
| Näringsetikett/datum | 2 000 / 400 | $0,004 | $0,008 | $0,005 |
|
| Näringsetikett/datum | 2 000 / 400 | $0,002 |
|
||||||
| Receptstrukturering (text) | 2 500 / 1 200 | – | $0,017 | $0,017 |
|
| Receptstrukturering (text) | 2 500 / 1 200 | $0,004 |
|
||||||
| Veckoplan | 3 000 / 800 | – | $0,014 | $0,014 |
|
| Veckoplan | 3 000 / 800 | $0,003 |
|
||||||
| Minnesuppdatering (batch, natt) | 4 000 / 600 | $0,0035 (batch) | – | $0,0035 |
|
| Minnesuppdatering (batch, natt) | 4 000 / 600 | $0,0014 (batch-tier) |
|
||||||
|
|
||||||
**Tumregel: ≈ $0,003 ≈ 0,03 kr per AI-skanning.** Deterministiska flöden
|
**Tumregel: ≈ $0,003 ≈ 0,03 kr per AI-skanning.** Deterministiska flöden (rekommendationer,
|
||||||
(rekommendationer, nutrition, streckkod, FEFO) kostar $0.
|
nutrition, streckkod, FEFO) kostar $0.
|
||||||
|
|
||||||
## Kostnad per användartyp och månad
|
## 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
|
## Känslighet
|
||||||
|
|
||||||
Dubbla bildstorleken (A1) → +60 % på skanningskostnad. Halverad Haiku-andel (A3) →
|
Dubbla bildstorleken (A1) → +~30 % (fler bild-tokens). Fler upptäckta varor per bild → mer,
|
||||||
+50 %. Bevaka därför: tokens/bild i verklig trafik, eskaleringsandel, kostnad per
|
eftersom output ($2,50/1M) dominerar över input ($0,30/1M). Bevaka därför: tokens/bild och
|
||||||
uppgiftstyp (finns i scan_jobs.cost_usd → adminpanelen) med larm på dagsbudget (§58).
|
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)
|
## 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 |
|
| 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** |
|
| **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.
|
(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
|
Efter trial – om alla faller till gratis (5 skanningar/mån): 100 000 × 5 × $0,003 + Firebase
|
||||||
|
|||||||
@@ -115,10 +115,10 @@ function requestOnce(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Estimated max cost per image call in USD (pessimistic). */
|
/** 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. */
|
/** 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 {
|
export interface BudgetStore {
|
||||||
/** Return current daily spend in USD. */
|
/** Return current daily spend in USD. */
|
||||||
@@ -1013,8 +1013,8 @@ Språk: ${lang}.`;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private estimateCostUsd(inputTokens: number, outputTokens: number): number {
|
private estimateCostUsd(inputTokens: number, outputTokens: number): number {
|
||||||
// Gemini 2.5 Flash pricing (Aug 2025): ~$0.075/1M input, $0.30/1M output.
|
// Gemini 3.5 Flash Lite standard-tier pricing (2026): $0.30/1M input, $2.50/1M output.
|
||||||
return inputTokens * 0.075e-6 + outputTokens * 0.3e-6;
|
return inputTokens * 0.3e-6 + outputTokens * 2.5e-6;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async isOverBudget(estimateUsd: number): Promise<boolean> {
|
private async isOverBudget(estimateUsd: number): Promise<boolean> {
|
||||||
|
|||||||
Reference in New Issue
Block a user