diff --git a/.gitignore b/.gitignore index b5c4bb11..3a6c7858 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ local_neo4jWorkDir/ neo4jWorkDir/ ignore_this.txt .venv/ -.ruff_cache/ \ No newline at end of file +.ruff_cache/ diff --git a/lightrag/lightrag.py b/lightrag/lightrag.py index b4e4886d..8b299749 100644 --- a/lightrag/lightrag.py +++ b/lightrag/lightrag.py @@ -331,20 +331,22 @@ class LightRAG: def delete_by_entity(self, entity_name: str): loop = always_get_an_event_loop() return loop.run_until_complete(self.adelete_by_entity(entity_name)) - + async def adelete_by_entity(self, entity_name: str): - entity_name = f"\"{entity_name.upper()}\"" + entity_name = f'"{entity_name.upper()}"' try: await self.entities_vdb.delete_entity(entity_name) await self.relationships_vdb.delete_relation(entity_name) await self.chunk_entity_relation_graph.delete_node(entity_name) - logger.info(f"Entity '{entity_name}' and its relationships have been deleted.") + logger.info( + f"Entity '{entity_name}' and its relationships have been deleted." + ) await self._delete_by_entity_done() except Exception as e: logger.error(f"Error while deleting entity '{entity_name}': {e}") - + async def _delete_by_entity_done(self): tasks = [] for storage_inst in [ @@ -355,4 +357,4 @@ class LightRAG: if storage_inst is None: continue tasks.append(cast(StorageNameSpace, storage_inst).index_done_callback()) - await asyncio.gather(*tasks) \ No newline at end of file + await asyncio.gather(*tasks) diff --git a/lightrag/storage.py b/lightrag/storage.py index 080562df..9a4c3d4c 100644 --- a/lightrag/storage.py +++ b/lightrag/storage.py @@ -8,8 +8,8 @@ import numpy as np from nano_vectordb import NanoVectorDB from .utils import ( - logger, - load_json, + logger, + load_json, write_json, compute_mdhash_id, ) @@ -116,7 +116,7 @@ class NanoVectorDBStorage(BaseVectorStorage): {**dp, "id": dp["__id__"], "distance": dp["__metrics__"]} for dp in results ] return results - + @property def client_storage(self): return getattr(self._client, "_NanoVectorDB__storage") @@ -124,7 +124,7 @@ class NanoVectorDBStorage(BaseVectorStorage): async def delete_entity(self, entity_name: str): try: entity_id = [compute_mdhash_id(entity_name, prefix="ent-")] - + if self._client.get(entity_id): self._client.delete(entity_id) logger.info(f"Entity {entity_name} have been deleted.") @@ -132,21 +132,27 @@ class NanoVectorDBStorage(BaseVectorStorage): logger.info(f"No entity found with name {entity_name}.") except Exception as e: logger.error(f"Error while deleting entity {entity_name}: {e}") - + async def delete_relation(self, entity_name: str): try: relations = [ - dp for dp in self.client_storage["data"] if dp["src_id"] == entity_name or dp["tgt_id"] == entity_name + dp + for dp in self.client_storage["data"] + if dp["src_id"] == entity_name or dp["tgt_id"] == entity_name ] ids_to_delete = [relation["__id__"] for relation in relations] if ids_to_delete: self._client.delete(ids_to_delete) - logger.info(f"All relations related to entity {entity_name} have been deleted.") + logger.info( + f"All relations related to entity {entity_name} have been deleted." + ) else: logger.info(f"No relations found for entity {entity_name}.") except Exception as e: - logger.error(f"Error while deleting relations for entity {entity_name}: {e}") + logger.error( + f"Error while deleting relations for entity {entity_name}: {e}" + ) async def index_done_callback(self): self._client.save() @@ -268,7 +274,7 @@ class NetworkXStorage(BaseGraphStorage): async def delete_node(self, node_id: str): """ Delete a node from the graph based on the specified node_id. - + :param node_id: The node_id to delete """ if self._graph.has_node(node_id):