ymlin105's picture
chore: update requirements and refactor benchmark methods to use synchronous recommendations
65b86c6
"""
LangGraph workflow for Agentic RAG: Router -> Retrieve -> Evaluate -> (optional) Web Fallback.
"""
from langgraph.graph import StateGraph, START, END
from src.agentic.state import RAGState
from src.agentic.nodes import router_node, retrieve_node, evaluate_node, web_fallback_node
from src.utils import setup_logger
logger = setup_logger(__name__)
_agentic_graph = None
def _route_after_evaluate(state: RAGState):
"""Route to web_fallback if need_more else END."""
if state.get("need_more") and state.get("retry_count", 0) < 1:
return "web_fallback"
return END
def build_agentic_graph():
"""Build and compile the Agentic RAG StateGraph."""
builder = StateGraph(RAGState)
builder.add_node("router", router_node)
builder.add_node("retrieve", retrieve_node)
builder.add_node("evaluate", evaluate_node)
builder.add_node("web_fallback", web_fallback_node)
builder.add_edge(START, "router")
builder.add_edge("router", "retrieve")
builder.add_edge("retrieve", "evaluate")
builder.add_conditional_edges("evaluate", _route_after_evaluate)
builder.add_edge("web_fallback", END)
graph = builder.compile()
logger.info("Agentic RAG graph built and compiled")
return graph
def get_agentic_graph():
"""Lazy-initialize and return the compiled Agentic graph."""
global _agentic_graph
if _agentic_graph is None:
_agentic_graph = build_agentic_graph()
return _agentic_graph