handle missing edge types in graph data

This commit is contained in:
ArnoChen
2025-02-15 00:34:38 +08:00
parent 4d58ff8bb4
commit 70fc4cbfb0
4 changed files with 14 additions and 6 deletions

View File

@@ -1,5 +1,5 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import List, Dict, Any from typing import List, Dict, Any, Optional
class GPTKeywordExtractionFormat(BaseModel): class GPTKeywordExtractionFormat(BaseModel):
@@ -15,7 +15,7 @@ class KnowledgeGraphNode(BaseModel):
class KnowledgeGraphEdge(BaseModel): class KnowledgeGraphEdge(BaseModel):
id: str id: str
type: str type: Optional[str]
source: str # id of source node source: str # id of source node
target: str # id of target node target: str # id of target node
properties: Dict[str, Any] # anything else goes here properties: Dict[str, Any] # anything else goes here

View File

@@ -200,7 +200,7 @@ const EdgePropertiesView = ({ edge }: { edge: EdgeType }) => {
<label className="text-md pl-1 font-bold tracking-wide text-teal-600">Relationship</label> <label className="text-md pl-1 font-bold tracking-wide text-teal-600">Relationship</label>
<div className="bg-primary/5 max-h-96 overflow-auto rounded p-1"> <div className="bg-primary/5 max-h-96 overflow-auto rounded p-1">
<PropertyRow name={'Id'} value={edge.id} /> <PropertyRow name={'Id'} value={edge.id} />
<PropertyRow name={'Type'} value={edge.type} /> {edge.type && <PropertyRow name={'Type'} value={edge.type} />}
<PropertyRow <PropertyRow
name={'Source'} name={'Source'}
value={edge.sourceNode ? edge.sourceNode.labels.join(', ') : edge.source} value={edge.sourceNode ? edge.sourceNode.labels.join(', ') : edge.source}

View File

@@ -24,7 +24,7 @@ const validateGraph = (graph: RawGraph) => {
} }
for (const edge of graph.edges) { for (const edge of graph.edges) {
if (!edge.id || !edge.source || !edge.target || !edge.type || !edge.properties) { if (!edge.id || !edge.source || !edge.target) {
return false return false
} }
} }
@@ -88,6 +88,14 @@ const fetchGraph = async (label: string) => {
if (source !== undefined && source !== undefined) { if (source !== undefined && source !== undefined) {
const sourceNode = rawData.nodes[source] const sourceNode = rawData.nodes[source]
const targetNode = rawData.nodes[target] const targetNode = rawData.nodes[target]
if (!sourceNode) {
console.error(`Source node ${edge.source} is undefined`)
continue
}
if (!targetNode) {
console.error(`Target node ${edge.target} is undefined`)
continue
}
sourceNode.degree += 1 sourceNode.degree += 1
targetNode.degree += 1 targetNode.degree += 1
} }
@@ -146,7 +154,7 @@ const createSigmaGraph = (rawGraph: RawGraph | null) => {
for (const rawEdge of rawGraph?.edges ?? []) { for (const rawEdge of rawGraph?.edges ?? []) {
rawEdge.dynamicId = graph.addDirectedEdge(rawEdge.source, rawEdge.target, { rawEdge.dynamicId = graph.addDirectedEdge(rawEdge.source, rawEdge.target, {
label: rawEdge.type label: rawEdge.type || undefined
}) })
} }

View File

@@ -19,7 +19,7 @@ export type RawEdgeType = {
id: string id: string
source: string source: string
target: string target: string
type: string type?: string
properties: Record<string, any> properties: Record<string, any>
dynamicId: string dynamicId: string