Files
ST-Bionic-Memory-Ecology/tests/recall-authoritative-generation-input.mjs
2026-04-11 18:51:59 +08:00

270 lines
10 KiB
JavaScript

import assert from "node:assert/strict";
import { MODULE_NAME } from "../graph/graph-persistence.js";
import {
buildRecallRecentMessagesController,
resolveRecallInputController,
} from "../retrieval/recall-controller.js";
import { createGenerationRecallHarness } from "./helpers/generation-recall-harness.mjs";
async function testSendIntentCanRemainAuthoritativeQueryWhenFlagEnabled() {
const harness = await createGenerationRecallHarness();
harness.extension_settings[MODULE_NAME] = {
recallUseAuthoritativeGenerationInput: true,
};
harness.chat = [{ is_user: true, mes: "旧的 chat tail" }];
harness.pendingRecallSendIntent = {
text: "刚触发发送的新输入",
hash: "hash-phase4-send-intent",
at: Date.now(),
source: "dom-intent",
};
await harness.result.onGenerationAfterCommands("normal", {}, false);
assert.equal(harness.runRecallCalls.length, 1);
assert.equal(harness.runRecallCalls[0].overrideUserMessage, "刚触发发送的新输入");
assert.equal(harness.runRecallCalls[0].overrideSource, "send-intent");
assert.equal(harness.runRecallCalls[0].targetUserMessageIndex, 0);
assert.equal(harness.runRecallCalls[0].includeSyntheticUserMessage, true);
const transaction = [...harness.result.generationRecallTransactions.values()][0];
assert.ok(transaction);
assert.equal(
transaction.frozenRecallOptions.overrideUserMessage,
"刚触发发送的新输入",
);
assert.equal(transaction.frozenRecallOptions.lockedSource, "send-intent");
assert.equal(transaction.frozenRecallOptions.targetUserMessageIndex, 0);
assert.equal(transaction.frozenRecallOptions.authoritativeInputUsed, true);
assert.equal(transaction.frozenRecallOptions.boundUserFloorText, "旧的 chat tail");
assert.equal(transaction.frozenRecallOptions.includeSyntheticUserMessage, true);
}
async function testPlannerHandoffCanRemainAuthoritativeQueryWhenFlagEnabled() {
const harness = await createGenerationRecallHarness();
harness.extension_settings[MODULE_NAME] = {
recallUseAuthoritativeGenerationInput: true,
};
harness.chat = [{ is_user: true, mes: "楼层里的稳定用户输入" }];
const handoff = harness.result.preparePlannerRecallHandoff({
rawUserInput: "planner 原始输入",
plannerAugmentedMessage: "planner 增强后的输入",
plannerRecall: {
memoryBlock: "规划记忆块",
recentMessages: ["[user]: planner 原始输入", "[assistant]: 记忆命中"],
result: {
selectedNodeIds: ["node-planner-1"],
stats: {
coreCount: 1,
recallCount: 1,
},
meta: {
retrieval: {
vectorHits: 1,
vectorMergedHits: 0,
diffusionHits: 0,
candidatePoolAfterDpp: 1,
llm: {
status: "disabled",
candidatePool: 0,
},
},
},
},
},
chatId: "chat-main",
});
assert.ok(handoff);
const recallContext = harness.result.createGenerationRecallContext({
hookName: "GENERATION_AFTER_COMMANDS",
generationType: "normal",
recallOptions: {},
chatId: "chat-main",
});
assert.equal(recallContext.shouldRun, true);
assert.equal(recallContext.recallOptions.overrideUserMessage, "planner 原始输入");
assert.equal(recallContext.recallOptions.overrideSource, "planner-handoff");
assert.equal(recallContext.recallOptions.authoritativeInputUsed, true);
assert.equal(
recallContext.recallOptions.boundUserFloorText,
"楼层里的稳定用户输入",
);
assert.equal(recallContext.recallOptions.includeSyntheticUserMessage, true);
assert.ok(recallContext.recallOptions.cachedRecallPayload);
assert.equal(
recallContext.recallOptions.cachedRecallPayload.source,
"planner-handoff",
);
await harness.result.onGenerationAfterCommands("normal", {}, false);
assert.equal(harness.runRecallCalls.length, 1);
assert.equal(harness.runRecallCalls[0].overrideUserMessage, "planner 原始输入");
assert.equal(harness.runRecallCalls[0].overrideSource, "planner-handoff");
assert.equal(harness.runRecallCalls[0].authoritativeInputUsed, true);
assert.equal(
harness.runRecallCalls[0].boundUserFloorText,
"楼层里的稳定用户输入",
);
assert.equal(harness.runRecallCalls[0].includeSyntheticUserMessage, true);
assert.ok(harness.runRecallCalls[0].cachedRecallPayload);
}
async function testAuthoritativeSendIntentStaysFrozenAcrossHooksWhenFlagEnabled() {
const harness = await createGenerationRecallHarness();
harness.extension_settings[MODULE_NAME] = {
recallUseAuthoritativeGenerationInput: true,
};
harness.chat = [{ is_user: true, mes: "稳定 chat tail" }];
harness.pendingRecallSendIntent = {
text: "第一次权威输入",
hash: "hash-phase4-frozen-a",
at: Date.now(),
source: "dom-intent",
};
await harness.result.onGenerationAfterCommands("normal", {}, false);
harness.pendingRecallSendIntent = {
text: "第二次漂移输入",
hash: "hash-phase4-frozen-b",
at: Date.now(),
source: "dom-intent",
};
await harness.result.onBeforeCombinePrompts();
assert.equal(harness.runRecallCalls.length, 1);
assert.equal(harness.runRecallCalls[0].overrideUserMessage, "第一次权威输入");
assert.equal(harness.runRecallCalls[0].overrideSource, "send-intent");
assert.equal(harness.runRecallCalls[0].authoritativeInputUsed, true);
assert.equal(harness.runRecallCalls[0].boundUserFloorText, "稳定 chat tail");
const transaction = [...harness.result.generationRecallTransactions.values()][0];
assert.ok(transaction);
assert.equal(
transaction.frozenRecallOptions.overrideUserMessage,
"第一次权威输入",
);
assert.equal(transaction.frozenRecallOptions.authoritativeInputUsed, true);
assert.equal(transaction.frozenRecallOptions.boundUserFloorText, "稳定 chat tail");
assert.equal(transaction.frozenRecallOptions.includeSyntheticUserMessage, true);
}
async function testHostSnapshotCanRemainAuthoritativeQueryWhenFlagEnabled() {
const harness = await createGenerationRecallHarness();
harness.extension_settings[MODULE_NAME] = {
recallUseAuthoritativeGenerationInput: true,
};
harness.chat = [{ is_user: true, mes: "旧的 chat tail" }];
const frozenSnapshot = harness.result.freezeHostGenerationInputSnapshot(
"宿主快照输入",
);
await harness.result.onGenerationAfterCommands(
"normal",
{ frozenInputSnapshot: frozenSnapshot },
false,
);
assert.equal(harness.runRecallCalls.length, 1);
assert.equal(harness.runRecallCalls[0].overrideUserMessage, "宿主快照输入");
assert.equal(
harness.runRecallCalls[0].overrideSource,
"host-generation-lifecycle",
);
assert.equal(harness.runRecallCalls[0].targetUserMessageIndex, 0);
assert.equal(harness.runRecallCalls[0].includeSyntheticUserMessage, true);
assert.equal(
JSON.stringify(
harness.runRecallCalls[0].sourceCandidates.map((candidate) => candidate.source),
),
JSON.stringify(["host-generation-lifecycle", "chat-tail-user"]),
);
const transaction = [...harness.result.generationRecallTransactions.values()][0];
assert.ok(transaction);
assert.equal(transaction.frozenRecallOptions.overrideUserMessage, "宿主快照输入");
assert.equal(
transaction.frozenRecallOptions.lockedSource,
"host-generation-lifecycle",
);
assert.equal(transaction.frozenRecallOptions.targetUserMessageIndex, 0);
assert.equal(transaction.frozenRecallOptions.authoritativeInputUsed, true);
assert.equal(transaction.frozenRecallOptions.boundUserFloorText, "旧的 chat tail");
assert.equal(transaction.frozenRecallOptions.includeSyntheticUserMessage, true);
}
async function testGenerationAfterCommandsWritesBackAuthoritativePromptWhenPreserved() {
const harness = await createGenerationRecallHarness();
harness.extension_settings[MODULE_NAME] = {
recallUseAuthoritativeGenerationInput: true,
};
harness.chat = [{ is_user: true, mes: "旧的 chat tail" }];
harness.pendingRecallSendIntent = {
text: "发送前权威输入",
hash: "hash-phase4-writeback",
at: Date.now(),
source: "dom-intent",
};
const params = {
prompt: "旧 prompt",
user_input: "旧 user_input",
};
await harness.result.onGenerationAfterCommands("normal", params, false);
assert.equal(params.prompt, "发送前权威输入");
assert.equal(params.user_input, "发送前权威输入");
}
function testResolveRecallInputControllerAppendsSyntheticAuthoritativeUserMessage() {
const runtime = {
normalizeRecallInputText(value = "") {
return String(value || "").trim();
},
buildRecallRecentMessages(chat, limit, syntheticUserMessage = "") {
return buildRecallRecentMessagesController(chat, limit, syntheticUserMessage, {
formatRecallContextLine(message) {
return `[${message?.is_user ? "user" : "assistant"}]: ${String(message?.mes || "")}`;
},
normalizeRecallInputText(value = "") {
return String(value || "").trim();
},
});
},
};
const result = resolveRecallInputController(
[{ is_user: true, mes: "旧的 chat tail" }],
4,
{
overrideUserMessage: "权威输入",
overrideSource: "send-intent",
includeSyntheticUserMessage: true,
},
runtime,
);
assert.equal(result.userMessage, "权威输入");
assert.equal(result.source, "send-intent");
assert.equal(result.authoritativeInputUsed, false);
assert.equal(result.boundUserFloorText, "");
assert.deepEqual(result.recentMessages, [
"[user]: 旧的 chat tail",
"[user]: 权威输入",
]);
}
await testSendIntentCanRemainAuthoritativeQueryWhenFlagEnabled();
await testPlannerHandoffCanRemainAuthoritativeQueryWhenFlagEnabled();
await testAuthoritativeSendIntentStaysFrozenAcrossHooksWhenFlagEnabled();
await testHostSnapshotCanRemainAuthoritativeQueryWhenFlagEnabled();
await testGenerationAfterCommandsWritesBackAuthoritativePromptWhenPreserved();
testResolveRecallInputControllerAppendsSyntheticAuthoritativeUserMessage();
console.log("recall-authoritative-generation-input tests passed");