diff --git a/.changeset/rich-buses-marry.md b/.changeset/rich-buses-marry.md new file mode 100644 index 00000000..2183dd1d --- /dev/null +++ b/.changeset/rich-buses-marry.md @@ -0,0 +1,5 @@ +--- +"@openai/agents-openai": patch +--- + +feat: handle unknown hosted tools in responses model diff --git a/packages/agents-openai/src/openaiResponsesModel.ts b/packages/agents-openai/src/openaiResponsesModel.ts index d6767618..c37a8756 100644 --- a/packages/agents-openai/src/openaiResponsesModel.ts +++ b/packages/agents-openai/src/openaiResponsesModel.ts @@ -175,6 +175,11 @@ function converTool<_TContext = unknown>( }, include: undefined, }; + } else if (tool.providerData) { + return { + tool: tool.providerData as unknown as OpenAI.Responses.Tool, + include: undefined, + }; } } diff --git a/packages/agents-openai/test/openaiResponsesModel.helpers.test.ts b/packages/agents-openai/test/openaiResponsesModel.helpers.test.ts index a4accdf1..68f60c68 100644 --- a/packages/agents-openai/test/openaiResponsesModel.helpers.test.ts +++ b/packages/agents-openai/test/openaiResponsesModel.helpers.test.ts @@ -125,6 +125,23 @@ describe('converTool', () => { quality: undefined, size: undefined, }); + + const custom = converTool({ + type: 'hosted_tool', + providerData: { + type: 'mcp', + server_label: 'deepwiki', + server_url: 'https://mcp.deepwiki.com/mcp', + require_approval: 'never', + }, + } as any); + + expect(custom.tool).toEqual({ + type: 'mcp', + server_label: 'deepwiki', + server_url: 'https://mcp.deepwiki.com/mcp', + require_approval: 'never', + }); }); it('throws on unsupported tool', () => {