File size: 1,527 Bytes
b1d65a7
 
 
 
 
 
 
 
 
e8cbb38
 
 
 
b1d65a7
 
 
 
 
 
 
 
e8cbb38
 
b1d65a7
e8cbb38
 
b1d65a7
 
 
 
 
 
e8cbb38
b1d65a7
 
e8cbb38
b1d65a7
 
 
 
e8cbb38
b1d65a7
e8cbb38
b1d65a7
e8cbb38
 
b1d65a7
 
 
 
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
from langgraph.graph import StateGraph, END

from app.graph.state import GraphState
from app.graph.nodes.router import router_node
from app.graph.nodes.rag_agent import rag_agent_node
from app.graph.nodes.synthesizer import synthesizer_node
from app.graph.nodes.evaluator import evaluator_node
from app.graph.nodes.general_agent import general_agent_node

from app.graph.nodes.hybrid_agent import hybrid_agent_node

def route_decision(state):
    return state["route"]

def build_graph():
    builder = StateGraph(GraphState)

    # nodes
    builder.add_node("router", router_node)
    builder.add_node("synthesizer", synthesizer_node)
    builder.add_node("evaluator", evaluator_node)

    builder.add_node("rag_agent", rag_agent_node)
    builder.add_node("general_agent", general_agent_node)
    builder.add_node("hybrid_agent", hybrid_agent_node)


    # edges
    builder.set_entry_point("router")

    builder.add_conditional_edges(
        "router",
        route_decision,
        {
            "rag": "rag_agent",
            "hybrid": "hybrid_agent",
            "general": "general_agent"
        }
    )

      # ✅ both paths merge at synthesizer
    builder.add_edge("rag_agent", "synthesizer")
    builder.add_edge("hybrid_agent", "synthesizer")
    builder.add_edge("general_agent", "synthesizer")

    # ✅ synthesizer → evaluator → end
    builder.add_edge("synthesizer", "evaluator")
    builder.add_edge("evaluator", END)

    return builder.compile()