From 0c01417e1fe9c32393da0309851c1cdb10a0a670 Mon Sep 17 00:00:00 2001 From: Preston Rasmussen <109292228+prasmussen15@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:51:30 -0400 Subject: [PATCH] add batch delete capabilities (#813) * add batch delete capabilities * use session for delete queries --- graphiti_core/nodes.py | 21 +++++++++++++-------- graphiti_core/search/search_filters.py | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/graphiti_core/nodes.py b/graphiti_core/nodes.py index bad8fefa..0ec7c730 100644 --- a/graphiti_core/nodes.py +++ b/graphiti_core/nodes.py @@ -118,7 +118,7 @@ class Node(BaseModel, ABC): return False @classmethod - async def delete_by_group_id(cls, driver: GraphDriver, group_id: str): + async def delete_by_group_id(cls, driver: GraphDriver, group_id: str, batch_size: int = 100): if driver.provider == GraphProvider.FALKORDB: for label in ['Entity', 'Episodic', 'Community']: await driver.execute_query( @@ -129,13 +129,18 @@ class Node(BaseModel, ABC): group_id=group_id, ) else: - await driver.execute_query( - """ - MATCH (n:Entity|Episodic|Community {group_id: $group_id}) - DETACH DELETE n - """, - group_id=group_id, - ) + async with driver.session() as session: + await session.run( + """ + MATCH (n:Entity|Episodic|Community {group_id: $group_id}) + CALL { + WITH n + DETACH DELETE n + } IN TRANSACTIONS OF $batch_size ROWS + """, + group_id=group_id, + batch_size=batch_size, + ) @classmethod async def get_by_uuid(cls, driver: GraphDriver, uuid: str): ... diff --git a/graphiti_core/search/search_filters.py b/graphiti_core/search/search_filters.py index 90abb766..3a5d2f21 100644 --- a/graphiti_core/search/search_filters.py +++ b/graphiti_core/search/search_filters.py @@ -31,7 +31,7 @@ class ComparisonOperator(Enum): class DateFilter(BaseModel): - date: datetime = Field(description='A datetime to filter on') + date: datetime | None = Field(description='A datetime to filter on') comparison_operator: ComparisonOperator = Field( description='Comparison operator for date filter' ) diff --git a/pyproject.toml b/pyproject.toml index c83ee19a..64e28f70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "graphiti-core" description = "A temporal graph building library" -version = "0.18.3" +version = "0.18.4" authors = [ { name = "Paul Paliychuk", email = "paul@getzep.com" }, { name = "Preston Rasmussen", email = "preston@getzep.com" }, diff --git a/uv.lock b/uv.lock index 7264e4ea..d9d8d33c 100644 --- a/uv.lock +++ b/uv.lock @@ -746,7 +746,7 @@ wheels = [ [[package]] name = "graphiti-core" -version = "0.18.3" +version = "0.18.4" source = { editable = "." } dependencies = [ { name = "diskcache" },