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()
        }