diff --git a/packages/cli/src/models.ts b/packages/cli/src/models.ts index 585cbffb..e943ccf1 100644 --- a/packages/cli/src/models.ts +++ b/packages/cli/src/models.ts @@ -1,5 +1,6 @@ import { Agent, + BedrockModel, ClaudeCode, CursorModel, OpenAICodex, @@ -62,6 +63,21 @@ export const MODEL_OPTIONS_BY_AGENT: Record< { value: VercelModel.Grok_4_3, label: "Grok 4.3 (Vercel)" }, ], }, + { + label: "AWS Bedrock", + options: [ + { value: BedrockModel.Opus_5, label: "Claude Opus 5 (Bedrock)" }, + { value: BedrockModel.Opus_4_8, label: "Claude Opus 4.8 (Bedrock)" }, + { value: BedrockModel.Opus_4_7, label: "Claude Opus 4.7 (Bedrock)" }, + { value: BedrockModel.Opus_4_6, label: "Claude Opus 4.6 (Bedrock)" }, + { value: BedrockModel.Opus_4_5, label: "Claude Opus 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_5, label: "Claude Sonnet 5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_6, label: "Claude Sonnet 4.6 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_5, label: "Claude Sonnet 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4, label: "Claude Sonnet 4 (Bedrock)" }, + { value: BedrockModel.Haiku_4_5, label: "Claude Haiku 4.5 (Bedrock)" }, + ], + }, ], [Agent.Codex]: [ { @@ -206,6 +222,21 @@ export const MODEL_OPTIONS_BY_AGENT: Record< { value: VercelModel.Grok_4_3, label: "Grok 4.3 (Vercel)" }, ], }, + { + label: "AWS Bedrock", + options: [ + { value: BedrockModel.Opus_5, label: "Claude Opus 5 (Bedrock)" }, + { value: BedrockModel.Opus_4_8, label: "Claude Opus 4.8 (Bedrock)" }, + { value: BedrockModel.Opus_4_7, label: "Claude Opus 4.7 (Bedrock)" }, + { value: BedrockModel.Opus_4_6, label: "Claude Opus 4.6 (Bedrock)" }, + { value: BedrockModel.Opus_4_5, label: "Claude Opus 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_5, label: "Claude Sonnet 5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_6, label: "Claude Sonnet 4.6 (Bedrock)" }, + { value: BedrockModel.Sonnet_4_5, label: "Claude Sonnet 4.5 (Bedrock)" }, + { value: BedrockModel.Sonnet_4, label: "Claude Sonnet 4 (Bedrock)" }, + { value: BedrockModel.Haiku_4_5, label: "Claude Haiku 4.5 (Bedrock)" }, + ], + }, ], [Agent.Cursor]: [ { diff --git a/packages/python-sdk/upstash_box/__init__.py b/packages/python-sdk/upstash_box/__init__.py index 50fdb5fb..270d8433 100644 --- a/packages/python-sdk/upstash_box/__init__.py +++ b/packages/python-sdk/upstash_box/__init__.py @@ -51,6 +51,7 @@ AgentOptions, AgentScheduleOptions, Base64FileInput, + BedrockModel, BoxApiKey, BoxConfig, BoxConnectionOptions, @@ -165,6 +166,7 @@ "CustomHarnessEmitter", # Enums "Agent", + "BedrockModel", "BoxApiKey", "ClaudeCode", "CursorModel", diff --git a/packages/python-sdk/upstash_box/_common.py b/packages/python-sdk/upstash_box/_common.py index 5370972d..5ffcf536 100644 --- a/packages/python-sdk/upstash_box/_common.py +++ b/packages/python-sdk/upstash_box/_common.py @@ -89,6 +89,8 @@ def infer_default_provider(model: str) -> Agent: """Infer the default harness from a model string prefix.""" if model.startswith("custom/"): return Agent.CUSTOM + if model.startswith("bedrock/"): + return Agent.CLAUDE_CODE if model.startswith("cursor/"): return Agent.CURSOR if model.startswith("vercel/openai/"): diff --git a/packages/python-sdk/upstash_box/types.py b/packages/python-sdk/upstash_box/types.py index 87038ed3..985771cb 100644 --- a/packages/python-sdk/upstash_box/types.py +++ b/packages/python-sdk/upstash_box/types.py @@ -121,6 +121,21 @@ class VercelModel(str, Enum): GROK_4_20_REASONING = "vercel/xai/grok-4.20-reasoning" +class BedrockModel(str, Enum): + """AWS Bedrock model identifiers (Claude Code and OpenCode harnesses).""" + + OPUS_5 = "bedrock/global.anthropic.claude-opus-5" + OPUS_4_8 = "bedrock/global.anthropic.claude-opus-4-8" + OPUS_4_7 = "bedrock/global.anthropic.claude-opus-4-7" + OPUS_4_6 = "bedrock/global.anthropic.claude-opus-4-6-v1" + OPUS_4_5 = "bedrock/global.anthropic.claude-opus-4-5-20251101-v1:0" + SONNET_5 = "bedrock/global.anthropic.claude-sonnet-5" + SONNET_4_6 = "bedrock/global.anthropic.claude-sonnet-4-6" + SONNET_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0" + SONNET_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0" + HAIKU_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0" + + class OpenCodeModel(str, Enum): """OpenCode model identifiers — supports models from multiple providers.""" diff --git a/packages/sdk/src/client.ts b/packages/sdk/src/client.ts index e6142afd..e5e26e2f 100644 --- a/packages/sdk/src/client.ts +++ b/packages/sdk/src/client.ts @@ -90,6 +90,7 @@ function base64ToBytes(b64: string): Uint8Array { /** Infer the default harness from a model string prefix. */ export function inferDefaultProvider(model: string): Agent { if (model.startsWith("custom/")) return Agent.Custom; + if (model.startsWith("bedrock/")) return Agent.ClaudeCode; if (model.startsWith("cursor/")) return Agent.Cursor; if (model.startsWith("vercel/openai/")) return Agent.Codex; if (model.startsWith("vercel/")) return Agent.ClaudeCode; diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 5c2184ad..8bde5a64 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -17,6 +17,7 @@ export { OpenCodeModel, OpenRouterModel, VercelModel, + BedrockModel, Agent, BoxApiKey, } from "./types.js"; diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index fbc46e0f..badc0ebb 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -119,6 +119,19 @@ export enum VercelModel { Grok_4_20_Reasoning = "vercel/xai/grok-4.20-reasoning", } +export enum BedrockModel { + Opus_5 = "bedrock/global.anthropic.claude-opus-5", + Opus_4_8 = "bedrock/global.anthropic.claude-opus-4-8", + Opus_4_7 = "bedrock/global.anthropic.claude-opus-4-7", + Opus_4_6 = "bedrock/global.anthropic.claude-opus-4-6-v1", + Opus_4_5 = "bedrock/global.anthropic.claude-opus-4-5-20251101-v1:0", + Sonnet_5 = "bedrock/global.anthropic.claude-sonnet-5", + Sonnet_4_6 = "bedrock/global.anthropic.claude-sonnet-4-6", + Sonnet_4_5 = "bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0", + Sonnet_4 = "bedrock/global.anthropic.claude-sonnet-4-20250514-v1:0", + Haiku_4_5 = "bedrock/global.anthropic.claude-haiku-4-5-20251001-v1:0", +} + /** * OpenCode model identifiers — supports models from multiple providers */ @@ -249,7 +262,7 @@ type ManagedAgentApiKeyConfig = { type HarnessConfig = | { harness: Agent.ClaudeCode; - model: ClaudeCode | OpenRouterModel | VercelModel; + model: ClaudeCode | OpenRouterModel | VercelModel | BedrockModel; provider?: never; runner?: never; } @@ -261,7 +274,13 @@ type HarnessConfig = } | { harness: Agent.OpenCode; - model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel; + model: + | OpenCodeModel + | ClaudeCode + | OpenAICodex + | OpenRouterModel + | VercelModel + | BedrockModel; provider?: never; runner?: never; } @@ -270,7 +289,7 @@ type HarnessConfig = | { /** @deprecated Use `harness` instead. */ provider: Agent.ClaudeCode; - model: ClaudeCode | OpenRouterModel | VercelModel; + model: ClaudeCode | OpenRouterModel | VercelModel | BedrockModel; harness?: never; runner?: never; } @@ -284,7 +303,13 @@ type HarnessConfig = | { /** @deprecated Use `harness` instead. */ provider: Agent.OpenCode; - model: OpenCodeModel | ClaudeCode | OpenAICodex | OpenRouterModel | VercelModel; + model: + | OpenCodeModel + | ClaudeCode + | OpenAICodex + | OpenRouterModel + | VercelModel + | BedrockModel; harness?: never; runner?: never; }