This commit is contained in:
Seven 2026-09-23 14:42:37 +00:00 • committed by GitHub
commit 53b2299016
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 208 additions and 23 deletions

View file

@ -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"
]
}
}

View file

@ -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"

View file

@ -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": {

View 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"