From 6f802a73c1a67a8677afe411da4a45f0edd912ae Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Thu, 29 Oct 2026 18:56:02 +0530 Subject: [PATCH] wafer provider --- CLAUDE.md | 4 ++-- README.md | 4 ++-- tee_gateway/model_registry.py | 11 +++++++---- tee_gateway/test/test_tee_core.py | 6 +++--- tests/test_pricing.py | 10 +++++----- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 07ad917..1eca892 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 diff --git a/README.md b/README.md index 8940230..55f7625 100644 --- a/README.md +++ b/README.md @@ -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, diff --git a/tee_gateway/model_registry.py b/tee_gateway/model_registry.py index 3b21f97..f9bfea0 100644 --- a/tee_gateway/model_registry.py +++ b/tee_gateway/model_registry.py @@ -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 diff --git a/tee_gateway/test/test_tee_core.py b/tee_gateway/test/test_tee_core.py index baaf3ad..3658e7f 100644 --- a/tee_gateway/test/test_tee_core.py +++ b/tee_gateway/test/test_tee_core.py @@ -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): @@ -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): diff --git a/tests/test_pricing.py b/tests/test_pricing.py index d70debd..764e6dd 100644 --- a/tests/test_pricing.py +++ b/tests/test_pricing.py @@ -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 ( @@ -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 ─────────────────────────────────────────────────────────