MCP_Res / mcp /knowledge_graph.py
mgbam's picture
Update mcp/knowledge_graph.py
1e92bb0 verified
raw
history blame
1.55 kB
# mcp/knowledge_graph.py
from streamlit_agraph import Node, Edge, Config
def build_agraph(res: Dict) -> (list, list, Config):
nodes, edges = [], []
# add each paper as a node
for i,p in enumerate(res["papers"]):
nid = f"paper_{i}"
nodes.append(Node(id=nid, label=p["title"], size=20, color="#0984e3"))
# connect to AI summary?
# add UMLS concepts
for u in res["umls"]:
cid = f"cui_{u['cui']}"
label = f"{u['name']} ({u['cui']})"
nodes.append(Node(id=cid, label=label, size=25, color="#00b894"))
# connect concept β†’ first paper
edges.append(Edge(source=cid, target="paper_0", label="mentioned_in"))
# genes
g = res.get("gene",{})
if g:
gid = "gene_node"
nodes.append(Node(id=gid, label=g.get("symbol",g.get("name","gene")), color="#d63031"))
edges.append(Edge(source=gid, target="cui_"+res["umls"][0]["cui"], label="related"))
# variants
for v in res["variants"]:
vid = f"var_{v['mutationId']}"
nodes.append(Node(id=vid, label=v["mutationId"], color="#fdcb6e", size=15))
edges.append(Edge(source=vid, target=gid, label="affects"))
# trials
for t in res["trials"]:
tid = t["NCTId"][0]
nodes.append(Node(id=tid, label=tid, color="#6c5ce7"))
edges.append(Edge(source=tid, target=gid, label="studies"))
cfg = Config(width="100%", height="600", directed=True,
nodeHighlightBehavior=True, highlightColor="#fdcb6e")
return nodes, edges, cfg