@@ -329,13 +329,15 @@ impl History {
329329 }
330330 }
331331 merge_consecutive_assistant_messages ( & mut messages) ;
332+ devo_protocol:: normalize_tool_result_messages ( & mut messages) ;
332333 return messages;
333334 }
334335
335336 let mut items = normalize:: filter_by_modality ( & self . items , modalities) ;
336337 normalize:: pair_tool_call_items ( & mut items) ;
337338 let mut messages: Vec < RequestMessage > = items. into_iter ( ) . map ( Into :: into) . collect ( ) ;
338339 merge_consecutive_assistant_messages ( & mut messages) ;
340+ devo_protocol:: normalize_tool_result_messages ( & mut messages) ;
339341 messages
340342 }
341343
@@ -709,7 +711,7 @@ mod tests {
709711 }
710712
711713 #[ test]
712- fn for_prompt_merges_consecutive_assistant_messages_only ( ) {
714+ fn for_prompt_merges_assistant_tool_calls_and_groups_tool_results ( ) {
713715 let mut h = History :: new ( test_context ( ) ) ;
714716
715717 // User message
@@ -744,8 +746,8 @@ mod tests {
744746
745747 let msgs = h. for_prompt ( & [ InputModality :: Text ] ) ;
746748
747- // Should produce: user, assistant(merged), user, user .
748- assert_eq ! ( msgs. len( ) , 4 ) ;
749+ // Should produce: user, assistant(merged), user(grouped tool results) .
750+ assert_eq ! ( msgs. len( ) , 3 ) ;
749751
750752 // Second message: assistant with text + both tool calls merged
751753 assert_eq ! ( msgs[ 1 ] . role, "assistant" ) ;
@@ -758,16 +760,14 @@ mod tests {
758760 matches!( & msgs[ 1 ] . content[ 2 ] , RequestContent :: ToolUse { id, .. } if id == "call-2" )
759761 ) ;
760762
761- // Third and fourth messages : user tool results stay distinct .
763+ // Third message : user tool results are grouped for provider adjacency .
762764 assert_eq ! ( msgs[ 2 ] . role, "user" ) ;
763- assert_eq ! ( msgs[ 2 ] . content. len( ) , 1 ) ;
765+ assert_eq ! ( msgs[ 2 ] . content. len( ) , 2 ) ;
764766 assert ! (
765767 matches!( & msgs[ 2 ] . content[ 0 ] , RequestContent :: ToolResult { tool_use_id, .. } if tool_use_id == "call-1" )
766768 ) ;
767- assert_eq ! ( msgs[ 3 ] . role, "user" ) ;
768- assert_eq ! ( msgs[ 3 ] . content. len( ) , 1 ) ;
769769 assert ! (
770- matches!( & msgs[ 3 ] . content[ 0 ] , RequestContent :: ToolResult { tool_use_id, .. } if tool_use_id == "call-2" )
770+ matches!( & msgs[ 2 ] . content[ 1 ] , RequestContent :: ToolResult { tool_use_id, .. } if tool_use_id == "call-2" )
771771 ) ;
772772 }
773773
0 commit comments