Skip to content

Commit a5cf80b

Browse files
google-genai-botcopybara-github
authored andcommitted
fix: Handling of A2ATaskStatusUpdateEvent when streaming in remote_a2a_agent
The proto has the Message object in the TaskStatus. PiperOrigin-RevId: 813844289
1 parent 29968d4 commit a5cf80b

2 files changed

Lines changed: 21 additions & 10 deletions

File tree

src/google/adk/agents/remote_a2a_agent.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,9 +414,14 @@ async def _handle_a2a_response(
414414
# response for a non-streaming task, which is the full task state.
415415
# We process this to get the initial message.
416416
event = convert_a2a_task_to_event(task, self.name, ctx)
417-
elif isinstance(update, A2ATaskStatusUpdateEvent) and update.message:
417+
elif (
418+
isinstance(update, A2ATaskStatusUpdateEvent)
419+
and update.status.message
420+
):
418421
# This is a streaming task status update with a message.
419-
event = convert_a2a_message_to_event(update.message, self.name, ctx)
422+
event = convert_a2a_message_to_event(
423+
update.status.message, self.name, ctx
424+
)
420425
elif isinstance(update, A2ATaskArtifactUpdateEvent) and (
421426
not update.append or update.last_chunk
422427
):

tests/unittests/agents/test_remote_a2a_agent.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
from a2a.types import SendMessageSuccessResponse
4545
from a2a.types import Task as A2ATask
4646
from a2a.types import TaskArtifactUpdateEvent
47+
from a2a.types import TaskState
48+
from a2a.types import TaskStatus
4749
from a2a.types import TaskStatusUpdateEvent
4850
from google.adk.agents.invocation_context import InvocationContext
4951
from google.adk.agents.remote_a2a_agent import A2A_METADATA_PREFIX
@@ -733,8 +735,9 @@ async def test_handle_a2a_response_with_task_status_update_with_message(self):
733735

734736
mock_a2a_message = Mock(spec=A2AMessage)
735737
mock_update = Mock(spec=TaskStatusUpdateEvent)
736-
mock_update.message = mock_a2a_message
737-
mock_update.status = "COMPLETED"
738+
mock_update.status = Mock(TaskStatus)
739+
mock_update.status.state = TaskState.completed
740+
mock_update.status.message = mock_a2a_message
738741

739742
# Create a proper Event mock that can handle custom_metadata
740743
mock_event = Event(
@@ -770,8 +773,9 @@ async def test_handle_a2a_response_with_task_status_update_no_message(self):
770773
mock_a2a_task.id = "task-123"
771774

772775
mock_update = Mock(spec=TaskStatusUpdateEvent)
773-
mock_update.message = None
774-
mock_update.status = "COMPLETED"
776+
mock_update.status = Mock(TaskStatus)
777+
mock_update.status.state = TaskState.completed
778+
mock_update.status.message = None
775779

776780
result = await self.agent._handle_a2a_response(
777781
(mock_a2a_task, mock_update), self.mock_context
@@ -1021,8 +1025,9 @@ async def test_handle_a2a_response_with_task_status_update_with_message(self):
10211025

10221026
mock_a2a_message = Mock(spec=A2AMessage)
10231027
mock_update = Mock(spec=TaskStatusUpdateEvent)
1024-
mock_update.message = mock_a2a_message
1025-
mock_update.status = "COMPLETED"
1028+
mock_update.status = Mock(TaskStatus)
1029+
mock_update.status.state = TaskState.completed
1030+
mock_update.status.message = mock_a2a_message
10261031

10271032
# Create a proper Event mock that can handle custom_metadata
10281033
mock_event = Event(
@@ -1058,8 +1063,9 @@ async def test_handle_a2a_response_with_task_status_update_no_message(self):
10581063
mock_a2a_task.id = "task-123"
10591064

10601065
mock_update = Mock(spec=TaskStatusUpdateEvent)
1061-
mock_update.message = None
1062-
mock_update.status = "COMPLETED"
1066+
mock_update.status = Mock(TaskStatus)
1067+
mock_update.status.state = TaskState.completed
1068+
mock_update.status.message = None
10631069

10641070
result = await self.agent._handle_a2a_response(
10651071
(mock_a2a_task, mock_update), self.mock_context

0 commit comments

Comments
 (0)