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
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ prefixes determine routing:
- **Anthropic**: claude-sonnet-4-5/4-6, claude-sonnet-5, claude-sonnet-5-5, claude-haiku-5-5, claude-haiku-4-5, claude-opus-4-5/4-6/4-7/4-8, claude-opus-5, claude-opus-5-5, claude-fable-5, claude-fable-5-1
- **Google**: gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, gemini-3-flash-preview, gemini-3.1-pro-preview; image generation: gemini-2.5-flash-image, gemini-3.1-flash-image, gemini-nano-banana-2.1
- **xAI**: grok-4.7, grok-4.6, grok-4.5, grok-4.3, grok-4.20-reasoning, grok-4.20-non-reasoning; image generation: grok-2-image, grok-imagine-image-2.0
- **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
- **OpenRouter** (OpenAI-compatible): hy4-preview, hermes-4-405b, hy3
- **ByteDance** (BytePlus ModelArk, OpenAI-compatible, ap-southeast): seed-1.6, seed-1.8, seed-2.0-lite, deepseek-v4-flash, 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
- **OpenRouter** (OpenAI-compatible): deepseek-v4-pro (pinned to Wafer), hy4-preview, hermes-4-405b, hy3
- **abliteration.ai** (OpenAI-compatible): abliterated-model-large-v2
- **Z.ai** (Model API, OpenAI-compatible): image generation: glm-image (glm-5.2 chat is routed through BytePlus ModelArk, see ByteDance above)
- **WaveSpeed** (async prediction API): image generation: krea-3 (Krea's model, always `berry` at `reasoning_level: medium`), qwen-image-3.0-pro (Alibaba's model); each is two WaveSpeed endpoints, text-to-image and edit
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ The gateway solves this by running inside a hardware-isolated Nitro Enclave wher
| Anthropic | claude-haiku-5-5, claude-sonnet-5-5, claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-opus-4-5, claude-sonnet-5, claude-sonnet-4-6, claude-sonnet-4-5, claude-haiku-4-5 |
| Google | gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, gemini-3-flash-preview, gemini-3.1-pro-preview |
| xAI | grok-4.7, grok-4.6, grok-4.5, grok-4.3, grok-4.20-reasoning, grok-4.20-non-reasoning |
| ByteDance | seed-1.6, seed-1.8, seed-2.0-lite, dola-seed-2.0-mini, deepseek-v4-flash, deepseek-v4-pro, glm-5.2 |
| OpenRouter | hy4-preview, hermes-4-405b, hy3 |
| ByteDance | seed-1.6, seed-1.8, seed-2.0-lite, dola-seed-2.0-mini, deepseek-v4-flash, glm-5.2 |
| OpenRouter | deepseek-v4-pro, hy4-preview, hermes-4-405b, hy3 |
| abliteration.ai | abliterated-model-large-v2 |

Image generation: krea-3 and qwen-image-3.0-pro (via WaveSpeed), gpt-image-2,
Expand Down
11 changes: 7 additions & 4 deletions tee_gateway/model_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -1101,13 +1101,16 @@ class SupportedModel(Enum):
)

# ── OpenRouter (OpenAI-compatible) ──────────────────────────────────
# DeepSeek V4 Pro 0813, routed through OpenRouter, pinned to Phala.
# DeepSeek V4 Pro 0813, routed through OpenRouter, pinned to Wafer (mxfp4).
# The "wafer" slug covers both of Wafer's OpenRouter endpoints, wafer/us
# ($0.115 in) and wafer/mxfp4 ($0.285 in), both $4.30 out per MTok; input
# is priced at the higher of the two so either one is covered.
DEEPSEEK_V4_PRO = ModelConfig(
provider="openrouter",
api_name="deepseek/deepseek-v4-pro-0813",
input_price_usd=Decimal("0.00000145"),
output_price_usd=Decimal("0.00000436"),
openrouter_provider="phala",
input_price_usd=Decimal("0.000000285"),
output_price_usd=Decimal("0.0000043"),
openrouter_provider="wafer",
)
# Tencent Hy4 Preview — 770B-parameter (49B active) open-weight MoE,
# open-sourced 2026-08-28, aimed at coding agents and long-horizon
Expand Down
6 changes: 3 additions & 3 deletions tee_gateway/test/test_tee_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1061,12 +1061,12 @@ def tearDownClass(cls) -> None:
set_provider_config(cls._saved_config)
get_chat_model_cached.cache_clear()

def test_deepseek_v4_pro_pinned_to_phala(self):
def test_deepseek_v4_pro_pinned_to_wafer(self):
model = get_chat_model_cached("deepseek-v4-pro", 0.0, 1024)
self.assertEqual(model.model_name, "deepseek/deepseek-v4-pro-0813")
self.assertEqual(
model.extra_body,
{"provider": {"order": ["phala"], "allow_fallbacks": False}},
{"provider": {"order": ["wafer"], "allow_fallbacks": False}},
)

def test_unpinned_model_sorts_by_price(self):
Expand Down Expand Up @@ -1116,7 +1116,7 @@ def test_openrouter_uses_its_reasoning_object(self):
self.assertEqual(model.extra_body["reasoning"], {"effort": "none"})
self.assertEqual(
model.extra_body["provider"],
{"order": ["phala"], "allow_fallbacks": False},
{"order": ["wafer"], "allow_fallbacks": False},
)

def test_openai_takes_it_as_is(self):
Expand Down
10 changes: 5 additions & 5 deletions tests/test_pricing.py
Original file line number Diff line number Diff line change
Expand Up @@ -597,9 +597,9 @@ def test_deepseek_v4_pro_resolves(self):
cfg = get_model_config("deepseek-v4-pro")
self.assertEqual(cfg.provider, "openrouter")
self.assertEqual(cfg.api_name, "deepseek/deepseek-v4-pro-0813")
self.assertEqual(cfg.openrouter_provider, "phala")
self.assertEqual(cfg.input_price_usd, Decimal("0.00000145"))
self.assertEqual(cfg.output_price_usd, Decimal("0.00000436"))
self.assertEqual(cfg.openrouter_provider, "wafer")
self.assertEqual(cfg.input_price_usd, Decimal("0.000000285"))
self.assertEqual(cfg.output_price_usd, Decimal("0.0000043"))

def test_deepseek_v4_pro_aliases_resolve(self):
for alias in (
Expand Down Expand Up @@ -1207,8 +1207,8 @@ def test_deepseek_v4_pro_cost(self):
cost = self._calc("deepseek-v4-pro", 1000, 500)
expected = _expected_cost_opg("deepseek-v4-pro", 1000, 500)
self.assertEqual(cost, expected)
# 1000*0.00000145 + 500*0.00000436 = 0.00145 + 0.00218 = 0.00363 USD
self.assertEqual(cost, 3_630_000_000_000_000)
# 1000*0.000000285 + 500*0.0000043 = 0.000285 + 0.00215 = 0.002435 USD
self.assertEqual(cost, 2_435_000_000_000_000)

# ── OpenRouter ─────────────────────────────────────────────────────────

Expand Down
Loading