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",
|
model: config.model ?? "gemini-3.5-flash-lite",
|
||||||
timeoutMs: config.timeoutMs ?? 60_000,
|
timeoutMs: config.timeoutMs ?? 60_000,
|
||||||
dailyBudgetUsd: config.dailyBudgetUsd ?? 0,
|
dailyBudgetUsd: config.dailyBudgetUsd ?? 0,
|
||||||
promptVersion: config.promptVersion ?? "gemini-fridge-v2",
|
promptVersion: config.promptVersion ?? "gemini-fridge-v3",
|
||||||
fetchImpl: config.fetchImpl ?? customNodeFetch,
|
fetchImpl: config.fetchImpl ?? customNodeFetch,
|
||||||
budgetStore: config.budgetStore,
|
budgetStore: config.budgetStore,
|
||||||
};
|
};
|
||||||
@@ -891,6 +891,7 @@ Språk: ${lang}.`;
|
|||||||
): string {
|
): string {
|
||||||
const place = taskType === "ANALYZE_FRIDGE_IMAGE" ? "kylskåpet" : "skafferiet";
|
const place = taskType === "ANALYZE_FRIDGE_IMAGE" ? "kylskåpet" : "skafferiet";
|
||||||
const lang = locale.languageTag.startsWith("en") ? "English" : "Swedish";
|
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}).
|
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:
|
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)
|
- kvantitet: siffra (t.ex. 1, 500, 1.5)
|
||||||
- enhet: förkortning som l, g, ml, st, förpackning
|
- enhet: förkortning som l, g, ml, st, förpackning
|
||||||
- kategori: t.ex. mejeri, frukt, grönt, kött, skafferi
|
- 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
|
- bastaFore: bäst-före-datum om det går att läsa (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
|
- sistaForbruk: sista förbrukningsdatum om det går att läsa (YYYY-MM-DD), annars null
|
||||||
- konfidens: 0.0–1.0
|
- konfidens: 0.0–1.0
|
||||||
|
|
||||||
Viktigt:
|
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.
|
- 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.
|
- 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.
|
- Hellre lägre konfidens än en exakt gissning när du är osäker.
|
||||||
|
|
||||||
Svara ENDAST med giltig JSON i exakt detta format:
|
Svara ENDAST med giltig JSON i exakt detta format:
|
||||||
@@ -987,10 +988,11 @@ Språk: ${lang}.`;
|
|||||||
|
|
||||||
private buildExpiryPrompt(locale: LocaleContext): string {
|
private buildExpiryPrompt(locale: LocaleContext): string {
|
||||||
const lang = locale.languageTag.startsWith("en") ? "English" : "Swedish";
|
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.
|
return `Du är en OCR-assistent för svenska livsmedelsförpackningar. Bilden visar ett bäst-före-datum eller sista förbrukningsdatum.
|
||||||
|
|
||||||
Returnera:
|
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.
|
- dateKind: "best_before" för "bäst före", "use_by" för "sista förbrukningsdag", annars null.
|
||||||
- confidence: 0.0–1.0.
|
- confidence: 0.0–1.0.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user