Add diagnostics in callLLMForJSON to track message assembly and regex cleaning

Logs message counts and roles after buildJsonAttemptMessages and
applyTaskFinalInputRegex to identify if user messages are lost
during final assembly or regex cleaning stage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hao19911125
2026-04-06 09:28:43 +08:00
parent 1cc613f68f
commit 3e83466330

33
llm.js
View File

@@ -1583,10 +1583,43 @@ export async function callLLMForJSON({
additionalMessages,
promptMessages,
);
{
const asmUser = assembledMessages.filter((m) => m?.role === "user");
console.log(
`[ST-BME][prompt-diag] buildJsonAttemptMessages: ` +
`total=${assembledMessages.length}, user=${asmUser.length}, ` +
`roles=[${assembledMessages.map((m) => m?.role).join(",")}]`,
);
for (const m of asmUser) {
console.log(
`[ST-BME][prompt-diag] assembled user: len=${String(m.content || "").length}, ` +
`preview="${String(m.content || "").slice(0, 80)}..."`,
);
}
}
const requestCleaning = applyTaskFinalInputRegex(
taskType,
assembledMessages,
);
{
const rcMsgs = Array.isArray(requestCleaning.messages) ? requestCleaning.messages : [];
const rcUser = rcMsgs.filter((m) => m?.role === "user");
const dbg = requestCleaning.debug || {};
console.log(
`[ST-BME][prompt-diag] applyTaskFinalInputRegex: ` +
`total=${rcMsgs.length}, user=${rcUser.length}, ` +
`changed=${dbg.changed}, applied=${dbg.applied}, ` +
`roles=[${rcMsgs.map((m) => m?.role).join(",")}]`,
);
if (rcUser.length === 0 && assembledMessages.filter((m) => m?.role === "user").length > 0) {
console.warn(
`[ST-BME][prompt-diag] *** USER MESSAGES LOST during applyTaskFinalInputRegex! ***`,
);
for (const rule of dbg.appliedRules || []) {
console.warn(`[ST-BME][prompt-diag] applied rule: ${JSON.stringify(rule)}`);
}
}
}
const promptExecutionSnapshot = attachRequestCleaningToPromptExecution(
promptExecutionSummary,
requestCleaning.debug,