fix(session-recovery): reorder error detection to prevent false tool_result_missing match
Anthropic's extended thinking error messages contain 'tool_use' and 'tool_result' in the documentation URL text, causing incorrect detection as tool_result_missing instead of thinking_block_order. Fix: Check thinking_block_order BEFORE tool_result_missing.
This commit is contained in:
parent
516edb445c
commit
0031bf7a11
@ -199,5 +199,25 @@ describe("detectErrorType", () => {
|
|||||||
// #then should return thinking_block_order
|
// #then should return thinking_block_order
|
||||||
expect(result).toBe("thinking_block_order")
|
expect(result).toBe("thinking_block_order")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should detect thinking_block_order even when error message contains tool_use/tool_result in docs URL", () => {
|
||||||
|
// #given Anthropic's extended thinking error with tool_use/tool_result in the documentation text
|
||||||
|
const error = {
|
||||||
|
error: {
|
||||||
|
type: "invalid_request_error",
|
||||||
|
message:
|
||||||
|
"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `text`. " +
|
||||||
|
"When `thinking` is enabled, a final `assistant` message must start with a thinking block " +
|
||||||
|
"(preceeding the lastmost set of `tool_use` and `tool_result` blocks). " +
|
||||||
|
"We recommend you include thinking blocks from previous turns.",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// #when detectErrorType is called
|
||||||
|
const result = detectErrorType(error)
|
||||||
|
|
||||||
|
// #then should return thinking_block_order (NOT tool_result_missing)
|
||||||
|
expect(result).toBe("thinking_block_order")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -125,10 +125,9 @@ function extractMessageIndex(error: unknown): number | null {
|
|||||||
export function detectErrorType(error: unknown): RecoveryErrorType {
|
export function detectErrorType(error: unknown): RecoveryErrorType {
|
||||||
const message = getErrorMessage(error)
|
const message = getErrorMessage(error)
|
||||||
|
|
||||||
if (message.includes("tool_use") && message.includes("tool_result")) {
|
// IMPORTANT: Check thinking_block_order BEFORE tool_result_missing
|
||||||
return "tool_result_missing"
|
// because Anthropic's extended thinking error messages contain "tool_use" and "tool_result"
|
||||||
}
|
// in the documentation URL, which would incorrectly match tool_result_missing
|
||||||
|
|
||||||
if (
|
if (
|
||||||
message.includes("thinking") &&
|
message.includes("thinking") &&
|
||||||
(message.includes("first block") ||
|
(message.includes("first block") ||
|
||||||
@ -145,6 +144,10 @@ export function detectErrorType(error: unknown): RecoveryErrorType {
|
|||||||
return "thinking_disabled_violation"
|
return "thinking_disabled_violation"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (message.includes("tool_use") && message.includes("tool_result")) {
|
||||||
|
return "tool_result_missing"
|
||||||
|
}
|
||||||
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user