diff --git a/.changeset/shiny-beers-tie.md b/.changeset/shiny-beers-tie.md new file mode 100644 index 00000000..23ea297e --- /dev/null +++ b/.changeset/shiny-beers-tie.md @@ -0,0 +1,5 @@ +--- +'@openai/agents-openai': patch +--- + +Add input_fidelity parameter support to image generation tool diff --git a/examples/docs/package.json b/examples/docs/package.json index e88731f0..ca03a7f4 100644 --- a/examples/docs/package.json +++ b/examples/docs/package.json @@ -8,7 +8,7 @@ "@openai/agents-extensions": "workspace:*", "@ai-sdk/openai": "^1.0.0", "server-only": "^0.0.1", - "openai": "^5.0.1", + "openai": "^5.10.1", "zod": "3.25.40 - 3.25.67" }, "scripts": { diff --git a/examples/tools/image-generation.ts b/examples/tools/image-generation.ts index 906b6aa8..13b4e0f3 100644 --- a/examples/tools/image-generation.ts +++ b/examples/tools/image-generation.ts @@ -18,7 +18,7 @@ async function main() { const agent = new Agent({ name: 'Image generator', instructions: 'You are a helpful agent.', - tools: [imageGenerationTool({ quality: 'low' })], + tools: [imageGenerationTool({ quality: 'low', inputFidelity: 'high' })], }); await withTrace('Image generation example', async () => { @@ -40,6 +40,35 @@ async function main() { fs.writeFileSync(tmpPath, buffer); // console.log(`Image saved to ${tmpPath}`); openFile(tmpPath); + + const revisedResult = await run(agent, [ + { + role: 'user', + content: [ + { + type: 'input_text', + text: 'Change only the background of the given image to Japanese style.', + }, + { + type: 'input_image', + image: 'data:image/png;base64,' + item.rawItem.output, + }, + ], + }, + ]); + for (const revisedItem of revisedResult.newItems) { + if ( + revisedItem.type === 'tool_call_item' && + revisedItem.rawItem.type === 'hosted_tool_call' && + revisedItem.rawItem.output + ) { + const buffer = Buffer.from(revisedItem.rawItem.output, 'base64'); + const tmpPath = path.join(os.tmpdir(), `image-${Date.now()}.png`); + fs.writeFileSync(tmpPath, buffer); + // console.log(`Image saved to ${tmpPath}`); + openFile(tmpPath); + } + } } } // or using result.output works too diff --git a/packages/agents-core/package.json b/packages/agents-core/package.json index 5ef0e711..90198b1b 100644 --- a/packages/agents-core/package.json +++ b/packages/agents-core/package.json @@ -90,7 +90,7 @@ "dependencies": { "@openai/zod": "npm:zod@3.25.40 - 3.25.67", "debug": "^4.4.0", - "openai": "^5.0.1" + "openai": "^5.10.1" }, "peerDependencies": { "zod": "3.25.40 - 3.25.67" diff --git a/packages/agents-openai/package.json b/packages/agents-openai/package.json index 88defb73..34f2cf84 100644 --- a/packages/agents-openai/package.json +++ b/packages/agents-openai/package.json @@ -19,9 +19,9 @@ }, "dependencies": { "@openai/agents-core": "workspace:*", + "@openai/zod": "npm:zod@3.25.40 - 3.25.67", "debug": "^4.4.0", - "openai": "^5.0.1", - "@openai/zod": "npm:zod@3.25.40 - 3.25.67" + "openai": "^5.10.1" }, "scripts": { "prebuild": "tsx ../../scripts/embedMeta.ts", diff --git a/packages/agents-openai/src/openaiResponsesModel.ts b/packages/agents-openai/src/openaiResponsesModel.ts index d86f627d..3172b4f0 100644 --- a/packages/agents-openai/src/openaiResponsesModel.ts +++ b/packages/agents-openai/src/openaiResponsesModel.ts @@ -174,6 +174,7 @@ function converTool<_TContext = unknown>( tool: { type: 'image_generation', background: tool.providerData.background, + input_fidelity: tool.providerData.input_fidelity, input_image_mask: tool.providerData.input_image_mask, model: tool.providerData.model, moderation: tool.providerData.moderation, @@ -525,7 +526,10 @@ function getInputItems( type: 'code_interpreter_call', id: item.id!, code: item.providerData?.code ?? '', - results: item.providerData?.results ?? [], + // This property used to be results, so keeping both for backward compatibility + // That said, this property cannot be passed from a user, so it's just API's internal data. + outputs: + item.providerData?.outputs ?? item.providerData?.results ?? [], status: CodeInterpreterStatus.parse(item.status ?? 'failed'), container_id: item.providerData?.containerId, }; diff --git a/packages/agents-openai/src/tools.ts b/packages/agents-openai/src/tools.ts index 19476808..98e9450b 100644 --- a/packages/agents-openai/src/tools.ts +++ b/packages/agents-openai/src/tools.ts @@ -156,6 +156,7 @@ export type ImageGenerationTool = { type: 'image_generation'; name?: 'image_generation' | string; background?: 'transparent' | 'opaque' | 'auto' | string; + inputFidelity?: 'high' | 'low' | null; inputImageMask?: OpenAI.Responses.Tool.ImageGeneration.InputImageMask; model?: 'gpt-image-1' | string; moderation?: 'auto' | 'low' | string; @@ -178,6 +179,7 @@ export function imageGenerationTool( type: 'image_generation', name: options.name ?? 'image_generation', background: options.background, + input_fidelity: options.inputFidelity, input_image_mask: options.inputImageMask, model: options.model, moderation: options.moderation, diff --git a/packages/agents/package.json b/packages/agents/package.json index b883284d..01c57d87 100644 --- a/packages/agents/package.json +++ b/packages/agents/package.json @@ -42,7 +42,7 @@ "@openai/agents-core": "workspace:*", "@openai/agents-openai": "workspace:*", "@openai/agents-realtime": "workspace:*", - "openai": "^5.0.1", + "openai": "^5.10.1", "debug": "^4.4.0" }, "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 339a223d..13b7f1f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,8 +181,8 @@ importers: specifier: workspace:* version: link:../../packages/agents-realtime openai: - specifier: ^5.0.1 - version: 5.3.0(ws@8.18.2)(zod@3.25.62) + specifier: ^5.10.1 + version: 5.10.1(ws@8.18.2)(zod@3.25.62) server-only: specifier: ^0.0.1 version: 0.0.1 @@ -437,8 +437,8 @@ importers: specifier: ^4.4.0 version: 4.4.1 openai: - specifier: ^5.0.1 - version: 5.3.0(ws@8.18.2)(zod@3.25.62) + specifier: ^5.10.1 + version: 5.10.1(ws@8.18.2)(zod@3.25.62) devDependencies: '@types/debug': specifier: ^4.1.12 @@ -453,8 +453,8 @@ importers: specifier: ^4.4.0 version: 4.4.1 openai: - specifier: ^5.0.1 - version: 5.3.0(ws@8.18.2)(zod@3.25.62) + specifier: ^5.10.1 + version: 5.10.1(ws@8.18.2)(zod@3.25.62) devDependencies: '@types/debug': specifier: ^4.1.12 @@ -504,8 +504,8 @@ importers: specifier: ^4.4.0 version: 4.4.1 openai: - specifier: ^5.0.1 - version: 5.3.0(ws@8.18.2)(zod@3.25.62) + specifier: ^5.10.1 + version: 5.10.1(ws@8.18.2)(zod@3.25.62) devDependencies: '@ai-sdk/provider': specifier: ^1.1.3 @@ -4611,8 +4611,8 @@ packages: zod: optional: true - openai@5.3.0: - resolution: {integrity: sha512-VIKmoF7y4oJCDOwP/oHXGzM69+x0dpGFmN9QmYO+uPbLFOmmnwO+x1GbsgUtI+6oraxomGZ566Y421oYVu191w==} + openai@5.10.1: + resolution: {integrity: sha512-fq6xVfv1/gpLbsj8fArEt3b6B9jBxdhAK+VJ+bDvbUvNd+KTLlA3bnDeYZaBsGH9LUhJ1M1yXfp9sEyBLMx6eA==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -10835,7 +10835,7 @@ snapshots: transitivePeerDependencies: - encoding - openai@5.3.0(ws@8.18.2)(zod@3.25.62): + openai@5.10.1(ws@8.18.2)(zod@3.25.62): optionalDependencies: ws: 8.18.2 zod: 3.25.62