mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-29 01:42:19 +00:00
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
import os
|
|
from datetime import date
|
|
|
|
import pytest
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
def _skip_live_prompt_caching_test():
|
|
if os.environ.get("LITELLM_RUN_LIVE_PROMPT_CACHING_TESTS") != "1":
|
|
pytest.skip("Live prompt-caching E2E tests are opt-in")
|
|
if os.environ.get("CASSETTE_REDIS_URL"):
|
|
pytest.skip("Live prompt-caching E2E tests cannot run under VCR replay")
|
|
|
|
|
|
|
|
class TogetherCostEntry(BaseModel):
|
|
model_config = ConfigDict(frozen=True, extra="ignore")
|
|
|
|
litellm_provider: str | None = None
|
|
mode: str | None = None
|
|
deprecation_date: str | None = None
|
|
input_cost_per_token: float | None = None
|
|
output_cost_per_token: float | None = None
|
|
supports_function_calling: bool | None = None
|
|
supports_response_schema: bool | None = None
|
|
|
|
|
|
def cheapest_together_chat_model(
|
|
*, function_calling: bool = False, response_schema: bool = False
|
|
) -> str:
|
|
import litellm
|
|
|
|
today = date.today().isoformat()
|
|
|
|
def qualifies(name: str, entry: TogetherCostEntry) -> bool:
|
|
return (
|
|
name.startswith("together_ai/")
|
|
and entry.litellm_provider == "together_ai"
|
|
and entry.mode == "chat"
|
|
and (entry.deprecation_date is None or entry.deprecation_date > today)
|
|
and (entry.input_cost_per_token or 0.0) > 0
|
|
and (entry.output_cost_per_token or 0.0) > 0
|
|
and (not function_calling or bool(entry.supports_function_calling))
|
|
and (not response_schema or bool(entry.supports_response_schema))
|
|
)
|
|
|
|
registry: dict[str, TogetherCostEntry] = {
|
|
name: TogetherCostEntry.model_validate(raw)
|
|
for name, raw in litellm.model_cost.items()
|
|
if isinstance(raw, dict) and name.startswith("together_ai/")
|
|
}
|
|
candidates = sorted(
|
|
(name for name, entry in registry.items() if qualifies(name, entry)),
|
|
key=lambda name: (
|
|
registry[name].input_cost_per_token or 0.0,
|
|
registry[name].output_cost_per_token or 0.0,
|
|
name,
|
|
),
|
|
)
|
|
assert candidates, (
|
|
"no live together_ai chat model in the cost map satisfies "
|
|
f"function_calling={function_calling} response_schema={response_schema}"
|
|
)
|
|
return candidates[0]
|