fix(GraphRAG): create same graph name error. (#2215)

This commit is contained in:
Aries-ckt 2024-12-19 19:33:13 +08:00 committed by GitHub
parent 342a89c14a
commit d4031f0dd8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 0 deletions

View File

@ -35,6 +35,19 @@ class TuGraphConnector(BaseConnector):
return not exists
def is_exist(self, graph_name: str) -> bool:
"""Check a new graph in the database if it doesn't already exist."""
try:
with self._driver.session(database="default") as session:
graph_list = session.run("CALL dbms.graph.listGraphs()").data()
exists = any(item["graph_name"] == graph_name for item in graph_list)
except Exception as e:
raise Exception(
f"Failed to check graph exist'{graph_name}': {str(e)}"
) from e
return exists
def delete_graph(self, graph_name: str) -> None:
"""Delete a graph in the database if it exists."""
with self._driver.session(database="default") as session:

View File

@ -40,3 +40,7 @@ class GraphStoreBase(ABC):
@abstractmethod
def get_config(self) -> GraphStoreConfig:
"""Get the graph store config."""
def is_exist(self, name) -> bool:
"""Check Graph Name is Exist."""
raise NotImplementedError

View File

@ -102,6 +102,10 @@ class TuGraphStore(GraphStoreBase):
"""Get the TuGraph store config."""
return self._config
def is_exist(self, name) -> bool:
"""Check Graph Name is Exist."""
return self.conn.is_exist(name)
def _add_vertex_index(self, field_name):
"""Add an index to the vertex table."""
# TODO: Not used in the current implementation.

View File

@ -316,6 +316,8 @@ class CommunitySummaryKnowledgeGraph(BuiltinKnowledgeGraph):
async def aload_document(self, chunks: List[Chunk]) -> List[str]:
"""Extract and persist graph from the document file."""
if not self.vector_name_exists():
self._graph_store_apdater.create_graph(self.get_config().name)
await self._aload_document_graph(chunks)
await self._aload_triplet_graph(chunks)
await self._community_store.build_communities(

View File

@ -172,6 +172,8 @@ class BuiltinKnowledgeGraph(KnowledgeGraphBase):
return chunk.chunk_id
# wait async tasks completed
if not self.vector_name_exists():
self._graph_store_apdater.create_graph(self.get_config().name)
tasks = [process_chunk(chunk) for chunk in chunks]
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
@ -187,6 +189,8 @@ class BuiltinKnowledgeGraph(KnowledgeGraphBase):
Return:
List[str]: chunk ids.
"""
if not self.vector_name_exists():
self._graph_store_apdater.create_graph(self.get_config().name)
for chunk in chunks:
triplets = await self._triplet_extractor.extract(chunk.content)
for triplet in triplets:
@ -279,3 +283,7 @@ class BuiltinKnowledgeGraph(KnowledgeGraphBase):
"""Delete by ids."""
self._graph_store_apdater.delete_document(chunk_id=ids)
return []
def vector_name_exists(self) -> bool:
"""Whether name exists."""
return self._graph_store_apdater.graph_store.is_exist(self._config.name)