Skip to content

Commit 767ca43

Browse files
fix: merge metadata appendArtifactToTask metadata #615 (#616)
Co-authored-by: mhyeon-lee <mhyeon.lee@gmail.com>
1 parent 3dfa2bf commit 767ca43

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A
191191
.artifactId("artifact-id")
192192
.name("artifact-1")
193193
.parts(Collections.singletonList(new TextPart("existing content")))
194+
.metadata(Map.of("key1", "value1"))
194195
.build();
195196
Task taskWithArtifact = Task.builder(initialTask)
196197
.artifacts(Collections.singletonList(existingArtifact))
@@ -202,6 +203,7 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A
202203
.artifactId("artifact-id")
203204
.name("artifact-1")
204205
.parts(Collections.singletonList(new TextPart("new content")))
206+
.metadata(Map.of("key2", "value2"))
205207
.build();
206208
TaskArtifactUpdateEvent event = TaskArtifactUpdateEvent.builder()
207209
.taskId(minimalTask.id())
@@ -219,6 +221,9 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A
219221
assertEquals(2, updatedArtifact.parts().size());
220222
assertEquals("existing content", ((TextPart) updatedArtifact.parts().get(0)).text());
221223
assertEquals("new content", ((TextPart) updatedArtifact.parts().get(1)).text());
224+
225+
assertEquals("value1", updatedArtifact.metadata().get("key1"));
226+
assertEquals("value2", updatedArtifact.metadata().get("key2"));
222227
}
223228

224229
@Test

spec/src/main/java/io/a2a/util/Utils.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import static io.a2a.util.Assert.checkNotNullParam;
44

55
import java.util.ArrayList;
6+
import java.util.HashMap;
67
import java.util.List;
8+
import java.util.Map;
79
import java.util.logging.Logger;
810

911
import com.google.gson.Gson;
@@ -129,8 +131,21 @@ public static Task appendArtifactToTask(Task task, TaskArtifactUpdateEvent event
129131
log.fine(String.format("Appending parts to artifact id %s for task %s", artifactId, taskId));
130132
List<Part<?>> parts = new ArrayList<>(existingArtifact.parts());
131133
parts.addAll(newArtifact.parts());
134+
135+
Map<String, Object> mergedMetadata = null;
136+
if (existingArtifact.metadata() != null || newArtifact.metadata() != null) {
137+
mergedMetadata = new HashMap<>();
138+
if (existingArtifact.metadata() != null) {
139+
mergedMetadata.putAll(existingArtifact.metadata());
140+
}
141+
if (newArtifact.metadata() != null) {
142+
mergedMetadata.putAll(newArtifact.metadata());
143+
}
144+
}
145+
132146
Artifact updated = Artifact.builder(existingArtifact)
133147
.parts(parts)
148+
.metadata(mergedMetadata)
134149
.build();
135150
artifacts.set(existingArtifactIndex, updated);
136151
} else {

0 commit comments

Comments
 (0)