fix(ai): balansera datum-prompt – tolka datum med dagens datum som kontext
Forra andringen blev for strikt: modellen nollade ALLA datum eftersom svenska stamplar (DDMMYY/YYMMDD) alltid ar "tvetydiga". Nu far modellen dagens datum och tolkar 2-siffriga artal som narmaste rimliga ar runt idag (04-09-26 -> 2026-09-04, inte 2024). Kod-sparren isPlausibleFoodDate star kvar som skydd mot grova fel. promptVersion -> gemini-fridge-v3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZdew6cWn1MeHqoYWFfxzo
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user