From e294d39218884ba6cd891ea0a4273b30440d8ae6 Mon Sep 17 00:00:00 2001 From: Theory903 <66315399+Theory903@users.noreply.github.com> Date: Sat, 20 Jun 2026 20:30:11 +0000 Subject: [PATCH] feat(mnemosyne): implement forget functionality across subsystems Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- infra/src/mnemosyne/core.py | 18 +++++++++++++----- src/ippoc/mnemosyne/core.py | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/infra/src/mnemosyne/core.py b/infra/src/mnemosyne/core.py index b8fe46bb..ee057ffc 100644 --- a/infra/src/mnemosyne/core.py +++ b/infra/src/mnemosyne/core.py @@ -320,9 +320,12 @@ async def forget(self, criteria: Dict[str, Any]) -> int: semantic_criteria = criteria["semantic"] if "ids" in semantic_criteria: semantic_ids = semantic_criteria["ids"] + if isinstance(semantic_ids, str): + semantic_ids = [semantic_ids] if semantic_ids: - if await self.semantic.delete_memories(semantic_ids): - total_deleted += len(semantic_ids) + res = await self.semantic.delete_memories(semantic_ids) + if res: + total_deleted += len(semantic_ids) if type(res) is bool else (res if type(res) is int else 1) except Exception as e: logger.error(f"Failed to delete semantic memories: {e}") @@ -332,9 +335,12 @@ async def forget(self, criteria: Dict[str, Any]) -> int: proc_criteria = criteria["procedural"] if "skills" in proc_criteria: skills = proc_criteria["skills"] + if isinstance(skills, str): + skills = [skills] for skill_name in skills: - if await self.procedural.delete_skill(skill_name): - total_deleted += 1 + res = await self.procedural.delete_skill(skill_name) + if res: + total_deleted += 1 if type(res) is bool else (res if type(res) is int else 1) except Exception as e: logger.error(f"Failed to delete procedural skills: {e}") @@ -344,9 +350,11 @@ async def forget(self, criteria: Dict[str, Any]) -> int: graph_criteria = criteria["graph"] if "entities" in graph_criteria: entities = graph_criteria["entities"] + if isinstance(entities, str): + entities = [entities] for entity in entities: count = await self.graph.delete_entity(entity) - total_deleted += count if isinstance(count, int) else (1 if count else 0) + total_deleted += count if type(count) is int else (1 if count else 0) except Exception as e: logger.error(f"Failed to delete graph entities: {e}") diff --git a/src/ippoc/mnemosyne/core.py b/src/ippoc/mnemosyne/core.py index 177806e6..17da6c90 100644 --- a/src/ippoc/mnemosyne/core.py +++ b/src/ippoc/mnemosyne/core.py @@ -320,9 +320,12 @@ async def forget(self, criteria: Dict[str, Any]) -> int: semantic_criteria = criteria["semantic"] if "ids" in semantic_criteria: semantic_ids = semantic_criteria["ids"] + if isinstance(semantic_ids, str): + semantic_ids = [semantic_ids] if semantic_ids: - if await self.semantic.delete_memories(semantic_ids): - total_deleted += len(semantic_ids) + res = await self.semantic.delete_memories(semantic_ids) + if res: + total_deleted += len(semantic_ids) if type(res) is bool else (res if type(res) is int else 1) except Exception as e: logger.error(f"Failed to delete semantic memories: {e}") @@ -332,9 +335,12 @@ async def forget(self, criteria: Dict[str, Any]) -> int: proc_criteria = criteria["procedural"] if "skills" in proc_criteria: skills = proc_criteria["skills"] + if isinstance(skills, str): + skills = [skills] for skill_name in skills: - if await self.procedural.delete_skill(skill_name): - total_deleted += 1 + res = await self.procedural.delete_skill(skill_name) + if res: + total_deleted += 1 if type(res) is bool else (res if type(res) is int else 1) except Exception as e: logger.error(f"Failed to delete procedural skills: {e}") @@ -344,9 +350,11 @@ async def forget(self, criteria: Dict[str, Any]) -> int: graph_criteria = criteria["graph"] if "entities" in graph_criteria: entities = graph_criteria["entities"] + if isinstance(entities, str): + entities = [entities] for entity in entities: count = await self.graph.delete_entity(entity) - total_deleted += count if isinstance(count, int) else (1 if count else 0) + total_deleted += count if type(count) is int else (1 if count else 0) except Exception as e: logger.error(f"Failed to delete graph entities: {e}")