fix(proxy_server): populate model_info when cost keys are present but None (#40741)

This commit is contained in:
tusharjamunkar 2026-09-11 23:10:16 +05:30
parent dfab4794ec
commit 010e960a7e
2 changed files with 44 additions and 2 deletions

View file

@ -13499,7 +13499,7 @@ def _enrich_model_info_with_litellm_data(
except Exception:
litellm_model_info = {}
for k, v in litellm_model_info.items():
if k not in model_info:
if model_info.get(k) is None:
model_info[k] = v
model["model_info"] = model_info
# don't return the api key / vertex credentials
@ -14965,7 +14965,7 @@ def _get_proxy_model_info(model: dict) -> dict:
except Exception:
litellm_model_info = {}
for k, v in litellm_model_info.items():
if k not in model_info:
if model_info.get(k) is None:
model_info[k] = v
model["model_info"] = model_info
# don't return the llm credentials

View file

@ -541,3 +541,45 @@ def test_v2_model_info_access_group_paginates_over_the_filtered_set(client, auth
assert _model_names(payload) == ["openai/*"]
assert payload["total_count"] == 2
assert payload["total_pages"] == 2
def test_enrich_model_info_with_litellm_data_populates_none_keys(monkeypatch):
monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True")
from litellm.proxy._types import ModelInfo as ProxyModelInfo
from litellm.proxy.proxy_server import _enrich_model_info_with_litellm_data, _get_proxy_model_info
backend = "bedrock/eu.anthropic.claude-opus-5"
p_model_info = ProxyModelInfo(id="d1").model_dump()
model = {"model_name": "m", "litellm_params": {"model": backend}, "model_info": dict(p_model_info)}
enriched = _enrich_model_info_with_litellm_data(model=model, llm_router=None)
mi = enriched["model_info"]
assert mi.get("input_cost_per_token") == 5.5e-06
assert mi.get("max_tokens") == 128000
assert mi.get("mode") == "chat"
proxy_info = _get_proxy_model_info(model=model)
p_mi = proxy_info["model_info"]
assert p_mi.get("input_cost_per_token") == 5.5e-06
assert p_mi.get("max_tokens") == 128000
assert p_mi.get("mode") == "chat"
def test_enrich_model_info_with_litellm_data_preserves_custom_pricing(monkeypatch):
monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True")
from litellm.proxy._types import ModelInfo as ProxyModelInfo
from litellm.proxy.proxy_server import _enrich_model_info_with_litellm_data, _get_proxy_model_info
backend = "bedrock/eu.anthropic.claude-opus-5"
custom_model_info = ProxyModelInfo(id="d1", input_cost_per_token=0.00099).model_dump()
model = {"model_name": "m", "litellm_params": {"model": backend}, "model_info": dict(custom_model_info)}
enriched = _enrich_model_info_with_litellm_data(model=model, llm_router=None)
mi = enriched["model_info"]
assert mi.get("input_cost_per_token") == 0.00099
assert mi.get("max_tokens") == 128000
proxy_info = _get_proxy_model_info(model=model)
p_mi = proxy_info["model_info"]
assert p_mi.get("input_cost_per_token") == 0.00099