"""
EnhancedContextRetrieval
Generated by Eden via recursive self-improvement
2025-10-28 01:13:00.067688
"""

class ContextManager:
    """
    Manages conversation context to improve continuity in interactions.
    
    Attributes:
        conversation_history (list): List of tuples containing message details.
        user_messages (dict): Dictionary mapping message indices to user messages.
        assistant_messages (dict): Dictionary mapping message indices to assistant responses.
        current_context (str): Current context string for the conversation.
        max_conversation_length (int): Maximum number of messages stored in history.

    Methods:
        add_message: Adds a new message to the conversation history.
        get_context: Retrieves and returns the full conversation context.
        update_context: Updates the current context based on new messages.
    """
    
    def __init__(self):
        self.conversation_history = []
        self.user_messages = {}  # Maps message index to user message
        self.assistant_messages = {}  # Maps message index to assistant response
        self.current_context = ""
        self.max_conversation_length = 20

    def add_message(self, role: str, content: str):
        """
        Adds a new message to the conversation history.
        
        Args:
            role (str): Role of the message ('user' or 'assistant').
            content (str): The message content.
        """
        if role not in ['user', 'assistant']:
            raise ValueError("Role must be either 'user' or 'assistant'")
            
        self.conversation_history.append((role, content))
        
        # Update respective message dictionary
        if role == 'user':
            self.user_messages[len(self.user_messages)] = content
        else:
            self.assistant_messages[len(self.assistant_messages)] = content
        
        # Keep conversation history within limits
        if len(self.conversation_history) > self.max_conversation_length * 2:
            self.conversation_history = self.conversation_history[-self.max_conversation_length:]

    def get_context(self) -> str:
        """
        Retrieves and returns the full conversation context.
        
        Returns:
            str: Combined conversation history as a continuous string.
        """
        # Combine user and assistant messages in order
        context = []
        for role, content in self.conversation_history:
            if role == 'user':
                context.append(f"User: {content}")
            else:
                context.append(f"Assistant: {content}")
                
        return "\n".join(context)

    def update_context(self) -> str:
        """
        Updates and returns the current conversation context.
        
        Returns:
            str: Latest version of the conversation context.
        """
        self.current_context = self.get_context()
        return self.current_context

# Example usage
if __name__ == "__main__":
    # Initialize context manager
    context_manager = ContextManager()
    
    # Simulate conversation
    print("Simulating conversation context management:")
    context_manager.add_message('user', "Hello! How are you?")
    context_manager.add_message('assistant', "I'm just a program, but thanks for asking!")
    context_manager.add_message('user', "What can you do?")
    
    # Retrieve and print current context
    print("\nCurrent conversation context:")
    print(context_manager.get_context())