v2.17.0

pydantic/pydantic-aiv2.17.0Jul 24, 2026by dsfaccini

AI Summary

Enables support for arbitrary fields in `RequestUsage` and `RunUsage` for future pricing updates. Optimizes OpenTelemetry serialization and fixes `ContentFilterError` handling.

Key Highlights

  • Make `RequestUsage` and `RunUsage` support arbitrary fields
  • Cache per-message OTel serialization to avoid cost
  • Fix `ContentFilterError` for real Model Armor response blocks

New Features

  • Arbitrary fields in usage tracking
  • OpenTelemetry serialization caching
  • Model Armor moderation fixes

Full Release Notes

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

## What's Changed
### šŸš€ Features
* Make `RequestUsage` and `RunUsage` support arbitrary fields for upcoming genai-prices by @alexmojaki in https://github.com/pydantic/pydantic-ai/pull/6683
* Cache per-message OTel serialization to avoid `O(n²)` instrumentation cost by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/6635
### šŸ› Bug Fixes
* Fix `ContentFilterError` for real Model Armor response blocks (`finishReason: MODEL_ARMOR`) and record moderation wire-truth cassettes by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/6679


**Full Changelog**: https://github.com/pydantic/pydantic-ai/compare/v2.16.0...v2.17.0