Files
mem0/openclaw/tests/filtering.test.ts
T
2026-04-20 20:09:45 +05:30

97 lines
3.4 KiB
TypeScript

import { describe, it, expect } from "vitest";
import {
isNoiseMessage,
isGenericAssistantMessage,
isSessionSpecificContent,
stripNoiseFromContent,
filterMessagesForExtraction,
} from "../filtering.ts";
describe("isNoiseMessage", () => {
it("returns true for heartbeat messages", () => {
expect(isNoiseMessage("HEARTBEAT_OK")).toBe(true);
expect(isNoiseMessage("NO_REPLY")).toBe(true);
});
it("returns true for single-word acknowledgments", () => {
expect(isNoiseMessage("ok")).toBe(true);
expect(isNoiseMessage("done")).toBe(true);
expect(isNoiseMessage("thanks")).toBe(true);
});
it("returns false for substantive content", () => {
expect(isNoiseMessage("My name is John and I live in Tokyo")).toBe(false);
});
});
describe("isGenericAssistantMessage", () => {
it("returns true for generic acknowledgments", () => {
expect(isGenericAssistantMessage("I see you've shared this. How can I help?")).toBe(true);
expect(isGenericAssistantMessage("Got it! How can I assist you?")).toBe(true);
});
it("returns false for substantive responses", () => {
expect(isGenericAssistantMessage("Based on the code, the bug is in line 42 where the null check is missing.")).toBe(false);
});
});
describe("isSessionSpecificContent", () => {
it("returns true for tool availability discussions", () => {
expect(isSessionSpecificContent(
"I do not currently see Mem0 write/update/delete tools exposed in this session."
)).toBe(true);
});
it("returns true for plugin capability statements", () => {
expect(isSessionSpecificContent(
"As of 2026-04-18, the openclaw-mem0 plugin does not expose a memory wiki capability."
)).toBe(true);
});
it("returns true for session-specific tool lists", () => {
expect(isSessionSpecificContent(
"The tools I have access to in this session are memory_search and memory_get."
)).toBe(true);
});
it("returns false for user preferences", () => {
expect(isSessionSpecificContent(
"My name is Kartik and I like to watch Pokemon."
)).toBe(false);
});
it("returns false for technical facts that span sessions", () => {
expect(isSessionSpecificContent(
"The project uses TypeScript 5.0 and Node.js 20."
)).toBe(false);
});
});
describe("filterMessagesForExtraction", () => {
it("filters out session-specific tool discussions", () => {
const messages = [
{ role: "user", content: "What tools do you have access to?" },
{ role: "assistant", content: "I have memory_search and memory_get tools. The other tools are not exposed in this session." },
{ role: "user", content: "My name is Kartik" },
{ role: "assistant", content: "Got it, I'll remember that!" },
];
const filtered = filterMessagesForExtraction(messages);
// Should keep the name statement, filter the tool discussion
expect(filtered.some(m => m.content.includes("Kartik"))).toBe(true);
expect(filtered.some(m => m.content.includes("not exposed in this session"))).toBe(false);
});
it("keeps valuable user facts", () => {
const messages = [
{ role: "user", content: "I prefer dark mode and use VS Code for development." },
{ role: "assistant", content: "Noted! Dark mode in VS Code is great for reducing eye strain." },
];
const filtered = filterMessagesForExtraction(messages);
expect(filtered.length).toBe(2);
expect(filtered[0].content).toContain("dark mode");
});
});