mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-07 10:34:44 +00:00
refactor(agents): remove unused thinking recovery sanitizer
This commit is contained in:
@@ -10,7 +10,6 @@ import {
|
||||
dropReasoningFromHistory,
|
||||
dropThinkingBlocks,
|
||||
isAssistantMessageWithContent,
|
||||
sanitizeThinkingForRecovery,
|
||||
stripInvalidThinkingSignatures,
|
||||
stripStaleThinkingSignaturesForCompactionReplay,
|
||||
wrapAnthropicStreamWithRecovery,
|
||||
@@ -406,50 +405,7 @@ describe("stripInvalidThinkingSignatures", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("sanitizeThinkingForRecovery", () => {
|
||||
it("drops the latest assistant message when the thinking block is unsigned", () => {
|
||||
const messages = castAgentMessages([
|
||||
{ role: "user", content: "hello" },
|
||||
{
|
||||
role: "assistant",
|
||||
content: [{ type: "thinking", thinking: "partial" }],
|
||||
},
|
||||
]);
|
||||
|
||||
const result = sanitizeThinkingForRecovery(messages);
|
||||
expect(result.messages).toEqual([messages[0]]);
|
||||
expect(result.prefill).toBe(false);
|
||||
});
|
||||
|
||||
it("preserves later turns when dropping an incomplete assistant message", () => {
|
||||
const messages = castAgentMessages([
|
||||
{ role: "user", content: "hello" },
|
||||
{
|
||||
role: "assistant",
|
||||
content: [{ type: "thinking", thinking: "partial" }],
|
||||
},
|
||||
{ role: "user", content: "follow up" },
|
||||
]);
|
||||
|
||||
const result = sanitizeThinkingForRecovery(messages);
|
||||
expect(result.messages).toEqual([messages[0], messages[2]]);
|
||||
expect(result.prefill).toBe(false);
|
||||
});
|
||||
|
||||
it("marks signed thinking without text as a prefill recovery case", () => {
|
||||
const messages = castAgentMessages([
|
||||
{ role: "user", content: "hello" },
|
||||
{
|
||||
role: "assistant",
|
||||
content: [{ type: "thinking", thinking: "complete", thinkingSignature: "sig" }],
|
||||
},
|
||||
]);
|
||||
|
||||
const result = sanitizeThinkingForRecovery(messages);
|
||||
expect(result.messages).toBe(messages);
|
||||
expect(result.prefill).toBe(true);
|
||||
});
|
||||
|
||||
describe("assessLastAssistantMessage", () => {
|
||||
it("marks signed thinking with an empty text block as incomplete text", () => {
|
||||
const message = castAgentMessage({
|
||||
role: "assistant",
|
||||
|
||||
@@ -534,39 +534,6 @@ export function assessLastAssistantMessage(message: AgentMessage): RecoveryAsses
|
||||
return "valid";
|
||||
}
|
||||
|
||||
export function sanitizeThinkingForRecovery(messages: AgentMessage[]): {
|
||||
messages: AgentMessage[];
|
||||
prefill: boolean;
|
||||
} {
|
||||
if (messages.length === 0) {
|
||||
return { messages, prefill: false };
|
||||
}
|
||||
|
||||
let lastAssistantIndex = -1;
|
||||
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
||||
if ((messages[index] as { role?: unknown }).role === "assistant") {
|
||||
lastAssistantIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (lastAssistantIndex === -1) {
|
||||
return { messages, prefill: false };
|
||||
}
|
||||
|
||||
const assessment = assessLastAssistantMessage(messages[lastAssistantIndex]);
|
||||
if (assessment === "valid") {
|
||||
return { messages, prefill: false };
|
||||
}
|
||||
if (assessment === "incomplete-text") {
|
||||
return { messages, prefill: true };
|
||||
}
|
||||
|
||||
return {
|
||||
messages: [...messages.slice(0, lastAssistantIndex), ...messages.slice(lastAssistantIndex + 1)],
|
||||
prefill: false,
|
||||
};
|
||||
}
|
||||
|
||||
function shouldRecoverAnthropicThinkingError(
|
||||
error: unknown,
|
||||
sessionMeta: RecoverySessionMeta,
|
||||
|
||||
Reference in New Issue
Block a user