Skip to content

Commit 13b712f

Browse files
authored
BREAKING CHANGE: drop 4 months old deprecation warnings (#2451)
1 parent 7787334 commit 13b712f

File tree

4 files changed

+28
-146
lines changed

4 files changed

+28
-146
lines changed

docs/changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ See [#2445](https://github.com/pydantic/pydantic-ai/pull/2445) - The `get_data`
3030
See [#2446](https://github.com/pydantic/pydantic-ai/pull/2446) - The `format_as_xml` function was moved to the `pydantic_ai.format_as_xml` module.
3131
Import it via `from pydantic_ai import format_as_xml` instead.
3232

33+
See [#2451](https://github.com/pydantic/pydantic-ai/pull/2451) - Removed deprecated `Agent.result_validator` method, `Agent.last_run_messages` property, `AgentRunResult.data` property, and `result_tool_return_content` parameters from result classes.
34+
3335
### v0.5.0 (2025-08-04)
3436

3537
See [#2388](https://github.com/pydantic/pydantic-ai/pull/2388) - The `source` field of an `EvaluationResult` is now of type `EvaluatorSpec` rather than the actual source `Evaluator` instance, to help with serialization/deserialization.

pydantic_ai_slim/pydantic_ai/agent.py

Lines changed: 13 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,13 +1266,6 @@ async def output_validator_deps(ctx: RunContext[str], data: str) -> str:
12661266
self._output_validators.append(_output.OutputValidator[AgentDepsT, Any](func))
12671267
return func
12681268

1269-
@deprecated('`result_validator` is deprecated, use `output_validator` instead.')
1270-
def result_validator(self, func: Any, /) -> Any:
1271-
warnings.warn(
1272-
'`result_validator` is deprecated, use `output_validator` instead.', DeprecationWarning, stacklevel=2
1273-
)
1274-
return self.output_validator(func) # type: ignore
1275-
12761269
@overload
12771270
def tool(self, func: ToolFuncContext[AgentDepsT, ToolParams], /) -> ToolFuncContext[AgentDepsT, ToolParams]: ...
12781271

@@ -1553,13 +1546,6 @@ def _infer_name(self, function_frame: FrameType | None) -> None:
15531546
self.name = name
15541547
return
15551548

1556-
@property
1557-
@deprecated(
1558-
'The `last_run_messages` attribute has been removed, use `capture_run_messages` instead.', category=None
1559-
)
1560-
def last_run_messages(self) -> list[_messages.ModelMessage]:
1561-
raise AttributeError('The `last_run_messages` attribute has been removed, use `capture_run_messages` instead.')
1562-
15631549
def _prepare_output_schema(
15641550
self, output_type: OutputSpec[RunOutputDataT] | None, model_profile: ModelProfile
15651551
) -> _output.OutputSchema[RunOutputDataT]:
@@ -2125,11 +2111,6 @@ def _traceparent(self, *, required: bool = True) -> str | None:
21252111
raise AttributeError('No span was created for this agent run')
21262112
return self._traceparent_value
21272113

2128-
@property
2129-
@deprecated('`result.data` is deprecated, use `result.output` instead.')
2130-
def data(self) -> OutputDataT:
2131-
return self.output
2132-
21332114
def _set_output_tool_return(self, return_content: str) -> list[_messages.ModelMessage]:
21342115
"""Set return content for the output tool.
21352116
@@ -2151,69 +2132,40 @@ def _set_output_tool_return(self, return_content: str) -> list[_messages.ModelMe
21512132

21522133
raise LookupError(f'No tool call found with tool name {self._output_tool_name!r}.')
21532134

2154-
@overload
2155-
def all_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
2156-
2157-
@overload
2158-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
2159-
def all_messages(self, *, result_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
2160-
2161-
def all_messages(
2162-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
2163-
) -> list[_messages.ModelMessage]:
2135+
def all_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]:
21642136
"""Return the history of _messages.
21652137
21662138
Args:
21672139
output_tool_return_content: The return content of the tool call to set in the last message.
21682140
This provides a convenient way to modify the content of the output tool call if you want to continue
21692141
the conversation and want to set the response to the output tool call. If `None`, the last message will
21702142
not be modified.
2171-
result_tool_return_content: Deprecated, use `output_tool_return_content` instead.
21722143
21732144
Returns:
21742145
List of messages.
21752146
"""
2176-
content = result.coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
2177-
if content is not None:
2178-
return self._set_output_tool_return(content)
2147+
if output_tool_return_content is not None:
2148+
return self._set_output_tool_return(output_tool_return_content)
21792149
else:
21802150
return self._state.message_history
21812151

2182-
@overload
2183-
def all_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes: ...
2184-
2185-
@overload
2186-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
2187-
def all_messages_json(self, *, result_tool_return_content: str | None = None) -> bytes: ...
2188-
2189-
def all_messages_json(
2190-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
2191-
) -> bytes:
2152+
def all_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes:
21922153
"""Return all messages from [`all_messages`][pydantic_ai.agent.AgentRunResult.all_messages] as JSON bytes.
21932154
21942155
Args:
21952156
output_tool_return_content: The return content of the tool call to set in the last message.
21962157
This provides a convenient way to modify the content of the output tool call if you want to continue
21972158
the conversation and want to set the response to the output tool call. If `None`, the last message will
21982159
not be modified.
2199-
result_tool_return_content: Deprecated, use `output_tool_return_content` instead.
22002160
22012161
Returns:
22022162
JSON bytes representing the messages.
22032163
"""
2204-
content = result.coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
2205-
return _messages.ModelMessagesTypeAdapter.dump_json(self.all_messages(output_tool_return_content=content))
2206-
2207-
@overload
2208-
def new_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
2209-
2210-
@overload
2211-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
2212-
def new_messages(self, *, result_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
2164+
return _messages.ModelMessagesTypeAdapter.dump_json(
2165+
self.all_messages(output_tool_return_content=output_tool_return_content)
2166+
)
22132167

2214-
def new_messages(
2215-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
2216-
) -> list[_messages.ModelMessage]:
2168+
def new_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]:
22172169
"""Return new messages associated with this run.
22182170
22192171
Messages from older runs are excluded.
@@ -2223,38 +2175,27 @@ def new_messages(
22232175
This provides a convenient way to modify the content of the output tool call if you want to continue
22242176
the conversation and want to set the response to the output tool call. If `None`, the last message will
22252177
not be modified.
2226-
result_tool_return_content: Deprecated, use `output_tool_return_content` instead.
22272178
22282179
Returns:
22292180
List of new messages.
22302181
"""
2231-
content = result.coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
2232-
return self.all_messages(output_tool_return_content=content)[self._new_message_index :]
2233-
2234-
@overload
2235-
def new_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes: ...
2182+
return self.all_messages(output_tool_return_content=output_tool_return_content)[self._new_message_index :]
22362183

2237-
@overload
2238-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
2239-
def new_messages_json(self, *, result_tool_return_content: str | None = None) -> bytes: ...
2240-
2241-
def new_messages_json(
2242-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
2243-
) -> bytes:
2184+
def new_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes:
22442185
"""Return new messages from [`new_messages`][pydantic_ai.agent.AgentRunResult.new_messages] as JSON bytes.
22452186
22462187
Args:
22472188
output_tool_return_content: The return content of the tool call to set in the last message.
22482189
This provides a convenient way to modify the content of the output tool call if you want to continue
22492190
the conversation and want to set the response to the output tool call. If `None`, the last message will
22502191
not be modified.
2251-
result_tool_return_content: Deprecated, use `output_tool_return_content` instead.
22522192
22532193
Returns:
22542194
JSON bytes representing the new messages.
22552195
"""
2256-
content = result.coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
2257-
return _messages.ModelMessagesTypeAdapter.dump_json(self.new_messages(output_tool_return_content=content))
2196+
return _messages.ModelMessagesTypeAdapter.dump_json(
2197+
self.new_messages(output_tool_return_content=output_tool_return_content)
2198+
)
22582199

22592200
def usage(self) -> _usage.Usage:
22602201
"""Return the usage of the whole run."""

pydantic_ai_slim/pydantic_ai/result.py

Lines changed: 13 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
from __future__ import annotations as _annotations
22

3-
import warnings
43
from collections.abc import AsyncIterable, AsyncIterator, Awaitable, Callable
54
from copy import copy
65
from dataclasses import dataclass, field
76
from datetime import datetime
87
from typing import Generic, cast
98

109
from pydantic import ValidationError
11-
from typing_extensions import TypeVar, deprecated, overload
10+
from typing_extensions import TypeVar
1211

1312
from pydantic_ai._tool_manager import ToolManager
1413

@@ -291,68 +290,41 @@ class StreamedRunResult(Generic[AgentDepsT, OutputDataT]):
291290
[`get_output`][pydantic_ai.result.StreamedRunResult.get_output] completes.
292291
"""
293292

294-
@overload
295-
def all_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
296-
297-
@overload
298-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
299-
def all_messages(self, *, result_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
300-
301-
def all_messages(
302-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
303-
) -> list[_messages.ModelMessage]:
293+
def all_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]:
304294
"""Return the history of _messages.
305295
306296
Args:
307297
output_tool_return_content: The return content of the tool call to set in the last message.
308298
This provides a convenient way to modify the content of the output tool call if you want to continue
309299
the conversation and want to set the response to the output tool call. If `None`, the last message will
310300
not be modified.
311-
result_tool_return_content: deprecated, use `output_tool_return_content` instead.
312301
313302
Returns:
314303
List of messages.
315304
"""
316305
# this is a method to be consistent with the other methods
317-
content = coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
318-
if content is not None:
306+
if output_tool_return_content is not None:
319307
raise NotImplementedError('Setting output tool return content is not supported for this result type.')
320308
return self._all_messages
321309

322-
@overload
323-
def all_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes: ...
324-
325-
@overload
326-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
327-
def all_messages_json(self, *, result_tool_return_content: str | None = None) -> bytes: ...
328-
329-
def all_messages_json(
330-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
331-
) -> bytes: # pragma: no cover
310+
def all_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes: # pragma: no cover
332311
"""Return all messages from [`all_messages`][pydantic_ai.result.StreamedRunResult.all_messages] as JSON bytes.
333312
334313
Args:
335314
output_tool_return_content: The return content of the tool call to set in the last message.
336315
This provides a convenient way to modify the content of the output tool call if you want to continue
337316
the conversation and want to set the response to the output tool call. If `None`, the last message will
338317
not be modified.
339-
result_tool_return_content: deprecated, use `output_tool_return_content` instead.
340318
341319
Returns:
342320
JSON bytes representing the messages.
343321
"""
344-
content = coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
345-
return _messages.ModelMessagesTypeAdapter.dump_json(self.all_messages(output_tool_return_content=content))
346-
347-
@overload
348-
def new_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
349-
350-
@overload
351-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
352-
def new_messages(self, *, output_tool_return_content: str | None = None) -> list[_messages.ModelMessage]: ...
322+
return _messages.ModelMessagesTypeAdapter.dump_json(
323+
self.all_messages(output_tool_return_content=output_tool_return_content)
324+
)
353325

354326
def new_messages(
355-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
327+
self, *, output_tool_return_content: str | None = None
356328
) -> list[_messages.ModelMessage]: # pragma: no cover
357329
"""Return new messages associated with this run.
358330
@@ -363,38 +335,27 @@ def new_messages(
363335
This provides a convenient way to modify the content of the output tool call if you want to continue
364336
the conversation and want to set the response to the output tool call. If `None`, the last message will
365337
not be modified.
366-
result_tool_return_content: deprecated, use `output_tool_return_content` instead.
367338
368339
Returns:
369340
List of new messages.
370341
"""
371-
content = coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
372-
return self.all_messages(output_tool_return_content=content)[self._new_message_index :]
342+
return self.all_messages(output_tool_return_content=output_tool_return_content)[self._new_message_index :]
373343

374-
@overload
375-
def new_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes: ...
376-
377-
@overload
378-
@deprecated('`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.')
379-
def new_messages_json(self, *, result_tool_return_content: str | None = None) -> bytes: ...
380-
381-
def new_messages_json(
382-
self, *, output_tool_return_content: str | None = None, result_tool_return_content: str | None = None
383-
) -> bytes: # pragma: no cover
344+
def new_messages_json(self, *, output_tool_return_content: str | None = None) -> bytes: # pragma: no cover
384345
"""Return new messages from [`new_messages`][pydantic_ai.result.StreamedRunResult.new_messages] as JSON bytes.
385346
386347
Args:
387348
output_tool_return_content: The return content of the tool call to set in the last message.
388349
This provides a convenient way to modify the content of the output tool call if you want to continue
389350
the conversation and want to set the response to the output tool call. If `None`, the last message will
390351
not be modified.
391-
result_tool_return_content: deprecated, use `output_tool_return_content` instead.
392352
393353
Returns:
394354
JSON bytes representing the new messages.
395355
"""
396-
content = coalesce_deprecated_return_content(output_tool_return_content, result_tool_return_content)
397-
return _messages.ModelMessagesTypeAdapter.dump_json(self.new_messages(output_tool_return_content=content))
356+
return _messages.ModelMessagesTypeAdapter.dump_json(
357+
self.new_messages(output_tool_return_content=output_tool_return_content)
358+
)
398359

399360
async def stream(self, *, debounce_by: float | None = 0.1) -> AsyncIterator[OutputDataT]:
400361
"""Stream the response as an async iterable.
@@ -515,18 +476,3 @@ async def _usage_checking_iterator():
515476
return _usage_checking_iterator()
516477
else:
517478
return stream_response
518-
519-
520-
def coalesce_deprecated_return_content(
521-
output_tool_return_content: T | None, result_tool_return_content: T | None
522-
) -> T | None:
523-
"""Return the first non-None value."""
524-
if output_tool_return_content is None:
525-
if result_tool_return_content is not None: # pragma: no cover
526-
warnings.warn(
527-
'`result_tool_return_content` is deprecated, use `output_tool_return_content` instead.',
528-
DeprecationWarning,
529-
stacklevel=3,
530-
)
531-
return result_tool_return_content
532-
return output_tool_return_content

tests/test_agent.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2617,13 +2617,6 @@ async def get_location(loc_name: str) -> str:
26172617
)
26182618

26192619

2620-
def test_last_run_messages() -> None:
2621-
agent = Agent('test')
2622-
2623-
with pytest.raises(AttributeError, match='The `last_run_messages` attribute has been removed,'):
2624-
agent.last_run_messages # pyright: ignore[reportDeprecated]
2625-
2626-
26272620
def test_nested_capture_run_messages() -> None:
26282621
agent = Agent('test')
26292622

0 commit comments

Comments
 (0)