self-trained2 / agent /memory /memory.py
DeepImagix's picture
Upload memory.py
7faca03 verified
Raw
History Blame Contribute Delete
3.4 kB
"""
NeuraPrompt Agent — Memory Module v7.6 (MongoDB Integrated)
Properly connects to your existing MongoDB system from main.py
"""
from typing import List, Dict, Optional
import logging
from datetime import datetime, timezone
log = logging.getLogger("agent.memory.v7.6")
# These will be injected from main.py
long_term_memory_col = None
chat_history_col = None
def set_collections(long_term_col, chat_history_col_ref):
"""Call this from main.py to inject MongoDB collections"""
global long_term_memory_col, chat_history_col
long_term_memory_col = long_term_col
chat_history_col = chat_history_col_ref
class MemoryManager:
def __init__(self, user_id: str):
self.user_id = user_id
self.short_term: List[Dict] = []
def load_long_term_memory(self) -> Dict:
"""Load user's long-term memory from MongoDB"""
if not long_term_memory_col:
return {}
try:
doc = long_term_memory_col.find_one({"user_id": self.user_id})
return doc or {}
except Exception as e:
log.error(f"Failed to load long-term memory: {e}")
return {}
def load_recent_chat(self, limit: int = 8) -> List[Dict]:
"""Load recent chat history from MongoDB"""
if not chat_history_col:
return []
try:
cursor = chat_history_col.find(
{"user_id": self.user_id}
).sort("timestamp", -1).limit(limit)
messages = list(cursor)
messages.reverse()
return messages
except Exception as e:
log.error(f"Failed to load chat history: {e}")
return []
def get_context_for_agent(self) -> str:
"""Build rich context string for the agent"""
long_term = self.load_long_term_memory()
recent = self.load_recent_chat(6)
context_parts = []
# Long-term facts
if long_term:
facts = []
for key, value in long_term.items():
if key not in ["_id", "user_id", "last_updated"]:
facts.append(f"{key}: {value}")
if facts:
context_parts.append("Known about user: " + ", ".join(facts[:7]))
# Recent conversation
if recent:
chat_lines = []
for msg in recent[-5:]:
role = msg.get("role", "unknown").capitalize()
content = msg.get("content", "")[:180]
chat_lines.append(f"{role}: {content}")
context_parts.append("Recent conversation:\n" + "\n".join(chat_lines))
return "\n\n".join(context_parts) if context_parts else "No previous memory available."
def save_important_fact(self, key: str, value: str):
"""Save important fact to long-term memory"""
if not long_term_memory_col:
return
try:
long_term_memory_col.update_one(
{"user_id": self.user_id},
{"$set": {
key: value,
"last_updated": datetime.now(timezone.utc)
}},
upsert=True
)
log.info(f"Saved fact '{key}' for user {self.user_id}")
except Exception as e:
log.error(f"Failed to save fact: {e}")
def get_memory_manager(user_id: str) -> MemoryManager:
return MemoryManager(user_id)