Spaces:
Sleeping
Sleeping
| from langchain_community.chat_message_histories import RedisChatMessageHistory | |
| from langchain_core.runnables.history import RunnableWithMessageHistory | |
| from app.config import config | |
| from app.utils.logger import logger | |
| class ConversationMemory: | |
| def __init__(self): | |
| self.max_messages = config["rag"]["memory"]["max_messages"] | |
| self.redis_url = config["database"]["redis"]["url"] | |
| def get_message_history(self, session_id: str) -> RedisChatMessageHistory: | |
| return RedisChatMessageHistory( | |
| session_id=session_id, | |
| url=self.redis_url, | |
| ttl=86400 | |
| ) | |
| def create_history_runnable(self, runnable): | |
| return RunnableWithMessageHistory( | |
| runnable, | |
| self.get_message_history, | |
| input_messages_key="input", | |
| history_messages_key="chat_history" | |
| ) | |
| def get_messages(self, session_id: str): | |
| history = self.get_message_history(session_id) | |
| messages = history.messages | |
| return messages[-self.max_messages:] if len(messages) > self.max_messages else messages | |
| def add_message(self, session_id: str, role: str, content: str): | |
| """Add a message to the conversation history.""" | |
| try: | |
| history = self.get_message_history(session_id) | |
| if role == "user": | |
| history.add_user_message(content) | |
| elif role == "assistant": | |
| history.add_ai_message(content) | |
| logger.debug(f"Added {role} message to session {session_id}") | |
| except Exception as e: | |
| logger.error(f"Error adding message: {e}") | |
| def clear(self, session_id: str): | |
| try: | |
| history = self.get_message_history(session_id) | |
| history.clear() | |
| logger.info(f"Cleared memory for session {session_id}") | |
| except Exception as e: | |
| logger.error(f"Memory clear error: {e}") | |
| conversation_memory = ConversationMemory() | |