@@ -1227,6 +1227,53 @@ async def test_stream_logging(bedrock_client, model, messages, caplog, alist):
1227
1227
assert "finished streaming response from model" in log_text
1228
1228
1229
1229
1230
+ @pytest .mark .asyncio
1231
+ async def test_stream_stop_reason_override_streaming (bedrock_client , model , messages , alist ):
1232
+ """Test that stopReason is overridden from end_turn to tool_use in streaming mode when tool use is detected."""
1233
+ bedrock_client .converse_stream .return_value = {
1234
+ "stream" : [
1235
+ {"messageStart" : {"role" : "assistant" }},
1236
+ {"contentBlockStart" : {"start" : {"toolUse" : {"toolUseId" : "123" , "name" : "test_tool" }}}},
1237
+ {"contentBlockDelta" : {"delta" : {"test" : {"input" : '{"param": "value"}' }}}},
1238
+ {"contentBlockStop" : {}},
1239
+ {"messageStop" : {"stopReason" : "end_turn" }},
1240
+ ]
1241
+ }
1242
+
1243
+ response = model .stream (messages )
1244
+ events = await alist (response )
1245
+
1246
+ # Find the messageStop event
1247
+ message_stop_event = next (event for event in events if "messageStop" in event )
1248
+
1249
+ # Verify stopReason was overridden to tool_use
1250
+ assert message_stop_event ["messageStop" ]["stopReason" ] == "tool_use"
1251
+
1252
+
1253
+ @pytest .mark .asyncio
1254
+ async def test_stream_stop_reason_override_non_streaming (bedrock_client , alist , messages ):
1255
+ """Test that stopReason is overridden from end_turn to tool_use in non-streaming mode when tool use is detected."""
1256
+ bedrock_client .converse .return_value = {
1257
+ "output" : {
1258
+ "message" : {
1259
+ "role" : "assistant" ,
1260
+ "content" : [{"toolUse" : {"toolUseId" : "123" , "name" : "test_tool" , "input" : {"param" : "value" }}}],
1261
+ }
1262
+ },
1263
+ "stopReason" : "end_turn" ,
1264
+ }
1265
+
1266
+ model = BedrockModel (model_id = "test-model" , streaming = False )
1267
+ response = model .stream (messages )
1268
+ events = await alist (response )
1269
+
1270
+ # Find the messageStop event
1271
+ message_stop_event = next (event for event in events if "messageStop" in event )
1272
+
1273
+ # Verify stopReason was overridden to tool_use
1274
+ assert message_stop_event ["messageStop" ]["stopReason" ] == "tool_use"
1275
+
1276
+
1230
1277
def test_format_request_cleans_tool_result_content_blocks (model , model_id ):
1231
1278
"""Test that format_request cleans toolResult blocks by removing extra fields."""
1232
1279
messages = [
0 commit comments