Skip to content

Commit bfe7505

Browse files
Tom-Ryderdemostanis
authored andcommitted
fix: filter empty content blocks for Bedrock provider (anomalyco#14586)
1 parent 7756564 commit bfe7505

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

packages/opencode/src/provider/transform.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export namespace ProviderTransform {
5151
): ModelMessage[] {
5252
// Anthropic rejects messages with empty content - filter out empty string messages
5353
// and remove empty text/reasoning parts from array content
54-
if (model.api.npm === "@ai-sdk/anthropic") {
54+
if (model.api.npm === "@ai-sdk/anthropic" || model.api.npm === "@ai-sdk/amazon-bedrock") {
5555
msgs = msgs
5656
.map((msg) => {
5757
if (typeof msg.content === "string") {

packages/opencode/test/provider/transform.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,38 @@ describe("ProviderTransform.message - anthropic empty content filtering", () =>
10961096
expect(result[0].content[1]).toEqual({ type: "text", text: "Result" })
10971097
})
10981098

1099+
test("filters empty content for bedrock provider", () => {
1100+
const bedrockModel = {
1101+
...anthropicModel,
1102+
id: "amazon-bedrock/anthropic.claude-opus-4-6",
1103+
providerID: "amazon-bedrock",
1104+
api: {
1105+
id: "anthropic.claude-opus-4-6",
1106+
url: "https://bedrock-runtime.us-east-1.amazonaws.com",
1107+
npm: "@ai-sdk/amazon-bedrock",
1108+
},
1109+
}
1110+
1111+
const msgs = [
1112+
{ role: "user", content: "Hello" },
1113+
{ role: "assistant", content: "" },
1114+
{
1115+
role: "assistant",
1116+
content: [
1117+
{ type: "text", text: "" },
1118+
{ type: "text", text: "Answer" },
1119+
],
1120+
},
1121+
] as any[]
1122+
1123+
const result = ProviderTransform.message(msgs, bedrockModel, {})
1124+
1125+
expect(result).toHaveLength(2)
1126+
expect(result[0].content).toBe("Hello")
1127+
expect(result[1].content).toHaveLength(1)
1128+
expect(result[1].content[0]).toEqual({ type: "text", text: "Answer" })
1129+
})
1130+
10991131
test("does not filter for non-anthropic providers", () => {
11001132
const openaiModel = {
11011133
...anthropicModel,

0 commit comments

Comments
 (0)