Skip to content

build(deps): update pydantic-ai requirement from <=2.52.0,>=2.9.0 to >=2.9.0,<=2.61.0 - #69

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/pydantic-ai-gte-2.9.0-and-lte-2.61.0
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/pip/pydantic-ai-gte-2.9.0-and-lte-2.61.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 27, 2026

Copy link
Copy Markdown
Contributor

Updates the requirements on pydantic-ai to permit the latest version.

Release notes

Sourced from pydantic-ai's releases.

v2.61.0 (2026-10-23)

What's Changed

⚠️ Compatibility Notes

🚀 Features

🐛 Bug Fixes

... (truncated)

Changelog

Sourced from pydantic-ai's changelog.


description: "Pydantic AI upgrade guide and changelog: the breaking changes in each release, how to install V2, and the recommended path to migrate your code from V1."

Upgrade Guide

In September 2025, Pydantic AI reached V1 and committed to API stability: no changes that break your code until V2. V2 is now available, collecting the breaking and behavior changes that stability guarantee didn't allow. This guide is the canonical place to learn what's in V2, how to install it, and how to upgrade; for the guarantees behind these version numbers, see the Version Policy.

Deprecations

Functionality deprecated in a V2 release keeps working until V3, and using it raises a PydanticAIDeprecationWarning naming its replacement. Resolving these as they appear is the smooth path to the next major, the same way resolving V1's warnings was the smooth path to this one.

Deprecated in V2, to be removed in V3

  • [RetryPromptPart][pydantic_ai.messages.RetryPromptPart] is deprecated in favor of the two parts it conflated: a retry that answers a tool call is that call's own [ToolReturnPart][pydantic_ai.messages.ToolReturnPart] with outcome='retried', and one that answers no tool call is a [RetryFeedbackPart][pydantic_ai.messages.RetryFeedbackPart]. The old part reached the model as bare user text in the second case, which the model couldn't tell from something a person wrote (#6404, #7799). Pydantic AI no longer emits it, and constructing one warns.
    • What keeps working: a 'retry-prompt' part in a serialized history loads as whichever of the two it always meant, and an instance your own code holds, including one handed back through [DeferredToolResults][pydantic_ai.tools.DeferredToolResults], is translated the same way before it reaches a model. The direct helpers send it in that new shape too. Calling [Model.request()][pydantic_ai.models.Model.request] or [Model.count_tokens()][pydantic_ai.models.Model.count_tokens] yourself skips that translation but still works: a tool-bound one goes out as that call's retried result, and a tool-less one as the user text it always rendered as. [sanitize_messages][pydantic_ai.messages.sanitize_messages] keeps client-returned retry feedback: it translates a tool-less one into the RetryFeedbackPart it always meant, keeps a 'validation_error' or 'model_retry' part as sent (it reaches the model fenced, in the user voice), and demotes a 'no_output' part, the one cause rendered in the system voice, to that same fenced, attributed user text, since a client can forge it; pass strip_system_prompts=False to keep a 'no_output' part as sent.
    • What you need to change: isinstance(part, RetryPromptPart) no longer matches, so match the two parts above instead. Each records why the retry happened, and which attempt it is against which limit, in a [RetryInfo][pydantic_ai.messages.RetryInfo] on its retry field, which tool spans also carry as pydantic_ai.tool.retry.* attributes. [ToolRetryError.tool_retry][pydantic_ai.exceptions.ToolRetryError] holds one of those two parts, so read tool_name off it only after checking for a ToolReturnPart.
    • What the model now sees: a tool retry carries the serialized validation errors or the ModelRetry message, with no N validation errors: header and no Fix the errors and try again. suffix. One that answers no call arrives in the voice its cause calls for: validation errors and a ModelRetry message in the user voice, inside a <validation_errors> or <retry_feedback> fence behind one line saying the application, not the user, is speaking, and the framework's fixed request for usable output in the system voice. On providers without a native tool error channel, a retried tool call's validation errors go in the {"error": ...} wrapper as a JSON array rather than as a string holding one, and Anthropic and Bedrock get them as one text block. Client-returned retry feedback is kept by [sanitize_messages][pydantic_ai.messages.sanitize_messages] and the UI adapters rather than stripped, and a 'no_output' part among it goes out as fenced user text rather than in the system voice. Retries in a history stored before upgrading are rendered the new way too, since rendering happens when each request goes out, so a conversation's first request after upgrading misses the provider's prompt cache from its first retry onward, once. A [decision model][pydantic_ai.models.decision.DecisionModel] judges a retried tool call as that call's tool_return, where it had a retry entry. On ag-ui-protocol below 0.1.11, [AGUIAdapter.dump_messages][pydantic_ai.ui.ag_ui.AGUIAdapter.dump_messages] now also warns on a run that retried its own output. See Retries.
    • Vercel AI dumps keep a request's part order: [VercelAIAdapter.dump_messages][pydantic_ai.ui.vercel_ai.VercelAIAdapter.dump_messages] now writes a ModelRequest as one UIMessage per run of same-role parts, in the order they were authored, instead of putting every system part first. This applies with no retries at all: a request holding an enqueued SystemPromptPart after its UserPromptPart now dumps as a user message followed by a system message, and positional message ids shift with it. The request's metadata rides on its last user message, or its last message when it has none.

Breaking Changes

Here's a filtered list of the breaking changes for each version to help you upgrade Pydantic AI.

v2.0.0 (2026-06-23)

The stable V2.0 release. There are no new breaking or behavior changes since the betas; the full breaking-change list and recommended upgrade path are in the v2.0.0b1 entry below. Install it with:

uv add pydantic-ai

v2.0.0b7 (2026-06-10)

The seventh V2 beta, forked from v1.107.0. There are no new V2 breaking or behavior changes since v2.0.0b6 below — everything in that entry applies unchanged — but this beta picks up the latest V1 release on top, which adds Claude Fable 5 / Mythos 5 model support and OpenRouter prompt caching (CachePoint), plus known_model_names() and Anthropic fixes; see the v1.107.0 release notes for the full list.

Install it the same way, pinning the exact pre-release version:

pip/uv-add "pydantic-ai==2.0.0b7"

For the full breaking-change list and the recommended upgrade path, see the v2.0.0b1 entry below; the only difference is that the latest V1 to upgrade through first is now v1.107.0.

v2.0.0b6 (2026-06-04)

The sixth V2 beta, forked from v1.106.0. There are no new V2 breaking or behavior changes since v2.0.0b5 below — everything in that entry applies unchanged — but this beta picks up the latest V1 release on top, which adds api_host/timeout configuration and base seed mapping for the xAI provider, plus streaming and data-URI handling fixes; see the v1.106.0 release notes for the full list.

Install it the same way, pinning the exact pre-release version:

... (truncated)

Commits
  • dd82a00 List compatibility impact PRs under their change type in generated release ...
  • 120891d Leave framework-owned __pydantic_ai__ metadata out of sanitize_messages o...
  • 877d8a6 Make the durable engine extension surface public: operation types, `Parameter...
  • 5a551b9 Attach a late GPT-Live WebRTC sideband that is no longer sent `session.starte...
  • e817ef3 Add RealtimeModelProfile.supports_audio_output so text-only realtime models...
  • 6523b9a Warn when a realtime session has capabilities that implement hooks it never c...
  • 3e3a621 Add RealtimeClientSecret.webrtc_url, which carries webrtcfilter=on on Azu...
  • 7ad0913 Support hang_up() for Azure OpenAI WebRTC calls (#11075)
  • 2116207 Deprecate google_multi_speaker on GoogleRealtimeModel, which no Gemini Li...
  • 1ce05aa Send the least thinking a model accepts for thinking=False on models that c...
  • Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Updates the requirements on [pydantic-ai](https://github.com/pydantic/pydantic-ai) to permit the latest version.
- [Release notes](https://github.com/pydantic/pydantic-ai/releases)
- [Changelog](https://github.com/pydantic/pydantic-ai/blob/main/docs/changelog.md)
- [Commits](pydantic/pydantic-ai@v2.9.0...v2.61.0)

---
updated-dependencies:
- dependency-name: pydantic-ai
  dependency-version: 2.61.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update python code labels Oct 27, 2026

This branch has not been deployed

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

Labels

dependencies Pull requests that update a dependency file python Pull requests that update python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants