mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-29 06:33:28 +00:00
* fix(router): price cost-based routing through model_info.base_model * fix(router): keep cost-based routing pricing helpers fully typed * fix(router): drop typing.cast from cost-based routing pricing helpers * fix(router): read the cost map through a typed accessor in cost-based routing * fix(router): avoid a Final rebind inside the cost-based routing loop * refactor(router): share deployment_pricing_models across spend, listing and cost-based routing * refactor(router): keep the /v1/models listing key inline, share pricing models for spend and routing * refactor(router): inline the deployment pricing-model wrapper in cost-based routing * refactor(router): read deployment pricing models through one shared helper deployment_pricing_models(deployment) now owns the model_info.base_model / litellm_params.base_model / litellm_params.model unpacking, used by cost-based routing and the /v1/models listing. pricing_models(base_model, model) stays for the failure-row spend estimate, which already holds the two names * refactor(router): share the str-keyed mapping validator with cost-based routing * ci: re-run after flaky test_aiohttp_transport read timeout in llms-providers --------- Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
import pytest
|
|
|
|
from litellm.router_utils.deployment_pricing import deployment_pricing_models, pricing_models
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"base_model, model, expected",
|
|
[
|
|
("azure/gpt-4.1", "azure/my-gpt4-deploy", ("azure/gpt-4.1", "azure/my-gpt4-deploy")),
|
|
(None, "azure/my-gpt4-deploy", ("azure/my-gpt4-deploy",)),
|
|
("", "azure/my-gpt4-deploy", ("azure/my-gpt4-deploy",)),
|
|
("azure/gpt-4.1", "azure/gpt-4.1", ("azure/gpt-4.1",)),
|
|
(None, None, ()),
|
|
],
|
|
ids=["base_model_first", "no_base_model", "blank_base_model", "same_name_once", "nothing_named"],
|
|
)
|
|
def test_pricing_models_walks_base_model_then_deployment_model(base_model, model, expected):
|
|
assert pricing_models(base_model, model) == expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"deployment, expected",
|
|
[
|
|
(
|
|
{"litellm_params": {"model": "azure/my-gpt4-deploy"}, "model_info": {"base_model": "azure/gpt-4.1"}},
|
|
("azure/gpt-4.1", "azure/my-gpt4-deploy"),
|
|
),
|
|
(
|
|
{"litellm_params": {"model": "azure/my-gpt4-deploy", "base_model": "azure/gpt-4.1"}},
|
|
("azure/gpt-4.1", "azure/my-gpt4-deploy"),
|
|
),
|
|
(
|
|
{
|
|
"litellm_params": {"model": "azure/my-gpt4-deploy", "base_model": "azure/gpt-4o"},
|
|
"model_info": {"base_model": "azure/gpt-4.1"},
|
|
},
|
|
("azure/gpt-4.1", "azure/my-gpt4-deploy"),
|
|
),
|
|
({"litellm_params": {"model": "openai/gpt-4.1"}, "model_info": {}}, ("openai/gpt-4.1",)),
|
|
({"litellm_params": "not-a-dict", "model_info": None}, ()),
|
|
("not-a-deployment", ()),
|
|
],
|
|
ids=[
|
|
"model_info_base_model",
|
|
"params_base_model",
|
|
"model_info_wins",
|
|
"no_base_model",
|
|
"malformed_blocks",
|
|
"not_a_dict",
|
|
],
|
|
)
|
|
def test_deployment_pricing_models_reads_the_deployment_dict(deployment, expected):
|
|
assert deployment_pricing_models(deployment) == expected
|