What happened?
If you create a task when the agent receives a query and you want to return the response as a Message with the task associated, you will get the following error:
InvalidAgentResponseError: Received Message object in task mode. Use TaskStatusUpdateEvent or TaskArtifactUpdateEvent instead.
It looks an architectural decision but into specification we can associate a task with message.
My idea was to retrieve the Message when I run a single call and TaskArtifacts during streaming operation. The diagram flows inside the specification shows that you can associate a task to the Message.
Relevant log output
[ERROR] 2026-06-23 16:28:46 - Consumer[c5185e3b-e7b9-49d9-a078-85ee5c496b0d]: Failed (active_task:140)
Traceback (most recent call last):
File "a2a/server/agent_execution/active_task.py", line 132, in run
await self._process_event(event)
File "a2a/server/agent_execution/active_task.py", line 179, in _process_event
self._handle_message_event(event)
File "a2a/server/agent_execution/active_task.py", line 198, in _handle_message_event
raise InvalidAgentResponseError(
a2a.utils.errors.InvalidAgentResponseError: Received Message object in task mode. Use TaskStatusUpdateEvent or TaskArtifactUpdateEvent instead.
[ERROR] 2026-06-23 16:28:46 - Unhandled exception in v0.3 JSONRPCAdapter (jsonrpc_adapter:142)
Traceback (most recent call last):
File "a2a/compat/v0_3/jsonrpc_adapter.py", line 138, in handle_request
return await self._process_non_streaming_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "a2a/utils/version_validator.py", line 126, in async_wrapper
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "a2a/compat/v0_3/jsonrpc_adapter.py", line 157, in _process_non_streaming_request
res_msg = await self.handler.on_message_send(request_obj, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "a2a/compat/v0_3/request_handler.py", line 30, in on_message_send
task_or_message = await self.request_handler.on_message_send(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "a2a/utils/telemetry.py", line 242, in async_wrapper
result = await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "a2a/server/request_handlers/request_handler.py", line 285, in async_wrapper
return await method(self, params, context, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "a2a/server/request_handlers/default_request_handler_v2.py", line 242, in on_message_send
async for raw_event in active_task.subscribe(
File "a2a/server/agent_execution/active_task.py", line 639, in subscribe
raise event
File "a2a/server/agent_execution/active_task.py", line 132, in run
await self._process_event(event)
File "a2a/server/agent_execution/active_task.py", line 179, in _process_event
self._handle_message_event(event)
File "a2a/server/agent_execution/active_task.py", line 198, in _handle_message_event
raise InvalidAgentResponseError(
a2a.utils.errors.InvalidAgentResponseError: Received Message object in task mode. Use TaskStatusUpdateEvent or TaskArtifactUpdateEvent instead.
Code of Conduct
What happened?
If you create a task when the agent receives a query and you want to return the response as a Message with the task associated, you will get the following error:
InvalidAgentResponseError: Received Message object in task mode. Use TaskStatusUpdateEvent or TaskArtifactUpdateEvent instead.It looks an architectural decision but into specification we can associate a task with message.
My idea was to retrieve the Message when I run a single call and TaskArtifacts during streaming operation. The diagram flows inside the specification shows that you can associate a task to the Message.
Relevant log output
Code of Conduct