mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
Merge 94259f9c5a into a6816f0e96
This commit is contained in:
commit
06bbaf36f6
5 changed files with 107 additions and 0 deletions
|
|
@ -132,6 +132,12 @@
|
|||
},
|
||||
"supported_endpoints": ["/v1/chat/completions", "/v1/responses"]
|
||||
},
|
||||
"kenari": {
|
||||
"base_url": "https://kenari.id/v1",
|
||||
"api_key_env": "KENARI_API_KEY",
|
||||
"api_base_env": "KENARI_API_BASE",
|
||||
"supported_endpoints": ["/v1/chat/completions"]
|
||||
},
|
||||
"tensormesh": {
|
||||
"base_url": "https://serverless.tensormesh.ai/v1",
|
||||
"api_key_env": "TENSORMESH_INFERENCE_API_KEY",
|
||||
|
|
|
|||
|
|
@ -1269,6 +1269,23 @@
|
|||
"rerank": false
|
||||
}
|
||||
},
|
||||
"kenari": {
|
||||
"display_name": "Kenari (`kenari`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/kenari",
|
||||
"endpoints": {
|
||||
"chat_completions": true,
|
||||
"messages": false,
|
||||
"responses": false,
|
||||
"embeddings": false,
|
||||
"image_generations": false,
|
||||
"audio_transcriptions": false,
|
||||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false,
|
||||
"a2a": false
|
||||
}
|
||||
},
|
||||
"lambda_ai": {
|
||||
"display_name": "Lambda AI (`lambda_ai`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/lambda_ai",
|
||||
|
|
|
|||
|
|
@ -3827,6 +3827,7 @@ class LlmProviders(str, Enum):
|
|||
POE = "poe"
|
||||
CHUTES = "chutes"
|
||||
NEOSANTARA = "neosantara"
|
||||
KENARI = "kenari"
|
||||
PARASAIL = "parasail"
|
||||
XIAOMI_MIMO = "xiaomi_mimo"
|
||||
TENSORMESH = "tensormesh"
|
||||
|
|
|
|||
|
|
@ -1384,6 +1384,23 @@
|
|||
"rerank": false
|
||||
}
|
||||
},
|
||||
"kenari": {
|
||||
"display_name": "Kenari (`kenari`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/kenari",
|
||||
"endpoints": {
|
||||
"chat_completions": true,
|
||||
"messages": false,
|
||||
"responses": false,
|
||||
"embeddings": false,
|
||||
"image_generations": false,
|
||||
"audio_transcriptions": false,
|
||||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false,
|
||||
"a2a": false
|
||||
}
|
||||
},
|
||||
"lambda_ai": {
|
||||
"display_name": "Lambda AI (`lambda_ai`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/lambda_ai",
|
||||
|
|
|
|||
66
tests/test_litellm/llms/kenari/test_kenari.py
Normal file
66
tests/test_litellm/llms/kenari/test_kenari.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
import os
|
||||
from unittest.mock import patch
|
||||
|
||||
KENARI_API_BASE = "https://kenari.id/v1"
|
||||
|
||||
|
||||
def test_kenari_json_registry():
|
||||
import litellm
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
assert litellm.LlmProviders.KENARI.value == "kenari"
|
||||
assert litellm.LlmProviders("kenari") == litellm.LlmProviders.KENARI
|
||||
assert JSONProviderRegistry.exists("kenari")
|
||||
config = JSONProviderRegistry.get("kenari")
|
||||
assert config is not None
|
||||
assert config.base_url == KENARI_API_BASE
|
||||
assert config.api_key_env == "KENARI_API_KEY"
|
||||
assert config.api_base_env == "KENARI_API_BASE"
|
||||
assert config.supported_endpoints == ["/v1/chat/completions"]
|
||||
|
||||
|
||||
def test_kenari_dynamic_config_env_vars():
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
config = create_config_class(JSONProviderRegistry.get("kenari"))()
|
||||
|
||||
with patch.dict(
|
||||
os.environ,
|
||||
{
|
||||
"KENARI_API_KEY": "test-key",
|
||||
"KENARI_API_BASE": "https://custom.kenari.example/v1",
|
||||
},
|
||||
):
|
||||
api_base, api_key = config._get_openai_compatible_provider_info(None, None)
|
||||
|
||||
assert api_base == "https://custom.kenari.example/v1"
|
||||
assert api_key == "test-key"
|
||||
|
||||
|
||||
def test_kenari_provider_detection_by_prefix():
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
model, provider, _, api_base = get_llm_provider("kenari/deepseek-v4-pro")
|
||||
|
||||
assert model == "deepseek-v4-pro"
|
||||
assert provider == "kenari"
|
||||
assert api_base == KENARI_API_BASE
|
||||
|
||||
|
||||
def test_kenari_chat_complete_url():
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
config = create_config_class(JSONProviderRegistry.get("kenari"))()
|
||||
|
||||
assert (
|
||||
config.get_complete_url(
|
||||
api_base=None,
|
||||
api_key=None,
|
||||
model="deepseek-v4-pro",
|
||||
optional_params={},
|
||||
litellm_params={},
|
||||
)
|
||||
== "https://kenari.id/v1/chat/completions"
|
||||
)
|
||||
Loading…
Add table
Reference in a new issue