Files
writing-agent/tools/st-request-diff/inspect-wa-assembly.mjs

34 lines
1.8 KiB
JavaScript

// 用本仓库自己的装配代码看同一份预设会拼出什么(不发请求)。
// 用法: node node_modules/tsx/dist/cli.mjs tools/st-request-diff/inspect-wa-assembly.mjs <preset.json>
import { readFileSync } from "node:fs";
import path from "node:path";
import { importSillyTavernPreset } from "../../src/preset/importer.js";
import { assemblePlayWorkerMessages } from "../../src/preset/play-frame.js";
import { applyExtendedMarkers } from "../../src/preset/markers.js";
const file = process.argv[2];
const raw = JSON.parse(readFileSync(file, "utf8"));
const report = importSillyTavernPreset(raw, { name: path.basename(file, ".json") });
const preset = report.preset;
console.log("导入: prompts=" + preset.prompts.length + " order=" + preset.promptOrder.length + " squash=" + JSON.stringify(preset.messagePolicy));
console.log("警告: " + JSON.stringify(report.warnings.slice(0, 6)));
const framed = applyExtendedMarkers(preset);
const messages = assemblePlayWorkerMessages({
systemPrompt: "",
preset,
pack: { worldBookBefore: [], history: [], worldBookAfter: [], turn: "你好", postTurn: [] },
});
console.log("--- 装配结果 " + messages.length + " 条 ---");
messages.forEach((m, i) => {
const text = String(m.content || "");
console.log("#" + i + " [" + m.role + "] " + text.length + " 字: " + text.replace(/\s+/g, " ").slice(0, 60));
});
const byId = new Map(preset.prompts.map((p) => [p.id, p]));
for (const id of ["dcb8d472-6dd4-46b4-a74d-3c5674d7c6af", "67b2c14a-f300-4715-93e1-5f34c34462f6", "ate-toolcall-guide-sys"]) {
const p = byId.get(id);
const order = preset.promptOrder.find((o) => o.promptId === id);
console.log("条目 " + id + ": 存在=" + Boolean(p) + " 内容=" + (p ? p.content.length : -1) + " entry.enabled=" + (p ? p.enabled : "-") + " order.enabled=" + (order ? order.enabled : "(不在 order)"));
}