4747from ....lib ._parse ._response import ResponseFormatT , parse_response
4848from ....lib ._parse ._transform import transform_schema
4949from ....types .beta .beta_message import BetaMessage
50- from ....lib .tools ._beta_functions import BetaRunnableTool , BetaAsyncRunnableTool
50+ from ....lib .tools ._beta_functions import (
51+ BetaFunctionTool ,
52+ BetaRunnableTool ,
53+ BetaAsyncFunctionTool ,
54+ BetaAsyncRunnableTool ,
55+ BetaBuiltinFunctionTool ,
56+ BetaAsyncBuiltinFunctionTool ,
57+ )
5158from ....types .anthropic_beta_param import AnthropicBetaParam
5259from ....types .beta .beta_message_param import BetaMessageParam
5360from ....types .beta .beta_metadata_param import BetaMetadataParam
@@ -1174,7 +1181,7 @@ def tool_runner(
11741181 max_tokens : int ,
11751182 messages : Iterable [BetaMessageParam ],
11761183 model : ModelParam ,
1177- tools : Iterable [BetaRunnableTool ],
1184+ tools : Iterable [BetaRunnableTool | BetaToolUnionParam ],
11781185 compaction_control : CompactionControl | Omit = omit ,
11791186 container : Optional [message_create_params .Container ] | Omit = omit ,
11801187 context_management : Optional [BetaContextManagementConfigParam ] | Omit = omit ,
@@ -1208,7 +1215,7 @@ def tool_runner(
12081215 max_tokens : int ,
12091216 messages : Iterable [BetaMessageParam ],
12101217 model : ModelParam ,
1211- tools : Iterable [BetaRunnableTool ],
1218+ tools : Iterable [BetaRunnableTool | BetaToolUnionParam ],
12121219 compaction_control : CompactionControl | Omit = omit ,
12131220 stream : Literal [True ],
12141221 max_iterations : int | Omit = omit ,
@@ -1242,7 +1249,7 @@ def tool_runner(
12421249 max_tokens : int ,
12431250 messages : Iterable [BetaMessageParam ],
12441251 model : ModelParam ,
1245- tools : Iterable [BetaRunnableTool ],
1252+ tools : Iterable [BetaRunnableTool | BetaToolUnionParam ],
12461253 compaction_control : CompactionControl | Omit = omit ,
12471254 stream : bool ,
12481255 max_iterations : int | Omit = omit ,
@@ -1275,7 +1282,7 @@ def tool_runner(
12751282 max_tokens : int ,
12761283 messages : Iterable [BetaMessageParam ],
12771284 model : ModelParam ,
1278- tools : Iterable [BetaRunnableTool ],
1285+ tools : Iterable [BetaRunnableTool | BetaToolUnionParam ],
12791286 compaction_control : CompactionControl | Omit = omit ,
12801287 max_iterations : int | Omit = omit ,
12811288 container : Optional [message_create_params .Container ] | Omit = omit ,
@@ -1315,6 +1322,15 @@ def tool_runner(
13151322 ** (extra_headers or {}),
13161323 }
13171324
1325+ runnable_tools : list [BetaRunnableTool ] = []
1326+ regular_tools : list [BetaToolUnionParam ] = []
1327+
1328+ for tool in tools :
1329+ if isinstance (tool , (BetaFunctionTool , BetaBuiltinFunctionTool )):
1330+ runnable_tools .append (tool )
1331+ else :
1332+ regular_tools .append (tool )
1333+
13181334 params = cast (
13191335 message_create_params .ParseMessageCreateParamsBase [ResponseFormatT ],
13201336 {
@@ -1333,15 +1349,15 @@ def tool_runner(
13331349 "temperature" : temperature ,
13341350 "thinking" : thinking ,
13351351 "tool_choice" : tool_choice ,
1336- "tools" : [tool .to_dict () for tool in tools ],
1352+ "tools" : [* [ tool .to_dict () for tool in runnable_tools ], * regular_tools ],
13371353 "top_k" : top_k ,
13381354 "top_p" : top_p ,
13391355 },
13401356 )
13411357
13421358 if stream :
13431359 return BetaStreamingToolRunner [ResponseFormatT ](
1344- tools = tools ,
1360+ tools = runnable_tools ,
13451361 params = params ,
13461362 options = {
13471363 "extra_headers" : extra_headers ,
@@ -1354,7 +1370,7 @@ def tool_runner(
13541370 compaction_control = compaction_control if is_given (compaction_control ) else None ,
13551371 )
13561372 return BetaToolRunner [ResponseFormatT ](
1357- tools = tools ,
1373+ tools = runnable_tools ,
13581374 params = params ,
13591375 options = {
13601376 "extra_headers" : extra_headers ,
@@ -2821,7 +2837,7 @@ def tool_runner(
28212837 max_tokens : int ,
28222838 messages : Iterable [BetaMessageParam ],
28232839 model : ModelParam ,
2824- tools : Iterable [BetaAsyncRunnableTool ],
2840+ tools : Iterable [BetaAsyncRunnableTool | BetaToolUnionParam ],
28252841 compaction_control : CompactionControl | Omit = omit ,
28262842 max_iterations : int | Omit = omit ,
28272843 container : Optional [message_create_params .Container ] | Omit = omit ,
@@ -2855,7 +2871,7 @@ def tool_runner(
28552871 max_tokens : int ,
28562872 messages : Iterable [BetaMessageParam ],
28572873 model : ModelParam ,
2858- tools : Iterable [BetaAsyncRunnableTool ],
2874+ tools : Iterable [BetaAsyncRunnableTool | BetaToolUnionParam ],
28592875 compaction_control : CompactionControl | Omit = omit ,
28602876 stream : Literal [True ],
28612877 max_iterations : int | Omit = omit ,
@@ -2889,7 +2905,7 @@ def tool_runner(
28892905 max_tokens : int ,
28902906 messages : Iterable [BetaMessageParam ],
28912907 model : ModelParam ,
2892- tools : Iterable [BetaAsyncRunnableTool ],
2908+ tools : Iterable [BetaAsyncRunnableTool | BetaToolUnionParam ],
28932909 compaction_control : CompactionControl | Omit = omit ,
28942910 stream : bool ,
28952911 max_iterations : int | Omit = omit ,
@@ -2922,7 +2938,7 @@ def tool_runner(
29222938 max_tokens : int ,
29232939 messages : Iterable [BetaMessageParam ],
29242940 model : ModelParam ,
2925- tools : Iterable [BetaAsyncRunnableTool ],
2941+ tools : Iterable [BetaAsyncRunnableTool | BetaToolUnionParam ],
29262942 compaction_control : CompactionControl | Omit = omit ,
29272943 max_iterations : int | Omit = omit ,
29282944 container : Optional [message_create_params .Container ] | Omit = omit ,
@@ -2962,6 +2978,15 @@ def tool_runner(
29622978 ** (extra_headers or {}),
29632979 }
29642980
2981+ runnable_tools : list [BetaAsyncRunnableTool ] = []
2982+ regular_tools : list [BetaToolUnionParam ] = []
2983+
2984+ for tool in tools :
2985+ if isinstance (tool , (BetaAsyncFunctionTool , BetaAsyncBuiltinFunctionTool )):
2986+ runnable_tools .append (tool )
2987+ else :
2988+ regular_tools .append (tool )
2989+
29652990 params = cast (
29662991 message_create_params .ParseMessageCreateParamsBase [ResponseFormatT ],
29672992 {
@@ -2980,15 +3005,15 @@ def tool_runner(
29803005 "temperature" : temperature ,
29813006 "thinking" : thinking ,
29823007 "tool_choice" : tool_choice ,
2983- "tools" : [tool .to_dict () for tool in tools ],
3008+ "tools" : [* [ tool .to_dict () for tool in runnable_tools ], * regular_tools ],
29843009 "top_k" : top_k ,
29853010 "top_p" : top_p ,
29863011 },
29873012 )
29883013
29893014 if stream :
29903015 return BetaAsyncStreamingToolRunner [ResponseFormatT ](
2991- tools = tools ,
3016+ tools = runnable_tools ,
29923017 params = params ,
29933018 options = {
29943019 "extra_headers" : extra_headers ,
@@ -3001,7 +3026,7 @@ def tool_runner(
30013026 compaction_control = compaction_control if is_given (compaction_control ) else None ,
30023027 )
30033028 return BetaAsyncToolRunner [ResponseFormatT ](
3004- tools = tools ,
3029+ tools = runnable_tools ,
30053030 params = params ,
30063031 options = {
30073032 "extra_headers" : extra_headers ,
0 commit comments