Preserve hidden context for extraction

This commit is contained in:
Hao19911125
2026-04-03 12:36:29 +08:00
parent f48b84af9e
commit 97e454449b
3 changed files with 125 additions and 4 deletions

68
tests/chat-history.mjs Normal file
View File

@@ -0,0 +1,68 @@
import assert from "node:assert/strict";
import {
buildExtractionMessages,
getAssistantTurns,
isAssistantChatMessage,
isBmeManagedHiddenMessage,
isSystemMessageForExtraction,
} from "../chat-history.js";
const visibleAssistant = {
is_user: false,
is_system: false,
mes: "visible assistant",
};
assert.equal(isAssistantChatMessage(visibleAssistant), true);
const managedHiddenAssistant = {
is_user: false,
is_system: true,
mes: "managed hidden assistant",
extra: { __st_bme_hide_managed: true },
};
assert.equal(isBmeManagedHiddenMessage(managedHiddenAssistant), true);
assert.equal(isSystemMessageForExtraction(managedHiddenAssistant), false);
assert.equal(isAssistantChatMessage(managedHiddenAssistant), true);
const realSystemMessage = {
is_user: false,
is_system: true,
mes: "real system",
};
assert.equal(isSystemMessageForExtraction(realSystemMessage), true);
assert.equal(isAssistantChatMessage(realSystemMessage), false);
const chat = [
{ is_user: false, is_system: true, mes: "greeting/system" },
{ is_user: true, is_system: false, mes: "user-1" },
managedHiddenAssistant,
{ is_user: true, is_system: false, mes: "user-2" },
visibleAssistant,
realSystemMessage,
];
assert.deepEqual(
getAssistantTurns(chat),
[2, 4],
"managed hidden assistant floors should still be extractable assistant turns",
);
const extractionMessages = buildExtractionMessages(chat, 4, 4, {
extractContextTurns: 2,
});
assert.deepEqual(
extractionMessages.map((message) => ({
seq: message.seq,
role: message.role,
content: message.content,
})),
[
{ seq: 1, role: "user", content: "user-1" },
{ seq: 2, role: "assistant", content: "managed hidden assistant" },
{ seq: 3, role: "user", content: "user-2" },
{ seq: 4, role: "assistant", content: "visible assistant" },
],
"extraction should keep BME-managed hidden context but still skip real system messages",
);
console.log("chat-history tests passed");