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:
77
services/memory/handlers/reset_handler.py
Normal file
77
services/memory/handlers/reset_handler.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
Memory reset handler.
|
||||
|
||||
Handles requests to clear all memory layers.
|
||||
"""
|
||||
import json
|
||||
from core.logger import setup_logger
|
||||
|
||||
logger = setup_logger('reset_handler', service_name='memory_service')
|
||||
|
||||
|
||||
class ResetHandler:
|
||||
"""Handles memory reset/clear requests"""
|
||||
|
||||
def __init__(self, sqlite_store, chroma_store):
|
||||
self.sqlite_store = sqlite_store
|
||||
self.chroma_store = chroma_store
|
||||
|
||||
async def handle(self, msg) -> None:
|
||||
"""Handle vi.memory.debug.reset requests - clears all three-layer memory"""
|
||||
try:
|
||||
logger.warning("[μ] Memory reset requested - clearing all three-layer memory contents")
|
||||
|
||||
conn = self.sqlite_store.get_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Clear short-term memory
|
||||
cursor.execute("DELETE FROM short_term_memory")
|
||||
deleted_short_term = cursor.rowcount
|
||||
|
||||
# Clear all identities
|
||||
cursor.execute("DELETE FROM identities")
|
||||
deleted_identities = cursor.rowcount
|
||||
|
||||
# Reset sequences
|
||||
cursor.execute("DELETE FROM sqlite_sequence WHERE name IN ('short_term_memory', 'identities')")
|
||||
conn.commit()
|
||||
|
||||
# Clear ChromaDB collections
|
||||
deleted_long_term = 0
|
||||
deleted_facts = 0
|
||||
|
||||
long_term_collection = self.chroma_store.get_long_term_collection()
|
||||
facts_collection = self.chroma_store.get_facts_collection()
|
||||
|
||||
if long_term_collection:
|
||||
deleted_long_term = long_term_collection.count()
|
||||
all_ids = long_term_collection.get()['ids']
|
||||
if all_ids:
|
||||
long_term_collection.delete(ids=all_ids)
|
||||
|
||||
if facts_collection:
|
||||
deleted_facts = facts_collection.count()
|
||||
all_ids = facts_collection.get()['ids']
|
||||
if all_ids:
|
||||
facts_collection.delete(ids=all_ids)
|
||||
|
||||
logger.warning(
|
||||
f"[μ] Memory reset completed: {deleted_short_term} short-term, "
|
||||
f"{deleted_long_term} long-term, {deleted_facts} facts, "
|
||||
f"{deleted_identities} identities cleared"
|
||||
)
|
||||
|
||||
response = {
|
||||
"status": "success",
|
||||
"deleted_short_term": deleted_short_term,
|
||||
"deleted_long_term": deleted_long_term,
|
||||
"deleted_facts": deleted_facts,
|
||||
"deleted_identities": deleted_identities,
|
||||
"message": f"Cleared {deleted_short_term} short-term memories, {deleted_long_term} long-term summaries, {deleted_facts} facts, and {deleted_identities} identities"
|
||||
}
|
||||
await msg.respond(json.dumps(response).encode())
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f"[μ] Failed to reset memory: {e}")
|
||||
error_response = {"status": "error", "error": str(e)}
|
||||
await msg.respond(json.dumps(error_response).encode())
|
||||
Reference in New Issue
Block a user