import { Memory } from "../../src/memory"; async function contextFilteringDemo() { console.log("šŸ” Context Filtering Demo"); console.log("=" .repeat(50)); // This demo shows how the new context filtering functionality // prevents overwhelming context and improves query focus console.log("\nšŸ’” New Context Filtering Features:"); console.log(" 1. Filters initial results before agent analysis (> 15 results → 15)"); console.log(" 2. Filters additional results between search hops (prevents duplication)"); console.log(" 3. Final filtering before response generation (> 8 results → 8)"); console.log(" 4. Query-focused prompting for better relevance"); console.log("\nšŸ“‹ Example Usage (Updated from your code):"); console.log(` // OLD CODE (overwhelming context): const ci = \`You're a helpful AI assistant...\`; const result = await memory.chat(qa.question, { userId: "sampleuser", customInstructions: ci, // āŒ Old way includeContext: true, useSearchAgents: true, enableMultihop: true, maxHops: 20 }); // NEW CODE (focused, filtered context): const responseInstructions = \`You're a helpful AI assistant. Be **precise**, **concise**, and **objective**. - Limit responses to **under 10 words**, unless detail is required or requested. - For **date-related questions**, **deduce exact dates** from context when possible. - Avoid vague terms like "last year" or "early on" — instead, provide **specific dates** (e.g., "2 Feb, 2002"). - Always aim to match the **ground truth format** in meaning and style. - Stick to **factual answers**, avoid assumptions or extra commentary.\`; const reasoningInstructions = \`When analyzing search completeness: - Focus on finding specific facts that directly answer the query - For identity questions, search for biographical information, roles, and defining characteristics - Prioritize concrete details over general discussions - Stop searching when you have enough specific information to answer the query\`; const result = await retryWithBackoff(async () => { return await memory.chat(qa.question, { userId: "sampleuser", responseCustomInstructions: responseInstructions, // āœ… Controls response format reasoningCustomInstructions: reasoningInstructions, // āœ… Controls search thoroughness includeContext: true, useSearchAgents: true, enableMultihop: true, maxHops: 20 }); }, 3, 1000);`); console.log("\nšŸŽÆ Expected Improvements:"); console.log(" • Better query focus (e.g., 'What is Caroline's identity?' gets identity info, not just advocacy)"); console.log(" • Reduced context overwhelming (100 results → filtered to most relevant)"); console.log(" • Faster processing due to less context"); console.log(" • More precise answers due to better filtering"); console.log(" • Cleaner agent logs (no more '100 initial results' overwhelming messages)"); console.log("\nšŸ”„ How Filtering Works:"); console.log(" 1. Initial Search: All results collected"); console.log(" 2. Pre-Agent Filter: If > 15 results, intelligently filter to 15 most relevant"); console.log(" 3. Agent Analysis: Agents work with focused, manageable context"); console.log(" 4. Inter-Hop Filter: Additional results filtered to prevent duplication"); console.log(" 5. Pre-Response Filter: If > 8 results, filter to 8 most query-relevant"); console.log(" 6. Response Generation: LLM works with focused, relevant context"); console.log("\nšŸ“Š Filtering Modes:"); console.log(" • 'search' mode: Filters for agent analysis (broader, keeps context-building info)"); console.log(" • 'response' mode: Filters for final answer (stricter, only direct query relevance)"); console.log("\nšŸš€ Identity Query Example:"); console.log(" Query: 'What is Caroline's identity?'"); console.log(" Before: 'Caroline is involved in LGBTQ advocacy.' (tangential)"); console.log(" After: 'Caroline is a [specific role/title/identity details]' (direct answer)"); console.log("\n⚔ Performance Benefits:"); console.log(" • Reduced LLM token usage"); console.log(" • Faster processing"); console.log(" • More accurate responses"); console.log(" • Better cost efficiency"); console.log("\nāœ… Implementation Complete!"); console.log(" The context filtering is now automatically applied in:"); console.log(" • memory.search() method"); console.log(" • memory.chat() method"); console.log(" • SearchAgents multihop analysis"); console.log(" • All response generation"); } // Run the demo if (require.main === module) { contextFilteringDemo().catch(console.error); } export { contextFilteringDemo };