Commit 2316b83
fix: preserve metadata in A2A artifact updates
The A2A converter pipeline exhibited an architectural asymmetry regarding how event-level metadata is processed over the network. While the outbound converter (`from_adk_event.py`) correctly packs auxiliary metadata fields (`grounding_metadata`, `custom_metadata`, `usage_metadata`, and `error_code`) into the A2A artifact metadata layer, the inbound converter (`to_adk_event.py`) only reconstructed event actions natively, silently discarding the rest.
This change resolves the asymmetry by properly extracting these remaining metadata fields during `convert_a2a_artifact_update_to_event()`. A new resilient extractor (`_extract_genai_metadata`) is introduced to parse and strictly validate these structures (such as `GroundingMetadata` and `GenerateContentResponseUsageMetadata`) natively into their corresponding `google.genai` Pydantic models. We ensure backward compatibility and protect against malformed payloads by relying on graceful fallback defaults (`None`) when encountering incompatible raw payloads.
This ensures complete topological parity for A2A metadata serialization without impacting downstream ADK components unequipped to handle new fields.
PiperOrigin-RevId: 9520555141 parent 79ba5af commit 2316b83
2 files changed
Lines changed: 122 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
194 | 199 | | |
195 | 200 | | |
196 | 201 | | |
| |||
220 | 225 | | |
221 | 226 | | |
222 | 227 | | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
223 | 233 | | |
224 | 234 | | |
225 | 235 | | |
| |||
241 | 251 | | |
242 | 252 | | |
243 | 253 | | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
244 | 276 | | |
245 | 277 | | |
246 | 278 | | |
| |||
576 | 608 | | |
577 | 609 | | |
578 | 610 | | |
| 611 | + | |
579 | 612 | | |
580 | 613 | | |
581 | 614 | | |
582 | 615 | | |
583 | 616 | | |
584 | 617 | | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
585 | 633 | | |
586 | 634 | | |
587 | 635 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
| 30 | + | |
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
| |||
34 | 36 | | |
35 | 37 | | |
36 | 38 | | |
| 39 | + | |
37 | 40 | | |
38 | 41 | | |
39 | 42 | | |
| |||
680 | 683 | | |
681 | 684 | | |
682 | 685 | | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
0 commit comments