mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-12 23:01:21 +00:00
Merge 46d24e7b8c into 7adbfec2a4
This commit is contained in:
commit
a338c8491e
3 changed files with 82 additions and 3 deletions
|
|
@ -520,6 +520,16 @@ export const BEDROCK_REGIONS = [
|
|||
{ value: "us-gov-west-1", label: "us-gov-west-1" },
|
||||
].sort((a, b) => a.value.localeCompare(b.value))
|
||||
|
||||
// Older Claude 3 models on Bedrock that do NOT support the fine-grained-tool-streaming beta.
|
||||
// Sending this beta flag to these models causes Bedrock to reject the request with
|
||||
// "invalid beta flag". See: https://github.com/RooCodeInc/Roo-Code/issues/11715
|
||||
export const BEDROCK_FINE_GRAINED_STREAMING_UNSUPPORTED_IDS = [
|
||||
"anthropic.claude-3-haiku-20240307-v1:0",
|
||||
"anthropic.claude-3-opus-20240229-v1:0",
|
||||
"anthropic.claude-3-sonnet-20240229-v1:0",
|
||||
"anthropic.claude-3-5-sonnet-20240620-v1:0",
|
||||
] as const
|
||||
|
||||
export const BEDROCK_1M_CONTEXT_MODEL_IDS = [
|
||||
"anthropic.claude-sonnet-4-20250514-v1:0",
|
||||
"anthropic.claude-sonnet-4-5-20250929-v1:0",
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import { AwsBedrockHandler } from "../bedrock"
|
|||
import { ConverseStreamCommand, BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime"
|
||||
import {
|
||||
BEDROCK_1M_CONTEXT_MODEL_IDS,
|
||||
BEDROCK_FINE_GRAINED_STREAMING_UNSUPPORTED_IDS,
|
||||
BEDROCK_SERVICE_TIER_MODEL_IDS,
|
||||
bedrockModels,
|
||||
ApiProviderError,
|
||||
|
|
@ -843,6 +844,68 @@ describe("AwsBedrockHandler", () => {
|
|||
expect(commandArg.additionalModelRequestFields.anthropic_beta).not.toContain("context-1m-2025-08-07")
|
||||
})
|
||||
|
||||
it("should NOT include fine-grained-tool-streaming beta for older Claude 3 models", async () => {
|
||||
// Test with Claude 3 Haiku - the model from the original bug report
|
||||
for (const unsupportedModelId of BEDROCK_FINE_GRAINED_STREAMING_UNSUPPORTED_IDS) {
|
||||
const handler = new AwsBedrockHandler({
|
||||
apiModelId: unsupportedModelId,
|
||||
awsAccessKey: "test",
|
||||
awsSecretKey: "test",
|
||||
awsRegion: "us-east-1",
|
||||
})
|
||||
|
||||
const messages: Anthropic.Messages.MessageParam[] = [
|
||||
{
|
||||
role: "user",
|
||||
content: "Test message",
|
||||
},
|
||||
]
|
||||
|
||||
mockConverseStreamCommand.mockClear()
|
||||
|
||||
const generator = handler.createMessage("", messages)
|
||||
await generator.next()
|
||||
|
||||
expect(mockConverseStreamCommand).toHaveBeenCalled()
|
||||
const commandArg = mockConverseStreamCommand.mock.calls[0][0] as any
|
||||
|
||||
// Older Claude 3 models should NOT have fine-grained-tool-streaming beta
|
||||
if (commandArg.additionalModelRequestFields?.anthropic_beta) {
|
||||
expect(commandArg.additionalModelRequestFields.anthropic_beta).not.toContain(
|
||||
"fine-grained-tool-streaming-2025-05-14",
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
it("should still include fine-grained-tool-streaming beta for newer Claude models", async () => {
|
||||
const handler = new AwsBedrockHandler({
|
||||
apiModelId: "anthropic.claude-3-5-sonnet-20241022-v2:0",
|
||||
awsAccessKey: "test",
|
||||
awsSecretKey: "test",
|
||||
awsRegion: "us-east-1",
|
||||
})
|
||||
|
||||
const messages: Anthropic.Messages.MessageParam[] = [
|
||||
{
|
||||
role: "user",
|
||||
content: "Test message",
|
||||
},
|
||||
]
|
||||
|
||||
const generator = handler.createMessage("", messages)
|
||||
await generator.next()
|
||||
|
||||
expect(mockConverseStreamCommand).toHaveBeenCalled()
|
||||
const commandArg = mockConverseStreamCommand.mock.calls[0][0] as any
|
||||
|
||||
// Newer Claude models should still have the beta
|
||||
expect(commandArg.additionalModelRequestFields).toBeDefined()
|
||||
expect(commandArg.additionalModelRequestFields.anthropic_beta).toContain(
|
||||
"fine-grained-tool-streaming-2025-05-14",
|
||||
)
|
||||
})
|
||||
|
||||
it("should enable 1M context window with cross-region inference for Claude Sonnet 4", () => {
|
||||
const handler = new AwsBedrockHandler({
|
||||
apiModelId: BEDROCK_1M_CONTEXT_MODEL_IDS[0],
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import {
|
|||
BEDROCK_DEFAULT_CONTEXT,
|
||||
AWS_INFERENCE_PROFILE_MAPPING,
|
||||
BEDROCK_1M_CONTEXT_MODEL_IDS,
|
||||
BEDROCK_FINE_GRAINED_STREAMING_UNSUPPORTED_IDS,
|
||||
BEDROCK_GLOBAL_INFERENCE_MODEL_IDS,
|
||||
BEDROCK_SERVICE_TIER_MODEL_IDS,
|
||||
BEDROCK_SERVICE_TIER_PRICING,
|
||||
|
|
@ -436,9 +437,14 @@ export class AwsBedrockHandler extends BaseProvider implements SingleCompletionH
|
|||
anthropicBetas.push("context-1m-2025-08-07")
|
||||
}
|
||||
|
||||
// Add fine-grained tool streaming beta for Claude models
|
||||
// This enables proper tool use streaming for Anthropic models on Bedrock
|
||||
if (baseModelId.includes("claude")) {
|
||||
// Add fine-grained tool streaming beta for Claude models that support it.
|
||||
// Older Claude 3 models (Haiku, Opus, Sonnet, and original 3.5 Sonnet) do not
|
||||
// support this beta flag and Bedrock rejects the request with "invalid beta flag".
|
||||
// See: https://github.com/RooCodeInc/Roo-Code/issues/11715
|
||||
if (
|
||||
baseModelId.includes("claude") &&
|
||||
!BEDROCK_FINE_GRAINED_STREAMING_UNSUPPORTED_IDS.includes(baseModelId as any)
|
||||
) {
|
||||
anthropicBetas.push("fine-grained-tool-streaming-2025-05-14")
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue