Skip to content
Closed
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
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Server configuration:

Model name prefixes determine routing:
- **OpenAI**: gpt-4.1, gpt-5, gpt-5-mini, gpt-5.2, gpt-5.6-sol/terra/luna, o4-mini; image generation: gpt-image-2
- **Anthropic**: claude-sonnet-4-0/4-5/4-6, claude-sonnet-5, claude-haiku-4-5, claude-opus-4-5/4-6/4-7/4-8, claude-opus-5, claude-fable-5, claude-3-7-sonnet, claude-3-5-haiku
- **Anthropic**: claude-sonnet-4-0/4-5/4-6, claude-sonnet-5, claude-haiku-4-5, claude-opus-4-5/4-6/4-7/4-8, claude-opus-5, claude-fable-5, claude-fable-5-1, claude-3-7-sonnet, claude-3-5-haiku
- **Google**: gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, gemini-3-pro-preview, gemini-3-flash-preview, gemini-3.1-pro-preview, gemini-3.5-flash; image generation: gemini-2.5-flash-image, gemini-3.1-flash-image
- **xAI**: grok-2, grok-3, grok-3-mini, grok-4, grok-4.3, grok-4.5, grok-4.6, grok-4-fast, grok-4-1-fast; image generation: grok-2-image
- **ByteDance** (BytePlus ModelArk, OpenAI-compatible, ap-southeast): seed-1.6, seed-1.8, seed-2.0-lite, deepseek-v4-flash, deepseek-v4-pro, glm-5.2 (Z.ai's model served via a ModelArk deployment endpoint); image generation: seedream-4.0, seedream-5.0-lite, seedance-4.5, seedance-5.0
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ The gateway solves this by running inside a hardware-isolated Nitro Enclave wher
| Provider | Models |
|----------|--------|
| OpenAI | gpt-4.1, gpt-5, gpt-5-mini, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, o4-mini |
| Anthropic | claude-sonnet-4-5, claude-sonnet-4-6, claude-haiku-4-5, claude-opus-4-5, claude-opus-4-6 |
| Anthropic | claude-fable-5-1, claude-sonnet-4-5, claude-sonnet-4-6, claude-haiku-4-5, claude-opus-4-5, claude-opus-4-6 |
| Google | gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, gemini-3-pro-preview, gemini-3-flash-preview |
| xAI | grok-4.6, grok-4.5, grok-4.3, grok-4, grok-4-fast, grok-4-1-fast, grok-4-1-fast-non-reasoning |
| ByteDance | seed-1.6, seed-1.8, seed-2.0-lite, deepseek-v4-flash, deepseek-v4-pro |
Expand Down
13 changes: 13 additions & 0 deletions tee_gateway/model_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,18 @@ class SupportedModel(Enum):
output_price_usd=Decimal("0.00005"),
supports_temperature=False,
)
# Claude Fable 5.1 — supersedes Fable 5 as Anthropic's most capable widely
# released model (GA 2026-09-01). Same sticker input/output pricing as
# Fable 5; the only pricing change is a 75%-cheaper cached-token read rate,
# which this registry doesn't model (base input/output only). Adaptive-
# thinking-only; like Opus 4.7+/Fable 5 it rejects `temperature` (HTTP 400).
CLAUDE_FABLE_5_1 = ModelConfig(
provider="anthropic",
api_name="claude-fable-5-1",
input_price_usd=Decimal("0.00001"),
output_price_usd=Decimal("0.00005"),
supports_temperature=False,
)

# ── Google Gemini ───────────────────────────────────────────────────
# Note: gemini-2.5-flash, gemini-2.5-pro, and gemini-2.5-flash-lite are scheduled
Expand Down Expand Up @@ -681,6 +693,7 @@ class SupportedModel(Enum):
"claude-opus-4-8": SupportedModel.CLAUDE_OPUS_4_8,
"claude-opus-5": SupportedModel.CLAUDE_OPUS_5,
"claude-fable-5": SupportedModel.CLAUDE_FABLE_5,
"claude-fable-5-1": SupportedModel.CLAUDE_FABLE_5_1,
# Google
"gemini-2.5-flash": SupportedModel.GEMINI_2_5_FLASH,
"gemini-2.5-pro": SupportedModel.GEMINI_2_5_PRO,
Expand Down
16 changes: 16 additions & 0 deletions tests/test_pricing.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,15 @@ def test_claude_fable_5_resolves(self):
# Adaptive-thinking-only; rejects the `temperature` field (HTTP 400)
self.assertFalse(cfg.supports_temperature)

def test_claude_fable_5_1_resolves(self):
cfg = get_model_config("claude-fable-5-1")
self.assertEqual(cfg.provider, "anthropic")
self.assertEqual(cfg.api_name, "claude-fable-5-1")
self.assertEqual(cfg.input_price_usd, Decimal("0.00001"))
self.assertEqual(cfg.output_price_usd, Decimal("0.00005"))
# Adaptive-thinking-only; rejects the `temperature` field (HTTP 400)
self.assertFalse(cfg.supports_temperature)

# ── OpenAI ──────────────────────────────────────────────────────────────

def test_gpt_4_1_resolves(self):
Expand Down Expand Up @@ -710,6 +719,13 @@ def test_claude_opus_5_cost(self):
# Same price tier as opus-4-5/4-6/4-7/4-8: 1000*0.000005 + 500*0.000025 = 0.0175 USD
self.assertEqual(cost, 17_500_000_000_000_000)

def test_claude_fable_5_1_cost(self):
cost = self._calc("claude-fable-5-1", 1000, 500)
expected = _expected_cost_opg("claude-fable-5-1", 1000, 500)
self.assertEqual(cost, expected)
# Same price tier as fable-5: 1000*0.00001 + 500*0.00005 = 0.035 USD
self.assertEqual(cost, 35_000_000_000_000_000)

# ── Google Gemini ────────────────────────────────────────────────────────

def test_gemini_2_5_flash_cost(self):
Expand Down
Loading