3636 TaskStatusUpdateEvent ,
3737)
3838from a2a .utils .errors import (
39+ InvalidAgentResponseError ,
3940 InvalidParamsError ,
4041 TaskNotFoundError ,
4142)
@@ -370,13 +371,12 @@ async def _run_consumer(self) -> None: # noqa: PLR0915, PLR0912
370371 elif isinstance (event , Message ):
371372 if task_mode is not None :
372373 if task_mode :
373- logger .error (
374- 'Received Message() object in task mode.'
375- )
376- else :
377- logger .error (
378- 'Multiple Message() objects received.'
374+ raise InvalidAgentResponseError (
375+ 'Received Message object in task mode. Use TaskStatusUpdateEvent or TaskArtifactUpdateEvent instead.'
379376 )
377+ raise InvalidAgentResponseError (
378+ 'Multiple Message objects received.'
379+ )
380380 task_mode = False
381381 logger .debug (
382382 'Consumer[%s]: Setting result to Message: %s' ,
@@ -385,9 +385,8 @@ async def _run_consumer(self) -> None: # noqa: PLR0915, PLR0912
385385 )
386386 else :
387387 if task_mode is False :
388- logger .error (
389- 'Received %s in message mode.' ,
390- type (event ).__name__ ,
388+ raise InvalidAgentResponseError (
389+ f'Received { type (event ).__name__ } in message mode. Use Task with TaskStatusUpdateEvent and TaskArtifactUpdateEvent instead.'
391390 )
392391
393392 if isinstance (event , Task ):
@@ -408,6 +407,18 @@ async def _run_consumer(self) -> None: # noqa: PLR0915, PLR0912
408407 # Initial task should already contain the message.
409408 message_to_save = None
410409 else :
410+ if (
411+ isinstance (event , TaskStatusUpdateEvent )
412+ and not self ._task_created .is_set ()
413+ ):
414+ task = (
415+ await self ._task_manager .get_task ()
416+ )
417+ if task is None :
418+ raise InvalidAgentResponseError (
419+ f'Agent should enqueue Task before { type (event ).__name__ } event'
420+ )
421+
411422 new_task = (
412423 await self ._task_manager .ensure_task_id (
413424 self ._task_id ,
@@ -434,8 +445,6 @@ async def _run_consumer(self) -> None: # noqa: PLR0915, PLR0912
434445 if not isinstance (event , Task ):
435446 await self ._task_manager .process (event )
436447
437- self ._task_created .set ()
438-
439448 # Check for AUTH_REQUIRED or INPUT_REQUIRED or TERMINAL states
440449 new_task = await self ._task_manager .get_task ()
441450 if new_task is None :
@@ -496,6 +505,9 @@ async def _run_consumer(self) -> None: # noqa: PLR0915, PLR0912
496505 await self ._push_sender .send_notification (
497506 self ._task_id , event
498507 )
508+
509+ self ._task_created .set ()
510+
499511 finally :
500512 if new_task is not None :
501513 new_task_copy = Task ()
0 commit comments