diff --git a/agentscope-core/src/main/java/io/agentscope/core/session/ListHashUtil.java b/agentscope-core/src/main/java/io/agentscope/core/session/ListHashUtil.java index e31b3d847..090f9f1a3 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/session/ListHashUtil.java +++ b/agentscope-core/src/main/java/io/agentscope/core/session/ListHashUtil.java @@ -16,6 +16,7 @@ package io.agentscope.core.session; import io.agentscope.core.state.State; +import io.agentscope.core.util.JsonUtils; import java.util.List; /** @@ -65,7 +66,7 @@ private ListHashUtil() { * *
This method is designed to be lightweight and fast, using sampling for large lists to
@@ -88,13 +89,22 @@ public static String computeHash(List extends State> values) {
for (int idx : sampleIndices) {
State item = values.get(idx);
- int itemHash = item != null ? item.hashCode() : 0;
+ int itemHash = computeItemHash(item);
sb.append(idx).append(":").append(itemHash).append(",");
}
return Integer.toHexString(sb.toString().hashCode());
}
+ private static int computeItemHash(State item) {
+ if (item == null) {
+ return 0;
+ }
+
+ String serialized = JsonUtils.getJsonCodec().toJson(item);
+ return serialized.hashCode();
+ }
+
/**
* Get the indices to sample from a list of given size.
*
diff --git a/agentscope-core/src/test/java/io/agentscope/core/session/ListHashUtilTest.java b/agentscope-core/src/test/java/io/agentscope/core/session/ListHashUtilTest.java
index dfd10e20b..ea07a66f9 100644
--- a/agentscope-core/src/test/java/io/agentscope/core/session/ListHashUtilTest.java
+++ b/agentscope-core/src/test/java/io/agentscope/core/session/ListHashUtilTest.java
@@ -55,6 +55,17 @@ void testComputeHashSameListSameHash() {
assertEquals(hash1, hash2);
}
+ @Test
+ void testComputeHashEquivalentMsgListsSameHash() {
+ List