- 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 🦊💕
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
"""
|
|
Facts handler.
|
|
|
|
Handles requests to query factual memory.
|
|
"""
|
|
import json
|
|
from core.logger import setup_logger
|
|
|
|
logger = setup_logger('facts_handler', service_name='memory_service')
|
|
|
|
|
|
class FactsHandler:
|
|
"""Handles facts query requests"""
|
|
|
|
def __init__(self, facts_ops):
|
|
self.facts_ops = facts_ops
|
|
|
|
async def handle(self, msg) -> None:
|
|
"""Handle facts requests - search factual memory"""
|
|
try:
|
|
payload = json.loads(msg.data.decode()) if msg.data else {}
|
|
|
|
query = payload.get('query', '')
|
|
limit = payload.get('limit', 5)
|
|
category = payload.get('category')
|
|
identity_id = payload.get('identity_id')
|
|
|
|
logger.debug(f"[μ] Facts request: query='{query}', category={category}, limit={limit}")
|
|
|
|
facts = self.facts_ops.query(
|
|
query=query,
|
|
limit=limit,
|
|
category=category,
|
|
identity_id=identity_id
|
|
)
|
|
|
|
response = {
|
|
"status": "success",
|
|
"facts": facts,
|
|
"count": len(facts)
|
|
}
|
|
await msg.respond(json.dumps(response).encode())
|
|
|
|
except Exception as e:
|
|
logger.exception(f"[μ] Failed to retrieve facts: {e}")
|
|
error_response = {"status": "error", "error": str(e)}
|
|
await msg.respond(json.dumps(error_response).encode())
|