Bug Description
The public inbound converters convert_a2a_message_to_event() and convert_a2a_task_to_event() in to_adk_event.py only restore actions from A2A metadata. Other ADK event metadata fields (custom_metadata, usage_metadata, error_code, long_running_tool_ids, etc.) are silently dropped.
Additionally, _create_event() returns None when there are no parts and no actions, even if event_metadata is present. This means metadata-only A2A messages are discarded entirely.
Steps to Reproduce
from a2a.types import Message, Part, TextPart, Role
msg = Message(
role=Role.agent,
parts=[],
metadata={"adk_custom_metadata": {"flag": True}}
)
event = convert_a2a_message_to_event(msg, author="agent")
assert event is not None # FAILS — metadata-only message silently dropped
Expected Behavior
custom_metadata, usage_metadata, and other semantic metadata fields should be restored on the resulting Event
- Metadata-only messages (no content parts, but valid metadata) should produce a valid
Event with content=None
Affected Files
src/google/adk/a2a/converters/to_adk_event.py
Bug Description
The public inbound converters
convert_a2a_message_to_event()andconvert_a2a_task_to_event()into_adk_event.pyonly restoreactionsfrom A2A metadata. Other ADK event metadata fields (custom_metadata,usage_metadata,error_code,long_running_tool_ids, etc.) are silently dropped.Additionally,
_create_event()returnsNonewhen there are nopartsand noactions, even ifevent_metadatais present. This means metadata-only A2A messages are discarded entirely.Steps to Reproduce
Expected Behavior
custom_metadata,usage_metadata, and other semantic metadata fields should be restored on the resultingEventEventwithcontent=NoneAffected Files
src/google/adk/a2a/converters/to_adk_event.py