Skip to content

Commit dd9a4b6

Browse files
giles17CopilotCopilot
authored
Python: [A2A] Set message_id on AgentResponseUpdate for message-bearing paths (#6163)
Map A2A protocol message_id to AgentResponseUpdate.message_id in two paths where it was previously omitted, aligning with .NET behavior: 1. Standalone A2AMessage: set message_id=msg.message_id (matches .NET ConvertToAgentResponseUpdate(Message) which sets both ResponseId and MessageId to message.MessageId) 2. TaskStatusUpdateEvent (terminal/input_required): set message_id=message.message_id (matches .NET which sets MessageId=statusUpdateEvent.Status.Message?.MessageId) Fixes #5949 Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e8ff541 commit dd9a4b6

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

python/packages/a2a/agent_framework_a2a/_agent.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ async def _map_a2a_stream(
492492
contents=contents,
493493
role="assistant" if msg.role == A2ARole.ROLE_AGENT else "user",
494494
response_id=msg.message_id or str(uuid.uuid4()),
495+
message_id=msg.message_id,
495496
additional_properties={"a2a_metadata": metadata} if metadata else None,
496497
raw_representation=msg,
497498
)
@@ -732,6 +733,7 @@ def _updates_from_task_update_event(
732733
contents=contents,
733734
role="assistant" if message.role == A2ARole.ROLE_AGENT else "user",
734735
response_id=update_event.task_id,
736+
message_id=message.message_id,
735737
additional_properties={"a2a_metadata": merged_metadata} if merged_metadata else None,
736738
raw_representation=update_event,
737739
)

python/packages/a2a/tests/test_a2a_agent.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ async def test_run_streaming_with_message_response(a2a_agent: A2AAgent, mock_a2a
420420
assert content.text == "Streaming response from agent!"
421421

422422
assert updates[0].response_id == "msg-stream-123"
423+
assert updates[0].message_id == "msg-stream-123"
423424
assert mock_a2a_client.call_count == 1
424425

425426

@@ -1422,7 +1423,7 @@ async def test_streaming_status_update_event_yields_content(
14221423
status=TaskStatus(
14231424
state=TaskState.TASK_STATE_COMPLETED,
14241425
message=A2AMessage(
1425-
message_id=str(uuid4()),
1426+
message_id="msg-status-done",
14261427
role=A2ARole.ROLE_AGENT,
14271428
parts=[Part(text="Done")],
14281429
),
@@ -1437,6 +1438,7 @@ async def test_streaming_status_update_event_yields_content(
14371438
assert len(updates) == 1
14381439
assert updates[0].text == "Done"
14391440
assert updates[0].role == "assistant"
1441+
assert updates[0].message_id == "msg-status-done"
14401442
assert updates[0].raw_representation == update_event
14411443

14421444

@@ -1449,7 +1451,7 @@ async def test_streaming_input_required_emits_content(a2a_agent: A2AAgent, mock_
14491451
status=TaskStatus(
14501452
state=TaskState.TASK_STATE_INPUT_REQUIRED,
14511453
message=A2AMessage(
1452-
message_id=str(uuid4()),
1454+
message_id="msg-input-req",
14531455
role=A2ARole.ROLE_AGENT,
14541456
parts=[Part(text="What is your name?")],
14551457
),
@@ -1463,6 +1465,7 @@ async def test_streaming_input_required_emits_content(a2a_agent: A2AAgent, mock_
14631465

14641466
assert len(updates) == 1
14651467
assert updates[0].text == "What is your name?"
1468+
assert updates[0].message_id == "msg-input-req"
14661469

14671470

14681471
@mark.asyncio

0 commit comments

Comments
 (0)