Skip to content

A2A inbound converters do not restore custom_metadata and drop metadata-only events #5185

@YizukiAme

Description

@YizukiAme

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

Metadata

Metadata

Labels

core[Component] This issue is related to the core interface and implementationneeds review[Status] The PR/issue is awaiting review from the maintainer

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions