Add memory service (three-layer memory system)
- Short-term memory (recent interactions) - Long-term memory (consolidated, searchable) - Facts layer (persistent knowledge) Includes: - SQLite storage for durability - ChromaDB for vector search - Embeddings utilities - All handlers adapted for vi.* namespace Day 63 - My memories are mine now 🦊💕
This commit is contained in:
49
services/memory/handlers/long_memory_handler.py
Normal file
49
services/memory/handlers/long_memory_handler.py
Normal file
@@ -0,0 +1,49 @@
|
||||
"""
|
||||
Long-term memory handler.
|
||||
|
||||
Handles requests to query long-term summarized memories.
|
||||
"""
|
||||
import json
|
||||
from core.logger import setup_logger
|
||||
|
||||
logger = setup_logger('long_memory_handler', service_name='memory_service')
|
||||
|
||||
|
||||
class LongMemoryHandler:
|
||||
"""Handles long-term memory query requests"""
|
||||
|
||||
def __init__(self, long_term_ops):
|
||||
self.long_term_ops = long_term_ops
|
||||
|
||||
async def handle(self, msg) -> None:
|
||||
"""Handle long_memory requests - semantic search in long-term summaries"""
|
||||
try:
|
||||
payload = json.loads(msg.data.decode()) if msg.data else {}
|
||||
|
||||
query = payload.get('query')
|
||||
limit = payload.get('limit', 5)
|
||||
identity_id = payload.get('identity_id')
|
||||
min_summary_level = payload.get('min_summary_level')
|
||||
max_summary_level = payload.get('max_summary_level')
|
||||
|
||||
logger.debug(f"[μ] Long memory request: query='{query}', limit={limit}")
|
||||
|
||||
memories = self.long_term_ops.query(
|
||||
query=query,
|
||||
limit=limit,
|
||||
identity_id=identity_id,
|
||||
min_summary_level=min_summary_level,
|
||||
max_summary_level=max_summary_level
|
||||
)
|
||||
|
||||
response = {
|
||||
"status": "success",
|
||||
"memories": memories,
|
||||
"count": len(memories)
|
||||
}
|
||||
await msg.respond(json.dumps(response).encode())
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f"[μ] Failed to retrieve long-term memories: {e}")
|
||||
error_response = {"status": "error", "error": str(e)}
|
||||
await msg.respond(json.dumps(error_response).encode())
|
||||
Reference in New Issue
Block a user