File size: 2,878 Bytes
0762fba a688aff 0762fba a688aff 5f7dc7e a688aff 0762fba a688aff 0762fba a688aff 0762fba 5f7dc7e 0762fba a688aff 5f7dc7e a688aff 0762fba a688aff 0762fba a688aff 5f7dc7e a688aff 5f7dc7e a688aff 0762fba | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | from langgraph.graph import StateGraph, END
from langgraph.types import Send
from backend.graph.state import BrainState
from backend.graph.nodes.load_sources import load_sources
from backend.graph.nodes.chunk_documents import chunk_documents
from backend.graph.nodes.extract_decisions import extract_decisions
from backend.graph.nodes.extract_workflows import extract_workflows
from backend.graph.nodes.extract_exceptions import extract_exceptions
from backend.graph.nodes.detect_contradictions import detect_contradictions
from backend.graph.nodes.synthesize_skills import synthesize_skills
from backend.graph.nodes.link_evidence import link_evidence
from backend.graph.nodes.score_confidence import score_confidence
from backend.graph.nodes.write_brain import write_brain
def route_to_extraction(state: BrainState) -> list[Send]:
return [
Send("extract_decisions", dict(state)),
Send("extract_workflows", dict(state)),
Send("extract_exceptions", dict(state)),
Send("detect_contradictions", dict(state)),
]
def build_compilation_graph() -> StateGraph:
"""
load_sources → chunk_documents → route_to_extraction (Send fan-out)
→ [extract_decisions, extract_workflows, extract_exceptions, detect_contradictions] (parallel)
→ synthesize_skills → link_evidence → score_confidence → write_brain
"""
workflow = StateGraph(BrainState)
workflow.add_node("load_sources", load_sources)
workflow.add_node("chunk_documents", chunk_documents)
workflow.add_node("extract_decisions", extract_decisions)
workflow.add_node("extract_workflows", extract_workflows)
workflow.add_node("extract_exceptions", extract_exceptions)
workflow.add_node("detect_contradictions", detect_contradictions)
workflow.add_node("synthesize_skills", synthesize_skills)
workflow.add_node("link_evidence", link_evidence)
workflow.add_node("score_confidence", score_confidence)
workflow.add_node("write_brain", write_brain)
workflow.set_entry_point("load_sources")
workflow.add_edge("load_sources", "chunk_documents")
workflow.add_conditional_edges(
"chunk_documents",
route_to_extraction,
[
"extract_decisions",
"extract_workflows",
"extract_exceptions",
"detect_contradictions",
],
)
workflow.add_edge("extract_decisions", "synthesize_skills")
workflow.add_edge("extract_workflows", "synthesize_skills")
workflow.add_edge("extract_exceptions", "synthesize_skills")
workflow.add_edge("detect_contradictions", "synthesize_skills")
workflow.add_edge("synthesize_skills", "link_evidence")
workflow.add_edge("link_evidence", "score_confidence")
workflow.add_edge("score_confidence", "write_brain")
workflow.add_edge("write_brain", END)
return workflow.compile()
|