@@ -614,10 +614,10 @@ def test_empty_message_list(self):
614614 def test_message_with_empty_content (self ):
615615 """Test handling of messages with empty content
616616
617- In Gemini message history, both empty parts list and empty string text parts
618- for model messages are valid and won't cause communication errors .
617+ Assistant messages with empty parts are filtered out to avoid invalid requests.
618+ This ensures clean message history for Gemini API calls .
619619 """
620- # Test case 1: Assistant message with empty string content
620+ # Test case 1: Assistant message with empty string content is filtered out
621621 messages = [
622622 AssistantPromptMessage (content = "" ),
623623 UserPromptMessage (content = "Hello" ),
@@ -629,14 +629,12 @@ def test_message_with_empty_content(self):
629629 config = self .mock_config ,
630630 )
631631
632- # Empty string content creates an empty parts list, which is valid for Gemini
633- assert len (contents ) == 2
634- assert contents [0 ].role == "model"
635- assert contents [0 ].parts == [] # Empty parts list is valid
636- assert contents [1 ].role == "user"
637- assert contents [1 ].parts [0 ].text == "Hello"
632+ # Empty assistant message is filtered out, only user message remains
633+ assert len (contents ) == 1
634+ assert contents [0 ].role == "user"
635+ assert contents [0 ].parts [0 ].text == "Hello"
638636
639- # Test case 2: Assistant message with only thinking tags (results in empty content after removal)
637+ # Test case 2: Assistant message with only thinking tags is filtered out
640638 messages = [
641639 AssistantPromptMessage (content = "<think>Internal thoughts only</think>" ),
642640 UserPromptMessage (content = "Hi" ),
@@ -648,14 +646,12 @@ def test_message_with_empty_content(self):
648646 config = self .mock_config ,
649647 )
650648
651- # After removing thinking tags, content is empty - creates empty parts list
652- assert len (contents ) == 2
653- assert contents [0 ].role == "model"
654- assert contents [0 ].parts == [] # Empty parts list after thinking tag removal
655- assert contents [1 ].role == "user"
656- assert contents [1 ].parts [0 ].text == "Hi"
649+ # After removing thinking tags, content is empty and filtered out
650+ assert len (contents ) == 1
651+ assert contents [0 ].role == "user"
652+ assert contents [0 ].parts [0 ].text == "Hi"
657653
658- # Test case 3: Mixed empty and non-empty assistant messages
654+ # Test case 3: Empty assistant message is filtered, non-empty one is kept
659655 messages = [
660656 UserPromptMessage (content = "Question" ),
661657 AssistantPromptMessage (content = "" ),
@@ -669,14 +665,12 @@ def test_message_with_empty_content(self):
669665 config = self .mock_config ,
670666 )
671667
672- # Should have 3 contents - consecutive assistant messages are merged
668+ # Empty assistant message filtered out, remaining messages properly ordered
673669 assert len (contents ) == 3
674670 assert contents [0 ].role == "user"
675671 assert contents [0 ].parts [0 ].text == "Question"
676672 assert contents [1 ].role == "model"
677- assert (
678- len (contents [1 ].parts ) == 1
679- ) # Empty content doesn't add parts, only "Actual response" does
673+ assert len (contents [1 ].parts ) == 1
680674 assert contents [1 ].parts [0 ].text == "Actual response"
681675 assert contents [2 ].role == "user"
682676 assert contents [2 ].parts [0 ].text == "Thanks"
0 commit comments