From 2d26d1d9731b4f0fdb5b5f5febc9dd8078587e81 Mon Sep 17 00:00:00 2001 From: Enjoy Kumawat Date: Wed, 8 Apr 2026 01:50:27 +0530 Subject: [PATCH] fix: guard against None converter results in RemoteA2aAgent Converter functions (convert_a2a_message_to_event, convert_a2a_task_to_event) return Optional[Event], but several handler paths in RemoteA2aAgent access attributes on the result without checking for None first. This causes AttributeError when a converter returns None (e.g., for empty messages or metadata-only events). Add `if not event: return None` guards at all four call sites in both the legacy and new-style response handlers. Github-Issue: #5187 --- src/google/adk/agents/remote_a2a_agent.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/google/adk/agents/remote_a2a_agent.py b/src/google/adk/agents/remote_a2a_agent.py index cbfbd61290..c617aa58b7 100644 --- a/src/google/adk/agents/remote_a2a_agent.py +++ b/src/google/adk/agents/remote_a2a_agent.py @@ -476,6 +476,8 @@ async def _handle_a2a_response( event = convert_a2a_message_to_event( update.status.message, self.name, ctx, self._a2a_part_converter ) + if not event: + return None if event.content is not None and update.status.state in ( TaskState.submitted, TaskState.working, @@ -501,6 +503,8 @@ async def _handle_a2a_response( # for now. return None + if not event: + return None event.custom_metadata = event.custom_metadata or {} event.custom_metadata[A2A_METADATA_PREFIX + "task_id"] = task.id if task.context_id: @@ -513,6 +517,8 @@ async def _handle_a2a_response( event = convert_a2a_message_to_event( a2a_response, self.name, ctx, self._a2a_part_converter ) + if not event: + return None event.custom_metadata = event.custom_metadata or {} if a2a_response.context_id: @@ -583,6 +589,8 @@ async def _handle_a2a_response_v2( event = self._config.a2a_message_converter( a2a_response, self.name, ctx, self._config.a2a_part_converter ) + if not event: + return None event.custom_metadata = event.custom_metadata or {} if a2a_response.context_id: