Dynamic Prompt Generation
System prompts are generated dynamically based on detected language, conversation context, and configuration settings.
Language Selection Flow
Implementation
Location: app/api/chat/system-prompt.ts:246-292
export function generateDynamicSystemPrompt(
language?: 'et' | 'en' | 'mixed',
context?: { recipient?: string; occasion?: string; productType?: string }
): string {
// STEP 1: Select base prompt by language
// Rules:
// 1. Estonian query ('et') → Estonian prompt
// 2. English query ('en') → English prompt
// 3. Mixed query ('mixed') → Estonian prompt (default)
// 4. Undefined → Estonian prompt (primary market)
let basePrompt = (!language || language === 'mixed' || language === 'et')
? buildEstonianSystemPrompt()
: buildEnglishSystemPrompt();
console.log('📋 SYSTEM PROMPT: Language-based prompt selection', {
detectedLanguage: language || 'undefined (default to et)',
promptLanguage: (!language || language === 'mixed' || language === 'et')
? 'Estonian'
: 'English',
rule: getRuleApplied(language)
});
// STEP 2: Add context reminders for multi-turn coherence
if (context) {
const isEstonian = (!language || language === 'mixed' || language === 'et');
let contextReminders = '';
if (context.recipient) {
contextReminders += isEstonian
? `\n\nKONTEKSTI MEELDETULETUS: Tooted on sobivad "${context.recipient}" jaoks - mainige seda vastuses!`
: `\n\nCONTEXT REMINDER: Products are suitable for "${context.recipient}" - mention this in your response!`;
}
if (context.occasion && !context.recipient) {
contextReminders += isEstonian
? `\n\nKONTEKSTI MEELDETULETUS: Need sobivad puhuseks "${context.occasion}" - mainige seda!`
: `\n\nCONTEXT REMINDER: These are for "${context.occasion}" - mention this occasion!`;
}
if (contextReminders) {
basePrompt += contextReminders;
}
}
return basePrompt;
}
Context Adaptation
Recipient Context
When user specifies recipient:
context = { recipient: "ema" }
// Adds to prompt:
"KONTEKSTI MEELDETULETUS: Tooted on sobivad "ema" jaoks -
mainige seda vastuses!"
AI Output:
"Siin on suurepärased kingitused sinu emale..."
Occasion Context
When user specifies occasion:
context = { occasion: "sünnipäev" }
// Adds to prompt:
"KONTEKSTI MEELDETULETUS: Need sobivad puhuseks "sünnipäev" -
mainige seda!"
AI Output:
"Need raamatud teevad unustamatu sünnipäevakingituse..."
Combined Context
Both recipient and occasion:
context = {
recipient: "sõber",
occasion: "sünnipäev"
}
// Only recipient reminder added
// (occasion implied in recipient context)
Multi-Turn Coherence Strategy
Problem: AI forgets context between turns
Solution: Context reminders in system prompt
Example Flow
Turn 1:
User: "kingitus 10-aastasele tüdrukule"
Context: { recipient: "10-aastane tüdruk" }
AI: [Products with context]
Turn 2:
User: "näita rohkem"
Context: { recipient: "10-aastane tüdruk" } ← PRESERVED
Prompt: + "Products are suitable for 10-aastane tüdruk"
AI: "Veel suurepäraseid valikuid 10-aastasele tüdrukule!"
↑ Mentions recipient naturally ↑
Logging & Debugging
console.log('📋 SYSTEM PROMPT: Language-based prompt selection', {
detectedLanguage: 'et',
promptLanguage: 'Estonian',
rule: 'Rule 1: Estonian → Estonian'
});
console.log('📋 CONTEXT REMINDERS ADDED', {
recipient: 'ema',
occasion: null,
reminderCount: 1
});
Performance
Prompt generation time:
Language detection: ~5ms
Base prompt selection: <1ms
Context reminders: ~2ms
Enrichment section: ~1ms
────────────────────────
Total: ~9ms ✓
Token impact:
Base Estonian prompt: ~350 tokens
+ Context reminder: ~25 tokens
+ Enrichment section: ~50 tokens
─────────────────────────────
Total: ~425 tokens
Edge Cases
Case 1: Language Mismatch
Scenario: User writes in English, but language detected as 'et'
Resolution:
// GPT-5.1 is smart enough to respond in appropriate language
// even if prompt is in different language
// Fallback: Response validation catches language mismatch
if (userLanguage !== responseLanguage) {
console.warn('Language mismatch detected');
// Log for analysis
}
Case 2: Mixed Language Query
Scenario: "Tere, I want books for sünnipäev"
Resolution:
language = 'mixed'
→ Estonian prompt (Rule 3)
→ GPT-5.1 responds in Estonian (primary market)
Case 3: Context Changes Mid-Conversation
Scenario:
Turn 1: "kingitus emale" (recipient: ema)
Turn 2: "kingitus isale" (recipient: isa)
Resolution:
// Context updated for Turn 2
context = { recipient: "isa" } // New context
// Prompt includes new recipient reminder
// AI correctly switches context
Testing
describe('Dynamic Prompt Generation', () => {
it('selects Estonian for et language', () => {
const prompt = generateDynamicSystemPrompt('et');
expect(prompt).toContain('Olen RahvaRaamatu AI ostuabi');
});
it('selects English for en language', () => {
const prompt = generateDynamicSystemPrompt('en');
expect(prompt).toContain('I am RahvaRaamat AI');
});
it('defaults to Estonian for mixed', () => {
const prompt = generateDynamicSystemPrompt('mixed');
expect(prompt).toContain('eesti keeles');
});
it('adds context reminders', () => {
const prompt = generateDynamicSystemPrompt('et', {
recipient: 'ema'
});
expect(prompt).toContain('KONTEKSTI MEELDETULETUS');
expect(prompt).toContain('"ema"');
});
});
Related Documentation
- Estonian Prompt - Base Estonian prompt
- English Prompt - Base English prompt
- Configuration - Config options
- Context Enrichment - Question generation