44from collections .abc import Callable
55import logging
66import time
7+ from pydantic_ai .toolsets import FunctionToolset
78from pydantic_ai .usage import UsageLimits
89from typing_extensions import override
910from eval_protocol .models import EvaluationRow , Message
2122 ToolReturnPart ,
2223 UserPromptPart ,
2324)
24- from pydantic_ai .models .openai import OpenAIModel
25+ from pydantic_ai .models .openai import OpenAIChatModel
2526from pydantic_ai .providers .openai import OpenAIProvider
2627
2728logger = logging .getLogger (__name__ )
@@ -37,7 +38,7 @@ def __init__(
3738 usage_limits : UsageLimits | None = None ,
3839 ):
3940 # dummy model used for its helper functions for processing messages
40- self ._util : OpenAIModel = OpenAIModel ("dummy-model" , provider = OpenAIProvider (api_key = "dummy" ))
41+ self ._util : OpenAIChatModel = OpenAIChatModel ("dummy-model" , provider = OpenAIProvider (api_key = "dummy" ))
4142 self ._setup_agent = agent_factory
4243
4344 @override
@@ -53,18 +54,19 @@ async def process_row(row: EvaluationRow) -> EvaluationRow:
5354 start_time = time .perf_counter ()
5455
5556 tools = []
56- for _ , tool in agent ._function_tools .items ():
57- tool_dict = {
58- "type" : "function" ,
59- "function" : {
60- "name" : tool .name ,
61- "parameters" : tool .function_schema .json_schema ,
62- },
63- }
64- if tool .description :
65- tool_dict ["function" ]["description" ] = tool .description
66-
67- tools .append (tool_dict )
57+ for toolset in agent .toolsets :
58+ if isinstance (toolset , FunctionToolset ):
59+ for _ , tool in toolset .tools .items ():
60+ tool_dict = {
61+ "type" : "function" ,
62+ "function" : {
63+ "name" : tool .name ,
64+ "parameters" : tool .function_schema .json_schema ,
65+ },
66+ }
67+ if tool .description :
68+ tool_dict ["function" ]["description" ] = tool .description
69+ tools .append (tool_dict )
6870 row .tools = tools
6971
7072 model_messages = [self .convert_ep_message_to_pyd_message (m , row ) for m in row .messages ]
0 commit comments