litellm/tests/test_litellm/test_constants.py
shrey kharbanda 31ed2482b5 test(sail): add unit regression coverage for the Sail provider PR
Covers balanced service tier cost parity, cost-map invariants, suffix fallback, service tier validation, merge_extra_body hooks, Responses logging, transcription provider set, JSON loader merge-base compatibility, get_model_info balanced fields and provider inference before the completion-window gate. MUTATIONS.md records the 15 named production mutations each test kills
2026-09-24 16:19:31 +00:00

78 lines
2.4 KiB
Python

import ast
import inspect
import json
from unittest import mock
import httpx
import pytest
import respx
from fastapi.testclient import TestClient
import importlib
import litellm
from litellm import constants
def _build_constant_env_var_map() -> dict[str, str]:
"""
Build a mapping of CONSTANT_NAME -> ENV_VAR_NAME by parsing constants.py.
This keeps the test resilient when a constant name and env var name differ
(e.g., aliases like LITELLM_* env vars).
"""
env_var_map: dict[str, str] = {}
constants_source = inspect.getsource(constants)
parsed = ast.parse(constants_source)
for node in parsed.body:
if not isinstance(node, ast.Assign):
continue
if len(node.targets) != 1 or not isinstance(node.targets[0], ast.Name):
continue
constant_name = node.targets[0].id
env_var_name = None
for child in ast.walk(node.value):
if not isinstance(child, ast.Call):
continue
# os.getenv("ENV_NAME", default)
if (
isinstance(child.func, ast.Attribute)
and isinstance(child.func.value, ast.Name)
and child.func.value.id == "os"
and child.func.attr == "getenv"
and len(child.args) >= 1
and isinstance(child.args[0], ast.Constant)
and isinstance(child.args[0].value, str)
):
env_var_name = child.args[0].value
break
# get_env_int("ENV_NAME", default)
if (
isinstance(child.func, ast.Name)
and child.func.id == "get_env_int"
and len(child.args) >= 1
and isinstance(child.args[0], ast.Constant)
and isinstance(child.args[0].value, str)
):
env_var_name = child.args[0].value
break
if env_var_name:
env_var_map[constant_name] = env_var_name
return env_var_map
def test_openai_transcription_providers_are_the_openai_compatible_set_minus_sail():
assert "sail" in constants.openai_compatible_providers
assert constants.OPENAI_AUDIO_TRANSCRIPTION_PROVIDERS == frozenset(("openai",)) | (
frozenset(constants.openai_compatible_providers) - frozenset(("sail",))
)
assert "sail" not in constants.OPENAI_AUDIO_TRANSCRIPTION_PROVIDERS