"""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