KaiserShultz/Ankelodon_AI_Multi_task_agentic_system
1
1#GRAPH BUILDING2from src.nodes import (query_input, complexity_assessor, planner, agent, simple_executor, critic_evaluator, replanner, enhanced_finalizer)3from src.state import AgentState4from langgraph.graph import StateGraph, END5from src.nodes import should_continue, should_use_planning, should_replan, should_use_tools_simple_executor6from langgraph.checkpoint.memory import MemorySaver7from src.config import DEBUGGING_TOOL_NODE8 9def build_workflow(checkpointer=None) -> StateGraph[AgentState]:10 builder = StateGraph(AgentState)11 builder.add_node("INPUT", query_input)12 builder.add_node("COMPLEXITY_ASSESSOR", complexity_assessor)13 builder.add_node("PLANNING", planner)14 builder.add_node("AGENT", agent)15 builder.add_node("TOOLS", DEBUGGING_TOOL_NODE)16 builder.add_node("TOOLS_SIMPLE", DEBUGGING_TOOL_NODE)17 builder.add_node("FINALIZER", enhanced_finalizer)18 builder.add_node("SIMPLE_EXECUTOR", simple_executor)19 builder.add_node("CRITIC", critic_evaluator)20 builder.add_node("REPLANNER", replanner)21 22 23 builder.set_entry_point("INPUT")24 builder.add_edge("INPUT", "COMPLEXITY_ASSESSOR")25 26 builder.add_conditional_edges(27 "COMPLEXITY_ASSESSOR",28 should_use_planning,29 {"simple_executor": "SIMPLE_EXECUTOR", "planner": "PLANNING"},30 )31 builder.add_conditional_edges(32 "SIMPLE_EXECUTOR",33 should_use_tools_simple_executor,34 {"tools": "TOOLS_SIMPLE", "final_answer": "FINALIZER"},35 )36 37 builder.add_edge("TOOLS_SIMPLE", "FINALIZER")38 39 builder.add_edge("PLANNING", "AGENT")40 builder.add_conditional_edges(41 "AGENT",42 should_continue,43 {"tools": "TOOLS", "agent": "AGENT", "final_answer": "FINALIZER"},44 )45 builder.add_edge("TOOLS", "AGENT")46 builder.add_edge("FINALIZER", "CRITIC")47 builder.add_conditional_edges(48 "CRITIC",49 should_replan,50 {"end": END, "replan": "REPLANNER"},51 )52 builder.add_edge("REPLANNER", "AGENT")53 54 if checkpointer:55 system = builder.compile(checkpointer=checkpointer)56 else:57 system = builder.compile()58 return system