google / google/adk-python

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

Open
#5,185 2 comments 0 reactions 3 assignees Claimed by @GWeale View on GitHub
core needs review
Dominant language
Python
Stars
21.5k
Forks
4k
Avg merge
1d 14h
Merged PRs (30d)
37

Description

## 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

```python
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`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.