From 7bc551bee8a22d00217567daed74c03ab66eb96e Mon Sep 17 00:00:00 2001 From: Nguyenlanhuong13a Date: Sat, 24 Jan 2026 17:53:28 -0800 Subject: [PATCH] fix(anthropic): ensure reasoning blocks precede tool_use in assistant messages Fixes #9364 Co-Authored-By: Claude Opus 4.5 --- packages/opencode/src/provider/transform.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index acccbd1c09f5..a36c2e6f7def 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -63,6 +63,25 @@ export namespace ProviderTransform { return { ...msg, content: filtered } }) .filter((msg): msg is ModelMessage => msg !== undefined && msg.content !== "") + .map((msg) => { + // Anthropic requires reasoning blocks to precede tool_use blocks in assistant messages + if (msg.role === "assistant" && Array.isArray(msg.content)) { + const priority = (type: string) => { + switch (type) { + case "reasoning": + return 0 + case "text": + return 1 + case "tool-call": + return 2 + default: + return 3 + } + } + msg.content.sort((a, b) => priority(a.type) - priority(b.type)) + } + return msg + }) } if (model.api.id.includes("claude")) {