From bbd325f539bfe9923d24da7f2e5c288aa1899896 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Sat, 20 Dec 2025 22:23:42 +0000 Subject: [PATCH] fix: exclude anthropic prefix from Bedrock detection to avoid false positives --- src/api/providers/__tests__/lite-llm.spec.ts | 13 +++++++------ src/api/providers/lite-llm.ts | 6 +++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/api/providers/__tests__/lite-llm.spec.ts b/src/api/providers/__tests__/lite-llm.spec.ts index a13ca420a6..80a52d2d4d 100644 --- a/src/api/providers/__tests__/lite-llm.spec.ts +++ b/src/api/providers/__tests__/lite-llm.spec.ts @@ -402,11 +402,7 @@ describe("LiteLLMHandler", () => { describe("Bedrock model handling", () => { it("should exclude parallel_tool_calls for Bedrock models when using native tools", async () => { - const bedrockModels = [ - "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0", - "anthropic.claude-sonnet-4-20250514-v1:0", - "amazon.titan-text-express-v1", - ] + const bedrockModels = ["bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0", "amazon.titan-text-express-v1"] for (const modelId of bedrockModels) { vi.clearAllMocks() @@ -466,7 +462,12 @@ describe("LiteLLMHandler", () => { }) it("should include parallel_tool_calls for non-Bedrock models when using native tools", async () => { - const nonBedrockModels = ["gpt-4", "claude-3-opus", "gpt-4-turbo"] + const nonBedrockModels = [ + "gpt-4", + "claude-3-opus", + "gpt-4-turbo", + "anthropic.claude-sonnet-4-20250514-v1:0", + ] for (const modelId of nonBedrockModels) { vi.clearAllMocks() diff --git a/src/api/providers/lite-llm.ts b/src/api/providers/lite-llm.ts index 76fdd3731c..0ec4418c4a 100644 --- a/src/api/providers/lite-llm.ts +++ b/src/api/providers/lite-llm.ts @@ -41,15 +41,15 @@ export class LiteLLMHandler extends RouterProvider implements SingleCompletionHa /** * Check if the model is routed through AWS Bedrock * Bedrock doesn't support the parallel_tool_calls parameter + * Note: We exclude 'anthropic.' prefix as it can match direct Anthropic API access through LiteLLM */ private isBedrockModel(modelId: string): boolean { const lowerModel = modelId.toLowerCase() return ( lowerModel.includes("bedrock") || - lowerModel.startsWith("anthropic.") || lowerModel.includes("amazon.") || - // Match AWS Bedrock model ID patterns - /^(anthropic|amazon|ai21|cohere|meta|mistral)\./.test(lowerModel) + // Match AWS Bedrock model ID patterns (excluding anthropic to avoid false positives) + /^(amazon|ai21|cohere|meta|mistral)\./.test(lowerModel) ) }