File size: 1,322 Bytes
ebb8326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""LangGraph definition for the RAG pipeline."""

from langgraph.graph import END, StateGraph

from src.state import GraphState
from src.nodes.logic import logic_solver_node
from src.nodes.rag import knowledge_rag_node
from src.nodes.router import route_question, router_node
from src.nodes.direct import direct_answer_node


def build_graph() -> StateGraph:
    """Build and compile the LangGraph pipeline."""
    
    workflow = StateGraph(GraphState)

    workflow.add_node("router", router_node)
    workflow.add_node("knowledge_rag", knowledge_rag_node)
    workflow.add_node("logic_solver", logic_solver_node)
    workflow.add_node("direct_answer", direct_answer_node)
    
    workflow.set_entry_point("router")

    workflow.add_conditional_edges(
        "router",
        route_question,
        {
            "knowledge_rag": "knowledge_rag",
            "logic_solver": "logic_solver",
            "direct_answer": "direct_answer",
            "__end__": END,
        },
    )

    workflow.add_edge("knowledge_rag", END)
    workflow.add_edge("logic_solver", END)
    workflow.add_edge("direct_answer", END)
    return workflow.compile()

graph = None

def get_graph():
    """Get or create the compiled graph singleton."""
    global graph
    if graph is None:
        graph = build_graph()
    return graph