From 840988d6ca297cf969667903c9682d9501bb0bd3 Mon Sep 17 00:00:00 2001 From: Kazuhiro Sera Date: Fri, 3 Oct 2025 12:01:29 -0700 Subject: [PATCH] fix: #562 invalid model settings when prompt is set in Agent --- .changeset/young-bars-hide.md | 5 ++++ examples/basic/prompt-id.ts | 1 - .../agents-openai/src/openaiResponsesModel.ts | 2 +- .../test/openaiResponsesModel.test.ts | 30 +++++++++++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 .changeset/young-bars-hide.md diff --git a/.changeset/young-bars-hide.md b/.changeset/young-bars-hide.md new file mode 100644 index 00000000..308854dc --- /dev/null +++ b/.changeset/young-bars-hide.md @@ -0,0 +1,5 @@ +--- +'@openai/agents-openai': patch +--- + +fix: #562 invalid model settings when prompt is set in Agent diff --git a/examples/basic/prompt-id.ts b/examples/basic/prompt-id.ts index 94c77281..a318836c 100644 --- a/examples/basic/prompt-id.ts +++ b/examples/basic/prompt-id.ts @@ -5,7 +5,6 @@ async function main() { name: 'Assistant', prompt: { promptId: 'pmpt_68d50b26524c81958c1425070180b5e10ab840669e470fc7', - version: '1', variables: { name: 'Kaz' }, }, }); diff --git a/packages/agents-openai/src/openaiResponsesModel.ts b/packages/agents-openai/src/openaiResponsesModel.ts index 772a74d7..dd6916d1 100644 --- a/packages/agents-openai/src/openaiResponsesModel.ts +++ b/packages/agents-openai/src/openaiResponsesModel.ts @@ -878,7 +878,7 @@ export class OpenAIResponsesModel implements Model { } const requestData = { - model: this.#model, + ...(!request.prompt ? { model: this.#model } : {}), instructions: normalizeInstructions(request.systemInstructions), input, include, diff --git a/packages/agents-openai/test/openaiResponsesModel.test.ts b/packages/agents-openai/test/openaiResponsesModel.test.ts index 5d33d76b..b5f37367 100644 --- a/packages/agents-openai/test/openaiResponsesModel.test.ts +++ b/packages/agents-openai/test/openaiResponsesModel.test.ts @@ -74,6 +74,36 @@ describe('OpenAIResponsesModel', () => { }); }); + it('omits model when a prompt is provided', async () => { + await withTrace('test', async () => { + const fakeResponse = { id: 'res-prompt', usage: {}, output: [] }; + const createMock = vi.fn().mockResolvedValue(fakeResponse); + const fakeClient = { + responses: { create: createMock }, + } as unknown as OpenAI; + const model = new OpenAIResponsesModel(fakeClient, 'gpt-default'); + + const request = { + systemInstructions: undefined, + prompt: { promptId: 'pmpt_123' }, + input: 'hello', + modelSettings: {}, + tools: [], + outputType: 'text', + handoffs: [], + tracing: false, + signal: undefined, + }; + + await model.getResponse(request as any); + + expect(createMock).toHaveBeenCalledTimes(1); + const [args] = createMock.mock.calls[0]; + expect('model' in args).toBe(false); + expect(args.prompt).toMatchObject({ id: 'pmpt_123' }); + }); + }); + it('normalizes systemInstructions so empty strings are omitted', async () => { await withTrace('test', async () => { const fakeResponse = {