Skip to content

Commit e49be3c

Browse files
authored
Merge branch 'main' into feat/dns-aid-integration
2 parents c03e35c + 662354a commit e49be3c

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

src/google/adk/agents/remote_a2a_agent.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,11 @@ def _construct_message_parts_from_session(
422422
if not isinstance(converted_parts, list):
423423
converted_parts = [converted_parts] if converted_parts else []
424424

425+
if event.author == "user":
426+
for part in converted_parts:
427+
part.root.metadata = part.root.metadata or {}
428+
part.root.metadata["is_user_input"] = True
429+
425430
if converted_parts:
426431
message_parts.extend(converted_parts)
427432
else:

tests/unittests/agents/test_remote_a2a_agent.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)