diff --git a/packages/ai-contracts/src/gemini.ts b/packages/ai-contracts/src/gemini.ts index 5744786..8fd3a98 100644 --- a/packages/ai-contracts/src/gemini.ts +++ b/packages/ai-contracts/src/gemini.ts @@ -316,7 +316,7 @@ export class GeminiAamosClient implements AamosClient { model: config.model ?? "gemini-3.5-flash-lite", timeoutMs: config.timeoutMs ?? 60_000, dailyBudgetUsd: config.dailyBudgetUsd ?? 0, - promptVersion: config.promptVersion ?? "gemini-fridge-v2", + promptVersion: config.promptVersion ?? "gemini-fridge-v3", fetchImpl: config.fetchImpl ?? customNodeFetch, budgetStore: config.budgetStore, }; @@ -891,6 +891,7 @@ Språk: ${lang}.`; ): string { const place = taskType === "ANALYZE_FRIDGE_IMAGE" ? "kylskåpet" : "skafferiet"; const lang = locale.languageTag.startsWith("en") ? "English" : "Swedish"; + const today = new Date().toISOString().slice(0, 10); return `Du är en noggrann livsmedelsassistent för svenska hushåll. Användaren har fotat ${place} (${locationType}). Identifiera varje livsmedelsprodukt du ser. För varje produkt, svara med: @@ -899,14 +900,14 @@ Identifiera varje livsmedelsprodukt du ser. För varje produkt, svara med: - kvantitet: siffra (t.ex. 1, 500, 1.5) - enhet: förkortning som l, g, ml, st, förpackning - kategori: t.ex. mejeri, frukt, grönt, kött, skafferi -- bastaFore: bäst-före-datum ENDAST om det står tydligt och fullständigt utskrivet med årtal (YYYY-MM-DD), annars null -- sistaForbruk: sista förbrukningsdatum ENDAST om det står tydligt och fullständigt utskrivet med årtal (YYYY-MM-DD), annars null +- bastaFore: bäst-före-datum om det går att läsa (YYYY-MM-DD), annars null +- sistaForbruk: sista förbrukningsdatum om det går att läsa (YYYY-MM-DD), annars null - konfidens: 0.0–1.0 Viktigt: - Kvantitet: uppskatta den FAKTISKA synliga/kvarvarande mängden, inte tryckta förpackningsantal. Ett tomt eller öppnat paket ska ha låg kvantitet (nära 0), även om lådan säger t.ex. "24-pack". Är du osäker, gissa lågt och sänk konfidensen. - Svenska mjölk- och mejerifärger: röd förpackning = standardmjölk 3%, grön = mellanmjölk 1,5%, blå = lättmjölk 0,5%. Använd färgen för att avgöra fetthalt. -- Datum: gissa ALDRIG årtal eller datum. Många förpackningar har kryptiska sifferkoder (tillverknings-/partinummer) som INTE är bäst-före-datum. Ange ett datum bara om det står klart och otvetydigt vilket datum OCH vilket årtal som avses. Är koden tvetydig, delvis dold eller kan läsas på flera sätt → returnera null. Ett påhittat årtal är ett FEL. Hellre null än ett gissat datum. +- Datum: idag är det ${today}. Svenska stämplar skrivs oftast DDMMYY eller YYMMDD (t.ex. "040926" = 4 sept 2026). Tolka ALLTID årtalet som det närmaste rimliga året runt idag — ett bäst-före ligger nära nutid, aldrig flera år bort. Läs av datum som står vid "bäst före"/"sista förbrukning" eller är tydligt utskrivna. Är siffrorna en ren tillverknings-/partikod utan datummening, eller helt oläsliga → null. - Hellre lägre konfidens än en exakt gissning när du är osäker. Svara ENDAST med giltig JSON i exakt detta format: @@ -987,10 +988,11 @@ Språk: ${lang}.`; private buildExpiryPrompt(locale: LocaleContext): string { const lang = locale.languageTag.startsWith("en") ? "English" : "Swedish"; + const today = new Date().toISOString().slice(0, 10); return `Du är en OCR-assistent för svenska livsmedelsförpackningar. Bilden visar ett bäst-före-datum eller sista förbrukningsdatum. Returnera: -- date: datum i format YYYY-MM-DD, ENDAST om det står klart och otvetydigt inklusive årtal. Gissa aldrig årtalet. Är koden kryptisk, delvis dold eller tvetydig → null. Hellre null än ett gissat datum. +- date: datum i format YYYY-MM-DD, eller null om ej läsbart. Idag är det ${today}. Svenska stämplar är oftast DDMMYY/YYMMDD — tolka årtalet som närmaste rimliga år runt idag, aldrig flera år bort. - dateKind: "best_before" för "bäst före", "use_by" för "sista förbrukningsdag", annars null. - confidence: 0.0–1.0.