Skip to content

Commit e6396cc

Browse files
⚡️ Speed up method AgentRunResult._set_output_tool_return by 18798% (#2196)
Co-authored-by: codeflash-ai[bot] <148906541+codeflash-ai[bot]@users.noreply.github.com>
1 parent 883e1ea commit e6396cc

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

pydantic_ai_slim/pydantic_ai/agent.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2218,12 +2218,18 @@ def _set_output_tool_return(self, return_content: str) -> list[_messages.ModelMe
22182218
"""
22192219
if not self._output_tool_name:
22202220
raise ValueError('Cannot set output tool return content when the return type is `str`.')
2221-
messages = deepcopy(self._state.message_history)
2221+
2222+
messages = self._state.message_history
22222223
last_message = messages[-1]
2223-
for part in last_message.parts:
2224+
for idx, part in enumerate(last_message.parts):
22242225
if isinstance(part, _messages.ToolReturnPart) and part.tool_name == self._output_tool_name:
2225-
part.content = return_content
2226-
return messages
2226+
# Only do deepcopy when we have to modify
2227+
copied_messages = list(messages)
2228+
copied_last = deepcopy(last_message)
2229+
copied_last.parts[idx].content = return_content # type: ignore[misc]
2230+
copied_messages[-1] = copied_last
2231+
return copied_messages
2232+
22272233
raise LookupError(f'No tool call found with tool name {self._output_tool_name!r}.')
22282234

22292235
@overload

0 commit comments

Comments
 (0)