Skip to content

Commit 1a30630

Browse files
committed
perf: replace O(n^2) unique memory filter with Set-based linear pass
1 parent dec5455 commit 1a30630

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

examples/openclaw-plugin/index.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -480,11 +480,14 @@ const contextEnginePlugin = {
480480
]);
481481
const userResult = userSettled.status === "fulfilled" ? userSettled.value : { memories: [] };
482482
const agentResult = agentSettled.status === "fulfilled" ? agentSettled.value : { memories: [] };
483-
// 合并两个位置的结果,去重
483+
// 合并两个位置的结果,去重 (linear time via Set)
484484
const allMemories = [...(userResult.memories ?? []), ...(agentResult.memories ?? [])];
485-
const uniqueMemories = allMemories.filter((memory, index, self) =>
486-
index === self.findIndex((m) => m.uri === memory.uri)
487-
);
485+
const seenUris = new Set<string>();
486+
const uniqueMemories = allMemories.filter((memory) => {
487+
if (seenUris.has(memory.uri)) return false;
488+
seenUris.add(memory.uri);
489+
return true;
490+
});
488491
const leafOnly = uniqueMemories.filter((m) => m.level === 2);
489492
result = {
490493
memories: leafOnly,
@@ -938,9 +941,12 @@ const contextEnginePlugin = {
938941
}
939942

940943
const allMemories = [...(userResult.memories ?? []), ...(agentResult.memories ?? [])];
941-
const uniqueMemories = allMemories.filter((memory, index, self) =>
942-
index === self.findIndex((m) => m.uri === memory.uri)
943-
);
944+
const seenUris = new Set<string>();
945+
const uniqueMemories = allMemories.filter((memory) => {
946+
if (seenUris.has(memory.uri)) return false;
947+
seenUris.add(memory.uri);
948+
return true;
949+
});
944950
const leafOnly = uniqueMemories.filter((m) => m.level === 2);
945951
const processed = postProcessMemories(leafOnly, {
946952
limit: candidateLimit,

0 commit comments

Comments
 (0)