@@ -2218,12 +2218,18 @@ def _set_output_tool_return(self, return_content: str) -> list[_messages.ModelMe
2218
2218
"""
2219
2219
if not self ._output_tool_name :
2220
2220
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
2222
2223
last_message = messages [- 1 ]
2223
- for part in last_message .parts :
2224
+ for idx , part in enumerate ( last_message .parts ) :
2224
2225
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
+
2227
2233
raise LookupError (f'No tool call found with tool name{ self ._output_tool_name !r} .' )
2228
2234
2229
2235
@overload