Skip to content
31 changes: 31 additions & 0 deletions packages/cli/src/models.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
Agent,
BedrockModel,
ClaudeCode,
CursorModel,
OpenAICodex,
Expand Down Expand Up @@ -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)" },
Comment on lines +66 to +70
Comment on lines +66 to +70
{ 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]: [
{
Expand Down Expand Up @@ -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]: [
{
Expand Down
2 changes: 2 additions & 0 deletions packages/python-sdk/upstash_box/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
AgentOptions,
AgentScheduleOptions,
Base64FileInput,
BedrockModel,
BoxApiKey,
BoxConfig,
BoxConnectionOptions,
Expand Down Expand Up @@ -165,6 +166,7 @@
"CustomHarnessEmitter",
# Enums
"Agent",
"BedrockModel",
"BoxApiKey",
"ClaudeCode",
"CursorModel",
Expand Down
2 changes: 2 additions & 0 deletions packages/python-sdk/upstash_box/_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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/"):
Expand Down
15 changes: 15 additions & 0 deletions packages/python-sdk/upstash_box/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""

Expand Down
1 change: 1 addition & 0 deletions packages/sdk/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Comment on lines 91 to 94
if (model.startsWith("vercel/openai/")) return Agent.Codex;
if (model.startsWith("vercel/")) return Agent.ClaudeCode;
Expand Down
1 change: 1 addition & 0 deletions packages/sdk/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export {
OpenCodeModel,
OpenRouterModel,
VercelModel,
BedrockModel,
Agent,
BoxApiKey,
} from "./types.js";
Expand Down
33 changes: 29 additions & 4 deletions packages/sdk/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down Expand Up @@ -249,7 +262,7 @@ type ManagedAgentApiKeyConfig = {
type HarnessConfig =
| {
harness: Agent.ClaudeCode;
model: ClaudeCode | OpenRouterModel | VercelModel;
model: ClaudeCode | OpenRouterModel | VercelModel | BedrockModel;
provider?: never;
runner?: never;
}
Expand All @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -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;
}
Expand Down
Loading