| """Assembles the VeriScite LangGraph state machine.""" |
|
|
| from langgraph.graph import StateGraph, END |
|
|
| from app.graph.state import GraphState |
| from app.graph import nodes |
|
|
|
|
| def build_graph(): |
| graph = StateGraph(GraphState) |
|
|
| graph.add_node("extract_claims", nodes.extract_claims) |
| graph.add_node("fetch_citation", nodes.fetch_citation) |
| graph.add_node("verify_dual", nodes.verify_dual) |
| graph.add_node("handle_unresolved_citation", nodes.handle_unresolved_citation) |
| graph.add_node("escalate", nodes.escalate) |
| graph.add_node("explain", nodes.explain) |
| graph.add_node("next_claim", nodes.next_claim) |
| graph.add_node("build_report", nodes.build_report) |
|
|
| graph.set_entry_point("extract_claims") |
| graph.add_edge("extract_claims", "fetch_citation") |
|
|
| graph.add_conditional_edges( |
| "fetch_citation", |
| nodes.route_after_fetch, |
| {"verify": "verify_dual", "unresolved": "handle_unresolved_citation"}, |
| ) |
|
|
| graph.add_conditional_edges( |
| "verify_dual", |
| nodes.route_after_verify, |
| {"escalate": "escalate", "explain": "explain"}, |
| ) |
| graph.add_edge("escalate", "explain") |
|
|
| graph.add_conditional_edges( |
| "explain", |
| nodes.advance_or_report, |
| {"next_claim": "next_claim", "report": "build_report"}, |
| ) |
| graph.add_conditional_edges( |
| "handle_unresolved_citation", |
| nodes.advance_or_report, |
| {"next_claim": "next_claim", "report": "build_report"}, |
| ) |
| graph.add_edge("next_claim", "fetch_citation") |
| graph.add_edge("build_report", END) |
|
|
| return graph.compile() |
|
|