add batch delete capabilities (#813)

* add batch delete capabilities

* use session for delete queries
This commit is contained in:
Preston Rasmussen 2025-08-07 15:51:30 -04:00 committed by GitHub
parent 3ad4ea2ea0
commit 0c01417e1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 16 additions and 11 deletions

View file

@ -118,7 +118,7 @@ class Node(BaseModel, ABC):
return False return False
@classmethod @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: if driver.provider == GraphProvider.FALKORDB:
for label in ['Entity', 'Episodic', 'Community']: for label in ['Entity', 'Episodic', 'Community']:
await driver.execute_query( await driver.execute_query(
@ -129,13 +129,18 @@ class Node(BaseModel, ABC):
group_id=group_id, group_id=group_id,
) )
else: else:
await driver.execute_query( async with driver.session() as session:
""" await session.run(
MATCH (n:Entity|Episodic|Community {group_id: $group_id}) """
DETACH DELETE n MATCH (n:Entity|Episodic|Community {group_id: $group_id})
""", CALL {
group_id=group_id, WITH n
) DETACH DELETE n
} IN TRANSACTIONS OF $batch_size ROWS
""",
group_id=group_id,
batch_size=batch_size,
)
@classmethod @classmethod
async def get_by_uuid(cls, driver: GraphDriver, uuid: str): ... async def get_by_uuid(cls, driver: GraphDriver, uuid: str): ...

View file

@ -31,7 +31,7 @@ class ComparisonOperator(Enum):
class DateFilter(BaseModel): 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( comparison_operator: ComparisonOperator = Field(
description='Comparison operator for date filter' description='Comparison operator for date filter'
) )

View file

@ -1,7 +1,7 @@
[project] [project]
name = "graphiti-core" name = "graphiti-core"
description = "A temporal graph building library" description = "A temporal graph building library"
version = "0.18.3" version = "0.18.4"
authors = [ authors = [
{ name = "Paul Paliychuk", email = "paul@getzep.com" }, { name = "Paul Paliychuk", email = "paul@getzep.com" },
{ name = "Preston Rasmussen", email = "preston@getzep.com" }, { name = "Preston Rasmussen", email = "preston@getzep.com" },

2
uv.lock generated
View file

@ -746,7 +746,7 @@ wheels = [
[[package]] [[package]]
name = "graphiti-core" name = "graphiti-core"
version = "0.18.3" version = "0.18.4"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "diskcache" }, { name = "diskcache" },