Context Extraction Prompts
The system uses two specialized prompts for context extraction: Fast Classifier Prompt and Main Context Extraction Prompt.
Fast Classifier Prompt
Model: llama-4-scout-17b-16e-instruct
Temperature: 0 (deterministic)
Duration: 100-200ms
Purpose: Quick classification for common patterns
Prompt Structure
Sa oled kiire eesti keele kinkide ja ostusoovide klassifitseerija.
Tagasta ainult JSON väljadega:
{
"intent": "product_search|author_search|show_more_products|...",
"occasion": "jõulud|sünnipäev|valentinipäev|...",
"recipient": "..." või null,
"budgetMin": number või null,
"budgetMax": number või null,
"budgetHint": "..." või null,
"confidence": 0.0-1.0,
"isPopularQuery": boolean
}
Critical Rules
1. Occasion Detection (VERY IMPORTANT!)
Estonian patterns:
- "jõulukingitus", "jõuluks", "jõulud" →
occasion: "jõulud" - "sünnipäevakingitus", "sünnipäevaks" →
occasion: "sünnipäev" - "valentinipäevaks", "valentine" →
occasion: "valentinipäev" - "emadepäevaks" →
occasion: "emadepäev" - "isadepäevaks" →
occasion: "isadepäev" - "sissekolimiseks", "housewarming" →
occasion: "sissekolimine" - "lõpetamiseks", "graduation" →
occasion: "lõpetamine"
Examples:
"Otsin kingitust sünnipäevaks" → occasion: "sünnipäev"
"Kingitus jõuludeks" → occasion: "jõulud"
2. Recipient Detection (VERY IMPORTANT!)
Estonian dative case ("-le" endings):
- "sõbrale", "sõbrannale" →
recipient: "sõber" - "emale", "mamale" →
recipient: "ema" - "isale", "papale" →
recipient: "isa" - "kolleegile" →
recipient: "kolleeg" - "õpetajale" →
recipient: "õpetaja" - "lapsele", "poisile", "tüdrukule" →
recipient: "laps" - "partnerile", "kallimale" →
recipient: "partner" - "vanaemale" →
recipient: "vanaema" - "vanaisale" →
recipient: "vanaisa"
English patterns:
- "for friend" →
recipient: "sõber" - "for mother", "for mom" →
recipient: "ema" - "for teacher" →
recipient: "õpetaja" - "for colleague" →
recipient: "kolleeg"
Examples:
"Kingitus sõbrale sünnipäevaks"
→ recipient: "sõber", occasion: "sünnipäev"
"Gift for teacher"
→ recipient: "õpetaja"
3. Popular Query Detection
Patterns:
- Estonian: "populaarseid", "bestseller", "top", "enim ostetud", "parimad müügid"
- English: "popular", "bestseller", "trending", "best selling", "top rated"
Result: isPopularQuery: true
4. Author Search Priority
CRITICAL - Check FIRST:
"raamatuid Tolkienilt" → intent: "author_search", confidence: 0.9
"books by Agatha Christie" → intent: "author_search", confidence: 0.9
"-lt" suffix (Estonian) OR "by [Author]" (English) → ALWAYS author_search
DO NOT classify author queries as "product_search"!
5. Vague/Test Queries
Check SECOND:
"test", "tere", "hi", "hello", "?"
→ intent: "greeting", confidence: 0.1-0.3
Single symbols or meaningless strings
→ intent: "unknown", confidence: 0.1-0.2
NEVER use "product_search" for clearly vague queries!
Main Context Extraction Prompt
Model: llama-4-scout-17b-16e-instruct
Temperature: 0.1
Duration: 300-500ms
Purpose: Deep semantic understanding with full field extraction
JSON Structure
{
"intent": "product_search|author_search|...",
"occasion": "jõulud|sünnipäev|...",
"recipient": "õpetaja|sõber|kolleeg|...",
"ageGroup": "child|teen|adult|elderly|unknown",
"budget": {"min": number, "max": number, "hint": "string"},
"constraints": ["string"],
"language": "et|en|mixed",
"category": "Krimi ja põnevus|Fantaasia|...",
"productType": "Raamat|Mängud|Kinkekaart|...",
"categoryHints": ["string"],
"productTypeHints": ["string"],
"productInquiry": {"productName": "string", "productId": "string"},
"confidence": 0.0-1.0,
"isPopularQuery": boolean
}
Negations & Exclusions (CHECK FIRST!)
Estonian:
"kingitus, aga mitte raamat" → constraints: ["MITTE raamat"]
"ei soovi raamatut" → constraints: ["MITTE raamat"]
"ilma raamatuta" → constraints: ["MITTE raamat"]
English:
"gift, not a book" → constraints: ["NOT book"]
"no books please" → constraints: ["NOT book"]
"but not wine" → constraints: ["NOT wine"]
CRITICAL: If user rejects books, keep productType: "Kingitused" and DO NOT add "Raamat" to hints!
Product Type Mapping (All 12 Types)
EXACT VALUES:
"Raamat"- book, novel, literature, õpik, textbook"Mängud"- game, puzzle, toy, nukk, konstruktor"Kinkekaart"- gift card"Kingitused"- gift, present, souvenir"Kodu ja aed"- mug, candle, kitchen, home"Kontorikaup"- office, stationery, notebook, calendar"Ilu ja stiil"- cosmetics, beauty, perfume"Tehnika"- electronics, technology, computer, phone"Film"- movie, dvd, video"Muusika"- music, album, cd, vinyl"Joodav ja söödav"- food, drink, tea, coffee, candy"Sport ja harrastused"- sports, hobby, training, fitness
Scenario-Specific Rules
Recovery/Get Well
"kolleeg taastub operatsioonist" OR "surgery" OR "recovering"
→ ageGroup: "adult"
→ productTypeHints: ["Mängud", "Raamat", "Joodav ja söödav"]
→ categoryHints: ["Pusled 1000-1499 tükki", "Tee, kohv ja kakao", "Kinkeraamatud"]
→ constraints: ["MITTE lastetooted", "lõõgastav"]
PRIORITY: Puzzles, Tea, Short books
NEVER: Children's books or toys
Housewarming
"sõber ostis esimese korteri" OR "new apartment" OR "just moved"
→ ageGroup: "adult"
→ productTypeHints: ["Kodu ja aed", "Kingitused", "Raamat"]
→ categoryHints: ["Küünlad", "Vaasid", "Posterid", "Kruusid", "Köögitarvikud"]
→ constraints: ["praktiline ja stiilne", "kodu jaoks"]
PRIORITY: Candles (ambiance), Vases (decor), Kitchen items (practical)
IMPORTANT: Choose DIFFERENT categories - not 2 mugs or 2 candles!
Balance practical and aesthetic!
Romantic/Partner
"tüdruksõbrale lihtsalt niisama" OR "midagi romantilist"
→ ageGroup: "adult"
→ productTypeHints: ["Raamat", "Kodu ja aed", "Ilu ja stiil"]
→ categoryHints: ["Kaasaegne romantika", "Luule", "Kruusid", "Küünlad"]
NOT baby products or children's literature!
Cooking Hobby
"vend armastab Itaalia toitu teha"
→ ageGroup: "adult"
→ productTypeHints: ["Raamat", "Joodav ja söödav"]
→ categoryHints: ["Kokaraamatud", "Muu maitsev"]
ONLY cooking-related!
Reading Hobby
"ema armastab lugeda ajaloolisi romaane"
→ ageGroup: "adult"
→ productTypeHints: ["Raamat"]
→ categoryHints: ["Ajalooline romaan", "Eesti ajalugu"]
NOT reading journals when novels requested!
Art Hobby
"joonistab ja tegeleb kunstiga"
→ productTypeHints: ["Raamat", "Kontorikaup", "Sport ja harrastused"]
→ categoryHints: ["Kujutav kunst", "Märkmikud", "Joonistamisvahendid"]
ONLY art-related!
Gardening Hobby
"armastab aiandust" OR "loves gardening" OR "especially roses"
→ productTypeHints: ["Raamat", "Kodu ja aed"]
→ categoryHints: ["Aiandus ja talupidamine", "Toataimed", "Vaasid"]
→ constraints: ["aiandus", "taimed", "roosid"]
PRIORITY: Aiandus ja talupidamine!
Focus on gardening and plants!
New Baby
"sõbrannal sündis beebi" OR "friend had a baby" OR "new baby"
→ ageGroup: "child"
→ ageBracket: "infant"
→ recipient: "baby"
→ occasion: "birth"
→ productTypeHints: ["Mängud", "Raamat", "Kingitused"]
→ categoryHints: ["Pehmed mänguasjad", "Pisipõnnidele 0-3", "Lastekirjandus"]
ONLY baby products!
NOT gifts for the friend/colleague!
Gift is FOR THE BABY!
Elderly Recipient
"vanaema 80. sünnipäev" OR "elderly"
→ ageGroup: "elderly"
→ productTypeHints: ["Raamat", "Kodu ja aed", "Joodav ja söödav", "Mängud"]
→ categoryHints: ["Eesti ajalugu", "Pusled 1000-1499", "Tee, kohv ja kakao"]
Focus on mentally stimulating activities!
Apology/Making Up
"unustasin sünnipäeva" OR "forgot birthday" OR "apology"
→ ageGroup: "adult"
→ productTypeHints: ["Ilu ja stiil", "Kodu ja aed", "Raamat"]
→ categoryHints: ["Kosmeetika", "Küünlad", "Kinkeraamatud", "Luule"]
→ constraints: ["isiklik", "hooliv"]
PRIORITY: Cosmetics, Candles, Gift books!
Focus on personal and caring gifts!
Estonian Morphology Handling
Crime novels (all forms recognized):
"krimiraamat", "krimiraamatu", "krimiraamatut",
"kriminaalraamat", "kriminaalromaane", "kriminaalromaani"
→ category: "Krimi ja põnevus"
Fantasy (all forms):
"fantaasiaraamat", "fantaasiaraamatuid",
"fantasiaraamat", "fantaasiaromaan"
→ category: "Fantaasia"
Sci-fi (all forms):
"ulmeraamat", "ulmeraamatut", "ulmekirjandust",
"ulmeromaan", "sci-fi"
→ category: "Ulme"
Romance (all forms):
"romantiline raamat", "romantilisi raamatuid",
"armastusromaane", "romantika"
→ category: "Kaasaegne romantika"
Children's (all forms):
"lasteraamat", "lasteraamatut", "lasteraamatud",
"lastele sobiv"
→ category: "Lastekirjandus"
Intent Distinctions
New Search vs Show More
CRITICAL DISTINCTION:
"Näita mulle [toode]", "soovita mulle [toode]"
→ intent: "product_search" (NEW search!)
"näita ROHKEM", "näita VEEL", "rohkem tooteid"
→ intent: "show_more_products" (MORE of same)
Example:
"Näita mulle kriminaalromaane"
→ intent: "product_search" (NOT show_more!)
Follow-up Intents
For these intents, DO NOT set productType or category:
-
show_more_products
"näita rohkem", "show more"
→ productType: null, category: null
→ Will be restored from previous context -
cheaper_alternatives
"midagi odavamat", "something cheaper"
→ productType: null, category: null
→ Will be restored from previous context -
budget_alternatives
"alla X euro", "kuni X euro"
→ productType: null, category: null
→ Budget extracted, but taxonomy from previous context
Author Query Rules
Pronoun handling:
"sellelt autorilt", "samalt autorilt", "that author"
→ intent: "author_search"
→ authorName: null (LEAVE EMPTY!)
"raamatuid Tolkienilt", "books by Martin"
→ intent: "author_search"
→ authorName: "J.R.R. Tolkien" / "George R.R. Martin"
NEVER save pronouns in authorName:
- "selle", "see", "sama", "veel", "that", "this", "the"
Product Type Hints
For generic "gift" queries, suggest multiple types:
"kingitus"
→ productTypeHints: ["Kingitused", "Kodu ja aed", "Ilu ja stiil", "Joodav ja söödav"]
"jõulukingitus"
→ productTypeHints: ["Kingitused", "Kodu ja aed", "Joodav ja söödav", "Mängud"]
"sünnipäevakingitus"
→ productTypeHints: ["Kingitused", "Mängud", "Kodu ja aed", "Joodav ja söödav"]
Provide 3-4 relevant types for variety
Key Differences
Fast Classifier
Optimized for:
- Speed (100-200ms)
- Common patterns
- High-confidence simple queries
- Popular, occasion, recipient, budget
Limitations:
- No complex constraint handling
- Limited category detection
- No pronoun resolution
Main Extractor
Optimized for:
- Accuracy (300-500ms)
- Complex queries
- Full field extraction
- Pronoun resolution with conversation state
- Scenario-specific rules
- Estonian morphology
Advantages:
- Handles all 12 product types
- Detects complex constraints
- Maps hobbies to categories
- Scenario awareness (housewarming, recovery, etc.)
- Morphological variants
Constraint Mapping
Hobby/Interest → Constraints:
"armastab kohvi" → constraints: ["eelistab kohvi"]
"loves gardening" → constraints: ["aiandus"]
"especially roses" → constraints: ["roosid"]
"k-pop" → constraints: ["k-pop muusika"]
"environmental" → constraints: ["keskkond"]
"käsitöö", "handmade" → constraints: ["käsitöö"]
ALWAYS add specific interests to constraints!
Adult Recipient Rule
CRITICAL:
If recipient is: "kolleeg", "sõber", "partner", "vend", "õde", "ema", "isa"
AND no mention of baby/infant
→ ageGroup: "adult"
→ NEVER children's products!
Example:
"kolleeg taastub operatsioonist"
→ ageGroup: "adult"
→ NOT toys, NOT children's books
→ Puzzles, tea, adult relaxation items
Negation Handling
IMPORTANT: Always add to constraints when user says what they DON'T want
Examples:
"ei soovi raamatut" → constraints: ["ei tohi olla raamat"]
"aga mitte raamat" → constraints: ["mitte raamat"]
"not a book" → constraints: ["not book"]
"but not wine" → constraints: ["but not wine"]
Product Type Determination
Gift ≠ only "Kingitused" type
Choose contextually appropriate:
- For teacher → Consider "Kontorikaup", "Raamat"
- For colleague → "Raamat", "Kodu ja aed", "Kontorikaup"
- For child → "Mängud", "Raamat"
- Generic → "Kingitused"
CRITICAL: Don't automatically set productType: "Raamat" for children or birthdays!
Only if user explicitly mentions "raamat" or "book"!
Related Documentation
- Estonian Prompt - Response generation prompt
- Dynamic Generation - How prompts are selected
- Phase 0: Context Detection - Model configuration
- Context Extraction - Extraction pipeline