""" Save fact handler. Handles requests to save new facts to factual memory. """ import json from core.logger import setup_logger logger = setup_logger('save_fact_handler', service_name='memory_service') class SaveFactHandler: """Handles save fact requests""" def __init__(self, facts_ops): self.facts_ops = facts_ops async def handle(self, msg) -> None: """Handle save_fact requests - store new fact""" try: payload = json.loads(msg.data.decode()) content = payload.get('content') if not content: raise ValueError("content is required") category = payload.get('category', 'general') identities = payload.get('identities', []) mutable = payload.get('mutable', True) metadata = payload.get('metadata', {}) step_exec_id = metadata.get('step_exec_id', 'unknown') logger.info(f"[μ] [{step_exec_id}] Saving fact: category={category}, content='{content[:50]}...'") fact_id = self.facts_ops.create( content=content, category=category, identities=identities, mutable=mutable, metadata=metadata ) logger.info(f"[μ] [{step_exec_id}] ✅ Created fact {fact_id[:8]}...: category={category}, content='{content[:50]}...'") response = { "status": "success", "fact_id": fact_id, "message": "Fact saved successfully" } await msg.respond(json.dumps(response).encode()) except Exception as e: logger.exception(f"[μ] Failed to save fact: {e}") error_response = {"status": "error", "error": str(e)} await msg.respond(json.dumps(error_response).encode())