From ff244fb723f79ae4e2319059020cb428fe18415c Mon Sep 17 00:00:00 2001 From: Hemasekhar Puchuginjala Date: Tue, 18 Aug 2026 16:21:09 +0530 Subject: [PATCH] fix: avoid setting Part.partMetadata when metadata is empty --- .../adk/a2a/converters/PartConverter.java | 8 ++++--- .../adk/a2a/converters/PartConverterTest.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java b/a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java index a905081b0..2ce250037 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java +++ b/a2a/src/main/java/com/google/adk/a2a/converters/PartConverter.java @@ -87,10 +87,12 @@ public static com.google.genai.types.Part toGenaiPart(io.a2a.spec.Part a2aPar com.google.genai.types.Part.Builder partBuilder = com.google.genai.types.Part.builder().text(textPart.getText()); if (textPart.getMetadata() != null) { - partBuilder.partMetadata(textPart.getMetadata()); if (Objects.equals(textPart.getMetadata().get("thought"), true)) { partBuilder.thought(true); } + if (!textPart.getMetadata().isEmpty()) { + partBuilder.partMetadata(textPart.getMetadata()); + } } return partBuilder.build(); } @@ -122,7 +124,7 @@ private static com.google.genai.types.Part convertFilePartToGenAiPart(FilePart f .fileUri(fileWithUri.uri()) .mimeType(fileWithUri.mimeType()) .build()); - if (metadata != null) { + if (metadata != null && !metadata.isEmpty()) { builder.partMetadata(metadata); } return builder.build(); @@ -137,7 +139,7 @@ private static com.google.genai.types.Part convertFilePartToGenAiPart(FilePart f com.google.genai.types.Part.Builder builder = com.google.genai.types.Part.builder() .inlineData(Blob.builder().data(decoded).mimeType(fileWithBytes.mimeType()).build()); - if (metadata != null) { + if (metadata != null && !metadata.isEmpty()) { builder.partMetadata(metadata); } return builder.build(); diff --git a/a2a/src/test/java/com/google/adk/a2a/converters/PartConverterTest.java b/a2a/src/test/java/com/google/adk/a2a/converters/PartConverterTest.java index 03622c287..5a711cbbe 100644 --- a/a2a/src/test/java/com/google/adk/a2a/converters/PartConverterTest.java +++ b/a2a/src/test/java/com/google/adk/a2a/converters/PartConverterTest.java @@ -483,6 +483,27 @@ public void toGenaiPart_dataPartWithNonMapCoercedToMap() { assertThat(result.functionCall().get().args()).hasValue(ImmutableMap.of("value", 123)); } + @Test + public void toGenaiPart_withTextPartEmptyMetadata_doesNotSetPartMetadata() { + TextPart textPart = new TextPart("Hello", ImmutableMap.of()); + + Part result = PartConverter.toGenaiPart(textPart); + + assertThat(result.text()).hasValue("Hello"); + assertThat(result.partMetadata()).isEmpty(); + } + + @Test + public void toGenaiPart_withFilePartEmptyMetadata_doesNotSetPartMetadata() { + FilePart filePart = + new FilePart( + new FileWithUri("text/plain", "file.txt", "http://file.txt"), ImmutableMap.of()); + + Part result = PartConverter.toGenaiPart(filePart); + + assertThat(result.partMetadata()).isEmpty(); + } + @Test public void toGenaiPart_withTextPartMetadata_propagatesMetadata() { TextPart textPart = new TextPart("Hello", ImmutableMap.of("key", "value"));