diff --git a/src/google/adk/a2a/converters/to_adk_event.py b/src/google/adk/a2a/converters/to_adk_event.py index 46cf2b46eec..9b5a3f8f684 100644 --- a/src/google/adk/a2a/converters/to_adk_event.py +++ b/src/google/adk/a2a/converters/to_adk_event.py @@ -661,6 +661,7 @@ def convert_a2a_message_to_event( _extract_event_actions(a2a_message.metadata), long_running_function_ids, content_role=content_role, + allow_empty_event=any(metadata_fields.values()), **metadata_fields, ) diff --git a/tests/unittests/a2a/converters/test_to_adk.py b/tests/unittests/a2a/converters/test_to_adk.py index 85ddafb6831..541d52063d5 100644 --- a/tests/unittests/a2a/converters/test_to_adk.py +++ b/tests/unittests/a2a/converters/test_to_adk.py @@ -191,6 +191,26 @@ def test_convert_a2a_message_to_event_returns_action_only_event(self): assert event.actions.escalate is True assert event.content is None + def test_convert_a2a_message_to_event_returns_metadata_only_event(self): + """Test A2A message conversion keeps events with only custom metadata.""" + message = Message( + message_id="msg-1", + role=_compat.ROLE_AGENT, + parts=[], + metadata={_get_adk_metadata_key("custom_metadata"): {"flag": True}}, + ) + + event = convert_a2a_message_to_event( + message, + author="test-author", + invocation_context=self.mock_context, + part_converter=Mock(), + ) + + assert event is not None + assert event.custom_metadata == {"flag": True} + assert event.content is None + def test_convert_a2a_task_to_event_success(self): """Test successful conversion of A2A task to Event.""" a2a_part = _make_a2a_part_for_test({})