From 3fc86f3dec72497d018fa0241e3404f0f55dc4c4 Mon Sep 17 00:00:00 2001 From: Daniel Chalef <131175+danielchalef@users.noreply.github.com> Date: Wed, 5 Nov 2025 08:34:53 -0800 Subject: [PATCH] Implement build_indices_and_constraints for Kuzu and Neptune drivers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both Kuzu and Neptune drivers were missing the build_indices_and_constraints method required by the abstract GraphDriver base class. Kuzu uses a no-op implementation since indices are created during schema setup. Neptune delegates to its existing OpenSearch (AOSS) index creation logic. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- graphiti_core/driver/kuzu_driver.py | 6 ++++++ graphiti_core/driver/neptune_driver.py | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/graphiti_core/driver/kuzu_driver.py b/graphiti_core/driver/kuzu_driver.py index 8a04a4ac..2f287bb5 100644 --- a/graphiti_core/driver/kuzu_driver.py +++ b/graphiti_core/driver/kuzu_driver.py @@ -140,6 +140,12 @@ class KuzuDriver(GraphDriver): def delete_all_indexes(self, database_: str): pass + async def build_indices_and_constraints(self, delete_existing: bool = False): + # Kuzu doesn't support dynamic index creation like Neo4j or FalkorDB + # Schema and indices are created during setup_schema() + # This method is required by the abstract base class but is a no-op for Kuzu + pass + def setup_schema(self): conn = kuzu.Connection(self.db) conn.execute(SCHEMA_QUERIES) diff --git a/graphiti_core/driver/neptune_driver.py b/graphiti_core/driver/neptune_driver.py index d43d20a1..dc77d8f8 100644 --- a/graphiti_core/driver/neptune_driver.py +++ b/graphiti_core/driver/neptune_driver.py @@ -243,6 +243,12 @@ class NeptuneDriver(GraphDriver): if client.indices.exists(index=index_name): client.indices.delete(index=index_name) + async def build_indices_and_constraints(self, delete_existing: bool = False): + # Neptune uses OpenSearch (AOSS) for indexing + if delete_existing: + await self.delete_aoss_indices() + await self.create_aoss_indices() + def run_aoss_query(self, name: str, query_text: str, limit: int = 10) -> dict[str, Any]: for index in aoss_indices: if name.lower() == index['index_name']: