⚡️ Speed up method AgentRunResult._set_output_tool_return by 18798%
#2196
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📄 18,798% (187.98x) speedup for
AgentRunResult._set_output_tool_returninpydantic_ai_slim/pydantic_ai/agent.py⏱️ Runtime :
8.31 milliseconds→44.0 microseconds(best of21runs)📝 Explanation and details
Key optimization:
deepcopy(self._state.message_history)) was by far the slowest operation (99.3% of time).Notes:
ModelMessageis a dataclass or otherwise supports__class__(**__dict__)for shallow copying. If this can't be guaranteed, substitute with a more explicit copy (e.g.,dataclasses.replaceif it is a dataclass).✅ Correctness verification report:
⏪ Replay Tests and Runtime