mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-12 03:48:56 +00:00
Trim Bitdeer models to 3 and rename slug to bitdeer-ai
Keeps moonshotai/Kimi-K3, zai-org/GLM-5.2, and deepseek-ai/DeepSeek-V4-Flash; drops Kimi-K2.6, Qwen3.5-397B-A17B, and DeepSeek-V4-Pro. Renames the provider slug from bitdeer to bitdeer-ai to match Bitdeer's preferred identifier.
This commit is contained in:
parent
192052d2cc
commit
e4ab197e70
6 changed files with 33 additions and 79 deletions
|
|
@ -822,7 +822,7 @@ openai_compatible_providers: Final[list] = [
|
|||
"pinstripes", # Pinstripes - JSON-configured provider
|
||||
"darkbloom",
|
||||
"meta", # Meta Model API (Muse Spark) - JSON-configured provider
|
||||
"bitdeer", # Bitdeer AI - JSON-configured provider
|
||||
"bitdeer-ai", # Bitdeer AI - JSON-configured provider
|
||||
]
|
||||
openai_text_completion_compatible_providers: Final[list] = [ # providers that support `/v1/completions`
|
||||
"together_ai",
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ def get_llm_provider(
|
|||
custom_llm_provider = "chutes"
|
||||
dynamic_api_key = get_secret_str("CHUTES_API_KEY")
|
||||
elif endpoint == "https://api-inference.bitdeer.ai/v1":
|
||||
custom_llm_provider = "bitdeer"
|
||||
custom_llm_provider = "bitdeer-ai"
|
||||
dynamic_api_key = get_secret_str("BITDEER_API_KEY")
|
||||
elif endpoint == "https://api.v0.dev/v1":
|
||||
custom_llm_provider = "v0"
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@
|
|||
},
|
||||
"supported_endpoints": ["/v1/chat/completions", "/v1/responses", "/v1/embeddings"]
|
||||
},
|
||||
"bitdeer": {
|
||||
"bitdeer-ai": {
|
||||
"base_url": "https://api-inference.bitdeer.ai/v1",
|
||||
"api_key_env": "BITDEER_API_KEY",
|
||||
"param_mappings": {
|
||||
|
|
|
|||
|
|
@ -3710,7 +3710,7 @@ class LlmProviders(str, Enum):
|
|||
XIAOMI_MIMO = "xiaomi_mimo"
|
||||
TENSORMESH = "tensormesh"
|
||||
LIBERTAI = "libertai"
|
||||
BITDEER = "bitdeer"
|
||||
BITDEER_AI = "bitdeer-ai"
|
||||
PINSTRIPES = "pinstripes"
|
||||
DARKBLOOM = "darkbloom"
|
||||
META = "meta"
|
||||
|
|
|
|||
|
|
@ -47176,14 +47176,14 @@
|
|||
],
|
||||
"supports_audio_output": true
|
||||
},
|
||||
"bitdeer/moonshotai/Kimi-K3": {
|
||||
"bitdeer-ai/moonshotai/Kimi-K3": {
|
||||
"max_tokens": 1048576,
|
||||
"max_input_tokens": 1048576,
|
||||
"max_output_tokens": 131072,
|
||||
"input_cost_per_token": 3e-06,
|
||||
"output_cost_per_token": 1.5e-05,
|
||||
"cache_read_input_token_cost": 3e-07,
|
||||
"litellm_provider": "bitdeer",
|
||||
"litellm_provider": "bitdeer-ai",
|
||||
"mode": "chat",
|
||||
"supports_function_calling": true,
|
||||
"supports_tool_choice": true,
|
||||
|
|
@ -47192,14 +47192,14 @@
|
|||
"supports_prompt_caching": true,
|
||||
"source": "https://www.bitdeer.ai/en/pricing/ai-models"
|
||||
},
|
||||
"bitdeer/zai-org/GLM-5.2": {
|
||||
"bitdeer-ai/zai-org/GLM-5.2": {
|
||||
"max_tokens": 1000000,
|
||||
"max_input_tokens": 1000000,
|
||||
"max_output_tokens": 131072,
|
||||
"input_cost_per_token": 1.4e-06,
|
||||
"output_cost_per_token": 4.4e-06,
|
||||
"cache_read_input_token_cost": 2.6e-07,
|
||||
"litellm_provider": "bitdeer",
|
||||
"litellm_provider": "bitdeer-ai",
|
||||
"mode": "chat",
|
||||
"supports_function_calling": true,
|
||||
"supports_tool_choice": true,
|
||||
|
|
@ -47207,61 +47207,18 @@
|
|||
"supports_prompt_caching": true,
|
||||
"source": "https://www.bitdeer.ai/en/pricing/ai-models"
|
||||
},
|
||||
"bitdeer/moonshotai/Kimi-K2.6": {
|
||||
"max_tokens": 262144,
|
||||
"max_input_tokens": 262144,
|
||||
"max_output_tokens": 262144,
|
||||
"input_cost_per_token": 9.5e-07,
|
||||
"output_cost_per_token": 4e-06,
|
||||
"cache_read_input_token_cost": 2e-07,
|
||||
"litellm_provider": "bitdeer",
|
||||
"mode": "chat",
|
||||
"supports_function_calling": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_reasoning": true,
|
||||
"supports_vision": true,
|
||||
"bitdeer-ai/deepseek-ai/DeepSeek-V4-Flash": {
|
||||
"supports_prompt_caching": true,
|
||||
"source": "https://www.bitdeer.ai/en/pricing/ai-models"
|
||||
},
|
||||
"bitdeer/Qwen/Qwen3.5-397B-A17B": {
|
||||
"max_tokens": 262144,
|
||||
"max_input_tokens": 262144,
|
||||
"max_output_tokens": 65536,
|
||||
"input_cost_per_token": 6e-07,
|
||||
"output_cost_per_token": 3.55e-06,
|
||||
"cache_read_input_token_cost": 2e-07,
|
||||
"litellm_provider": "bitdeer",
|
||||
"mode": "chat",
|
||||
"supports_function_calling": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_reasoning": true,
|
||||
"supports_vision": true,
|
||||
"supports_prompt_caching": true,
|
||||
"source": "https://www.bitdeer.ai/en/pricing/ai-models"
|
||||
},
|
||||
"bitdeer/deepseek-ai/DeepSeek-V4-Pro": {
|
||||
"max_tokens": 1000000,
|
||||
"max_input_tokens": 1000000,
|
||||
"max_output_tokens": 384000,
|
||||
"input_cost_per_token": 1.168e-06,
|
||||
"output_cost_per_token": 2.336e-06,
|
||||
"cache_read_input_token_cost": 1e-07,
|
||||
"litellm_provider": "bitdeer",
|
||||
"mode": "chat",
|
||||
"supports_function_calling": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_reasoning": true,
|
||||
"supports_prompt_caching": true,
|
||||
"source": "https://www.bitdeer.ai/en/pricing/ai-models"
|
||||
},
|
||||
"bitdeer/deepseek-ai/DeepSeek-V4-Flash": {
|
||||
"bitdeer-ai/deepseek-ai/DeepSeek-V4-Flash": {
|
||||
"max_tokens": 1000000,
|
||||
"max_input_tokens": 1000000,
|
||||
"max_output_tokens": 384000,
|
||||
"input_cost_per_token": 4e-08,
|
||||
"output_cost_per_token": 8e-08,
|
||||
"cache_read_input_token_cost": 1e-08,
|
||||
"litellm_provider": "bitdeer",
|
||||
"litellm_provider": "bitdeer-ai",
|
||||
"mode": "chat",
|
||||
"supports_function_calling": true,
|
||||
"supports_tool_choice": true,
|
||||
|
|
|
|||
|
|
@ -17,41 +17,41 @@ class TestBitdeerProviderConfig:
|
|||
"""Test that bitdeer is in the provider list"""
|
||||
from litellm import LlmProviders
|
||||
|
||||
assert hasattr(LlmProviders, "BITDEER")
|
||||
assert LlmProviders.BITDEER.value == "bitdeer"
|
||||
assert "bitdeer" in litellm.provider_list
|
||||
assert hasattr(LlmProviders, "BITDEER_AI")
|
||||
assert LlmProviders.BITDEER_AI.value == "bitdeer-ai"
|
||||
assert "bitdeer-ai" in litellm.provider_list
|
||||
|
||||
def test_bitdeer_json_config_exists(self):
|
||||
"""Test that bitdeer is configured in providers.json"""
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
assert JSONProviderRegistry.exists("bitdeer")
|
||||
assert JSONProviderRegistry.exists("bitdeer-ai")
|
||||
|
||||
bitdeer = JSONProviderRegistry.get("bitdeer")
|
||||
assert bitdeer is not None
|
||||
assert bitdeer.base_url == "https://api-inference.bitdeer.ai/v1"
|
||||
assert bitdeer.api_key_env == "BITDEER_API_KEY"
|
||||
assert bitdeer.param_mappings.get("max_completion_tokens") == "max_tokens"
|
||||
bitdeer_ai = JSONProviderRegistry.get("bitdeer-ai")
|
||||
assert bitdeer_ai is not None
|
||||
assert bitdeer_ai.base_url == "https://api-inference.bitdeer.ai/v1"
|
||||
assert bitdeer_ai.api_key_env == "BITDEER_API_KEY"
|
||||
assert bitdeer_ai.param_mappings.get("max_completion_tokens") == "max_tokens"
|
||||
|
||||
def test_bitdeer_in_openai_compatible_providers(self):
|
||||
"""Test that bitdeer is in the openai_compatible_providers list"""
|
||||
from litellm.constants import openai_compatible_providers
|
||||
|
||||
assert "bitdeer" in openai_compatible_providers
|
||||
assert "bitdeer-ai" in openai_compatible_providers
|
||||
|
||||
def test_bitdeer_provider_resolution(self):
|
||||
"""Test that provider resolution finds bitdeer and returns the default base URL"""
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
model, provider, api_key, api_base = get_llm_provider(
|
||||
model="bitdeer/moonshotai/Kimi-K3",
|
||||
model="bitdeer-ai/moonshotai/Kimi-K3",
|
||||
custom_llm_provider=None,
|
||||
api_base=None,
|
||||
api_key=None,
|
||||
)
|
||||
|
||||
assert model == "moonshotai/Kimi-K3"
|
||||
assert provider == "bitdeer"
|
||||
assert provider == "bitdeer-ai"
|
||||
assert api_base == "https://api-inference.bitdeer.ai/v1"
|
||||
|
||||
def test_bitdeer_api_base_override(self):
|
||||
|
|
@ -59,13 +59,13 @@ class TestBitdeerProviderConfig:
|
|||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
model, provider, api_key, api_base = get_llm_provider(
|
||||
model="bitdeer/moonshotai/Kimi-K3",
|
||||
model="bitdeer-ai/moonshotai/Kimi-K3",
|
||||
custom_llm_provider=None,
|
||||
api_base="https://custom.bitdeer.ai/v1",
|
||||
api_key="sk-test",
|
||||
)
|
||||
|
||||
assert provider == "bitdeer"
|
||||
assert provider == "bitdeer-ai"
|
||||
assert api_base == "https://custom.bitdeer.ai/v1"
|
||||
assert api_key == "sk-test"
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ class TestBitdeerProviderConfig:
|
|||
api_base="https://api-inference.bitdeer.ai/v1",
|
||||
api_key=None,
|
||||
)
|
||||
assert provider == "bitdeer"
|
||||
assert provider == "bitdeer-ai"
|
||||
assert api_base == "https://api-inference.bitdeer.ai/v1"
|
||||
|
||||
def test_bitdeer_router_config(self):
|
||||
|
|
@ -89,9 +89,9 @@ class TestBitdeerProviderConfig:
|
|||
router = Router(
|
||||
model_list=[
|
||||
{
|
||||
"model_name": "bitdeer-kimi-k3",
|
||||
"model_name": "bitdeer-ai-kimi-k3",
|
||||
"litellm_params": {
|
||||
"model": "bitdeer/moonshotai/Kimi-K3",
|
||||
"model": "bitdeer-ai/moonshotai/Kimi-K3",
|
||||
"api_key": "test-key",
|
||||
},
|
||||
}
|
||||
|
|
@ -99,7 +99,7 @@ class TestBitdeerProviderConfig:
|
|||
)
|
||||
|
||||
assert len(router.model_list) == 1
|
||||
assert router.model_list[0]["model_name"] == "bitdeer-kimi-k3"
|
||||
assert router.model_list[0]["model_name"] == "bitdeer-ai-kimi-k3"
|
||||
|
||||
def test_bitdeer_model_cost_map(self):
|
||||
"""Test that bitdeer model pricing is registered correctly"""
|
||||
|
|
@ -109,15 +109,12 @@ class TestBitdeerProviderConfig:
|
|||
model_cost = json.load(f)
|
||||
|
||||
expected_models = {
|
||||
"bitdeer/moonshotai/Kimi-K3": (3e-06, 1.5e-05),
|
||||
"bitdeer/zai-org/GLM-5.2": (1.4e-06, 4.4e-06),
|
||||
"bitdeer/moonshotai/Kimi-K2.6": (9.5e-07, 4e-06),
|
||||
"bitdeer/Qwen/Qwen3.5-397B-A17B": (6e-07, 3.55e-06),
|
||||
"bitdeer/deepseek-ai/DeepSeek-V4-Pro": (1.168e-06, 2.336e-06),
|
||||
"bitdeer/deepseek-ai/DeepSeek-V4-Flash": (4e-08, 8e-08),
|
||||
"bitdeer-ai/moonshotai/Kimi-K3": (3e-06, 1.5e-05),
|
||||
"bitdeer-ai/zai-org/GLM-5.2": (1.4e-06, 4.4e-06),
|
||||
"bitdeer-ai/deepseek-ai/DeepSeek-V4-Flash": (4e-08, 8e-08),
|
||||
}
|
||||
for model, (input_cost, output_cost) in expected_models.items():
|
||||
assert model in model_cost
|
||||
assert model_cost[model]["litellm_provider"] == "bitdeer"
|
||||
assert model_cost[model]["litellm_provider"] == "bitdeer-ai"
|
||||
assert model_cost[model]["input_cost_per_token"] == input_cost
|
||||
assert model_cost[model]["output_cost_per_token"] == output_cost
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue