From fc3307bc635e9c70784aa57fa2517634300ea302 Mon Sep 17 00:00:00 2001 From: Paul Kompfner Date: Fri, 10 Apr 2026 10:15:39 -0400 Subject: [PATCH] Use OpenAI SDK types for tool params in adapters and tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are TypedDicts (plain dicts at runtime), so no behavioral change — just more descriptive type hints for readers. Use ToolParam instead of FunctionToolParam for the Responses adapter to reflect that custom non-function tools are supported. Use ChatCompletionToolParam instead of Any for the completions adapter return type. Update tests to use typed params in expected values. --- .../adapters/services/open_ai_adapter.py | 2 +- .../services/open_ai_responses_adapter.py | 6 +++--- tests/test_function_calling_adapters.py | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/pipecat/adapters/services/open_ai_adapter.py b/src/pipecat/adapters/services/open_ai_adapter.py index 3729745d3..db9f3ee2f 100644 --- a/src/pipecat/adapters/services/open_ai_adapter.py +++ b/src/pipecat/adapters/services/open_ai_adapter.py @@ -96,7 +96,7 @@ class OpenAILLMAdapter(BaseLLMAdapter[OpenAILLMInvocationParams]): "tool_choice": context.tool_choice, } - def to_provider_tools_format(self, tools_schema: ToolsSchema) -> List[Any]: + def to_provider_tools_format(self, tools_schema: ToolsSchema) -> List[ChatCompletionToolParam]: """Convert function schemas to OpenAI's function-calling format. Args: diff --git a/src/pipecat/adapters/services/open_ai_responses_adapter.py b/src/pipecat/adapters/services/open_ai_responses_adapter.py index e0f0f9c32..a58b26c91 100644 --- a/src/pipecat/adapters/services/open_ai_responses_adapter.py +++ b/src/pipecat/adapters/services/open_ai_responses_adapter.py @@ -10,7 +10,7 @@ import copy from typing import Any, Dict, List, Optional, TypedDict from openai._types import NotGiven as OpenAINotGiven -from openai.types.responses import FunctionToolParam, ResponseInputItemParam +from openai.types.responses import FunctionToolParam, ResponseInputItemParam, ToolParam from pipecat.adapters.base_llm_adapter import BaseLLMAdapter from pipecat.adapters.schemas.tools_schema import AdapterType, ToolsSchema @@ -25,7 +25,7 @@ class OpenAIResponsesLLMInvocationParams(TypedDict, total=False): """Context-based parameters for invoking OpenAI Responses API.""" input: List[ResponseInputItemParam] - tools: List[FunctionToolParam] | OpenAINotGiven + tools: List[ToolParam] | OpenAINotGiven instructions: str @@ -106,7 +106,7 @@ class OpenAIResponsesLLMAdapter(BaseLLMAdapter[OpenAIResponsesLLMInvocationParam return params - def to_provider_tools_format(self, tools_schema: ToolsSchema) -> List[Any]: + def to_provider_tools_format(self, tools_schema: ToolsSchema) -> List[ToolParam]: """Convert function schemas to Responses API function tool format. Args: diff --git a/tests/test_function_calling_adapters.py b/tests/test_function_calling_adapters.py index 67df0c7e9..616f2ea1e 100644 --- a/tests/test_function_calling_adapters.py +++ b/tests/test_function_calling_adapters.py @@ -7,6 +7,8 @@ import unittest from openai.types.chat import ChatCompletionToolParam +from openai.types.responses.function_tool_param import FunctionToolParam +from openai.types.responses.tool_search_tool_param import ToolSearchToolParam from pipecat.adapters.schemas.function_schema import FunctionSchema from pipecat.adapters.schemas.tools_schema import AdapterType, ToolsSchema @@ -213,11 +215,11 @@ class TestFunctionAdapters(unittest.TestCase): """Test OpenAI Responses adapter appends custom tools.""" tool_search = {"type": "tool_search"} expected = [ - { - "type": "function", - "name": "get_weather", - "description": "Get the weather in a given location", - "parameters": { + FunctionToolParam( + type="function", + name="get_weather", + description="Get the weather in a given location", + parameters={ "type": "object", "properties": { "location": { @@ -232,9 +234,9 @@ class TestFunctionAdapters(unittest.TestCase): }, "required": ["location", "format"], }, - "strict": None, - }, - tool_search, + strict=None, + ), + ToolSearchToolParam(type="tool_search"), ] tools_def = self.tools_def tools_def.custom_tools = {AdapterType.OPENAI: [tool_search]}