@@ -630,6 +630,37 @@ def test_construct_message_parts_from_session_success(self):
630630 assert parts [0 ] == mock_a2a_part
631631 assert context_id is None
632632
633+ def test_construct_message_parts_from_session_user_input_metadata (self ):
634+ """Test that user input metadata is added for user messages."""
635+ mock_part = Mock ()
636+ mock_content = Mock ()
637+ mock_content .parts = [mock_part ]
638+
639+ mock_event = Mock ()
640+ mock_event .content = mock_content
641+ mock_event .author = "user"
642+ mock_event .custom_metadata = None
643+
644+ self .mock_session .events = [mock_event ]
645+
646+ with patch (
647+ "google.adk.agents.remote_a2a_agent._present_other_agent_message"
648+ ) as mock_convert :
649+ mock_convert .return_value = mock_event
650+
651+ mock_a2a_part = Mock ()
652+ mock_a2a_part .root = Mock ()
653+ mock_a2a_part .root .metadata = {}
654+ self .mock_genai_part_converter .return_value = mock_a2a_part
655+
656+ parts , _ = self .agent ._construct_message_parts_from_session (
657+ self .mock_context
658+ )
659+
660+ assert len (parts ) == 1
661+ assert parts [0 ] == mock_a2a_part
662+ assert parts [0 ].root .metadata .get ("is_user_input" ) is True
663+
633664 def test_construct_message_parts_from_session_success_multiple_parts (self ):
634665 """Test successful message parts construction from session."""
635666 # Mock event with text content
@@ -717,6 +748,8 @@ def test_construct_message_parts_from_session_stops_on_agent_reply(self):
717748 def mock_converter (part ):
718749 mock_a2a_part = Mock ()
719750 mock_a2a_part .text = part .text
751+ mock_a2a_part .root = Mock ()
752+ mock_a2a_part .root .metadata = {}
720753 return mock_a2a_part
721754
722755 self .mock_genai_part_converter .side_effect = mock_converter
@@ -767,6 +800,8 @@ def test_construct_message_parts_from_session_stateless_full_history(self):
767800 def mock_converter (part ):
768801 mock_a2a_part = Mock ()
769802 mock_a2a_part .text = part .text
803+ mock_a2a_part .root = Mock ()
804+ mock_a2a_part .root .metadata = {}
770805 return mock_a2a_part
771806
772807 self .mock_genai_part_converter .side_effect = mock_converter
@@ -822,6 +857,8 @@ def test_construct_message_parts_from_session_stateful_partial_history(self):
822857 def mock_converter (part ):
823858 mock_a2a_part = Mock ()
824859 mock_a2a_part .text = part .text
860+ mock_a2a_part .root = Mock ()
861+ mock_a2a_part .root .metadata = {}
825862 return mock_a2a_part
826863
827864 self .mock_genai_part_converter .side_effect = mock_converter
@@ -956,6 +993,8 @@ def test_construct_message_parts_from_session_preserves_order(self):
956993 def mock_converter (part ):
957994 mock_a2a_part = Mock ()
958995 mock_a2a_part .original_text = part .text
996+ mock_a2a_part .root = Mock ()
997+ mock_a2a_part .root .metadata = {}
959998 converted_parts .append (mock_a2a_part )
960999 return mock_a2a_part
9611000
0 commit comments