mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-28 01:32:17 +00:00
Merge b95a9f1fe5 into 2dccc0dc79
This commit is contained in:
commit
53b2299016
4 changed files with 208 additions and 23 deletions
|
|
@ -130,7 +130,10 @@
|
|||
"param_mappings": {
|
||||
"max_completion_tokens": "max_tokens"
|
||||
},
|
||||
"supported_endpoints": ["/v1/chat/completions", "/v1/responses"]
|
||||
"supported_endpoints": [
|
||||
"/v1/chat/completions",
|
||||
"/v1/responses"
|
||||
]
|
||||
},
|
||||
"tensormesh": {
|
||||
"base_url": "https://serverless.tensormesh.ai/v1",
|
||||
|
|
@ -140,13 +143,19 @@
|
|||
"param_mappings": {
|
||||
"max_completion_tokens": "max_tokens"
|
||||
},
|
||||
"supported_endpoints": ["/v1/chat/completions", "/v1/responses"]
|
||||
"supported_endpoints": [
|
||||
"/v1/chat/completions",
|
||||
"/v1/responses"
|
||||
]
|
||||
},
|
||||
"parasail": {
|
||||
"base_url": "https://api.parasail.io/v1",
|
||||
"api_key_env": "PARASAIL_API_KEY",
|
||||
"api_base_env": "PARASAIL_API_BASE",
|
||||
"supported_endpoints": ["/v1/chat/completions", "/v1/responses"],
|
||||
"supported_endpoints": [
|
||||
"/v1/chat/completions",
|
||||
"/v1/responses"
|
||||
],
|
||||
"special_handling": {
|
||||
"force_store_false": true
|
||||
}
|
||||
|
|
@ -166,7 +175,10 @@
|
|||
"param_mappings": {
|
||||
"max_completion_tokens": "max_tokens"
|
||||
},
|
||||
"supported_endpoints": ["/v1/chat/completions", "/v1/responses"]
|
||||
"supported_endpoints": [
|
||||
"/v1/chat/completions",
|
||||
"/v1/responses"
|
||||
]
|
||||
},
|
||||
"meta": {
|
||||
"base_url": "https://api.meta.ai/v1",
|
||||
|
|
@ -200,5 +212,18 @@
|
|||
"temperature_max": 1.99
|
||||
},
|
||||
"supported_endpoints": ["/v1/chat/completions"]
|
||||
},
|
||||
"daoxe": {
|
||||
"base_url": "https://daoxe.com/v1",
|
||||
"api_key_env": "DAOXE_API_KEY",
|
||||
"api_base_env": "DAOXE_API_BASE",
|
||||
"base_class": "openai_gpt",
|
||||
"param_mappings": {
|
||||
"max_completion_tokens": "max_tokens"
|
||||
},
|
||||
"supported_endpoints": [
|
||||
"/v1/chat/completions",
|
||||
"/v1/responses"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4213,6 +4213,7 @@ class LlmProviders(str, Enum):
|
|||
INCEPTION = "inception"
|
||||
TEXT_COMPLETION_INCEPTION = "text-completion-inception"
|
||||
DEEPSEEK = "deepseek"
|
||||
DAOXE = "daoxe"
|
||||
SAMBANOVA = "sambanova"
|
||||
MARITALK = "maritalk"
|
||||
VOYAGE = "voyage"
|
||||
|
|
|
|||
|
|
@ -488,9 +488,7 @@
|
|||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false,
|
||||
"a2a": false,
|
||||
"interactions": false
|
||||
"rerank": false
|
||||
}
|
||||
},
|
||||
"chutes": {
|
||||
|
|
@ -3020,22 +3018,6 @@
|
|||
"rerank": false
|
||||
}
|
||||
},
|
||||
"charity_engine": {
|
||||
"display_name": "Charity Engine (`charity_engine`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/charity_engine",
|
||||
"endpoints": {
|
||||
"chat_completions": true,
|
||||
"messages": true,
|
||||
"responses": true,
|
||||
"embeddings": false,
|
||||
"image_generations": false,
|
||||
"audio_transcriptions": false,
|
||||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false
|
||||
}
|
||||
},
|
||||
"empiriolabs": {
|
||||
"display_name": "EmpirioLabs (`empiriolabs`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/empiriolabs",
|
||||
|
|
@ -3052,6 +3034,24 @@
|
|||
"rerank": false,
|
||||
"a2a": false
|
||||
}
|
||||
},
|
||||
"daoxe": {
|
||||
"display_name": "DaoXE (`daoxe`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/daoxe",
|
||||
"endpoints": {
|
||||
"chat_completions": true,
|
||||
"messages": false,
|
||||
"responses": true,
|
||||
"embeddings": false,
|
||||
"image_generations": false,
|
||||
"audio_transcriptions": false,
|
||||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false,
|
||||
"a2a": false,
|
||||
"interactions": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"endpoints": {
|
||||
|
|
|
|||
159
tests/test_litellm/llms/openai_like/test_daoxe_provider.py
Normal file
159
tests/test_litellm/llms/openai_like/test_daoxe_provider.py
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
import litellm
|
||||
|
||||
|
||||
def test_daoxe_in_provider_list():
|
||||
from litellm import LlmProviders
|
||||
|
||||
assert LlmProviders.DAOXE.value == "daoxe"
|
||||
assert "daoxe" in litellm.provider_list
|
||||
|
||||
|
||||
def test_daoxe_json_config():
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
assert JSONProviderRegistry.exists("daoxe")
|
||||
provider = JSONProviderRegistry.get("daoxe")
|
||||
assert provider is not None
|
||||
assert provider.base_url == "https://daoxe.com/v1"
|
||||
assert provider.api_key_env == "DAOXE_API_KEY"
|
||||
assert provider.api_base_env == "DAOXE_API_BASE"
|
||||
|
||||
|
||||
def test_daoxe_provider_resolution():
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
model, provider, api_key, api_base = get_llm_provider(
|
||||
model="daoxe/account-model",
|
||||
custom_llm_provider=None,
|
||||
api_base=None,
|
||||
api_key=None,
|
||||
)
|
||||
|
||||
assert model == "account-model"
|
||||
assert provider == "daoxe"
|
||||
assert api_key is None
|
||||
assert api_base == "https://daoxe.com/v1"
|
||||
|
||||
|
||||
def test_daoxe_responses_api_config():
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
from litellm.utils import ProviderConfigManager
|
||||
|
||||
assert JSONProviderRegistry.supports_responses_api("daoxe") is True
|
||||
config = ProviderConfigManager.get_provider_responses_api_config(
|
||||
provider="daoxe",
|
||||
model="daoxe/account-model",
|
||||
)
|
||||
assert config is not None
|
||||
assert config.custom_llm_provider == "daoxe"
|
||||
|
||||
|
||||
def test_daoxe_max_completion_tokens_mapped():
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
provider = JSONProviderRegistry.get("daoxe")
|
||||
assert provider is not None
|
||||
config = create_config_class(provider)()
|
||||
|
||||
optional_params = config.map_openai_params(
|
||||
non_default_params={"max_completion_tokens": 512},
|
||||
optional_params={},
|
||||
model="account-model",
|
||||
drop_params=False,
|
||||
)
|
||||
assert optional_params["max_tokens"] == 512
|
||||
assert "max_completion_tokens" not in optional_params
|
||||
|
||||
|
||||
def test_daoxe_passthrough_params_kept():
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
provider = JSONProviderRegistry.get("daoxe")
|
||||
assert provider is not None
|
||||
config = create_config_class(provider)()
|
||||
|
||||
optional_params = config.map_openai_params(
|
||||
non_default_params={"temperature": 0.4, "top_p": 0.9},
|
||||
optional_params={},
|
||||
model="account-model",
|
||||
drop_params=False,
|
||||
)
|
||||
assert optional_params["temperature"] == 0.4
|
||||
assert optional_params["top_p"] == 0.9
|
||||
|
||||
|
||||
def test_daoxe_chat_completions_url():
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
provider = JSONProviderRegistry.get("daoxe")
|
||||
assert provider is not None
|
||||
config = create_config_class(provider)()
|
||||
|
||||
url = config.get_complete_url(
|
||||
api_base=None,
|
||||
api_key="test-key",
|
||||
model="account-model",
|
||||
optional_params={},
|
||||
litellm_params={},
|
||||
)
|
||||
assert url == "https://daoxe.com/v1/chat/completions"
|
||||
|
||||
|
||||
def test_daoxe_chat_completions_url_custom_base():
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
provider = JSONProviderRegistry.get("daoxe")
|
||||
assert provider is not None
|
||||
config = create_config_class(provider)()
|
||||
|
||||
url = config.get_complete_url(
|
||||
api_base="https://api.daoxe.com/v1",
|
||||
api_key="test-key",
|
||||
model="account-model",
|
||||
optional_params={},
|
||||
litellm_params={},
|
||||
)
|
||||
assert url == "https://api.daoxe.com/v1/chat/completions"
|
||||
|
||||
|
||||
def test_daoxe_responses_url():
|
||||
from litellm.utils import ProviderConfigManager
|
||||
|
||||
config = ProviderConfigManager.get_provider_responses_api_config(
|
||||
provider="daoxe",
|
||||
model="daoxe/account-model",
|
||||
)
|
||||
assert config is not None
|
||||
url = config.get_complete_url(api_base=None, litellm_params={})
|
||||
assert url == "https://daoxe.com/v1/responses"
|
||||
|
||||
|
||||
def test_daoxe_env_base_overrides_default(monkeypatch):
|
||||
from litellm.llms.openai_like.dynamic_config import create_config_class
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
monkeypatch.setenv("DAOXE_API_BASE", "https://api.daoxe.com/v1")
|
||||
provider = JSONProviderRegistry.get("daoxe")
|
||||
assert provider is not None
|
||||
config = create_config_class(provider)()
|
||||
|
||||
resolved_base, _resolved_key = config._get_openai_compatible_provider_info(
|
||||
None, None
|
||||
)
|
||||
assert resolved_base == "https://api.daoxe.com/v1"
|
||||
|
||||
|
||||
def test_daoxe_responses_config_url_construction():
|
||||
from litellm.utils import ProviderConfigManager
|
||||
|
||||
config = ProviderConfigManager.get_provider_responses_api_config(
|
||||
provider="daoxe",
|
||||
model="daoxe/account-model",
|
||||
)
|
||||
assert config is not None
|
||||
url = config.get_complete_url(api_base=None, litellm_params={})
|
||||
assert url == "https://daoxe.com/v1/responses"
|
||||
Loading…
Add table
Reference in a new issue