Spaces:
Running
Running
| from __future__ import annotations | |
| from functools import partial | |
| from langgraph.checkpoint.memory import InMemorySaver | |
| from langgraph.graph import END, START, StateGraph | |
| from api.client import GaiaApiClient | |
| from config import Settings | |
| from graph.routes import route_after_execute, route_after_verify | |
| from graph.state import AgentState | |
| from models.openrouter_model import OpenRouterModels | |
| from nodes.answer_generator import generate_answer | |
| from nodes.formatter import format_answer | |
| from nodes.inspector import inspect_task | |
| from nodes.planner import create_plan, revise_plan | |
| from nodes.tool_executor import execute_next_tool | |
| from nodes.verifier import verify_answer | |
| def build_graph(settings: Settings, api_client: GaiaApiClient): | |
| models = OpenRouterModels(settings) | |
| builder = StateGraph(AgentState) | |
| builder.add_node("inspect", partial(inspect_task, settings=settings, api_client=api_client)) | |
| builder.add_node("plan", partial(create_plan, model=models.reasoning)) | |
| builder.add_node("execute", partial(execute_next_tool, settings=settings, models=models)) | |
| builder.add_node("generate", partial(generate_answer, model=models.reasoning)) | |
| builder.add_node("verify", partial(verify_answer, model=models.reasoning)) | |
| builder.add_node("replan", partial(revise_plan, model=models.reasoning)) | |
| builder.add_node("format", format_answer) | |
| builder.add_edge(START, "inspect") | |
| builder.add_edge("inspect", "plan") | |
| builder.add_edge("plan", "execute") | |
| builder.add_conditional_edges( | |
| "execute", | |
| partial(route_after_execute, settings=settings), | |
| {"execute": "execute", "generate": "generate"}, | |
| ) | |
| builder.add_edge("generate", "verify") | |
| builder.add_conditional_edges( | |
| "verify", | |
| partial(route_after_verify, settings=settings), | |
| {"format": "format", "replan": "replan"}, | |
| ) | |
| builder.add_edge("replan", "execute") | |
| builder.add_edge("format", END) | |
| return builder.compile(checkpointer=InMemorySaver()) | |