mcikalmerdeka's picture
refactor application structure and enhance logging capabilities
9d5041f
Raw
History Blame Contribute Delete
2.76 kB
"""Conversation memory management"""
from typing import List
from langchain.messages import HumanMessage, AIMessage
from config import logger_memory
class ConversationMemory:
"""Manages conversation history with smart truncation"""
def __init__(self, max_messages: int = 4):
self.messages = []
self.max_messages = max_messages
logger_memory.info(f"ConversationMemory initialized with max_messages={max_messages}")
def add_user_message(self, content: str):
"""Add user message to history"""
logger_memory.debug(f"Adding user message: {content[:50]}..." if len(content) > 50 else f"Adding user message: {content}")
self.messages.append(HumanMessage(content=content))
current_count = len(self.messages)
logger_memory.info(f"User message added. Current message count: {current_count}")
self._truncate()
def add_ai_message(self, content: str):
"""Add AI message to history"""
content_preview = content[:50] + "..." if len(content) > 50 else content
logger_memory.debug(f"Adding AI message: {content_preview}")
self.messages.append(AIMessage(content=content))
current_count = len(self.messages)
logger_memory.info(f"AI message added. Current message count: {current_count}")
self._truncate()
def _truncate(self):
"""Keep only recent messages to avoid context bloat"""
if len(self.messages) > self.max_messages:
removed_count = len(self.messages) - self.max_messages
self.messages = self.messages[-self.max_messages:]
logger_memory.info(f"Memory truncated: removed {removed_count} oldest messages, keeping {len(self.messages)} most recent")
else:
logger_memory.debug(f"No truncation needed. Current count: {len(self.messages)}, max: {self.max_messages}")
def get_history(self) -> List:
"""Get formatted conversation history"""
history = self.messages
logger_memory.debug(f"Retrieving history: {len(history)} messages")
return history
def get_history_text(self) -> str:
"""Get history as formatted text"""
if not self.messages:
logger_memory.debug("No conversation history available")
return "No previous conversation"
history_text = []
for msg in self.messages:
role = "User" if isinstance(msg, HumanMessage) else "Assistant"
history_text.append(f"{role}: {msg.content}")
formatted = "\n".join(history_text)
logger_memory.debug(f"Formatted history: {len(formatted)} characters, {len(self.messages)} messages")
return formatted