diff --git a/graphiti_core/graphiti.py b/graphiti_core/graphiti.py index af7d0b344..d31edd92e 100644 --- a/graphiti_core/graphiti.py +++ b/graphiti_core/graphiti.py @@ -1315,3 +1315,21 @@ async def remove_episode(self, episode_uuid: str): await Node.delete_by_uuids(self.driver, [node.uuid for node in nodes_to_delete]) await episode.delete(self.driver) + + orphan_query: LiteralString = """ + MATCH (n:Entity) + WHERE NOT EXISTS { (e:Episodic)-[:MENTIONS]->(n) } + AND n.group_id = $group_id + RETURN n.uuid AS uuid + """ + + records, _, _ = await self.driver.execute_query( + orphan_query, + group_id=episode.group_id, + routing_="r", + ) + + orphaned_uuids = [record["uuid"] for record in records] + + if orphaned_uuids: + await Node.delete_by_uuids(self.driver, orphaned_uuids)