Skip to content

Commit cc094aa

Browse files
feat: merge metadata of new and old artifact when append=True (#945)
# Description When a new TaskArtifactUpdateEvent is emitted with append=True, if an artifact with the same id exists on the Task saved on the TaskStore, the metadata from the new artifact are merged with the ones of the existing one. Fixes #735 🦕
1 parent 2159140 commit cc094aa

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

src/a2a/utils/helpers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ def append_artifact_to_task(task: Task, event: TaskArtifactUpdateEvent) -> None:
110110
task.id,
111111
)
112112
existing_artifact.parts.extend(new_artifact_data.parts)
113+
existing_artifact.metadata.update(
114+
dict(new_artifact_data.metadata.items())
115+
)
113116
else:
114117
# We received a chunk to append, but we don't have an existing artifact.
115118
# we will ignore this chunk

tests/utils/test_helpers.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ def test_append_artifact_to_task():
177177
artifact_id='artifact-123',
178178
name='updated name',
179179
parts=[Part(text='Updated')],
180+
metadata={'existing_key': 'existing_value'},
180181
)
181182
append_event_2 = TaskArtifactUpdateEvent(
182183
artifact=artifact_2, append=False, task_id='123', context_id='123'
@@ -187,10 +188,13 @@ def test_append_artifact_to_task():
187188
assert task.artifacts[0].name == 'updated name'
188189
assert len(task.artifacts[0].parts) == 1
189190
assert task.artifacts[0].parts[0].text == 'Updated'
191+
assert task.artifacts[0].metadata['existing_key'] == 'existing_value'
190192

191193
# Test appending parts to an existing artifact
192194
artifact_with_parts = Artifact(
193-
artifact_id='artifact-123', parts=[Part(text='Part 2')]
195+
artifact_id='artifact-123',
196+
parts=[Part(text='Part 2')],
197+
metadata={'new_key': 'new_value'},
194198
)
195199
append_event_3 = TaskArtifactUpdateEvent(
196200
artifact=artifact_with_parts,
@@ -202,6 +206,8 @@ def test_append_artifact_to_task():
202206
assert len(task.artifacts[0].parts) == 2
203207
assert task.artifacts[0].parts[0].text == 'Updated'
204208
assert task.artifacts[0].parts[1].text == 'Part 2'
209+
assert task.artifacts[0].metadata['existing_key'] == 'existing_value'
210+
assert task.artifacts[0].metadata['new_key'] == 'new_value'
205211

206212
# Test adding another new artifact
207213
another_artifact_with_parts = Artifact(

0 commit comments

Comments
 (0)