Skip to content

fix(a2a): drop unparseable A2A metadata instead of aborting conversion - #1401

Open
copybara-service[bot] wants to merge 1 commit into
mainfrom
test_958968673
Open

fix(a2a): drop unparseable A2A metadata instead of aborting conversion#1401
copybara-service[bot] wants to merge 1 commit into
mainfrom
test_958968673

Conversation

@copybara-service

Copy link
Copy Markdown

fix(a2a): drop unparseable A2A metadata instead of aborting conversion

ResponseConverter.parseMetadata rethrew every deserialization failure as
IllegalArgumentException, which propagated out of taskToEvent,
messageToEvent and handleTaskUpdate. Because adk_grounding_metadata,
adk_usage_metadata, adk_custom_metadata and adk_error_code are all
peer-controlled, any A2A peer could deterministically fail the calling agent's
turn with a single unparseable value. Log at WARN and drop the offending field
instead, so auxiliary telemetry cannot take down the whole conversion.

This reverses a contract that cl/881389811 pinned with
taskToEvent_withInvalidMetadata_throwsException. That test is inverted rather
than deleted so the behaviour change is explicit in review. The tradeoff is that
EventConverter writes these same keys on the send side, so a parse failure can
also mean our own serialization broke - that signal moves from an exception to a
WARN log rather than disappearing.

`ResponseConverter.parseMetadata` rethrew every deserialization failure as
`IllegalArgumentException`, which propagated out of `taskToEvent`,
`messageToEvent` and `handleTaskUpdate`. Because `adk_grounding_metadata`,
`adk_usage_metadata`, `adk_custom_metadata` and `adk_error_code` are all
peer-controlled, any A2A peer could deterministically fail the calling agent's
turn with a single unparseable value. Log at WARN and drop the offending field
instead, so auxiliary telemetry cannot take down the whole conversion.

This reverses a contract that cl/881389811 pinned with
`taskToEvent_withInvalidMetadata_throwsException`. That test is inverted rather
than deleted so the behaviour change is explicit in review. The tradeoff is that
`EventConverter` writes these same keys on the send side, so a parse failure can
also mean our own serialization broke - that signal moves from an exception to a
WARN log rather than disappearing.

PiperOrigin-RevId: 958968673
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant