From 6673ec7070c20f0ee4c151f17057a9aa6d068c2e Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Thu, 6 Mar 2025 15:55:19 -0500 Subject: [PATCH] don't disable parallel tool calls for o3-mini (#53) --- langgraph_supervisor/supervisor.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/langgraph_supervisor/supervisor.py b/langgraph_supervisor/supervisor.py index 6318723..584944e 100644 --- a/langgraph_supervisor/supervisor.py +++ b/langgraph_supervisor/supervisor.py @@ -1,7 +1,7 @@ import inspect from typing import Any, Callable, Literal, Type -from langchain_core.language_models import LanguageModelLike +from langchain_core.language_models import BaseChatModel, LanguageModelLike from langchain_core.tools import BaseTool from langgraph.graph import END, START, StateGraph from langgraph.prebuilt.chat_agent_executor import ( @@ -27,6 +27,25 @@ """ +MODELS_NO_PARALLEL_TOOL_CALLS = {"o3-mini"} + + +def _supports_disable_parallel_tool_calls(model: LanguageModelLike) -> bool: + if not isinstance(model, BaseChatModel): + return False + + if hasattr(model, "model_name") and model.model_name in MODELS_NO_PARALLEL_TOOL_CALLS: + return False + + if not hasattr(model, "bind_tools"): + return False + + if "parallel_tool_calls" not in inspect.signature(model.bind_tools).parameters: + return False + + return True + + def _make_call_agent( agent: Pregel, output_mode: OutputMode, @@ -127,10 +146,7 @@ def create_supervisor( handoff_tools = [create_handoff_tool(agent_name=agent.name) for agent in agents] all_tools = (tools or []) + handoff_tools - if ( - hasattr(model, "bind_tools") - and "parallel_tool_calls" in inspect.signature(model.bind_tools).parameters - ): + if _supports_disable_parallel_tool_calls(model): model = model.bind_tools(all_tools, parallel_tool_calls=False) else: model = model.bind_tools(all_tools)