From ca66d25f10d92658bf2efe8b0bcebe9a6ee3c48c Mon Sep 17 00:00:00 2001 From: ewjin Date: Mon, 30 Mar 2026 11:59:00 +0900 Subject: [PATCH] fix(opencode): strip file extension from Bedrock DocumentBlock name --- packages/opencode/src/provider/transform.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index f651a5b91a..fa74767220 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -275,9 +275,24 @@ export namespace ProviderTransform { }) } + function sanitizeBedrockFilenames(msgs: ModelMessage[]): ModelMessage[] { + return msgs.map((msg) => { + if (msg.role !== "user" || !Array.isArray(msg.content)) return msg + const content = msg.content.map((part) => { + if (part.type !== "file" || !part.filename) return part + const sanitized = part.filename.replace(/\.[^.]+$/, "").replace(/[^a-zA-Z0-9\s\-()[\]]/g, "-") + return { ...part, filename: sanitized || "file" } + }) + return { ...msg, content } + }) + } + export function message(msgs: ModelMessage[], model: Provider.Model, options: Record) { msgs = unsupportedParts(msgs, model) msgs = normalizeMessages(msgs, model, options) + if (model.providerID.includes("bedrock") || model.api.npm === "@ai-sdk/amazon-bedrock") { + msgs = sanitizeBedrockFilenames(msgs) + } if ( (model.providerID === "anthropic" || model.api.id.includes("anthropic") ||