mirror of https://github.com/openclaw/openclaw.git
103 lines
2.7 KiB
TypeScript
103 lines
2.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { stripAssistantInternalScaffolding } from "./assistant-visible-text.js";
|
|
|
|
describe("stripAssistantInternalScaffolding", () => {
|
|
function expectVisibleText(input: string, expected: string) {
|
|
expect(stripAssistantInternalScaffolding(input)).toBe(expected);
|
|
}
|
|
|
|
function createLiteralRelevantMemoriesCodeBlock() {
|
|
return [
|
|
"```xml",
|
|
"<relevant-memories>",
|
|
"sample",
|
|
"</relevant-memories>",
|
|
"```",
|
|
"",
|
|
"Visible text",
|
|
].join("\n");
|
|
}
|
|
|
|
function expectLiteralVisibleText(input: string) {
|
|
expectVisibleText(input, input);
|
|
}
|
|
|
|
it.each([
|
|
{
|
|
name: "strips reasoning tags",
|
|
input: ["<thinking>", "secret", "</thinking>", "Visible"].join("\n"),
|
|
expected: "Visible",
|
|
},
|
|
{
|
|
name: "strips relevant-memories scaffolding blocks",
|
|
input: [
|
|
"<relevant-memories>",
|
|
"The following memories may be relevant to this conversation:",
|
|
"- Internal memory note",
|
|
"</relevant-memories>",
|
|
"",
|
|
"User-visible answer",
|
|
].join("\n"),
|
|
expected: "User-visible answer",
|
|
},
|
|
{
|
|
name: "supports relevant_memories tag variants",
|
|
input: [
|
|
"<relevant_memories>",
|
|
"Internal memory note",
|
|
"</relevant_memories>",
|
|
"Visible",
|
|
].join("\n"),
|
|
expected: "Visible",
|
|
},
|
|
{
|
|
name: "hides unfinished relevant-memories blocks",
|
|
input: ["Hello", "<relevant-memories>", "internal-only"].join("\n"),
|
|
expected: "Hello\n",
|
|
},
|
|
{
|
|
name: "trims leading whitespace after stripping scaffolding",
|
|
input: [
|
|
"<thinking>",
|
|
"secret",
|
|
"</thinking>",
|
|
" ",
|
|
"<relevant-memories>",
|
|
"internal note",
|
|
"</relevant-memories>",
|
|
" Visible",
|
|
].join("\n"),
|
|
expected: "Visible",
|
|
},
|
|
{
|
|
name: "preserves unfinished reasoning text while still stripping memory blocks",
|
|
input: [
|
|
"Before",
|
|
"<thinking>",
|
|
"secret",
|
|
"<relevant-memories>",
|
|
"internal note",
|
|
"</relevant-memories>",
|
|
"After",
|
|
].join("\n"),
|
|
expected: "Before\n\nsecret\n\nAfter",
|
|
},
|
|
{
|
|
name: "keeps relevant-memories tags inside fenced code",
|
|
input: createLiteralRelevantMemoriesCodeBlock(),
|
|
expected: undefined,
|
|
},
|
|
{
|
|
name: "keeps literal relevant-memories prose",
|
|
input: "Use `<relevant-memories>example</relevant-memories>` literally.",
|
|
expected: undefined,
|
|
},
|
|
] as const)("$name", ({ input, expected }) => {
|
|
if (expected === undefined) {
|
|
expectLiteralVisibleText(input);
|
|
return;
|
|
}
|
|
expectVisibleText(input, expected);
|
|
});
|
|
});
|