Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/smooth-geckos-grab.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@upstash/box-cli": patch
"@upstash/box": patch
---

introduce gpt-5.6 and sonnet 5
12 changes: 6 additions & 6 deletions packages/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ Create a new box and enter an interactive REPL.

```bash
# Uses Upstash-managed key by default (no --agent-api-key needed)
box create --agent-harness claude-code --agent-model anthropic/claude-sonnet-4-5
box create --agent-harness claude-code --agent-model anthropic/claude-sonnet-5

# Use a key stored in the Upstash console
box create --agent-harness claude-code --agent-model anthropic/claude-sonnet-4-5 --agent-api-key stored
box create --agent-harness claude-code --agent-model anthropic/claude-sonnet-5 --agent-api-key stored

# Pass a direct API key
box create \
--agent-harness claude-code \
--agent-model anthropic/claude-sonnet-4-5 \
--agent-model anthropic/claude-sonnet-5 \
--agent-api-key $CLAUDE_KEY \
--runtime node \
--git-token $GITHUB_TOKEN \
Expand Down Expand Up @@ -87,8 +87,8 @@ box connect # connects to most recent
Create a new box from a snapshot and enter the REPL. Accepts the same flags as `create`.

```bash
box from-snapshot snap_abc123 --agent-model anthropic/claude-sonnet-4-5 --agent-harness claude-code
box from-snapshot snap_abc123 --agent-model anthropic/claude-sonnet-4-5 --agent-harness claude-code --agent-api-key $CLAUDE_KEY
box from-snapshot snap_abc123 --agent-model anthropic/claude-sonnet-5 --agent-harness claude-code
box from-snapshot snap_abc123 --agent-model anthropic/claude-sonnet-5 --agent-harness claude-code --agent-api-key $CLAUDE_KEY
```

### `box list`
Expand All @@ -115,7 +115,7 @@ Scaffold a standalone demo project that uses the `@upstash/box` SDK. Creates a d
box init-demo \
--token $UPSTASH_BOX_API_KEY \
--agent-harness claude-code \
--agent-model anthropic/claude-sonnet-4-5 \
--agent-model anthropic/claude-sonnet-5 \
--runtime node \
--git-token $GITHUB_TOKEN \
--directory my-demo
Expand Down
32 changes: 32 additions & 0 deletions packages/cli/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: ClaudeCode.Opus_4_7, label: "Claude Opus 4.7" },
{ value: ClaudeCode.Opus_4_6, label: "Claude Opus 4.6" },
{ value: ClaudeCode.Opus_4_5, label: "Claude Opus 4.5" },
{ value: ClaudeCode.Sonnet_5, label: "Claude Sonnet 5" },
{ value: ClaudeCode.Sonnet_4_6, label: "Claude Sonnet 4.6" },
{ value: ClaudeCode.Sonnet_4_5, label: "Claude Sonnet 4.5" },
{ value: ClaudeCode.Sonnet_4, label: "Claude Sonnet 4" },
Expand All @@ -31,12 +32,17 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "OpenRouter",
options: [
{ value: OpenRouterModel.Claude_Fable_5, label: "Claude Fable 5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_4_5, label: "Claude Opus 4.5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_5, label: "Claude Sonnet 5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_4, label: "Claude Sonnet 4 (OR)" },
{ value: OpenRouterModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5 (OR)" },
{ value: OpenRouterModel.DeepSeek_R1, label: "DeepSeek R1 (OR)" },
{ value: OpenRouterModel.Gemini_2_5_Pro, label: "Gemini 2.5 Pro (OR)" },
{ value: OpenRouterModel.Gemini_2_5_Flash, label: "Gemini 2.5 Flash (OR)" },
{ value: OpenRouterModel.GPT_5_6_Sol, label: "GPT-5.6 Sol (OR)" },
{ value: OpenRouterModel.GPT_5_6_Terra, label: "GPT-5.6 Terra (OR)" },
{ value: OpenRouterModel.GPT_5_6_Luna, label: "GPT-5.6 Luna (OR)" },
{ value: OpenRouterModel.GPT_4_1, label: "GPT-4.1 (OR)" },
{ value: OpenRouterModel.O3, label: "o3 (OR)" },
{ value: OpenRouterModel.O4_Mini, label: "o4-mini (OR)" },
Expand All @@ -45,6 +51,8 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "Vercel AI Gateway",
options: [
{ value: VercelModel.Claude_Fable_5, label: "Claude Fable 5 (Vercel)" },
{ value: VercelModel.Claude_Sonnet_5, label: "Claude Sonnet 5 (Vercel)" },
{ value: VercelModel.Claude_Opus_4_7, label: "Claude Opus 4.7 (Vercel)" },
{ value: VercelModel.Claude_Sonnet_4_6, label: "Claude Sonnet 4.6 (Vercel)" },
{ value: VercelModel.Claude_Opus_4_6, label: "Claude Opus 4.6 (Vercel)" },
Expand All @@ -59,6 +67,9 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "OpenAI",
options: [
{ value: OpenAICodex.GPT_5_6_Sol, label: "GPT-5.6 Sol" },
{ value: OpenAICodex.GPT_5_6_Terra, label: "GPT-5.6 Terra" },
{ value: OpenAICodex.GPT_5_6_Luna, label: "GPT-5.6 Luna" },
{ value: OpenAICodex.GPT_5_5, label: "GPT-5.5" },
{ value: OpenAICodex.GPT_5_4, label: "GPT-5.4" },
{ value: OpenAICodex.GPT_5_4_Mini, label: "GPT-5.4 Mini" },
Expand All @@ -72,12 +83,17 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "OpenRouter",
options: [
{ value: OpenRouterModel.Claude_Fable_5, label: "Claude Fable 5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_4_5, label: "Claude Opus 4.5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_5, label: "Claude Sonnet 5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_4, label: "Claude Sonnet 4 (OR)" },
{ value: OpenRouterModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5 (OR)" },
{ value: OpenRouterModel.DeepSeek_R1, label: "DeepSeek R1 (OR)" },
{ value: OpenRouterModel.Gemini_2_5_Pro, label: "Gemini 2.5 Pro (OR)" },
{ value: OpenRouterModel.Gemini_2_5_Flash, label: "Gemini 2.5 Flash (OR)" },
{ value: OpenRouterModel.GPT_5_6_Sol, label: "GPT-5.6 Sol (OR)" },
{ value: OpenRouterModel.GPT_5_6_Terra, label: "GPT-5.6 Terra (OR)" },
{ value: OpenRouterModel.GPT_5_6_Luna, label: "GPT-5.6 Luna (OR)" },
{ value: OpenRouterModel.GPT_4_1, label: "GPT-4.1 (OR)" },
{ value: OpenRouterModel.O3, label: "o3 (OR)" },
{ value: OpenRouterModel.O4_Mini, label: "o4-mini (OR)" },
Expand All @@ -86,6 +102,9 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "Vercel AI Gateway",
options: [
{ value: VercelModel.GPT_5_6_Sol, label: "GPT-5.6 Sol (Vercel)" },
{ value: VercelModel.GPT_5_6_Terra, label: "GPT-5.6 Terra (Vercel)" },
{ value: VercelModel.GPT_5_6_Luna, label: "GPT-5.6 Luna (Vercel)" },
{ value: VercelModel.GPT_5_5, label: "GPT-5.5 (Vercel)" },
{ value: VercelModel.GPT_5_5_Pro, label: "GPT-5.5 Pro (Vercel)" },
{ value: VercelModel.GPT_5_4, label: "GPT-5.4 (Vercel)" },
Expand All @@ -107,6 +126,8 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
label: "OpenCode — Paid",
options: [
{ value: OpenCodeModel.Zen_MiniMax_M2_7, label: "MiniMax M2.7" },
{ value: OpenCodeModel.Zen_Claude_Fable_5, label: "Claude Fable 5" },
{ value: OpenCodeModel.Zen_Claude_Sonnet_5, label: "Claude Sonnet 5" },
{ value: OpenCodeModel.Zen_Claude_Sonnet_4_6, label: "Claude Sonnet 4.6" },
{ value: OpenCodeModel.Zen_Claude_Sonnet_4_5, label: "Claude Sonnet 4.5" },
{ value: OpenCodeModel.Zen_Claude_Sonnet_4, label: "Claude Sonnet 4" },
Expand All @@ -124,10 +145,12 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "Anthropic",
options: [
{ value: OpenCodeModel.Claude_Fable_5, label: "Claude Fable 5" },
{ value: OpenCodeModel.Claude_Opus_4_8, label: "Claude Opus 4.8" },
{ value: OpenCodeModel.Claude_Opus_4_7, label: "Claude Opus 4.7" },
{ value: OpenCodeModel.Claude_Opus_4_6, label: "Claude Opus 4.6" },
{ value: OpenCodeModel.Claude_Opus_4_5, label: "Claude Opus 4.5" },
{ value: OpenCodeModel.Claude_Sonnet_5, label: "Claude Sonnet 5" },
{ value: OpenCodeModel.Claude_Sonnet_4_6, label: "Claude Sonnet 4.6" },
{ value: OpenCodeModel.Claude_Sonnet_4_5, label: "Claude Sonnet 4.5" },
{ value: OpenCodeModel.Claude_Sonnet_4, label: "Claude Sonnet 4" },
Expand Down Expand Up @@ -155,12 +178,17 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "OpenRouter",
options: [
{ value: OpenRouterModel.Claude_Fable_5, label: "Claude Fable 5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_4_5, label: "Claude Opus 4.5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_5, label: "Claude Sonnet 5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_4, label: "Claude Sonnet 4 (OR)" },
{ value: OpenRouterModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5 (OR)" },
{ value: OpenRouterModel.DeepSeek_R1, label: "DeepSeek R1 (OR)" },
{ value: OpenRouterModel.Gemini_2_5_Pro, label: "Gemini 2.5 Pro (OR)" },
{ value: OpenRouterModel.Gemini_2_5_Flash, label: "Gemini 2.5 Flash (OR)" },
{ value: OpenRouterModel.GPT_5_6_Sol, label: "GPT-5.6 Sol (OR)" },
{ value: OpenRouterModel.GPT_5_6_Terra, label: "GPT-5.6 Terra (OR)" },
{ value: OpenRouterModel.GPT_5_6_Luna, label: "GPT-5.6 Luna (OR)" },
{ value: OpenRouterModel.GPT_4_1, label: "GPT-4.1 (OR)" },
{ value: OpenRouterModel.O3, label: "o3 (OR)" },
{ value: OpenRouterModel.O4_Mini, label: "o4-mini (OR)" },
Expand All @@ -169,6 +197,8 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{
label: "Vercel AI Gateway",
options: [
{ value: VercelModel.Claude_Fable_5, label: "Claude Fable 5 (Vercel)" },
{ value: VercelModel.Claude_Sonnet_5, label: "Claude Sonnet 5 (Vercel)" },
{ value: VercelModel.Claude_Opus_4_7, label: "Claude Opus 4.7 (Vercel)" },
{ value: VercelModel.Claude_Sonnet_4_6, label: "Claude Sonnet 4.6 (Vercel)" },
{ value: VercelModel.GPT_5_5, label: "GPT-5.5 (Vercel)" },
Expand All @@ -187,8 +217,10 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: CursorModel.GPT_5_4, label: "GPT-5.4" },
{ value: CursorModel.GPT_5_4_Mini, label: "GPT-5.4 Mini" },
{ value: CursorModel.GPT_5_3_Codex, label: "GPT-5.3 Codex" },
{ value: CursorModel.Claude_Fable_5, label: "Claude Fable 5" },
{ value: CursorModel.Claude_Opus_4_8, label: "Claude Opus 4.8" },
{ value: CursorModel.Claude_Opus_4_7, label: "Claude Opus 4.7" },
{ value: CursorModel.Claude_Sonnet_5, label: "Claude Sonnet 5" },
{ value: CursorModel.Claude_Sonnet_4_6, label: "Claude Sonnet 4.6" },
{ value: CursorModel.Claude_Sonnet_4_5, label: "Claude Sonnet 4.5" },
{ value: CursorModel.Gemini_3_1_Pro, label: "Gemini 3.1 Pro" },
Expand Down
8 changes: 4 additions & 4 deletions packages/python-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ from upstash_box import AsyncBox, Agent, ClaudeCode
async def main():
box = await AsyncBox.create(
runtime="node",
agent={"harness": Agent.CLAUDE_CODE, "model": ClaudeCode.SONNET_4_5},
agent={"harness": Agent.CLAUDE_CODE, "model": ClaudeCode.SONNET_5},
)
async with box:
run = await box.agent.run(prompt="Create a hello world Express server")
Expand All @@ -37,7 +37,7 @@ from upstash_box import Box, Agent, ClaudeCode

box = Box.create(
runtime="node",
agent={"harness": Agent.CLAUDE_CODE, "model": ClaudeCode.SONNET_4_5},
agent={"harness": Agent.CLAUDE_CODE, "model": ClaudeCode.SONNET_5},
)
with box:
run = box.agent.run(prompt="Create a hello world Express server")
Expand Down Expand Up @@ -80,7 +80,7 @@ box = await AsyncBox.create(
init_command="npm install && npm run dev",
agent={
"harness": Agent.CLAUDE_CODE,
"model": "anthropic/claude-sonnet-4-5",
"model": "anthropic/claude-sonnet-5",
"api_key": BoxApiKey.UPSTASH_KEY, # or BoxApiKey.STORED_KEY, or a direct key
},
git={"token": "...", "user_name": "Jane", "user_email": "jane@example.com"},
Expand Down Expand Up @@ -166,7 +166,7 @@ await box.schedule.pause(schedule.id)
await box.cd("my-project")
print(box.cwd)

await box.configure_model("anthropic/claude-opus-4-5")
await box.configure_model("anthropic/claude-opus-4-8")
print(box.model_config) # {"harness": ..., "model": ...}

await box.pause()
Expand Down
21 changes: 21 additions & 0 deletions packages/python-sdk/upstash_box/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,17 @@ class ClaudeCode(str, Enum):
SONNET_4 = "anthropic/claude-sonnet-4"
SONNET_4_5 = "anthropic/claude-sonnet-4-5"
SONNET_4_6 = "anthropic/claude-sonnet-4-6"
SONNET_5 = "anthropic/claude-sonnet-5"
HAIKU_4_5 = "anthropic/claude-haiku-4-5"


class OpenAICodex(str, Enum):
"""OpenAI Codex model identifiers."""

GPT_5_6 = "openai/gpt-5.6"
GPT_5_6_SOL = "openai/gpt-5.6-sol"
GPT_5_6_TERRA = "openai/gpt-5.6-terra"
GPT_5_6_LUNA = "openai/gpt-5.6-luna"
GPT_5_5 = "openai/gpt-5.5"
GPT_5_4 = "openai/gpt-5.4"
GPT_5_4_MINI = "openai/gpt-5.4-mini"
Expand All @@ -76,12 +81,17 @@ class OpenAICodex(str, Enum):
class OpenRouterModel(str, Enum):
"""OpenRouter model identifiers — shared across agents that support OpenRouter."""

CLAUDE_FABLE_5 = "openrouter/anthropic/claude-fable-5"
CLAUDE_SONNET_5 = "openrouter/anthropic/claude-sonnet-5"
CLAUDE_SONNET_4 = "openrouter/anthropic/claude-sonnet-4"
CLAUDE_OPUS_4_5 = "openrouter/anthropic/claude-opus-4-5"
CLAUDE_HAIKU_4_5 = "openrouter/anthropic/claude-haiku-4-5"
DEEPSEEK_R1 = "openrouter/deepseek/deepseek-r1"
GEMINI_2_5_PRO = "openrouter/google/gemini-2.5-pro"
GEMINI_2_5_FLASH = "openrouter/google/gemini-2.5-flash"
GPT_5_6_SOL = "openrouter/openai/gpt-5.6-sol"
GPT_5_6_TERRA = "openrouter/openai/gpt-5.6-terra"
GPT_5_6_LUNA = "openrouter/openai/gpt-5.6-luna"
GPT_4_1 = "openrouter/openai/gpt-4.1"
O3 = "openrouter/openai/o3"
O4_MINI = "openrouter/openai/o4-mini"
Expand All @@ -90,10 +100,15 @@ class OpenRouterModel(str, Enum):
class VercelModel(str, Enum):
"""Vercel AI Gateway model identifiers."""

CLAUDE_FABLE_5 = "vercel/anthropic/claude-fable-5"
CLAUDE_SONNET_5 = "vercel/anthropic/claude-sonnet-5"
CLAUDE_OPUS_4_7 = "vercel/anthropic/claude-opus-4.7"
CLAUDE_SONNET_4_6 = "vercel/anthropic/claude-sonnet-4.6"
CLAUDE_OPUS_4_6 = "vercel/anthropic/claude-opus-4.6"
CLAUDE_HAIKU_4_5 = "vercel/anthropic/claude-haiku-4.5"
GPT_5_6_SOL = "vercel/openai/gpt-5.6-sol"
GPT_5_6_TERRA = "vercel/openai/gpt-5.6-terra"
GPT_5_6_LUNA = "vercel/openai/gpt-5.6-luna"
GPT_5_5 = "vercel/openai/gpt-5.5"
GPT_5_5_PRO = "vercel/openai/gpt-5.5-pro"
GPT_5_4 = "vercel/openai/gpt-5.4"
Expand All @@ -110,13 +125,15 @@ class OpenCodeModel(str, Enum):
"""OpenCode model identifiers — supports models from multiple providers."""

# Anthropic-backed OpenCode models
CLAUDE_FABLE_5 = "opencode/claude-fable-5"
CLAUDE_OPUS_4_5 = "opencode/claude-opus-4-5"
CLAUDE_OPUS_4_6 = "opencode/claude-opus-4-6"
CLAUDE_OPUS_4_7 = "opencode/claude-opus-4-7"
CLAUDE_OPUS_4_8 = "opencode/claude-opus-4-8"
CLAUDE_SONNET_4 = "opencode/claude-sonnet-4"
CLAUDE_SONNET_4_5 = "opencode/claude-sonnet-4-5"
CLAUDE_SONNET_4_6 = "opencode/claude-sonnet-4-6"
CLAUDE_SONNET_5 = "opencode/claude-sonnet-5"
CLAUDE_HAIKU_4_5 = "opencode/claude-haiku-4-5"
# OpenAI-backed OpenCode models
GPT_5_5 = "opencode/gpt-5.5"
Expand All @@ -137,9 +154,11 @@ class OpenCodeModel(str, Enum):
ZEN_BIG_PICKLE = "opencode/big-pickle"
# Paid models
ZEN_MINIMAX_M2_7 = "opencode/minimax-m2.7"
ZEN_CLAUDE_FABLE_5 = "opencode/claude-fable-5"
ZEN_CLAUDE_SONNET_4_6 = "opencode/claude-sonnet-4-6"
ZEN_CLAUDE_SONNET_4_5 = "opencode/claude-sonnet-4-5"
ZEN_CLAUDE_SONNET_4 = "opencode/claude-sonnet-4"
ZEN_CLAUDE_SONNET_5 = "opencode/claude-sonnet-5"
ZEN_CLAUDE_HAIKU_4_5 = "opencode/claude-haiku-4-5"
ZEN_CLAUDE_OPUS_4_8 = "opencode/claude-opus-4-8"
ZEN_CLAUDE_OPUS_4_7 = "opencode/claude-opus-4-7"
Expand Down Expand Up @@ -168,13 +187,15 @@ class CursorModel(str, Enum):
GPT_5_1_CODEX_MAX = "cursor/gpt-5.1-codex-max"
GPT_5_1_CODEX_MINI = "cursor/gpt-5.1-codex-mini"
GPT_5_MINI = "cursor/gpt-5-mini"
CLAUDE_FABLE_5 = "cursor/claude-fable-5"
CLAUDE_OPUS_4_8 = "cursor/claude-opus-4-8"
CLAUDE_OPUS_4_7 = "cursor/claude-opus-4-7"
CLAUDE_OPUS_4_6 = "cursor/claude-opus-4-6"
CLAUDE_OPUS_4_5 = "cursor/claude-opus-4-5"
CLAUDE_SONNET_4_6 = "cursor/claude-sonnet-4-6"
CLAUDE_SONNET_4_5 = "cursor/claude-sonnet-4-5"
CLAUDE_SONNET_4 = "cursor/claude-sonnet-4"
CLAUDE_SONNET_5 = "cursor/claude-sonnet-5"
CLAUDE_HAIKU_4_5 = "cursor/claude-haiku-4-5"
GEMINI_3_1_PRO = "cursor/gemini-3.1-pro"
GEMINI_3_FLASH = "cursor/gemini-3-flash"
Expand Down
Loading
Loading