From e59929e11a56aaee7bb0c45cd4c9d9fef689548c Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Wed, 25 Feb 2026 06:22:56 -0800 Subject: [PATCH] fix: Propagate thought from A2A TextPart metadata to GenAI Part When converting an A2A TextPart to a GenAI Part, extract the 'thought' field from the TextPart's metadata and include it in the GenAI Part. PiperOrigin-RevId: 875129430 --- .../adk/a2a/converters/part_converter.py | 5 ++++- .../a2a/converters/test_part_converter.py | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/google/adk/a2a/converters/part_converter.py b/src/google/adk/a2a/converters/part_converter.py index 72dbcb21..7b501f75 100644 --- a/src/google/adk/a2a/converters/part_converter.py +++ b/src/google/adk/a2a/converters/part_converter.py @@ -61,7 +61,10 @@ def convert_a2a_part_to_genai_part( """Convert an A2A Part to a Google GenAI Part.""" part = a2a_part.root if isinstance(part, a2a_types.TextPart): - return genai_types.Part(text=part.text) + thought = None + if part.metadata: + thought = part.metadata.get(_get_adk_metadata_key('thought')) + return genai_types.Part(text=part.text, thought=thought) if isinstance(part, a2a_types.FilePart): if isinstance(part.file, a2a_types.FileWithUri): diff --git a/tests/unittests/a2a/converters/test_part_converter.py b/tests/unittests/a2a/converters/test_part_converter.py index 647caa5b..ec611fba 100644 --- a/tests/unittests/a2a/converters/test_part_converter.py +++ b/tests/unittests/a2a/converters/test_part_converter.py @@ -289,7 +289,7 @@ class TestConvertGenaiPartToA2aPart: assert isinstance(result.root, a2a_types.TextPart) assert result.root.text == "Hello, world!" assert result.root.metadata is not None - assert result.root.metadata[_get_adk_metadata_key("thought")] == True + assert result.root.metadata[_get_adk_metadata_key("thought")] def test_convert_file_data_part(self): """Test conversion of GenAI file_data Part to A2A Part.""" @@ -516,6 +516,22 @@ class TestRoundTripConversions: assert isinstance(result_a2a_part.root, a2a_types.TextPart) assert result_a2a_part.root.text == original_text + def test_text_part_with_thought_round_trip(self): + """Test round-trip conversion for text parts with thought.""" + # Arrange + original_text = "Thinking..." + genai_part = genai_types.Part(text=original_text, thought=True) + + # Act + a2a_part = convert_genai_part_to_a2a_part(genai_part) + result_genai_part = convert_a2a_part_to_genai_part(a2a_part) + + # Assert + assert result_genai_part is not None + assert isinstance(result_genai_part, genai_types.Part) + assert result_genai_part.text == original_text + assert result_genai_part.thought + def test_file_uri_round_trip(self): """Test round-trip conversion for file parts with URI.""" # Arrange