Releases: pydantic/pydantic-ai
Releases ยท pydantic/pydantic-ai
v1.0.5 (2025-09-11)
What's Changed
- Don't lose Azure OpenAI Responses encrypted_content if no summary was included by @DouweM in #2874
- Store OpenAI Responses text part ID to prevent error with reasoning by @DouweM in #2882
- Make OpenAIResponsesModel work with reasoning from other models and modified history by @DouweM in #2881
Full Changelog: v1.0.4...v1.0.5
v1.0.4 (2025-09-11)
What's Changed
- Add Pydantic AI Gateway provider by @Kludex in #2816, #2863
- Fix OpenAI Responses API tool calls with reasoning by @DouweM in #2869
- Support OpenAI Responses API returning encrypted reasoning content without summary by @DouweM in #2866
- Don't ask for OpenAI Responses API to include encrypted reasoning content for models that don't support it by @DouweM in #2867
- docs: update builtin-tools md by @tberends in #2857
New Contributors
Full Changelog: v1.0.3...v1.0.4
v1.0.3 (2025-09-10)
What's Changed
- Include thinking parts in subsequent model requests to improve performance and cache hit rates by @DouweM in #2823
- Add
on_complete
callback to AG-UI functions to get access toAgentRunResult
by @ChuckJonas in #2429 - Support
ModelSettings.seed
inGoogleModel
by @DouweM in #2842 - Add
with agent.sequential_tool_calls():
contextmanager and use it inDBOSAgent
by @DouweM in #2856 - Ensure
ModelResponse
fields are set from actual model response when streaming by @DouweM in #2848 - Send AG-UI thinking start and end events by @DouweM in #2855
- Support models that return output tool args as
{"response': "<JSON string>"}
by @shaheerzaman in #2836 - Support
NativeOutput
withFunctionModel
by @DouweM in #2843 - Raise error when
WebSearchTool
is used withOpenAIChatModel
and unsupported model by @safina57 in #2824
New Contributors
- @safina57 made their first contribution in #2824
- @shaheerzaman made their first contribution in #2836
Full Changelog: v1.0.2...v1.0.3
v1.0.2 (2025-09-08)
What's Changed
- Add support for durable execution with DBOS by @qianl15 in #2638
- Support sequential tool calling by @strawgate in #2718
- Add
GoogleModelSettings.google_cached_content
to passcached_content
by @Hojland in #2832 - Add
ModelResponse.finish_reason
and setprovider_response_id
while streaming by @fatelei in #2590 - Add support for
gen_ai.response.id
by @Kludex in #2831 - Only send tool choice to Bedrock Converse API for Anthropic and Nova models by @DouweM in #2819
- Handle errors in cost calculation in InstrumentedModel by @alexmojaki in #2834
New Contributors
- @Hojland made their first contribution in #2832
- @qianl15 made their first contribution in #2638
- @fatelei made their first contribution in #2590
Full Changelog: v1.0.1...v1.0.2
v1.0.1 (2025-09-05)
Breaking Changes
The following breaking change was slated to go into v1.0.0 but accidentally left out. Because it's a security issue, an uncommonly used feature, and few people will have updated to v1 yet within 24 hours, we decided it was justified to make an exception to the no-breaking-changes policy to get it out ASAP.
Other Changes
Full Changelog: v1.0.0...v1.0.1
v1.0.0 (2025-09-04)
What's Changed
- Drop support for Python 3.9 by @Kludex in #2725
- Deprecate
OpenAIModelProfile.openai_supports_sampling_settings
by @Kludex in #2730 - Add support for human-in-the-loop tool call approval by @DouweM in #2581
- Add
tool_calls_limit
toUsageLimits
andtool_calls
toRunUsage
by @tradeqvest in #2633 - Add LiteLLM provider for OpenAI API compatible models by @mochow13 in #2606
- Add
identifier
field toFileUrl
and subclasses by @kyuam32 in #2636 - Support
NativeOutput
with Groq by @DouweM in #2772 - Add
docstring_format
,require_parameter_descriptions
,schema_generator
toFunctionToolset
by @g-eoj in #2601 - Gracefully handle errors in evals by @dmontagu in #2295
- Include
logfire
with pydantic-ai package by @Kludex in #2683 - Let almost all types used in docs examples be imported directly from
pydantic_ai
by @DouweM in #2736 - Bump
temporalio
to 1.17.0 by @DouweM in #2811 - Default
InstrumentationSettings
version
to 2 by @alexmojaki in #2726 - Remove cases and averages from eval span by @DouweM in #2715
- Make many more dataclasses kw-only by @dmontagu in #2738
- Don't emit empty AG-UI thinking message events by @DouweM in #2754
- Update
mcp
package version by @BrokenDuck in #2741 - Raise error if MCP server
__aexit__
is called when_running_count
is already0
by @federicociner in #2696 - Fix error when streaming from Gemini includes only
executable_code
orcode_execution_result
by @binaryCrossEntropy in #2719 - Close original response when retrying HTTP request by @DouweM in #2753
Agent.__aenter__
returnsSelf
, use default instrumentation for MCP sampling model by @alexmojaki in #2765- Fix Anthropic streaming usage counting by @DouweM in #2771
- Create separate
ThinkingParts
for separate OpenAI Responses reasoning summary parts by @DouweM in #2775 - Handle Groq
tool_use_failed
errors by getting model to retry by @DouweM in #2774 - Raise error when trying to use Google built-in tools with user/output tools by @DouweM in #2777
- Move
mcp-run-python
to its own repo by @samuelcolvin in #2776 - Fix Azure OpenAI streaming when async content filter is enabled by @frednijsvrt in #2763
- Don't emit AG-UI text message content events with empty text part deltas by @celeritatem in #2779
- Handle streaming thinking signature deltas from Bedrock Converse API by @DouweM in #2785
- Don't require
MCPServerStreamableHTTP
andMCPServerSSE
url
to be a keyword argument by @franciscovilchezv in #2758 - Add
operation.cost
span attribute to model request spans, renameModelResponse.price()
to.cost()
by @alexmojaki in #2767 - Ensure that old
ModelResponse
s stored in a DB can still be deserialized by @DouweM in #2792 - Type
ModelRequest.parts
andModelResponse.parts
asSequence
by @moritzwilksch in #2798 - Always run
event_stream_handler
inside Temporal activity by @DouweM in #2806 - Document that various functions need to be async to be used with Temporal by @DouweM in #2809
New Contributors
- @BrokenDuck made their first contribution in #2741
- @federicociner made their first contribution in #2696
- @g-eoj made their first contribution in #2601
- @binaryCrossEntropy made their first contribution in #2719
- @Trollgeir made their first contribution in #2729
- @kyuam32 made their first contribution in #2636
- @richhuth made their first contribution in #2680
- @frednijsvrt made their first contribution in #2763
- @celeritatem made their first contribution in #2779
- @mochow13 made their first contribution in #2606
- @franciscovilchezv made their first contribution in #2758
- @moritzwilksch made their first contribution in #2798
Full Changelog: v0.8.1...v1.0.0
v1.0.0b1 (2025-08-30)
What's Changed
- Drop support for Python 3.9 by @Kludex in #2725
- Add support for human-in-the-loop tool call approval by @DouweM in #2581
- Deprecate
OpenAIModelProfile.openai_supports_sampling_settings
by @Kludex in #2730 - Gracefully handle errors in evals by @dmontagu in #2295
- Include logfire with pydantic-ai package by @Kludex in #2683
- Remove errors when passing Retrying instead of RetryConfig to TenacityTransport by @DouweM in #2717
- Default
InstrumentationSettings
version
to 2 by @alexmojaki in #2726 - Remove cases and averages from eval span by @DouweM in #2715
- Make many more dataclasses kw-only by @dmontagu in #2738
Full Changelog: v0.8.1...v1.0.0b1
v0.8.1 (2025-08-29)
What's Changed
- Add
gen_ai.system_instructions
attribute to agent run spans by @alexmojaki in #2699 - Bump
temporalio
to 1.16.0 by @DouweM in #2703 - Rename
StreamedRunResult
methods to be consistent withAgentStream
by @DouweM in #2692 - Deprecate specifying a model name without a provider prefix, and the
vertexai
provider name by @DouweM in #2711 - Rename
ModelResponse.provider_request_id
toprovider_response_id
by @DouweM in #2710 - docs: Add
message_history
parameter documentation for CLI methods by @ryx2 in #2695
Full Changelog: v0.8.0...v0.8.1
v0.8.0 (2025-08-26)
What's Changed
- Add elicitation callback support to MCP servers by @yamanahlawat in #2373
- Add
message_history
parameter toagent.to_cli()
by @ryx2 in #2674 - Properly deserialize complex tool arguments with Temporal by @DouweM in #2686
- Fix serialization / deserialization of
FileUrl.media_type
by @mwildehahn in #2677 - Handle missing token details in vLLM/OpenAI-compatible APIs by @DouweM in #2669
- Make AgentStreamEvent union of ModelResponseStreamEvent and HandleResponseEvent by @DouweM in #2689
Full Changelog: v0.7.6...v0.8.0
v0.7.6 (2025-08-26)
What's Changed
- Replace
all_messages_events
withpydantic_ai.all_messages
forInstrumentationSettings(version=2)
by @alexmojaki in #2658 - Fix inability to call response.raise_for_status in AsyncTenacityTransport by @dmontagu in #2668
- Deprecate
OpenAIModel
in favor ofOpenAIChatModel
by @Kludex in #2676 - anthropic: drop new lines on empty system prompt by @Kludex in #2678
- fix(bedrock): skip SystemPromptPart with empty content by @essamgouda97 in #2672
- BREAKING CHANGE: Fix tenacity implementation for improved retry behavior by @dmontagu in #2670
- Add Cerebras provider by @Kludex in #2643
New Contributors
- @essamgouda97 made their first contribution in #2672
Full Changelog: v0.7.5...v0.7.6