Skip to content

Conversation

@mwildehahn
Copy link
Contributor

Fix for #3119


_(This example is complete, it can be run "as is")_

To control the aspect ratio when using Gemini image models, include the `ImageGenerationTool` explicitly:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move this example under "Configuration Options" please

|----------|-----------|-------|
| OpenAI Responses || Full feature support. Only supported by models newer than `gpt-5`. Metadata about the generated image, like the [`revised_prompt`](https://platform.openai.com/docs/guides/tools-image-generation#revised-prompt) sent to the underlying image model, is available on the [`BuiltinToolReturnPart`][pydantic_ai.messages.BuiltinToolReturnPart] that's available via [`ModelResponse.builtin_tool_calls`][pydantic_ai.messages.ModelResponse.builtin_tool_calls]. |
| Google || No parameter support. Only supported by [image generation models](https://ai.google.dev/gemini-api/docs/image-generation) like `gemini-2.5-flash-image`. These models do not support [structured output](output.md) or [function tools](tools.md). These models will always generate images, even if this built-in tool is not explicitly specified. |
| Google || Supports the `aspect_ratio` parameter when explicitly provided. Only supported by [image generation models](https://ai.google.dev/gemini-api/docs/image-generation) like `gemini-2.5-flash-image`. These models do not support [structured output](output.md) or [function tools](tools.md) and will always generate images, even if this built-in tool is not explicitly specified. |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd say "Limited parameter support" like we do further up for web search.

Supported by:
* Google image-generation models (Gemini) when the tool is explicitly enabled.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can drop "when the tool is explicitly enabled." as that's implied by this being on that builtin tool class.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we could support some of these values for OpenAI as well by mapping to one of the size options. Then we'd only need to raise an error from OpenAI if another value is used, or if size and aspect_ratio are used at the same time.

)
if tool.aspect_ratio:
if image_config and image_config.get('aspect_ratio') != tool.aspect_ratio:
raise UserError(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We really only support a single instance anyway, so we can drop this and just always set image_config

response_schema=response_schema,
response_modalities=modalities,
)
config: GenerateContentConfigDict = {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did we have to change how this is built?

Copy link
Collaborator

@DouweM DouweM left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mwildehahn Thanks for doing the OpenAI Responses support, that's a nice quality of life detail. Just 2 points on docs and then we'll merge!

| `partial_images` |||
| `quality` |||
| `size` |||
| `aspect_ratio` | ✅ (1:1, 2:3, 3:2) ||
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| `aspect_ratio` | ✅ (1:1, 2:3, 3:2) ||
| `aspect_ratio` | ✅ (`1:1`, `2:3`, `3:2`) ||

Ideally we'd use a different emoji for partial support; any ideas? 😄

@github-actions
Copy link

This PR is stale, and will be closed in 3 days if no reply is received.

@DouweM
Copy link
Collaborator

DouweM commented Dec 1, 2025

@mwildehahn Reminder to look at 2 small changes here!

@svilupp
Copy link
Contributor

svilupp commented Dec 3, 2025

Excited for this feature! Thank you for putting it together

@mwildehahn mwildehahn force-pushed the mh/aspect-ratio-control branch from d09bb8b to f2f2cd6 Compare December 9, 2025 17:11
@mwildehahn
Copy link
Contributor Author

@DouweM done

tool_config=tool_config,
response_mime_type=response_mime_type,
response_json_schema=response_schema,
response_schema=response_schema,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert this change!

@DouweM
Copy link
Collaborator

DouweM commented Dec 10, 2025

Thanks @mwildehahn! You accidentally changed response_json_schema to response_schema thought which caused a few tests to fail 😅 @ajac-zero also fixed up your PR yesterday in #3672 which is essentially identical but does pass CI, so I'll merge that one. I'll make sure you're credited in the changelog :)

@DouweM DouweM closed this Dec 10, 2025
@mwildehahn
Copy link
Contributor Author

mwildehahn commented Dec 10, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants