Skip to content

Commit

Permalink
don't disable parallel tool calls for o3-mini (#53)
Browse files Browse the repository at this point in the history
  • Loading branch information
vbarda authored Mar 6, 2025
1 parent 461a70a commit 6673ec7
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions langgraph_supervisor/supervisor.py
Original file line number Diff line number Diff line change
@@ -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 (
Expand All @@ -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,
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 6673ec7

Please sign in to comment.