NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #327 most downloaded on PyPI
Graph and state machine library
Last release today
19 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
2 years old
313 releases · first in 2025
One column per month.
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.60.0...v1.61.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
video_url support to OpenRouterModel by @Adversarian in https://github.com/pydantic/pydantic-ai/pull/3824parent_message_id for back-to-back builtin tool calls by @DouweM in https://github.com/pydantic/pydantic-ai/pull/4332_stream_text_deltas with aclosing to prevent StopAsyncIteration on client disconnect by @sheginabo in https://github.com/pydantic/pydantic-ai/pull/4205Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.59.0...v1.60.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Model.model_id property that returns provider:model by @tdevelope in https://github.com/pydantic/pydantic-ai/pull/3917Contains evaluator to support pydantic.BaseModel by @tomsquest in https://github.com/pydantic/pydantic-ai/pull/4003BaseChunks be injected through ToolReturnPart.metadata by @0xyjk in https://github.com/pydantic/pydantic-ai/pull/4230Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.58.0...v1.59.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
extra_headers support for Google model provider by @saakshigupta2002 in https://github.com/pydantic/pydantic-ai/pull/4241Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.57.0...v1.58.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.56.0...v1.57.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
anthropic_effort and anthropic_thinking.type='adaptive' by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/4216anthropic_betas to AnthropicModelSettings by @bohdanhr in https://github.com/pydantic/pydantic-ai/pull/4180CachePoint placement with multiple trailing documents by @psg2 in https://github.com/pydantic/pydantic-ai/pull/4207FileUrls pointing at the local network by default by @DouweM in https://github.com/pydantic/pydantic-ai/pull/4227Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.55.0...v1.56.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
OpenAIResponsesModel with "compatible" provider that returns reasoning_tokens as None instead by @alibeyram in https://github.com/pydantic/pydantic-ai/pull/4151MultiModalContent union missing discriminator causing incorrect deserialization by @jerry-reevo in https://github.com/pydantic/pydantic-ai/pull/4191Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.54.0...v1.55.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.53.0...v1.54.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.52.0...v1.53.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
openai_store setting to control data retention by @EliMeed in https://github.com/pydantic/pydantic-ai/pull/4142OpenAIChatModel send back reasoning content via field it's received in by @safina57 in https://github.com/pydantic/pydantic-ai/pull/4009BaseModel in format_as_xml by @bohdanhr in https://github.com/pydantic/pydantic-ai/pull/4131Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.51.0...v1.52.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
html_source parameter to customize Chat UI source by @madanlalit in https://github.com/pydantic/pydantic-ai/pull/3974Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.50.0...v1.51.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
usage_limits and model_settings to users running with to_cli() by @tommy-waltmann in https://github.com/pydantic/pydantic-ai/pull/4133TextPart.provider_details by @corytomlinson in https://github.com/pydantic/pydantic-ai/pull/3787BinaryContent returned by tool in Temporal by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/4043DocumentUrl with custom media_type in Temporal by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3968prompt_cache_retention literal from 'in-memory' to 'in_memory' by @davidfertube in https://github.com/pydantic/pydantic-ai/pull/4126Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.49.0...v1.50.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
DBOSAgent by @qianl15 in https://github.com/pydantic/pydantic-ai/pull/4077BedrockEmbeddingModel for Nova, Cohere and Titan endpoints by @bitnahian in https://github.com/pydantic/pydantic-ai/pull/4008Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.48.0...v1.49.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
allowed_domains support for WebSearchTool with OpenAI by @eduardojdiniz in https://github.com/pydantic/pydantic-ai/pull/4037continuous_usage_stats model setting for OpenAI by @kousun12 in https://github.com/pydantic/pydantic-ai/pull/4056model_settings to Mistral streaming JSON mode by @Goldokpa in https://github.com/pydantic/pydantic-ai/pull/4079Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.47.0...v1.48.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.46.0...v1.47.0
Add XaiModel that uses the xAI SDK and deprecate GrokProvider that used the OpenAI-compatible API by @brightsparc in https://github.com/pydantic/pydan…
<!-- Release notes generated using configuration in .github/release.yml at main -->
XaiModel that uses the xAI SDK and deprecate GrokProvider that used the OpenAI-compatible API by @brightsparc in https://github.com/pydantic/pydantic-ai/pull/3400mcp and other dependencies for Dependabot alerts by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/4047Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.45.0...v1.46.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Code Interpreter tool by @gmetzker in https://github.com/pydantic/pydantic-ai/pull/3892count_tokens() work on WrapperModel by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3982Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.43.0...v1.44.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
dict[str, ...] tool args by @hinnefe2 in https://github.com/pydantic/pydantic-ai/pull/3712Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.42.0...v1.43.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
ContentFilterError when model response is empty because of content filter by @AlanPonnachan in https://github.com/pydantic/pydantic-ai/pull/3634Agent.run or Agent.run_stream_events coroutine is cancelled by @smthngslv in https://github.com/pydantic/pydantic-ai/pull/3961Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.41.0...v1.42.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
BinaryContent.from_path by @majiayu000 in https://github.com/pydantic/pydantic-ai/pull/3907metadata support for DeferredToolResults by @Wh1isper in https://github.com/pydantic/pydantic-ai/pull/3811ReferenceChunk by @ilancoulon in https://github.com/pydantic/pydantic-ai/pull/3958Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.40.0...v1.41.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Agent retries limit specifies by @geodavic in https://github.com/pydantic/pydantic-ai/pull/3597stream_output() always calls output function/validator with partial_output=False at the end of streaming by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3918PydanticAIPlugin to preserve custom payload_codec and respect PydanticPayloadConverter subclasses by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3920Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.39.1...v1.40.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
partial_output flag in TextOutput during streaming by @Danipulok in https://github.com/pydantic/pydantic-ai/pull/3845partial_output=False and cache result by @Danipulok in https://github.com/pydantic/pydantic-ai/pull/3848thoughtSignature for Vertex Gemini 3 compatibility by @jerry-heygen in https://github.com/pydantic/pydantic-ai/pull/3882input_tokens calculation for Bedrock model (#3850) by @Tshapislav in https://github.com/pydantic/pydantic-ai/pull/3853Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.39.0...v1.39.1
Support embedding models by @DouweM and @dmontagu in https://github.com/pydantic/pydantic-ai/pull/3252
None by @mrdkucher in https://github.com/pydantic/pydantic-ai/pull/3834bedrock_service_tier setting to BedrockModelSettings by @lukekh in https://github.com/pydantic/pydantic-ai/pull/3773RunContext.partial_output in output tools by @Danipulok in https://github.com/pydantic/pydantic-ai/pull/3726Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.38.0...v1.39.0
Add local timestamps to request and response models - include provider timestamp in provider_details by @dsfaccini in https://github.com/pydantic/pyda
provider_details by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3598VideoUrl.vendor_metadata for GCS URIs on google-vertex by @barapa in https://github.com/pydantic/pydantic-ai/pull/3806RunContext[Deps] in TextOutput signature by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3732ActivityMessage instead of raising error by @tseaver in https://github.com/pydantic/pydantic-ai/pull/3803Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.37.0...v1.38.0
Update known Groq model names (add production/preview, remove deprecated) by @hima12-awny in https://github.com/pydantic/pydantic-ai/pull/3774
TemporalAgent to switch model at agent.run-time by @mattbrandman in https://github.com/pydantic/pydantic-ai/pull/3537DynamicToolset support in Temporal by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3682ImageGenerationTool output_compression and output_format for Vertex AI Gemini image models by @h0rv in https://github.com/pydantic/pydantic-ai/pull/3759ToolRetryError message by @jamesaud in https://github.com/pydantic/pydantic-ai/pull/3718StreamedRunResult.get_output() creating duplicate messages if stream_output() has already been called by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3777clai --help output to clai README by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3766Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.36.0...v1.37.0
Add AI SDK data chunk ID and tool approval types by @bendrucker in https://github.com/pydantic/pydantic-ai/pull/3760
type field when converting const to enum in GoogleJsonSchemaTransformer by @majiayu000 in https://github.com/pydantic/pydantic-ai/pull/3751google-genai to 1.56.0 by @petersli in https://github.com/pydantic/pydantic-ai/pull/3770Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.35.0...v1.36.0
Add FileSearchTool with support for OpenAI and Google by @gorkachea in https://github.com/pydantic/pydantic-ai/pull/3396
FileSearchTool with support for OpenAI and Google by @gorkachea in https://github.com/pydantic/pydantic-ai/pull/3396ImageGenerationTool.size to Gemini image models by @h0rv in https://github.com/pydantic/pydantic-ai/pull/3720DashScopeProvider and support audio input for Qwen Omni by @Pavanmanikanta98 in https://github.com/pydantic/pydantic-ai/pull/3596$defs in JsonSchemaTransformer instead of the original schema by @thomasst in https://github.com/pydantic/pydantic-ai/pull/3758UIAdapter.dispatch_request with agent with output_type by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3749Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.34.0...v1.35.0
Add Web Chat UI for any agent that can be launched using clai web or Agent.to_web() by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3456
clai web or Agent.to_web() by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3456FileUrl.force_download in AnthropicModel and OpenAIResponsesModel by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3694TemporalAgent by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3704OpenRouterProvider and DeepSeekProvider __init__ overloads less restrictive by @xcpky in https://github.com/pydantic/pydantic-ai/pull/37391.14.0 by @jerry-reevo in https://github.com/pydantic/pydantic-ai/pull/3743Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.33.0...v1.34.0
Pass s3:// file URLs directly to API in BedrockConverseModel by @mochow13 in https://github.com/pydantic/pydantic-ai/pull/3663
s3:// file URLs directly to API in BedrockConverseModel by @mochow13 in https://github.com/pydantic/pydantic-ai/pull/3663instructions after system_prompts for models that don't natively support instructions by @siddhantbhagat8 in https://github.com/pydantic/pydantic-ai/pull/3614Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.32.0...v1.33.0
Add tool timeout support by @DEENUU1 in https://github.com/pydantic/pydantic-ai/pull/3594
TemporalAgents be registered to a Temporal workflow using __pydantic_ai_agents__ field by @adtyavrdhn in https://github.com/pydantic/pydantic-ai/pull/3676end_strategy also work for output tools, not just tools by @Danipulok in https://github.com/pydantic/pydantic-ai/pull/3523UIAdapter.dispatch_request typing by @dmontagu in https://github.com/pydantic/pydantic-ai/pull/3721Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.31.0...v1.32.0
Add prompt caching support for AWS Bedrock by @DenysMoskalenko in https://github.com/pydantic/pydantic-ai/pull/3438
Agent.output_json_schema() method by @g-eoj in https://github.com/pydantic/pydantic-ai/pull/3454clientInfo when connecting to MCP servers by @atinylittleshell in https://github.com/pydantic/pydantic-ai/pull/3572provider_url to ModelResponse and use it in cost() by @mahiro72 in https://github.com/pydantic/pydantic-ai/pull/3648LLMJudge by @samuelcolvin in https://github.com/pydantic/pydantic-ai/pull/3711OpenAIResponsesModel web search find_in_page action handling by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3709Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.30.0...v1.31.0
Restore compatibility with openai v1 by @DouweM in https://github.com/pydantic/pydantic-ai/issues/3707
openai v1 by @DouweM in https://github.com/pydantic/pydantic-ai/issues/3707Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.30.0...v1.30.1
Add prompt caching options to OpenAIChatModelSettings by @kichanyurd in https://github.com/pydantic/pydantic-ai/pull/3678
LLMJudge by @Clement-Lelievre in https://github.com/pydantic/pydantic-ai/pull/3696CerebrasModel by @sebastiand-cerebras in https://github.com/pydantic/pydantic-ai/pull/3486GraphBuildingError when using g.stream multiple times by @adtyavrdhn in https://github.com/pydantic/pydantic-ai/pull/3695BedrockConverseModel error when ModelResponse.parts is empty by @ffineis in https://github.com/pydantic/pydantic-ai/pull/3689Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.29.0...v1.30.0
Add support for aspect ratio in Gemini image generation by @mwildehahn and @ajac-zero in https://github.com/pydantic/pydantic-ai/pull/3672
container_id back to Anthropic API by @mattbrandman in https://github.com/pydantic/pydantic-ai/pull/3637anthropic dependency when using Anthropic model with other provider by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3652Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.28.0...v1.29.0
Adds native structured output support for claude-haiku-4-5 by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3670
claude-haiku-4-5 by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3670us-gov. and other multi-character Bedrock geo prefixes by @Leundai in https://github.com/pydantic/pydantic-ai/pull/3645Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.27.0...v1.28.0
feat: Allow dynamic configuration of built-in tools via RunContext by @AlanPonnachan in https://github.com/pydantic/pydantic-ai/pull/3600
extra_headers to allow model_settings reuse by @Wh1isper in https://github.com/pydantic/pydantic-ai/pull/3628VercelAIAdapter.dump_messages to convert Pydantic AI messages to Vercel AI messages by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3392tool_choice=required for deepseek-reasoner by @ZeroAurora in https://github.com/pydantic/pydantic-ai/pull/3644Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.26.0...v1.27.0
Support JSON object output for Deepseek provider by @xcpky in https://github.com/pydantic/pydantic-ai/pull/3601
FallbackModel behavior on ValidationErrors by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3603cache_control when AnthropicModel is used with Bedrock client by @Wh1isper in https://github.com/pydantic/pydantic-ai/pull/3616gateway/...:... to Known Model Names by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3593Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.25.1...v1.26.0
Make FastMCPToolset work with DBOS by @qianl15 in https://github.com/pydantic/pydantic-ai/pull/3540
FastMCPToolset work with DBOS by @qianl15 in https://github.com/pydantic/pydantic-ai/pull/3540OpenRouterModel error when native_finish_reason is None by @reuben-if in https://github.com/pydantic/pydantic-ai/pull/3584None tool call arguments by @barp in https://github.com/pydantic/pydantic-ai/pull/3571Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.25.0...v1.25.1
Support gemini-3-pro-image-preview with Nano Banana Pro by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3576
gemini-3-pro-image-preview with Nano Banana Pro by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3576Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.24.0...v1.25.0
Support native JSON output and strict tool calls for Anthropic by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3457
OpenAIResponsesModel by @Cody-learns in https://github.com/pydantic/pydantic-ai/pull/3470PLW1514 rule (use utf-8 encoding) by @Danipulok in https://github.com/pydantic/pydantic-ai/pull/3524_model_name access with model_name property in OpenAI models and streamed responses by @BBYNAI in https://github.com/pydantic/pydantic-ai/pull/3564Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.23.0...v1.24.0
Add Anthropic built-in WebFetchTool support by @sarth6 in https://github.com/pydantic/pydantic-ai/pull/3427
WebFetchTool support by @sarth6 in https://github.com/pydantic/pydantic-ai/pull/3427user_prompt in HITL by @Wh1isper in https://github.com/pydantic/pydantic-ai/pull/3528anthropic_cache_messages model setting and automatically strip cache points over the limit by @Wh1isper in https://github.com/pydantic/pydantic-ai/pull/3442OpenRouterModel by @zeyuyuyu in https://github.com/pydantic/pydantic-ai/pull/3548openrouter_reasoning model setting is sent to API by @xcpky in https://github.com/pydantic/pydantic-ai/pull/3545MCPServerHTTP by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3534pydantic_graph.beta.GraphRun GeneratorExit handling by @michgur in https://github.com/pydantic/pydantic-ai/pull/3525README.md from wheel for pydantic-ai by @johnslavik in https://github.com/pydantic/pydantic-ai/pull/3521Ruff to v0.14.6 by @Viicos in https://github.com/pydantic/pydantic-ai/pull/3547model_name property in OpenAIChatModel chat completion create request by @BBYNAI in https://github.com/pydantic/pydantic-ai/pull/3543huggingface-hub to <1 by @Kludex in https://github.com/pydantic/pydantic-ai/pull/3557gateway/<provider>:<model> shorthand by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3484Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.22.0...v1.23.0
Fix deprecated GeminiModel structured output and tool call thought signatures by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3517
FallbackModel fall back on all model API errors, not just HTTP status 400+ by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3494cacheable_types for anthropic by @marpulli in https://github.com/pydantic/pydantic-ai/pull/3513ThinkingPart when Google response ends in text with thought_signature by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3516GeminiModel structured output and tool call thought signatures by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3517Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.21.0...v1.22.0
Feature: MCP client Resources support by @fennb in https://github.com/pydantic/pydantic-ai/pull/3024
MCPServer.instructions property by @mochow13 in https://github.com/pydantic/pydantic-ai/pull/3431BinaryContent.from_path convenience method by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/3482title from $defs by @conradlee in https://github.com/pydantic/pydantic-ai/pull/3487GoogleModel._url by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3499Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.20.0...v1.21.0
Add support for Gemini 3 Pro by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3464
GoogleModel google.genai.errors.APIError in ModelHTTPError so it works with FallbackModel by @timothy-jeong in https://github.com/pydantic/pydantic-ai/pull/3139{ModelRequest,ModelResponse}.metadata fields by @adtyavrdhn in https://github.com/pydantic/pydantic-ai/pull/3422RunContext.usage available with Temporal by @mattbrandman in https://github.com/pydantic/pydantic-ai/pull/3434ttl to CachePoint and Anthropic caching model settings by @Wh1isper in https://github.com/pydantic/pydantic-ai/pull/3450Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.19.0...v1.20.0
Let metadata be passed to CallDeferred and ApprovalRequired exceptions and end up on DeferredToolRequests by @cjohnhanson in https://github.com/pydant
metadata be passed to CallDeferred and ApprovalRequired exceptions and end up on DeferredToolRequests by @cjohnhanson in https://github.com/pydantic/pydantic-ai/pull/3345count_tokens and support UsageLimits.count_tokens_before_request by @nathan-gage in https://github.com/pydantic/pydantic-ai/pull/3458Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.18.0...v1.19.0
Add Anthropic prompt caching support by @ronakrm in https://github.com/pydantic/pydantic-ai/pull/3363
openai to v2.8.0 (v1 still supported), add GPT-5.1 to known model names by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3419google-genai to v1.50.1 and remove patches by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3340temporalio to v1.19.0 and use SimplePlugin by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3214Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.17.0...v1.18.0
Add Pydantic AI Gateway docs by @laisbsc in https://github.com/pydantic/pydantic-ai/pull/3402
FastMCPToolset work with Temporal by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3413mcp.json environment variable expansion in load_mcp_servers() by @wgillett in https://github.com/pydantic/pydantic-ai/pull/3380Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.16.0...v1.17.0
refactor(gateway): add upstream_provider back by @Kludex in https://github.com/pydantic/pydantic-ai/pull/3391
upstream_provider back by @Kludex in https://github.com/pydantic/pydantic-ai/pull/3391Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.15.0...v1.16.0
Wrap BedrockConverseModel errors in ModelHTTPError to work well with FallbackModel by @cjermain in https://github.com/pydantic/pydantic-ai/pull/3377
BedrockConverseModel errors in ModelHTTPError to work well with FallbackModel by @cjermain in https://github.com/pydantic/pydantic-ai/pull/3377run_id to run, run result, and message (request, response) classes by @adtyavrdhn in https://github.com/pydantic/pydantic-ai/pull/3366BedrockConverseModel.count_tokens so it works with UsageLimits.count_tokens_before_request by @DenysMoskalenko in https://github.com/pydantic/pydantic-ai/pull/3367Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.14.1...v1.15.0
Fix Vercel AI tool input/output always showing up as a JSON string rather than object by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3399
ModelRetry hashable by @nathan-gage in https://github.com/pydantic/pydantic-ai/pull/3394main by @lars20070 in https://github.com/pydantic/pydantic-ai/pull/3385Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.14.0...v1.15.0
Allow custom provider factory to be passed into infer_model by @slkoo-cc in https://github.com/pydantic/pydantic-ai/pull/3341
infer_model by @slkoo-cc in https://github.com/pydantic/pydantic-ai/pull/3341Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.13.0...v1.13.1
Ignore empty text parts in GoogleModel by @naveen-corpusant in https://github.com/pydantic/pydantic-ai/pull/3360
GoogleModel by @naveen-corpusant in https://github.com/pydantic/pydantic-ai/pull/3360AgentRun.{all,new}_messages{_json} by @tibbe in https://github.com/pydantic/pydantic-ai/pull/3354api_type by @Kludex in https://github.com/pydantic/pydantic-ai/pull/3362profile and routing_group by @Kludex in https://github.com/pydantic/pydantic-ai/pull/3361Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.12.0...v1.13.0
Fix tool call incorrectly being considered approved when agent run is resumed with history ending in unapproved tool call by @DouweM in https://github
temporalio to v1.18.2 as v1.18.0 is broken by @crossk3 in https://github.com/pydantic/pydantic-ai/pull/3356Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.11.1...v1.12.0
FallbackModel support for Native output mode and ModelProfile.default_structured_output_mode by @DouweM in https://github.com/pydantic/pydantic-ai/pul
FallbackModel support for Native output mode and ModelProfile.default_structured_output_mode by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3303MCPServerStreamableHTTP with agent.run_stream by @dmontagu in https://github.com/pydantic/pydantic-ai/pull/3338DuckDuckGoTool with latest version of ddgs package by @jhammarstedt in https://github.com/pydantic/pydantic-ai/pull/3330Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.11.0...v1.11.1
Improve validation error retry message by @dmontagu in https://github.com/pydantic/pydantic-ai/pull/3193
instructions be provided at agent.run time. by @baek54321 in https://github.com/pydantic/pydantic-ai/pull/3309partial_output to RunContext provided to output validators by @petersli in https://github.com/pydantic/pydantic-ai/pull/3286Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.10.0...v1.11.0
Fix MCPServer error handling with Temporal by @wreed4 in https://github.com/pydantic/pydantic-ai/pull/3299
MCPServer error handling with Temporal by @wreed4 in https://github.com/pydantic/pydantic-ai/pull/3299OpenAIResponsesModel.base_url property by @chasefarmer-pixee in https://github.com/pydantic/pydantic-ai/pull/3281OpenRouterProvider be created with only http_client by @xcpky in https://github.com/pydantic/pydantic-ai/pull/3308Agent.run_stream_sync method and sync convenience methods on StreamedRunResult by @ajac-zero in https://github.com/pydantic/pydantic-ai/pull/3146application/msword files. by @DenysMoskalenko in https://github.com/pydantic/pydantic-ai/pull/3318ToolCallStartEvent doesn't use a parent_message_id from a previous request/response by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3325Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.9.1...v1.10.0
Support AsyncAnthropicVertex as AnthropicProvider.anthropic_client by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3292
deps so it can be read from on_complete handler by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3297MALFORMED_FUNCTION_CALL or other recoverable finish reason by @ArneZsng in https://github.com/pydantic/pydantic-ai/pull/3300Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.9.0...v1.9.1
Support Vercel AI Data Stream Protocol by @samuelcolvin in https://github.com/pydantic/pydantic-ai/pull/2923
Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.8.0...v1.9.0
Add experiment metadata by @dmontagu in https://github.com/pydantic/pydantic-ai/pull/3263
openai_supports_tool_choice_required model profile setting in OpenAIResponsesModel by @pamelafox in https://github.com/pydantic/pydantic-ai/pull/3272run_stream_events by @DouweM in https://github.com/pydantic/pydantic-ai/pull/3279Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.7.0...v1.8.0
Add OutlinesModel to run local models using Transformers, Llama.cpp, MLXLM, SGLang and vLLM via Outlines by @RobinPicard in https://github.com/pydanti
OutlinesModel to run local models using Transformers, Llama.cpp, MLXLM, SGLang and vLLM via Outlines by @RobinPicard in https://github.com/pydantic/pydantic-ai/pull/2623Full Changelog: https://github.com/pydantic/pydantic-ai/compare/v1.6.0...v1.7.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →