Spaces:
Build error
Build error
| """ | |
| Memory module for XENO Bot | |
| Handles LangGraph memory operations using SQLite | |
| """ | |
| import sqlite3 | |
| import uuid | |
| from datetime import datetime | |
| from typing import Any, Dict, List | |
| from langgraph.checkpoint.sqlite import SqliteSaver | |
| from src.config import SQLITE_DB_PATH | |
| # === LangGraph Memory Setup === | |
| conn = sqlite3.connect(SQLITE_DB_PATH, check_same_thread=False) | |
| memory = SqliteSaver(conn=conn) | |
| def update_memory( | |
| config: Dict[str, Any], user_message: str, assistant_message: str, timer=None | |
| ): | |
| """ | |
| Update memory with new messages | |
| Args: | |
| config: Configuration dictionary with thread_id | |
| user_message: User's message | |
| assistant_message: Assistant's response | |
| timer: Optional timer object for tracking | |
| """ | |
| if timer: | |
| with timer.time_step("memory_update"): | |
| _update_memory_impl(config, user_message, assistant_message) | |
| else: | |
| _update_memory_impl(config, user_message, assistant_message) | |
| def _update_memory_impl(config, user_message: str, assistant_message: str): | |
| """Internal implementation of memory update""" | |
| full_checkpoint = memory.get(config) or {} | |
| messages = full_checkpoint.get("channel_values", {}).get("messages", []) | |
| messages.append({"role": "user", "content": user_message}) | |
| messages.append({"role": "assistant", "content": assistant_message}) | |
| checkpoint_to_save = { | |
| "v": 1, | |
| "id": str(uuid.uuid4()), | |
| "ts": datetime.now().isoformat(), | |
| "channel_values": {"messages": messages}, | |
| "channel_versions": {}, | |
| "versions_seen": {}, | |
| } | |
| memory.put(config, checkpoint_to_save, {}, {}) | |
| def retrieve_memory(config: Dict[str, Any], timer=None) -> List[Dict[str, str]]: | |
| """ | |
| Retrieve memory messages for a session | |
| Args: | |
| config: Configuration dictionary with thread_id | |
| timer: Optional timer object for tracking | |
| Returns: | |
| List of message dictionaries | |
| """ | |
| if timer: | |
| with timer.time_step("memory_retrieval"): | |
| return _retrieve_memory_impl(config) | |
| else: | |
| return _retrieve_memory_impl(config) | |
| def _retrieve_memory_impl(config) -> List[Dict[str, str]]: | |
| """Internal implementation of memory retrieval""" | |
| full_checkpoint = memory.get(config) or {} | |
| return full_checkpoint.get("channel_values", {}).get("messages", []) | |
| def create_session_config(session_id: str = "default") -> Dict[str, Any]: | |
| """ | |
| Create a configuration dictionary for a session | |
| Args: | |
| session_id: Unique session identifier | |
| Returns: | |
| Configuration dictionary | |
| """ | |
| return {"configurable": {"thread_id": str(session_id), "checkpoint_ns": ""}} | |