2525from .router import (
2626 create_route_agent ,
2727)
28+ from .router_conversational import create_route_agent_conversational
2829from .terminate_node import (
2930 create_terminate_node ,
3031)
@@ -74,16 +75,18 @@ def create_agent(
7475 os .environ ["LANGCHAIN_RECURSION_LIMIT" ] = str (config .recursion_limit )
7576
7677 agent_tools = list (tools )
77- flow_control_tools : list [BaseTool ] = create_flow_control_tools (output_schema )
78+ flow_control_tools : list [BaseTool ] = (
79+ [] if config .is_conversational else create_flow_control_tools (output_schema )
80+ )
7881 llm_tools : list [BaseTool ] = [* agent_tools , * flow_control_tools ]
7982
80- init_node = create_init_node (messages , input_schema )
83+ init_node = create_init_node (messages , input_schema , config . is_conversational )
8184
8285 tool_nodes = create_tool_node (agent_tools )
8386 tool_nodes_with_guardrails = create_tools_guardrails_subgraph (
8487 tool_nodes , guardrails
8588 )
86- terminate_node = create_terminate_node (output_schema )
89+ terminate_node = create_terminate_node (output_schema , config . is_conversational )
8790
8891 CompleteAgentGraphState = create_state_with_input (
8992 input_schema if input_schema is not None else BaseModel
@@ -109,19 +112,35 @@ def create_agent(
109112
110113 builder .add_edge (START , AgentGraphNode .INIT )
111114
112- llm_node = create_llm_node (model , llm_tools , config .thinking_messages_limit )
115+ llm_node = create_llm_node (
116+ model , llm_tools , config .thinking_messages_limit , config .is_conversational
117+ )
113118 llm_with_guardrails_subgraph = create_llm_guardrails_subgraph (
114119 (AgentGraphNode .LLM , llm_node ), guardrails
115120 )
116121 builder .add_node (AgentGraphNode .AGENT , llm_with_guardrails_subgraph )
117122 builder .add_edge (AgentGraphNode .INIT , AgentGraphNode .AGENT )
118123
119124 tool_node_names = list (tool_nodes_with_guardrails .keys ())
120- route_agent = create_route_agent (config .thinking_messages_limit )
125+
126+ if config .is_conversational :
127+ route_agent = create_route_agent_conversational ()
128+ target_node_names = [
129+ * tool_node_names ,
130+ AgentGraphNode .TERMINATE ,
131+ ]
132+ else :
133+ route_agent = create_route_agent (config .thinking_messages_limit )
134+ target_node_names = [
135+ AgentGraphNode .AGENT ,
136+ * tool_node_names ,
137+ AgentGraphNode .TERMINATE ,
138+ ]
139+
121140 builder .add_conditional_edges (
122141 AgentGraphNode .AGENT ,
123142 route_agent ,
124- [ AgentGraphNode . AGENT , * tool_node_names , AgentGraphNode . TERMINATE ] ,
143+ target_node_names ,
125144 )
126145
127146 for tool_name in tool_node_names :
0 commit comments