v1.102.0

pydantic/pydantic-aiv1.102.0May 23, 2026by dsfaccini

AI Summary

This release fixes a security vulnerability regarding URL validation and addresses several issues with Bedrock integration and Vercel AI adapter compatibility.

Key Highlights

  • Fixed SSRF bypass via IPv6 transition forms in URL validation.
  • Fixed Bedrock strict mode tool handling and disabled Opus 4.7 native structured output.
  • Fixed `VercelAIAdapter` to accept `providerExecuted` and `title` on dynamic-tool messages.

New Features

  • Expand IPv6 transition-form handling in URL validation

Full Release Notes

<!-- Release notes generated using configuration in .github/release.yml at main -->

## What's Changed
### 🛡️ Security
* Expand IPv6 transition-form handling in URL validation by @DouweM in https://github.com/pydantic/pydantic-ai/pull/5596
	* Security advisory: SSRF cloud-metadata blocklist bypass via additional IPv6 transition forms https://github.com/pydantic/pydantic-ai/security/advisories/GHSA-cg7w-rg45-pc59
	* You are affected **only** if your application explicitly opts a `FileUrl` into `force_download='allow-local'` on a URL that is, or could be, influenced by untrusted input, **AND** runs on a NAT64- or ISATAP-configured network (e.g. some IPv6-only or dual-stack-with-NAT64 Kubernetes setups).
	* You are **not** affected if you run on a standard dual-stack cloud VM or container, which does not route these forms in practice.
	* You are **not** affected if you use any of the bundled integrations to ingest user input: `Agent.to_web` / `clai web`; `VercelAIAdapter`; `AGUIAdapter` / `Agent.to_ag_ui`
### 🐛 Bug Fixes
* Don't auto-promote `strict=None` tools to strict mode with Bedrock, and skip `strict` field when `botocore` is too old by @shailendher in https://github.com/pydantic/pydantic-ai/pull/5580
* fix(bedrock): Disable Opus 4.7 native structured output by @cosmopolitan033 in https://github.com/pydantic/pydantic-ai/pull/5582
* fix(instrumentation): Prevent false positive `variable_instructions` span attribute by @madanlalit in https://github.com/pydantic/pydantic-ai/pull/5487
* Fix: `VercelAIAdapter` now accepts `providerExecuted` / `title` on dynamic-tool message parts by @he-yufeng in https://github.com/pydantic/pydantic-ai/pull/5474
* Normalize trailing dot and case in `WebFetchTool` domain matching by @DouweM in https://github.com/pydantic/pydantic-ai/pull/5592

## New Contributors
* @cosmopolitan033 made their first contribution in https://github.com/pydantic/pydantic-ai/pull/5582
* @he-yufeng made their first contribution in https://github.com/pydantic/pydantic-ai/pull/5474

**Full Changelog**: https://github.com/pydantic/pydantic-ai/compare/v1.101.0...v1.102.0