|
|
|
|
|
from src.nodes import (query_input, complexity_assessor, planner, agent, simple_executor, critic_evaluator, replanner, enhanced_finalizer) |
|
|
from src.state import AgentState |
|
|
from langgraph.graph import StateGraph, END |
|
|
from src.nodes import should_continue, should_use_planning, should_replan, should_use_tools_simple_executor |
|
|
from langgraph.checkpoint.memory import MemorySaver |
|
|
from src.config import DEBUGGING_TOOL_NODE |
|
|
|
|
|
def build_workflow(checkpointer=None) -> StateGraph[AgentState]: |
|
|
builder = StateGraph(AgentState) |
|
|
builder.add_node("INPUT", query_input) |
|
|
builder.add_node("COMPLEXITY_ASSESSOR", complexity_assessor) |
|
|
builder.add_node("PLANNING", planner) |
|
|
builder.add_node("AGENT", agent) |
|
|
builder.add_node("TOOLS", DEBUGGING_TOOL_NODE) |
|
|
builder.add_node("TOOLS_SIMPLE", DEBUGGING_TOOL_NODE) |
|
|
builder.add_node("FINALIZER", enhanced_finalizer) |
|
|
builder.add_node("SIMPLE_EXECUTOR", simple_executor) |
|
|
builder.add_node("CRITIC", critic_evaluator) |
|
|
builder.add_node("REPLANNER", replanner) |
|
|
|
|
|
|
|
|
builder.set_entry_point("INPUT") |
|
|
builder.add_edge("INPUT", "COMPLEXITY_ASSESSOR") |
|
|
|
|
|
builder.add_conditional_edges( |
|
|
"COMPLEXITY_ASSESSOR", |
|
|
should_use_planning, |
|
|
{"simple_executor": "SIMPLE_EXECUTOR", "planner": "PLANNING"}, |
|
|
) |
|
|
builder.add_conditional_edges( |
|
|
"SIMPLE_EXECUTOR", |
|
|
should_use_tools_simple_executor, |
|
|
{"tools": "TOOLS_SIMPLE", "final_answer": "FINALIZER"}, |
|
|
) |
|
|
|
|
|
builder.add_edge("TOOLS_SIMPLE", "FINALIZER") |
|
|
|
|
|
builder.add_edge("PLANNING", "AGENT") |
|
|
builder.add_conditional_edges( |
|
|
"AGENT", |
|
|
should_continue, |
|
|
{"tools": "TOOLS", "agent": "AGENT", "final_answer": "FINALIZER"}, |
|
|
) |
|
|
builder.add_edge("TOOLS", "AGENT") |
|
|
builder.add_edge("FINALIZER", "CRITIC") |
|
|
builder.add_conditional_edges( |
|
|
"CRITIC", |
|
|
should_replan, |
|
|
{"end": END, "replan": "REPLANNER"}, |
|
|
) |
|
|
builder.add_edge("REPLANNER", "AGENT") |
|
|
|
|
|
if checkpointer: |
|
|
system = builder.compile(checkpointer=checkpointer) |
|
|
else: |
|
|
system = builder.compile() |
|
|
return system |