QMetaRam / backend /qkernel /executors /memory_executor.py
metarm's picture
Upload folder using huggingface_hub (part 4)
945aae0 verified
Raw History Blame Contribute Delete
1.65 kB
import logging
import json
from ..core import BaseService
from ..memory import MemoryEngine
logger = logging.getLogger("qkernel.executors.memory")
class MemoryExecutor(BaseService):
name: str = "memory"
def __init__(self, engine: MemoryEngine | None = None) -> None:
self.engine = engine or MemoryEngine()
async def process(self, event: dict) -> dict:
action = event.get("action", "read")
user_id = event.get("user_id", "anonymous")
session_id = event.get("session_id", "default")
if action == "store":
content = event.get("content", "")
role = event.get("role", "user")
if not content.strip():
return {"error": "empty_content", "action": action}
self.engine.write(user_id, session_id, role, content)
return {"action": action, "stored": True, "length": len(content)}
if action == "search":
query = event.get("query", "")
limit = int(event.get("limit", 10))
records = self.engine.read(user_id, session_id, limit=limit)
if query.strip():
records = [
r for r in records if query.lower() in r.get("content", "").lower()
]
return {"action": action, "results": records}
if action == "stats":
return {"action": action, "stats": self.engine.get_stats()}
records = self.engine.read(user_id, session_id)
return {
"action": "read",
"records": records,
"note": json.dumps({"user_id": user_id, "session_id": session_id}),
}