Skip to content

Commit c7d5610

Browse files
holtskinnercopybara-github
authored andcommitted
chore: Update a2a-sdk to 0.2.16
Convert a2a types to use snake_case fields https://github.com/a2aproject/a2a-python/releases/tag/v0.2.16 PiperOrigin-RevId: 785880039
1 parent d4f01af commit c7d5610

File tree

14 files changed

+195
-193
lines changed

14 files changed

+195
-193
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ dev = [
8080

8181
a2a = [
8282
# go/keep-sorted start
83-
"a2a-sdk>=0.2.11;python_version>='3.10'"
83+
"a2a-sdk>=0.2.16;python_version>='3.10'"
8484
# go/keep-sorted end
8585
]
8686

src/google/adk/a2a/converters/event_converter.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def convert_a2a_task_to_event(
193193
message = None
194194
if a2a_task.artifacts:
195195
message = Message(
196-
messageId="", role=Role.agent, parts=a2a_task.artifacts[-1].parts
196+
message_id="", role=Role.agent, parts=a2a_task.artifacts[-1].parts
197197
)
198198
elif a2a_task.status and a2a_task.status.message:
199199
message = a2a_task.status.message
@@ -353,7 +353,7 @@ def convert_event_to_a2a_message(
353353
_process_long_running_tool(a2a_part, event)
354354

355355
if a2a_parts:
356-
return Message(messageId=str(uuid.uuid4()), role=role, parts=a2a_parts)
356+
return Message(message_id=str(uuid.uuid4()), role=role, parts=a2a_parts)
357357

358358
except Exception as e:
359359
logger.error("Failed to convert event to status message: %s", e)
@@ -387,13 +387,13 @@ def _create_error_status_event(
387387
event_metadata[_get_adk_metadata_key("error_code")] = str(event.error_code)
388388

389389
return TaskStatusUpdateEvent(
390-
taskId=task_id,
391-
contextId=context_id,
390+
task_id=task_id,
391+
context_id=context_id,
392392
metadata=event_metadata,
393393
status=TaskStatus(
394394
state=TaskState.failed,
395395
message=Message(
396-
messageId=str(uuid.uuid4()),
396+
message_id=str(uuid.uuid4()),
397397
role=Role.agent,
398398
parts=[TextPart(text=error_message)],
399399
metadata={
@@ -463,8 +463,8 @@ def _create_status_update_event(
463463
status.state = TaskState.input_required
464464

465465
return TaskStatusUpdateEvent(
466-
taskId=task_id,
467-
contextId=context_id,
466+
task_id=task_id,
467+
context_id=context_id,
468468
status=status,
469469
metadata=_get_context_metadata(event, invocation_context),
470470
final=False,

src/google/adk/a2a/converters/part_converter.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ def convert_a2a_part_to_genai_part(
6464
if isinstance(part.file, a2a_types.FileWithUri):
6565
return genai_types.Part(
6666
file_data=genai_types.FileData(
67-
file_uri=part.file.uri, mime_type=part.file.mimeType
67+
file_uri=part.file.uri, mime_type=part.file.mime_type
6868
)
6969
)
7070

7171
elif isinstance(part.file, a2a_types.FileWithBytes):
7272
return genai_types.Part(
7373
inline_data=genai_types.Blob(
7474
data=base64.b64decode(part.file.bytes),
75-
mime_type=part.file.mimeType,
75+
mime_type=part.file.mime_type,
7676
)
7777
)
7878
else:
@@ -157,7 +157,7 @@ def convert_genai_part_to_a2a_part(
157157
root=a2a_types.FilePart(
158158
file=a2a_types.FileWithUri(
159159
uri=part.file_data.file_uri,
160-
mimeType=part.file_data.mime_type,
160+
mime_type=part.file_data.mime_type,
161161
)
162162
)
163163
)
@@ -166,7 +166,7 @@ def convert_genai_part_to_a2a_part(
166166
a2a_part = a2a_types.FilePart(
167167
file=a2a_types.FileWithBytes(
168168
bytes=base64.b64encode(part.inline_data.data).decode('utf-8'),
169-
mimeType=part.inline_data.mime_type,
169+
mime_type=part.inline_data.mime_type,
170170
)
171171
)
172172

src/google/adk/a2a/executor/a2a_agent_executor.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,13 @@ async def execute(
133133
if not context.current_task:
134134
await event_queue.enqueue_event(
135135
TaskStatusUpdateEvent(
136-
taskId=context.task_id,
136+
task_id=context.task_id,
137137
status=TaskStatus(
138138
state=TaskState.submitted,
139139
message=context.message,
140140
timestamp=datetime.now(timezone.utc).isoformat(),
141141
),
142-
contextId=context.context_id,
142+
context_id=context.context_id,
143143
final=False,
144144
)
145145
)
@@ -153,17 +153,17 @@ async def execute(
153153
try:
154154
await event_queue.enqueue_event(
155155
TaskStatusUpdateEvent(
156-
taskId=context.task_id,
156+
task_id=context.task_id,
157157
status=TaskStatus(
158158
state=TaskState.failed,
159159
timestamp=datetime.now(timezone.utc).isoformat(),
160160
message=Message(
161-
messageId=str(uuid.uuid4()),
161+
message_id=str(uuid.uuid4()),
162162
role=Role.agent,
163163
parts=[TextPart(text=str(e))],
164164
),
165165
),
166-
contextId=context.context_id,
166+
context_id=context.context_id,
167167
final=True,
168168
)
169169
)
@@ -196,12 +196,12 @@ async def _handle_request(
196196
# publish the task working event
197197
await event_queue.enqueue_event(
198198
TaskStatusUpdateEvent(
199-
taskId=context.task_id,
199+
task_id=context.task_id,
200200
status=TaskStatus(
201201
state=TaskState.working,
202202
timestamp=datetime.now(timezone.utc).isoformat(),
203203
),
204-
contextId=context.context_id,
204+
context_id=context.context_id,
205205
final=False,
206206
metadata={
207207
_get_adk_metadata_key('app_name'): runner.app_name,
@@ -229,37 +229,37 @@ async def _handle_request(
229229
# the final result according to a2a protocol.
230230
await event_queue.enqueue_event(
231231
TaskArtifactUpdateEvent(
232-
taskId=context.task_id,
233-
lastChunk=True,
234-
contextId=context.context_id,
232+
task_id=context.task_id,
233+
last_chunk=True,
234+
context_id=context.context_id,
235235
artifact=Artifact(
236-
artifactId=str(uuid.uuid4()),
236+
artifact_id=str(uuid.uuid4()),
237237
parts=task_result_aggregator.task_status_message.parts,
238238
),
239239
)
240240
)
241241
# public the final status update event
242242
await event_queue.enqueue_event(
243243
TaskStatusUpdateEvent(
244-
taskId=context.task_id,
244+
task_id=context.task_id,
245245
status=TaskStatus(
246246
state=TaskState.completed,
247247
timestamp=datetime.now(timezone.utc).isoformat(),
248248
),
249-
contextId=context.context_id,
249+
context_id=context.context_id,
250250
final=True,
251251
)
252252
)
253253
else:
254254
await event_queue.enqueue_event(
255255
TaskStatusUpdateEvent(
256-
taskId=context.task_id,
256+
task_id=context.task_id,
257257
status=TaskStatus(
258258
state=task_result_aggregator.task_state,
259259
timestamp=datetime.now(timezone.utc).isoformat(),
260260
message=task_result_aggregator.task_status_message,
261261
),
262-
contextId=context.context_id,
262+
context_id=context.context_id,
263263
final=True,
264264
)
265265
)

src/google/adk/a2a/logs/log_utils.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,10 @@ def build_a2a_request_log(req: SendMessageRequest) -> str:
172172
JSON-RPC: {req.jsonrpc}
173173
-----------------------------------------------------------
174174
Message:
175-
ID: {req.params.message.messageId}
175+
ID: {req.params.message.message_id}
176176
Role: {req.params.message.role}
177-
Task ID: {req.params.message.taskId}
178-
Context ID: {req.params.message.contextId}{message_metadata_section}
177+
Task ID: {req.params.message.task_id}
178+
Context ID: {req.params.message.context_id}{message_metadata_section}
179179
-----------------------------------------------------------
180180
Message Parts:
181181
{_NEW_LINE.join(message_parts_logs) if message_parts_logs else "No parts"}
@@ -221,7 +221,7 @@ def build_a2a_response_log(resp: SendMessageResponse) -> str:
221221
if _is_a2a_task(result):
222222
result_details.extend([
223223
f"Task ID: {result.id}",
224-
f"Context ID: {result.contextId}",
224+
f"Context ID: {result.context_id}",
225225
f"Status State: {result.status.state}",
226226
f"Status Timestamp: {result.status.timestamp}",
227227
f"History Length: {len(result.history) if result.history else 0}",
@@ -238,10 +238,10 @@ def build_a2a_response_log(resp: SendMessageResponse) -> str:
238238

239239
elif _is_a2a_message(result):
240240
result_details.extend([
241-
f"Message ID: {result.messageId}",
241+
f"Message ID: {result.message_id}",
242242
f"Role: {result.role}",
243-
f"Task ID: {result.taskId}",
244-
f"Context ID: {result.contextId}",
243+
f"Task ID: {result.task_id}",
244+
f"Context ID: {result.context_id}",
245245
])
246246

247247
# Add message parts
@@ -288,10 +288,10 @@ def build_a2a_response_log(resp: SendMessageResponse) -> str:
288288
Metadata:
289289
{json.dumps(result.status.message.metadata, indent=2)}"""
290290

291-
status_message_section = f"""ID: {result.status.message.messageId}
291+
status_message_section = f"""ID: {result.status.message.message_id}
292292
Role: {result.status.message.role}
293-
Task ID: {result.status.message.taskId}
294-
Context ID: {result.status.message.contextId}
293+
Task ID: {result.status.message.task_id}
294+
Context ID: {result.status.message.context_id}
295295
Message Parts:
296296
{_NEW_LINE.join(status_parts_logs) if status_parts_logs else "No parts"}{status_metadata_section}"""
297297

@@ -317,10 +317,10 @@ def build_a2a_response_log(resp: SendMessageResponse) -> str:
317317

318318
history_logs.append(
319319
f"""Message {i + 1}:
320-
ID: {message.messageId}
320+
ID: {message.message_id}
321321
Role: {message.role}
322-
Task ID: {message.taskId}
323-
Context ID: {message.contextId}
322+
Task ID: {message.task_id}
323+
Context ID: {message.context_id}
324324
Message Parts:
325325
{_NEW_LINE.join(message_parts_logs) if message_parts_logs else " No parts"}{message_metadata_section}"""
326326
)

src/google/adk/a2a/utils/agent_card_builder.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ async def build(self) -> AgentCard:
9090
version=self._agent_version,
9191
capabilities=self._capabilities,
9292
skills=all_skills,
93-
defaultInputModes=['text/plain'],
94-
defaultOutputModes=['text/plain'],
95-
supportsAuthenticatedExtendedCard=False,
93+
default_input_modes=['text/plain'],
94+
default_output_modes=['text/plain'],
95+
supports_authenticated_extended_card=False,
9696
provider=self._provider,
97-
securitySchemes=self._security_schemes,
97+
security_schemes=self._security_schemes,
9898
)
9999
except Exception as e:
100100
raise RuntimeError(
@@ -125,8 +125,8 @@ async def _build_llm_agent_skills(agent: LlmAgent) -> List[AgentSkill]:
125125
name='model',
126126
description=agent_description,
127127
examples=agent_examples,
128-
inputModes=_get_input_modes(agent),
129-
outputModes=_get_output_modes(agent),
128+
input_modes=_get_input_modes(agent),
129+
output_modes=_get_output_modes(agent),
130130
tags=['llm'],
131131
)
132132
)
@@ -160,8 +160,8 @@ async def _build_sub_agent_skills(agent: BaseAgent) -> List[AgentSkill]:
160160
name=f'{sub_agent.name}: {skill.name}',
161161
description=skill.description,
162162
examples=skill.examples,
163-
inputModes=skill.inputModes,
164-
outputModes=skill.outputModes,
163+
input_modes=skill.input_modes,
164+
output_modes=skill.output_modes,
165165
tags=[f'sub_agent:{sub_agent.name}'] + (skill.tags or []),
166166
)
167167
sub_agent_skills.append(aggregated_skill)
@@ -197,8 +197,8 @@ async def _build_tool_skills(agent: LlmAgent) -> List[AgentSkill]:
197197
name=tool_name,
198198
description=getattr(tool, 'description', f'Tool: {tool_name}'),
199199
examples=None,
200-
inputModes=None,
201-
outputModes=None,
200+
input_modes=None,
201+
output_modes=None,
202202
tags=['llm', 'tools'],
203203
)
204204
)
@@ -213,8 +213,8 @@ def _build_planner_skill(agent: LlmAgent) -> AgentSkill:
213213
name='planning',
214214
description='Can think about the tasks to do and make plans',
215215
examples=None,
216-
inputModes=None,
217-
outputModes=None,
216+
input_modes=None,
217+
output_modes=None,
218218
tags=['llm', 'planning'],
219219
)
220220

@@ -226,8 +226,8 @@ def _build_code_executor_skill(agent: LlmAgent) -> AgentSkill:
226226
name='code-execution',
227227
description='Can execute codes',
228228
examples=None,
229-
inputModes=None,
230-
outputModes=None,
229+
input_modes=None,
230+
output_modes=None,
231231
tags=['llm', 'code_execution'],
232232
)
233233

@@ -250,8 +250,8 @@ async def _build_non_llm_agent_skills(agent: BaseAgent) -> List[AgentSkill]:
250250
name=agent_name,
251251
description=agent_description,
252252
examples=agent_examples,
253-
inputModes=_get_input_modes(agent),
254-
outputModes=_get_output_modes(agent),
253+
input_modes=_get_input_modes(agent),
254+
output_modes=_get_output_modes(agent),
255255
tags=[agent_type],
256256
)
257257
)
@@ -282,8 +282,8 @@ def _build_orchestration_skill(
282282
name='sub-agents',
283283
description='Orchestrates: ' + '; '.join(sub_agent_descriptions),
284284
examples=None,
285-
inputModes=None,
286-
outputModes=None,
285+
input_modes=None,
286+
output_modes=None,
287287
tags=[agent_type, 'orchestration'],
288288
)
289289

@@ -525,7 +525,7 @@ def _get_input_modes(agent: BaseAgent) -> Optional[List[str]]:
525525
return None
526526

527527
# This could be enhanced to check model capabilities
528-
# For now, return None to use defaultInputModes
528+
# For now, return None to use default_input_modes
529529
return None
530530

531531

0 commit comments

Comments
 (0)