Skip to content

Commit 702616f

Browse files
committed
robustify agent cleanup with improved error handling, all quality pass
1 parent 8c9eeed commit 702616f

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

src/a2a/server/request_handlers/default_request_handler.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
EventConsumer,
1717
EventQueue,
1818
InMemoryQueueManager,
19+
NoTaskQueue,
1920
QueueManager,
2021
)
2122
from a2a.server.request_handlers.request_handler import RequestHandler
@@ -50,12 +51,12 @@
5051

5152
logger = logging.getLogger(__name__)
5253

53-
TERMINAL_TASK_STATES = {
54+
TERMINAL_TASK_STATES = (
5455
TaskState.completed,
5556
TaskState.canceled,
5657
TaskState.failed,
5758
TaskState.rejected,
58-
}
59+
)
5960

6061

6162
@trace_class(kind=SpanKind.SERVER)
@@ -236,7 +237,8 @@ async def _setup_message_execution(
236237
request_context = await self._request_context_builder.build(
237238
params=params,
238239
task_id=task.id if task else None,
239-
context_id=params.message.context_id,
240+
context_id=params.message.context_id
241+
or (task.context_id if task else None),
240242
task=task,
241243
context=context,
242244
)
@@ -342,7 +344,11 @@ async def push_notification_callback() -> None:
342344
await self._cleanup_producer(producer_task, task_id)
343345

344346
if not result:
345-
raise ServerError(error=InternalError())
347+
raise ServerError(
348+
error=InternalError(
349+
message='Agent execution completed without producing a result.'
350+
)
351+
)
346352

347353
if isinstance(result, Task):
348354
self._validate_task_id_match(task_id, result.id)
@@ -435,8 +441,18 @@ async def _cleanup_producer(
435441
task_id: str,
436442
) -> None:
437443
"""Cleans up the agent execution task and queue manager entry."""
438-
await producer_task
439-
await self._queue_manager.close(task_id)
444+
try:
445+
await producer_task
446+
except Exception:
447+
# Task exceptions are already handled via logger and _track_background_task
448+
pass
449+
450+
try:
451+
await self._queue_manager.close(task_id)
452+
except NoTaskQueue:
453+
# Already closed by another request handler for the same task.
454+
pass
455+
440456
async with self._running_agents_lock:
441457
self._running_agents.pop(task_id, None)
442458

0 commit comments

Comments
 (0)