diff --git a/core/src/main/java/com/google/adk/events/EventActions.java b/core/src/main/java/com/google/adk/events/EventActions.java index bf25acfc7..b9092e86e 100644 --- a/core/src/main/java/com/google/adk/events/EventActions.java +++ b/core/src/main/java/com/google/adk/events/EventActions.java @@ -110,12 +110,16 @@ public void removeStateByKey(String key) { } @JsonProperty("artifactDelta") - public ConcurrentMap artifactDelta() { + public Map artifactDelta() { return artifactDelta; } - public void setArtifactDelta(ConcurrentMap artifactDelta) { - this.artifactDelta = artifactDelta; + public void setArtifactDelta(Map artifactDelta) { + if (artifactDelta instanceof ConcurrentMap) { + this.artifactDelta = (ConcurrentMap) artifactDelta; + } else { + this.artifactDelta = new ConcurrentHashMap<>(artifactDelta); + } } @JsonProperty("deletedArtifactIds") diff --git a/core/src/test/java/com/google/adk/events/EventActionsTest.java b/core/src/test/java/com/google/adk/events/EventActionsTest.java index 28123bab8..8577b7873 100644 --- a/core/src/test/java/com/google/adk/events/EventActionsTest.java +++ b/core/src/test/java/com/google/adk/events/EventActionsTest.java @@ -26,6 +26,7 @@ import com.google.genai.types.Part; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -109,6 +110,29 @@ public void merge_mergesAllFields() { assertThat(merged.compaction()).hasValue(COMPACTION); } + @Test + public void setArtifactDelta_reusesConcurrentMap() { + EventActions eventActions = new EventActions(); + ConcurrentMap artifactDelta = new ConcurrentHashMap<>(); + artifactDelta.put("artifact1", 1); + + eventActions.setArtifactDelta(artifactDelta); + + assertThat(eventActions.artifactDelta()).isSameInstanceAs(artifactDelta); + } + + @Test + public void setArtifactDelta_copiesRegularMap() { + EventActions eventActions = new EventActions(); + ImmutableMap artifactDelta = ImmutableMap.of("artifact1", 1); + + eventActions.setArtifactDelta(artifactDelta); + + assertThat(eventActions.artifactDelta()).isNotSameInstanceAs(artifactDelta); + assertThat(eventActions.artifactDelta()).containsExactly("artifact1", 1); + assertThat(eventActions.artifactDelta()).isInstanceOf(ConcurrentMap.class); + } + @Test public void removeStateByKey_marksKeyAsRemoved() { EventActions eventActions = new EventActions();