diff --git a/open-sse/executors/bedrock.ts b/open-sse/executors/bedrock.ts index 740e3e8bd5..200962af96 100644 --- a/open-sse/executors/bedrock.ts +++ b/open-sse/executors/bedrock.ts @@ -366,6 +366,10 @@ export function openAIToBedrockConverse(model, body) { const toolConfig = toolConfigFromOpenAI(request.tools, request.tool_choice); if (toolConfig) payload.toolConfig = toolConfig; + if (request.additionalModelRequestFields !== undefined) { + payload.additionalModelRequestFields = request.additionalModelRequestFields; + } + return payload; } diff --git a/tests/unit/executor-bedrock.test.ts b/tests/unit/executor-bedrock.test.ts index 14fa822378..61f5b64d54 100644 --- a/tests/unit/executor-bedrock.test.ts +++ b/tests/unit/executor-bedrock.test.ts @@ -97,6 +97,19 @@ test("openAIToBedrockConverse avoids duplicate Bedrock toolUse ids from mixed to assert.equal(payload.messages[2].content[0].toolResult.toolUseId, "call_dup"); }); +test("openAIToBedrockConverse preserves additionalModelRequestFields", () => { + const payload = openAIToBedrockConverse("anthropic.claude-3-7-sonnet-20250219-v1:0", { + messages: [{ role: "user", content: "Hello" }], + additionalModelRequestFields: { + thinking: { type: "enabled", budget_tokens: 2048 }, + }, + }); + + assert.deepStrictEqual(payload.additionalModelRequestFields, { + thinking: { type: "enabled", budget_tokens: 2048 }, + }); +}); + test("openAIToBedrockConverse drops duplicate pending tool call ids", () => { const payload = openAIToBedrockConverse("anthropic.claude-sonnet-4-6", { messages: [