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
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ prefixes determine routing:
- **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, 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 Together), hy4-preview, hermes-4-405b, hy3
- **OpenRouter** (OpenAI-compatible): deepseek-v4-pro (pinned to Nebius FP8), 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
10 changes: 5 additions & 5 deletions tee_gateway/model_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ class ModelConfig:
# function tools together (preserving reasoning rather than disabling it).
# OpenAI provider only; ignored elsewhere.
responses_api_for_tools: bool = False
# OpenRouter provider slug to pin the model to (fallbacks off). ``None``
# routes to the cheapest provider.
# OpenRouter provider slug, or endpoint tag such as ``nebius/fp8``, to pin
# the model to (fallbacks off). ``None`` routes to the cheapest provider.
openrouter_provider: Optional[str] = None

def image_tier(self, resolution: Optional[str]) -> Optional[ImageResolutionTier]:
Expand Down Expand Up @@ -1101,14 +1101,14 @@ class SupportedModel(Enum):
)

# ── OpenRouter (OpenAI-compatible) ──────────────────────────────────
# DeepSeek V4 Pro 0813, routed through OpenRouter, pinned to Together
# ($1.32 in / $3.96 out per MTok).
# DeepSeek V4 Pro 0813, routed through OpenRouter, pinned to Nebius's FP8
# endpoint ($1.32 in / $3.96 out per MTok).
DEEPSEEK_V4_PRO = ModelConfig(
provider="openrouter",
api_name="deepseek/deepseek-v4-pro-0813",
input_price_usd=Decimal("0.00000132"),
output_price_usd=Decimal("0.00000396"),
openrouter_provider="together",
openrouter_provider="nebius/fp8",
)
# 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_together(self):
def test_deepseek_v4_pro_pinned_to_nebius_fp8(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": ["together"], "allow_fallbacks": False}},
{"provider": {"order": ["nebius/fp8"], "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": ["together"], "allow_fallbacks": False},
{"order": ["nebius/fp8"], "allow_fallbacks": False},
)

def test_openai_takes_it_as_is(self):
Expand Down
2 changes: 1 addition & 1 deletion tests/test_pricing.py
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,7 @@ 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, "together")
self.assertEqual(cfg.openrouter_provider, "nebius/fp8")
self.assertEqual(cfg.input_price_usd, Decimal("0.00000132"))
self.assertEqual(cfg.output_price_usd, Decimal("0.00000396"))

Expand Down
Loading