v2.2.0

pydantic/pydantic-aiv2.2.0Jul 1, 2026by dsfaccini

AI Summary

This release adds support for Claude Sonnet 5, TwelveLabs Pegasus video-understanding, and various improvements to providers including OpenRouter cost tracking and Google retry options.

Key Highlights

  • Claude Sonnet 5 model support
  • TwelveLabs Pegasus video-understanding example
  • Factory functions as lifecycle arg for Dataset.evaluate
  • Prompt and completions cost fields for OpenRouter
  • retry_options parameter for GoogleProvider

New Features

  • Claude Sonnet 5 support
  • TwelveLabs Pegasus video-understanding example
  • Factory functions as lifecycle arg for Dataset.evaluate
  • Prompt and completions cost fields for OpenRouter
  • retry_options parameter for GoogleProvider

Full Release Notes

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

## What's Changed
### 🚀 Features
* feat: add TwelveLabs Pegasus video-understanding example by @mohit-twelvelabs in https://github.com/pydantic/pydantic-ai/pull/6061
* Add Claude Sonnet 5 (`claude-sonnet-5`) support by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/6161
* Allow factory functions as lifecycle arg for Dataset.evaluate by @nlsfnr in https://github.com/pydantic/pydantic-ai/pull/6107
* feat: Add prompt and completions cost fields to OpenRouter by @ali-corpo in https://github.com/pydantic/pydantic-ai/pull/4899
* feat: add `retry_options` parameter to `GoogleProvider` by @graydeon in https://github.com/pydantic/pydantic-ai/pull/4966
### 🐛 Bug Fixes
* Forward image `detail` from `vendor_metadata` for `GroqModel` and `MistralModel` by @pydanty[bot] in https://github.com/pydantic/pydantic-ai/pull/6014
* fix(utils): run sync callbacks inline on Pyodide/emscripten by default by @syf2211 in https://github.com/pydantic/pydantic-ai/pull/6088
* Fix `group_by_temporal` emitting first item alone when delayed past soft_max_interval by @pydanty[bot] in https://github.com/pydantic/pydantic-ai/pull/5947
* Fix missing `output_audio_tokens` in usage accumulation by @jnMetaCode in https://github.com/pydantic/pydantic-ai/pull/4594
* fix(heroku): route model names through family profiles so thinking isn't dropped by @Bartok9 in https://github.com/pydantic/pydantic-ai/pull/6070
* Guard `TogetherProvider.model_profile` against model names without a `/` by @immuhammadfurqan in https://github.com/pydantic/pydantic-ai/pull/6113
* fix(`GoogleModel`): include `CodeExecutionTool` in `include_server_side_tool_invocations` check by @aarsh767 in https://github.com/pydantic/pydantic-ai/pull/6052
* fix(groq): surface reasoning_tokens in usage details by @tcconnally in https://github.com/pydantic/pydantic-ai/pull/5986
* Fix map `downstream_join_id` double-firing the join on a non-empty iterable by @clavedeluna in https://github.com/pydantic/pydantic-ai/pull/6009
* fix: de-duplicate `output_audio_tokens` accumulation in `_incr_usage_tokens` by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/6141
* Suppress `ClosedResourceError` when cancelling a graph run mid-send by @conradlee in https://github.com/pydantic/pydantic-ai/pull/6149
* fix(ui): round-trip file `vendor_metadata` through Vercel AI & AG-UI adapters by @Bartok9 in https://github.com/pydantic/pydantic-ai/pull/5790
* Handle CRLF markdown JSON fences in `strip_markdown_fences` by @CodingFeng101 in https://github.com/pydantic/pydantic-ai/pull/6090
* fix(heroku): avoid duplicating `/v1` in `base_url` by @VectorPeak in https://github.com/pydantic/pydantic-ai/pull/6142
* Fix absolute `schema_path` handling in `Dataset.to_file` by @VectorPeak in https://github.com/pydantic/pydantic-ai/pull/6143
* Fix `deps` deserialization in non-streaming Temporal model-request activity by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/5900

## New Contributors
* @Iam-Mil made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6132
* @jnMetaCode made their first contribution in https://github.com/pydantic/pydantic-ai/pull/4594
* @mohit-twelvelabs made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6061
* @immuhammadfurqan made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6113
* @aarsh767 made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6052
* @tcconnally made their first contribution in https://github.com/pydantic/pydantic-ai/pull/5986
* @clavedeluna made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6009
* @VectorPeak made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6140
* @nlsfnr made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6107
* @CodingFeng101 made their first contribution in https://github.com/pydantic/pydantic-ai/pull/6090
* @ali-corpo made their first contribution in https://github.com/pydantic/pydantic-ai/pull/4899

**Full Changelog**: https://github.com/pydantic/pydantic-ai/compare/v2.1.0...v2.2.0