mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-05 02:41:56 +00:00
172 lines
5.6 KiB
Python
172 lines
5.6 KiB
Python
import os
|
|
from unittest.mock import patch
|
|
|
|
PARASAIL_API_BASE = "https://api.parasail.io/v1"
|
|
PARASAIL_RESPONSES_GATEWAY = "https://api-webflux.saas.parasail.io/v1"
|
|
|
|
|
|
def test_parasail_json_registry():
|
|
import litellm
|
|
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
|
|
|
assert litellm.LlmProviders.PARASAIL.value == "parasail"
|
|
assert litellm.LlmProviders("parasail") == litellm.LlmProviders.PARASAIL
|
|
assert JSONProviderRegistry.exists("parasail")
|
|
config = JSONProviderRegistry.get("parasail")
|
|
assert config is not None
|
|
assert config.base_url == PARASAIL_API_BASE
|
|
assert config.api_key_env == "PARASAIL_API_KEY"
|
|
assert config.api_base_env == "PARASAIL_API_BASE"
|
|
assert "/v1/chat/completions" in config.supported_endpoints
|
|
assert "/v1/responses" in config.supported_endpoints
|
|
assert config.special_handling.get("force_store_false") is True
|
|
|
|
|
|
def test_parasail_listed_in_openai_compatible_providers():
|
|
from litellm.constants import openai_compatible_providers
|
|
|
|
assert "parasail" in openai_compatible_providers
|
|
|
|
|
|
def test_parasail_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("parasail"))()
|
|
|
|
with patch.dict(
|
|
os.environ,
|
|
{
|
|
"PARASAIL_API_KEY": "test-key",
|
|
"PARASAIL_API_BASE": PARASAIL_RESPONSES_GATEWAY,
|
|
},
|
|
):
|
|
api_base, api_key = config._get_openai_compatible_provider_info(None, None)
|
|
|
|
assert api_base == PARASAIL_RESPONSES_GATEWAY
|
|
assert api_key == "test-key"
|
|
|
|
|
|
def test_parasail_provider_detection_by_prefix():
|
|
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
|
|
|
model, provider, _, api_base = get_llm_provider(
|
|
"parasail/parasail-llama-33-70b-fp8"
|
|
)
|
|
|
|
assert model == "parasail-llama-33-70b-fp8"
|
|
assert provider == "parasail"
|
|
assert api_base == PARASAIL_API_BASE
|
|
|
|
|
|
def test_parasail_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("parasail"))()
|
|
|
|
assert (
|
|
config.get_complete_url(
|
|
api_base=None,
|
|
api_key=None,
|
|
model="parasail-llama-33-70b-fp8",
|
|
optional_params={},
|
|
litellm_params={},
|
|
)
|
|
== f"{PARASAIL_API_BASE}/chat/completions"
|
|
)
|
|
|
|
|
|
def test_parasail_responses_api_config():
|
|
from litellm.llms.openai.responses.transformation import OpenAIResponsesAPIConfig
|
|
from litellm.utils import ProviderConfigManager
|
|
|
|
config = ProviderConfigManager.get_provider_responses_api_config(
|
|
provider="parasail",
|
|
model="parasail-kimi-k25-elicit",
|
|
)
|
|
|
|
assert isinstance(config, OpenAIResponsesAPIConfig)
|
|
assert config.custom_llm_provider == "parasail"
|
|
assert (
|
|
config.get_complete_url(api_base=None, litellm_params={})
|
|
== f"{PARASAIL_API_BASE}/responses"
|
|
)
|
|
|
|
|
|
def test_parasail_responses_api_honors_api_base_override():
|
|
from litellm.utils import ProviderConfigManager
|
|
|
|
config = ProviderConfigManager.get_provider_responses_api_config(
|
|
provider="parasail",
|
|
model="parasail-kimi-k25-elicit",
|
|
)
|
|
|
|
with patch.dict(
|
|
os.environ,
|
|
{"PARASAIL_API_BASE": PARASAIL_RESPONSES_GATEWAY},
|
|
):
|
|
url = config.get_complete_url(api_base=None, litellm_params={})
|
|
|
|
assert url == f"{PARASAIL_RESPONSES_GATEWAY}/responses"
|
|
|
|
|
|
def test_parasail_responses_api_forces_store_false_when_caller_sets_true():
|
|
from litellm.types.router import GenericLiteLLMParams
|
|
from litellm.utils import ProviderConfigManager
|
|
|
|
config = ProviderConfigManager.get_provider_responses_api_config(
|
|
provider="parasail",
|
|
model="parasail-kimi-k25-elicit",
|
|
)
|
|
|
|
request_params: dict = {"store": True, "temperature": 0.2}
|
|
transformed = config.transform_responses_api_request(
|
|
model="parasail-kimi-k25-elicit",
|
|
input="hello",
|
|
response_api_optional_request_params=request_params,
|
|
litellm_params=GenericLiteLLMParams(),
|
|
headers={},
|
|
)
|
|
|
|
assert transformed["store"] is False
|
|
assert transformed["temperature"] == 0.2
|
|
|
|
|
|
def test_parasail_responses_api_forces_store_false_when_caller_omits_store():
|
|
from litellm.types.router import GenericLiteLLMParams
|
|
from litellm.utils import ProviderConfigManager
|
|
|
|
config = ProviderConfigManager.get_provider_responses_api_config(
|
|
provider="parasail",
|
|
model="parasail-kimi-k25-elicit",
|
|
)
|
|
|
|
transformed = config.transform_responses_api_request(
|
|
model="parasail-kimi-k25-elicit",
|
|
input="hello",
|
|
response_api_optional_request_params={},
|
|
litellm_params=GenericLiteLLMParams(),
|
|
headers={},
|
|
)
|
|
|
|
assert transformed["store"] is False
|
|
|
|
|
|
def test_parasail_responses_api_validate_environment_sets_bearer_token():
|
|
from litellm.types.router import GenericLiteLLMParams
|
|
from litellm.utils import ProviderConfigManager
|
|
|
|
config = ProviderConfigManager.get_provider_responses_api_config(
|
|
provider="parasail",
|
|
model="parasail-kimi-k25-elicit",
|
|
)
|
|
|
|
with patch.dict(os.environ, {"PARASAIL_API_KEY": "secret-from-env"}):
|
|
headers = config.validate_environment(
|
|
headers={},
|
|
model="parasail-kimi-k25-elicit",
|
|
litellm_params=GenericLiteLLMParams(),
|
|
)
|
|
|
|
assert headers["Authorization"] == "Bearer secret-from-env"
|