Files
ST-Bionic-Memory-Ecology/tests/prompt-builder-defaults.mjs
2026-04-08 01:17:57 +08:00

123 lines
3.3 KiB
JavaScript

import assert from "node:assert/strict";
import { registerHooks } from "node:module";
const extensionsShimSource = [
"export const extension_settings = {};",
"export function getContext() {",
" return {",
" chat: [],",
" chatMetadata: {},",
" extensionSettings: {},",
" powerUserSettings: {},",
" characters: {},",
" characterId: null,",
" name1: '',",
" name2: '',",
" chatId: 'test-chat',",
" };",
"}",
].join("\n");
const scriptShimSource = [
"export function substituteParamsExtended(value) {",
" return String(value ?? '');",
"}",
].join("\n");
registerHooks({
resolve(specifier, context, nextResolve) {
if (
specifier === "../../../extensions.js" ||
specifier === "../../../../extensions.js"
) {
return {
shortCircuit: true,
url: `data:text/javascript,${encodeURIComponent(extensionsShimSource)}`,
};
}
if (specifier === "../../../../script.js") {
return {
shortCircuit: true,
url: `data:text/javascript,${encodeURIComponent(scriptShimSource)}`,
};
}
return nextResolve(specifier, context);
},
});
const { buildTaskLlmPayload, buildTaskPrompt } = await import("../prompting/prompt-builder.js");
const { createDefaultTaskProfiles } = await import("../prompting/prompt-profiles.js");
const settings = {
taskProfilesVersion: 3,
taskProfiles: createDefaultTaskProfiles(),
};
const extractPromptBuild = await buildTaskPrompt(settings, "extract", {
taskName: "extract",
charDescription: "角色描述",
userPersona: "用户设定",
recentMessages: "A: 你好\nB: 世界",
graphStats: "node_count=3",
schema: "event(title, summary)",
currentRange: "1 ~ 2",
});
const extractPayload = buildTaskLlmPayload(extractPromptBuild, "fallback-user");
assert.equal(extractPayload.systemPrompt, "");
assert.equal(extractPayload.userPrompt, "");
assert.equal(
extractPayload.promptMessages.filter((message) => message.role === "user").length,
2,
);
assert.deepEqual(
extractPayload.promptMessages
.filter((message) => message.role === "user")
.map((message) => message.blockName),
["输出格式", "行为规则"],
);
assert.deepEqual(
extractPayload.promptMessages
.map((message) => message.sourceKey)
.filter(Boolean),
[
"charDescription",
"userPersona",
"recentMessages",
"graphStats",
"schema",
"currentRange",
],
);
const recallPromptBuild = await buildTaskPrompt(settings, "recall", {
taskName: "recall",
charDescription: "角色描述",
userPersona: "用户设定",
recentMessages: "上下文",
userMessage: "用户最新发言",
candidateNodes: "候选 1\n候选 2",
graphStats: "candidate_count=2",
});
const recallPayload = buildTaskLlmPayload(recallPromptBuild, "fallback-user");
assert.equal(recallPayload.systemPrompt, "");
assert.equal(recallPayload.userPrompt, "");
assert.equal(
recallPayload.promptMessages.filter((message) => message.role === "user").length,
2,
);
assert.deepEqual(
recallPayload.promptMessages
.map((message) => message.sourceKey)
.filter(Boolean),
[
"charDescription",
"userPersona",
"recentMessages",
"userMessage",
"candidateNodes",
"graphStats",
],
);
console.log("prompt-builder-defaults tests passed");