add pre-built graph viewer files

format

a

a
This commit is contained in:
ArnoChen
2025-02-13 18:04:23 +08:00
parent 464042f2c0
commit 6896d4ab21
6 changed files with 1008 additions and 25 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Lightrag Graph Viewer</title>
<script type="module" crossorigin src="./assets/index-CF-pcoIl.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-BAeLPZpd.css">
</head>
<body>
<div id="root"></div>
</body>
</html>

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -45,8 +45,7 @@ class Neo4JStorage(BaseGraphStorage):
URI = os.environ["NEO4J_URI"] URI = os.environ["NEO4J_URI"]
USERNAME = os.environ["NEO4J_USERNAME"] USERNAME = os.environ["NEO4J_USERNAME"]
PASSWORD = os.environ["NEO4J_PASSWORD"] PASSWORD = os.environ["NEO4J_PASSWORD"]
MAX_CONNECTION_POOL_SIZE = os.environ.get( MAX_CONNECTION_POOL_SIZE = os.environ.get("NEO4J_MAX_CONNECTION_POOL_SIZE", 800)
"NEO4J_MAX_CONNECTION_POOL_SIZE", 800)
DATABASE = os.environ.get( DATABASE = os.environ.get(
"NEO4J_DATABASE", re.sub(r"[^a-zA-Z0-9-]", "-", namespace) "NEO4J_DATABASE", re.sub(r"[^a-zA-Z0-9-]", "-", namespace)
) )
@@ -76,22 +75,19 @@ class Neo4JStorage(BaseGraphStorage):
) )
raise e raise e
except neo4jExceptions.AuthError as e: except neo4jExceptions.AuthError as e:
logger.error( logger.error(f"Authentication failed for {database} at {URI}")
f"Authentication failed for {database} at {URI}")
raise e raise e
except neo4jExceptions.ClientError as e: except neo4jExceptions.ClientError as e:
if e.code == "Neo.ClientError.Database.DatabaseNotFound": if e.code == "Neo.ClientError.Database.DatabaseNotFound":
logger.info( logger.info(
f"{database} at {URI} not found. Try to create specified database.".capitalize( f"{database} at {URI} not found. Try to create specified database.".capitalize()
)
) )
try: try:
with _sync_driver.session() as session: with _sync_driver.session() as session:
session.run( session.run(
f"CREATE DATABASE `{database}` IF NOT EXISTS" f"CREATE DATABASE `{database}` IF NOT EXISTS"
) )
logger.info( logger.info(f"{database} at {URI} created".capitalize())
f"{database} at {URI} created".capitalize())
connected = True connected = True
except ( except (
neo4jExceptions.ClientError, neo4jExceptions.ClientError,
@@ -108,8 +104,7 @@ class Neo4JStorage(BaseGraphStorage):
"This Neo4j instance does not support creating databases. Try to use Neo4j Desktop/Enterprise version or DozerDB instead. Fallback to use the default database." "This Neo4j instance does not support creating databases. Try to use Neo4j Desktop/Enterprise version or DozerDB instead. Fallback to use the default database."
) )
if database is None: if database is None:
logger.error( logger.error(f"Failed to create {database} at {URI}")
f"Failed to create {database} at {URI}")
raise e raise e
if connected: if connected:
@@ -401,8 +396,7 @@ class Neo4JStorage(BaseGraphStorage):
validate_query = f"MATCH (n:`{label}`) RETURN n LIMIT 1" validate_query = f"MATCH (n:`{label}`) RETURN n LIMIT 1"
validate_result = await session.run(validate_query) validate_result = await session.run(validate_query)
if not await validate_result.single(): if not await validate_result.single():
logger.warning( logger.warning(f"Starting node {label} does not exist!")
f"Starting node {label} does not exist!")
return result return result
# Optimized query (including direction handling and self-loops) # Optimized query (including direction handling and self-loops)
@@ -427,11 +421,13 @@ class Neo4JStorage(BaseGraphStorage):
# Use node ID + label combination as unique identifier # Use node ID + label combination as unique identifier
node_id = node.id node_id = node.id
if node_id not in seen_nodes: if node_id not in seen_nodes:
result.nodes.append(KnowledgeGraphNode( result.nodes.append(
id=f"{node_id}", KnowledgeGraphNode(
labels=list(node.labels), id=f"{node_id}",
properties=dict(node), labels=list(node.labels),
)) properties=dict(node),
)
)
seen_nodes.add(node_id) seen_nodes.add(node_id)
# Handle relationships (including direction information) # Handle relationships (including direction information)
@@ -440,13 +436,15 @@ class Neo4JStorage(BaseGraphStorage):
if edge_id not in seen_edges: if edge_id not in seen_edges:
start = rel.start_node start = rel.start_node
end = rel.end_node end = rel.end_node
result.edges.append(KnowledgeGraphEdge( result.edges.append(
id=f"{edge_id}", KnowledgeGraphEdge(
type=rel.type, id=f"{edge_id}",
source=f"{start.id}", type=rel.type,
target=f"{end.id}", source=f"{start.id}",
properties=dict(rel), target=f"{end.id}",
)) properties=dict(rel),
)
)
seen_edges.add(edge_id) seen_edges.add(edge_id)
logger.info( logger.info(

View File

@@ -386,7 +386,9 @@ class LightRAG:
text = await self.chunk_entity_relation_graph.get_all_labels() text = await self.chunk_entity_relation_graph.get_all_labels()
return text return text
async def get_knowledge_graph(self, nodel_label: str, max_depth: int) -> KnowledgeGraph: async def get_knowledge_graph(
self, nodel_label: str, max_depth: int
) -> KnowledgeGraph:
return await self.chunk_entity_relation_graph.get_knowledge_graph( return await self.chunk_entity_relation_graph.get_knowledge_graph(
node_label=nodel_label, max_depth=max_depth node_label=nodel_label, max_depth=max_depth
) )