from langchain.memory import ConversationBufferWindowMemory from typing import Dict, Any, List, Optional class MemoryManager: """Enhanced conversation memory management""" def __init__(self, window_size: int = 10): self.memory = ConversationBufferWindowMemory( k=window_size, return_messages=True, memory_key="chat_history" ) self.context_cache: Dict[str, Any] = {} def add_interaction(self, query: str, response: str, metadata: Optional[Dict[str, Any]] = None): """Add user interaction to memory with metadata""" self.memory.save_context( {"input": query}, {"output": response} ) if metadata: self.context_cache[query[:50]] = metadata def get_relevant_context(self, query: str) -> Dict[str, Any]: """Retrieve relevant context for current query""" return { "history": self.memory.load_memory_variables({}), "cached_context": self._find_similar_context(query) } def _find_similar_context(self, query: str) -> List[Dict[str, Any]]: """Find contextually similar previous interactions""" query_lower = query.lower() relevant = [] for cached_key, context in self.context_cache.items(): if any(word in cached_key.lower() for word in query_lower.split()[:3]): relevant.append(context) return relevant[:3] def clear_memory(self): """Clear conversation memory and cache""" self.memory.clear() self.context_cache.clear()