Skip to content
Open
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
7 changes: 7 additions & 0 deletions .changeset/claude-sonnet-haiku-5-5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@upstash/box": patch
"@upstash/box-cli": patch
---

Add Claude Sonnet 5.5 and Claude Haiku 5.5 model constants and CLI options for
Claude Code, OpenRouter, Vercel AI Gateway, OpenCode/Zen, and Cursor.
30 changes: 30 additions & 0 deletions packages/cli/src/__tests__/models.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,36 @@ import {
import { MODEL_OPTIONS_BY_AGENT } from "../models.js";

describe("MODEL_OPTIONS_BY_AGENT", () => {
it.each([
[Agent.ClaudeCode, "Anthropic", ClaudeCode.Sonnet_5_5, "Claude Sonnet 5.5"],
[Agent.ClaudeCode, "Anthropic", ClaudeCode.Haiku_5_5, "Claude Haiku 5.5"],
[Agent.ClaudeCode, "OpenRouter", OpenRouterModel.Claude_Sonnet_5_5, "Claude Sonnet 5.5 (OR)"],
[Agent.ClaudeCode, "OpenRouter", OpenRouterModel.Claude_Haiku_5_5, "Claude Haiku 5.5 (OR)"],
[
Agent.ClaudeCode,
"Vercel AI Gateway",
VercelModel.Claude_Haiku_5_5,
"Claude Haiku 5.5 (Vercel)",
],
[Agent.Codex, "OpenRouter", OpenRouterModel.Claude_Sonnet_5_5, "Claude Sonnet 5.5 (OR)"],
[Agent.OpenCode, "OpenCode — Paid", OpenCodeModel.Zen_Claude_Haiku_5_5, "Claude Haiku 5.5"],
[Agent.OpenCode, "Anthropic", OpenCodeModel.Claude_Sonnet_5_5, "Claude Sonnet 5.5"],
[
Agent.OpenCode,
"Vercel AI Gateway",
VercelModel.Claude_Sonnet_5_5,
"Claude Sonnet 5.5 (Vercel)",
],
[Agent.Cursor, "Cursor", CursorModel.Claude_Sonnet_5_5, "Claude Sonnet 5.5"],
])(
"includes Claude Sonnet 5.5 and Haiku 5.5 for %s via %s",
(agent, groupLabel, value, label) => {
const group = MODEL_OPTIONS_BY_AGENT[agent].find(({ label }) => label === groupLabel);

expect(group?.options).toContainEqual({ value, label });
},
);

it.each([
[Agent.ClaudeCode, "Anthropic", ClaudeCode.Opus_5_5, "Claude Opus 5.5"],
[Agent.ClaudeCode, "OpenRouter", OpenRouterModel.Claude_Opus_5_5, "Claude Opus 5.5 (OR)"],
Expand Down
16 changes: 16 additions & 0 deletions packages/cli/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ 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_5, label: "Claude Sonnet 5.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" },
{ value: ClaudeCode.Haiku_5_5, label: "Claude Haiku 5.5" },
{ value: ClaudeCode.Haiku_4_5, label: "Claude Haiku 4.5" },
],
},
Expand All @@ -41,8 +43,10 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: OpenRouterModel.Claude_Opus_5_5, label: "Claude Opus 5.5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_5, label: "Claude Opus 5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_4_5, label: "Claude Opus 4.5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_5_5, label: "Claude Sonnet 5.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_5_5, label: "Claude Haiku 5.5 (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)" },
Expand All @@ -66,10 +70,12 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: VercelModel.Claude_Fable_5, label: "Claude Fable 5 (Vercel)" },
{ value: VercelModel.Claude_Opus_5_5, label: "Claude Opus 5.5 (Vercel)" },
{ value: VercelModel.Claude_Opus_5, label: "Claude Opus 5 (Vercel)" },
{ value: VercelModel.Claude_Sonnet_5_5, label: "Claude Sonnet 5.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)" },
{ value: VercelModel.Claude_Haiku_5_5, label: "Claude Haiku 5.5 (Vercel)" },
{ value: VercelModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5 (Vercel)" },
{ value: VercelModel.Gemini_3_8_Flash, label: "Gemini 3.8 Flash (Vercel)" },
{ value: VercelModel.Gemini_3_5_Flash, label: "Gemini 3.5 Flash (Vercel)" },
Expand Down Expand Up @@ -107,8 +113,10 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: OpenRouterModel.Claude_Opus_5_5, label: "Claude Opus 5.5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_5, label: "Claude Opus 5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_4_5, label: "Claude Opus 4.5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_5_5, label: "Claude Sonnet 5.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_5_5, label: "Claude Haiku 5.5 (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)" },
Expand Down Expand Up @@ -179,10 +187,12 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: OpenCodeModel.Zen_Claude_Fable_5, label: "Claude Fable 5" },
{ value: OpenCodeModel.Zen_Claude_Opus_5_5, label: "Claude Opus 5.5" },
{ value: OpenCodeModel.Zen_Claude_Opus_5, label: "Claude Opus 5" },
{ value: OpenCodeModel.Zen_Claude_Sonnet_5_5, label: "Claude Sonnet 5.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" },
{ value: OpenCodeModel.Zen_Claude_Haiku_5_5, label: "Claude Haiku 5.5" },
{ value: OpenCodeModel.Zen_Claude_Haiku_4_5, label: "Claude Haiku 4.5" },
{ value: OpenCodeModel.Zen_Claude_Opus_4_8, label: "Claude Opus 4.8" },
{ value: OpenCodeModel.Zen_Claude_Opus_4_7, label: "Claude Opus 4.7" },
Expand All @@ -205,10 +215,12 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ 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_5, label: "Claude Sonnet 5.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" },
{ value: OpenCodeModel.Claude_Haiku_5_5, label: "Claude Haiku 5.5" },
{ value: OpenCodeModel.Claude_Haiku_4_5, label: "Claude Haiku 4.5" },
],
},
Expand Down Expand Up @@ -242,8 +254,10 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: OpenRouterModel.Claude_Opus_5_5, label: "Claude Opus 5.5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_5, label: "Claude Opus 5 (OR)" },
{ value: OpenRouterModel.Claude_Opus_4_5, label: "Claude Opus 4.5 (OR)" },
{ value: OpenRouterModel.Claude_Sonnet_5_5, label: "Claude Sonnet 5.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_5_5, label: "Claude Haiku 5.5 (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)" },
Expand All @@ -267,6 +281,7 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: VercelModel.Claude_Fable_5, label: "Claude Fable 5 (Vercel)" },
{ value: VercelModel.Claude_Opus_5_5, label: "Claude Opus 5.5 (Vercel)" },
{ value: VercelModel.Claude_Opus_5, label: "Claude Opus 5 (Vercel)" },
{ value: VercelModel.Claude_Sonnet_5_5, label: "Claude Sonnet 5.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)" },
Expand Down Expand Up @@ -329,6 +344,7 @@ export const MODEL_OPTIONS_BY_AGENT: Record<
{ value: CursorModel.Claude_Opus_5, label: "Claude Opus 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_5, label: "Claude Sonnet 5.5" },
{ 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" },
Expand Down
5 changes: 5 additions & 0 deletions packages/python-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

All notable changes to `upstash-box` (Python) are documented here.

## Unreleased

- Add Claude Sonnet 5.5 and Claude Haiku 5.5 model constants for Claude Code,
OpenRouter, Vercel AI Gateway, OpenCode/Zen, and Cursor, mirroring `@upstash/box`.

## 0.4.0

- **Breaking:** `git.exec()` returns a `GitExecResult` with `output` and
Expand Down
15 changes: 15 additions & 0 deletions packages/python-sdk/tests/_async/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,21 @@
)


def test_claude_sonnet_5_5_and_haiku_5_5_model_identifiers():
assert ClaudeCode.SONNET_5_5.value == "anthropic/claude-sonnet-5-5"
assert ClaudeCode.HAIKU_5_5.value == "anthropic/claude-haiku-5-5"
assert OpenRouterModel.CLAUDE_SONNET_5_5.value == "openrouter/anthropic/claude-sonnet-5.5"
assert OpenRouterModel.CLAUDE_HAIKU_5_5.value == "openrouter/anthropic/claude-haiku-5.5"
assert VercelModel.CLAUDE_SONNET_5_5.value == "vercel/anthropic/claude-sonnet-5.5"
assert VercelModel.CLAUDE_HAIKU_5_5.value == "vercel/anthropic/claude-haiku-5.5"
assert OpenCodeModel.CLAUDE_SONNET_5_5.value == "opencode/claude-sonnet-5-5"
assert OpenCodeModel.CLAUDE_HAIKU_5_5.value == "opencode/claude-haiku-5-5"
assert OpenCodeModel.ZEN_CLAUDE_SONNET_5_5.value == "opencode/claude-sonnet-5-5"
assert OpenCodeModel.ZEN_CLAUDE_HAIKU_5_5.value == "opencode/claude-haiku-5-5"
assert CursorModel.CLAUDE_SONNET_5_5.value == "cursor/claude-sonnet-5-5"
assert CursorModel.CLAUDE_HAIKU_5_5.value == "cursor/claude-haiku-5-5"


def test_claude_opus_5_5_model_identifier():
assert {
ClaudeCode.OPUS_5_5.value,
Expand Down
12 changes: 12 additions & 0 deletions packages/python-sdk/upstash_box/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ 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_5 = "anthropic/claude-sonnet-5-5"
SONNET_5 = "anthropic/claude-sonnet-5"
HAIKU_5_5 = "anthropic/claude-haiku-5-5"
HAIKU_4_5 = "anthropic/claude-haiku-4-5"


Expand Down Expand Up @@ -92,9 +94,11 @@ class OpenRouterModel(str, Enum):
CLAUDE_FABLE_5 = "openrouter/anthropic/claude-fable-5"
CLAUDE_OPUS_5_5 = "openrouter/anthropic/claude-opus-5.5"
CLAUDE_OPUS_5 = "openrouter/anthropic/claude-opus-5"
CLAUDE_SONNET_5_5 = "openrouter/anthropic/claude-sonnet-5.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_5_5 = "openrouter/anthropic/claude-haiku-5.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"
Expand All @@ -118,10 +122,12 @@ class VercelModel(str, Enum):
CLAUDE_FABLE_5 = "vercel/anthropic/claude-fable-5"
CLAUDE_OPUS_5_5 = "vercel/anthropic/claude-opus-5.5"
CLAUDE_OPUS_5 = "vercel/anthropic/claude-opus-5"
CLAUDE_SONNET_5_5 = "vercel/anthropic/claude-sonnet-5.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_5_5 = "vercel/anthropic/claude-haiku-5.5"
CLAUDE_HAIKU_4_5 = "vercel/anthropic/claude-haiku-4.5"
GPT_6_1_SOL = "vercel/openai/gpt-6.1-sol"
GPT_6_ASTRA = "vercel/openai/gpt-6-astra"
Expand Down Expand Up @@ -214,7 +220,9 @@ class OpenCodeModel(str, Enum):
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_5 = "opencode/claude-sonnet-5-5"
CLAUDE_SONNET_5 = "opencode/claude-sonnet-5"
CLAUDE_HAIKU_5_5 = "opencode/claude-haiku-5-5"
CLAUDE_HAIKU_4_5 = "opencode/claude-haiku-4-5"
# OpenAI-backed OpenCode models
GPT_6_1_SOL = "opencode/gpt-6.1-sol"
Expand Down Expand Up @@ -246,7 +254,9 @@ class OpenCodeModel(str, Enum):
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_5 = "opencode/claude-sonnet-5-5"
ZEN_CLAUDE_SONNET_5 = "opencode/claude-sonnet-5"
ZEN_CLAUDE_HAIKU_5_5 = "opencode/claude-haiku-5-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 @@ -285,7 +295,9 @@ class CursorModel(str, Enum):
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_5 = "cursor/claude-sonnet-5-5"
CLAUDE_SONNET_5 = "cursor/claude-sonnet-5"
CLAUDE_HAIKU_5_5 = "cursor/claude-haiku-5-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
44 changes: 24 additions & 20 deletions packages/sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,9 @@ The preferred field in agent config is `harness`, and it is required. Deprecated
| `ClaudeCode.Sonnet_4` | `anthropic/claude-sonnet-4` |
| `ClaudeCode.Sonnet_4_5` | `anthropic/claude-sonnet-4-5` |
| `ClaudeCode.Sonnet_4_6` | `anthropic/claude-sonnet-4-6` |
| `ClaudeCode.Sonnet_5_5` | `anthropic/claude-sonnet-5-5` |
| `ClaudeCode.Sonnet_5` | `anthropic/claude-sonnet-5` |
| `ClaudeCode.Haiku_5_5` | `anthropic/claude-haiku-5-5` |
| `ClaudeCode.Haiku_4_5` | `anthropic/claude-haiku-4-5` |

### OpenAI Codex
Expand All @@ -421,26 +423,28 @@ The preferred field in agent config is `harness`, and it is required. Deprecated

### OpenRouter

| Enum | Value |
| ---------------------------------- | --------------------------------------- |
| `OpenRouterModel.Claude_Fable_5_1` | `openrouter/anthropic/claude-fable-5.1` |
| `OpenRouterModel.Claude_Fable_5` | `openrouter/anthropic/claude-fable-5` |
| `OpenRouterModel.Claude_Opus_5_5` | `openrouter/anthropic/claude-opus-5.5` |
| `OpenRouterModel.Claude_Opus_5` | `openrouter/anthropic/claude-opus-5` |
| `OpenRouterModel.Claude_Sonnet_5` | `openrouter/anthropic/claude-sonnet-5` |
| `OpenRouterModel.Claude_Opus_4_5` | `openrouter/anthropic/claude-opus-4-5` |
| `OpenRouterModel.Claude_Sonnet_4` | `openrouter/anthropic/claude-sonnet-4` |
| `OpenRouterModel.Claude_Haiku_4_5` | `openrouter/anthropic/claude-haiku-4-5` |
| `OpenRouterModel.DeepSeek_R1` | `openrouter/deepseek/deepseek-r1` |
| `OpenRouterModel.Gemini_2_5_Pro` | `openrouter/google/gemini-2.5-pro` |
| `OpenRouterModel.Gemini_2_5_Flash` | `openrouter/google/gemini-2.5-flash` |
| `OpenRouterModel.GPT_6_1_Sol` | `openrouter/openai/gpt-6.1-sol` |
| `OpenRouterModel.GPT_5_6_Sol` | `openrouter/openai/gpt-5.6-sol` |
| `OpenRouterModel.GPT_5_6_Terra` | `openrouter/openai/gpt-5.6-terra` |
| `OpenRouterModel.GPT_5_6_Luna` | `openrouter/openai/gpt-5.6-luna` |
| `OpenRouterModel.GPT_4_1` | `openrouter/openai/gpt-4.1` |
| `OpenRouterModel.O3` | `openrouter/openai/o3` |
| `OpenRouterModel.O4_Mini` | `openrouter/openai/o4-mini` |
| Enum | Value |
| ----------------------------------- | ---------------------------------------- |
| `OpenRouterModel.Claude_Fable_5_1` | `openrouter/anthropic/claude-fable-5.1` |
| `OpenRouterModel.Claude_Fable_5` | `openrouter/anthropic/claude-fable-5` |
| `OpenRouterModel.Claude_Opus_5_5` | `openrouter/anthropic/claude-opus-5.5` |
| `OpenRouterModel.Claude_Opus_5` | `openrouter/anthropic/claude-opus-5` |
| `OpenRouterModel.Claude_Sonnet_5_5` | `openrouter/anthropic/claude-sonnet-5.5` |
| `OpenRouterModel.Claude_Sonnet_5` | `openrouter/anthropic/claude-sonnet-5` |
| `OpenRouterModel.Claude_Opus_4_5` | `openrouter/anthropic/claude-opus-4-5` |
| `OpenRouterModel.Claude_Sonnet_4` | `openrouter/anthropic/claude-sonnet-4` |
| `OpenRouterModel.Claude_Haiku_5_5` | `openrouter/anthropic/claude-haiku-5.5` |
| `OpenRouterModel.Claude_Haiku_4_5` | `openrouter/anthropic/claude-haiku-4-5` |
| `OpenRouterModel.DeepSeek_R1` | `openrouter/deepseek/deepseek-r1` |
| `OpenRouterModel.Gemini_2_5_Pro` | `openrouter/google/gemini-2.5-pro` |
| `OpenRouterModel.Gemini_2_5_Flash` | `openrouter/google/gemini-2.5-flash` |
| `OpenRouterModel.GPT_6_1_Sol` | `openrouter/openai/gpt-6.1-sol` |
| `OpenRouterModel.GPT_5_6_Sol` | `openrouter/openai/gpt-5.6-sol` |
| `OpenRouterModel.GPT_5_6_Terra` | `openrouter/openai/gpt-5.6-terra` |
| `OpenRouterModel.GPT_5_6_Luna` | `openrouter/openai/gpt-5.6-luna` |
| `OpenRouterModel.GPT_4_1` | `openrouter/openai/gpt-4.1` |
| `OpenRouterModel.O3` | `openrouter/openai/o3` |
| `OpenRouterModel.O4_Mini` | `openrouter/openai/o4-mini` |

## Box Sizes

Expand Down
23 changes: 23 additions & 0 deletions packages/sdk/src/__tests__/types.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,29 @@ import {
VercelModel,
} from "../types.js";

describe("Claude Sonnet 5.5 and Haiku 5.5 model identifiers", () => {
it.each([
["Claude Code Sonnet", ClaudeCode.Sonnet_5_5, "anthropic/claude-sonnet-5-5"],
["Claude Code Haiku", ClaudeCode.Haiku_5_5, "anthropic/claude-haiku-5-5"],
[
"OpenRouter Sonnet",
OpenRouterModel.Claude_Sonnet_5_5,
"openrouter/anthropic/claude-sonnet-5.5",
],
["OpenRouter Haiku", OpenRouterModel.Claude_Haiku_5_5, "openrouter/anthropic/claude-haiku-5.5"],
["Vercel Sonnet", VercelModel.Claude_Sonnet_5_5, "vercel/anthropic/claude-sonnet-5.5"],
["Vercel Haiku", VercelModel.Claude_Haiku_5_5, "vercel/anthropic/claude-haiku-5.5"],
["OpenCode Anthropic Sonnet", OpenCodeModel.Claude_Sonnet_5_5, "opencode/claude-sonnet-5-5"],
["OpenCode Anthropic Haiku", OpenCodeModel.Claude_Haiku_5_5, "opencode/claude-haiku-5-5"],
["OpenCode Zen Sonnet", OpenCodeModel.Zen_Claude_Sonnet_5_5, "opencode/claude-sonnet-5-5"],
["OpenCode Zen Haiku", OpenCodeModel.Zen_Claude_Haiku_5_5, "opencode/claude-haiku-5-5"],
["Cursor Sonnet", CursorModel.Claude_Sonnet_5_5, "cursor/claude-sonnet-5-5"],
["Cursor Haiku", CursorModel.Claude_Haiku_5_5, "cursor/claude-haiku-5-5"],
])("exposes the %s model", (_provider, model, expected) => {
expect(model).toBe(expected);
});
});

describe("Claude Opus 5.5 model identifiers", () => {
it.each([
["Claude Code", ClaudeCode.Opus_5_5, "anthropic/claude-opus-5-5"],
Expand Down
Loading
Loading