File size: 1,980 Bytes
4a2c63e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | from typing import List, Dict, Optional
from collections import deque
class ConversationMemory:
"""Manages conversation history with limited context window."""
def __init__(self, max_messages: int = 10):
"""
Initialize conversation memory.
Args:
max_messages: Maximum number of messages to keep in memory
"""
self.max_messages = max_messages
self.messages: deque = deque(maxlen=max_messages)
self.user_name: Optional[str] = None
self.intent: Optional[str] = None
def add_message(self, role: str, content: str):
"""
Add a message to memory.
Args:
role: "user" or "assistant"
content: Message content
"""
self.messages.append({
"role": role,
"content": content
})
def get_context(self) -> List[Dict]:
"""Get all messages in memory."""
return list(self.messages)
def get_formatted_context(self) -> str:
"""Get formatted context for LLM."""
formatted = []
for msg in self.messages:
formatted.append(f"{msg['role'].upper()}: {msg['content']}")
return "\n".join(formatted)
def set_user_name(self, name: str):
"""Set user name extracted from conversation."""
self.user_name = name
def set_intent(self, intent: str):
"""Set detected intent."""
self.intent = intent
def clear(self):
"""Clear all messages."""
self.messages.clear()
self.user_name = None
self.intent = None
def get_summary(self) -> Dict:
"""Get memory summary."""
return {
"message_count": len(self.messages),
"user_name": self.user_name,
"intent": self.intent,
"messages": self.get_context()
}
|