fix(proxy): store the actual selected model in spend logs for Azure Model Router

Co-authored-by: Filippo Mattia Menghi <filippo@menghi.dev>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
milan 2026-08-21 03:01:26 +00:00
parent 354f497faf
commit cafc8c1455
2 changed files with 45 additions and 1 deletions

View file

@ -411,7 +411,9 @@ def get_logging_payload(kwargs, response_obj, start_time, end_time) -> SpendLogs
or None
)
raw_model: Final = cast(str, kwargs.get("model") or "")
model_name: Final = reconstruct_model_name(raw_model, custom_llm_provider, metadata or {})
model_name: Final = (
standard_logging_payload.get("model") if standard_logging_payload is not None else None
) or reconstruct_model_name(raw_model, custom_llm_provider, metadata or {})
try:
payload: Final[SpendLogsPayload] = SpendLogsPayload(

View file

@ -3241,3 +3241,45 @@ def test_get_logging_payload_failed_request_without_standard_logging_payload_lea
assert payload["model_group"] == ""
assert payload["api_base"] == ""
assert payload["custom_llm_provider"] == ""
def _model_router_spend_log_kwargs(slp_model: str | None) -> dict[str, Any]:
standard_logging_payload: Final = cast(
StandardLoggingPayload,
{
"model": slp_model,
"metadata": {},
"model_map_information": StandardLoggingModelInformation(
model_map_key="azure_ai/model_router", model_map_value=None
),
},
)
return {
"model": "azure_ai/model_router/model-router",
"litellm_params": {"metadata": {"user_api_key": "sk-test-key"}},
"standard_logging_object": standard_logging_payload,
}
@patch("litellm.proxy.proxy_server.master_key", None)
@patch("litellm.proxy.proxy_server.general_settings", {})
def test_get_logging_payload_uses_standard_logging_payload_model():
payload = get_logging_payload(
kwargs=_model_router_spend_log_kwargs(slp_model="azure_ai/gpt-5-mini"),
response_obj={},
start_time=datetime.datetime.now(timezone.utc),
end_time=datetime.datetime.now(timezone.utc),
)
assert payload["model"] == "azure_ai/gpt-5-mini"
@patch("litellm.proxy.proxy_server.master_key", None)
@patch("litellm.proxy.proxy_server.general_settings", {})
def test_get_logging_payload_falls_back_to_kwargs_model_when_slp_model_missing():
payload = get_logging_payload(
kwargs=_model_router_spend_log_kwargs(slp_model=None),
response_obj={},
start_time=datetime.datetime.now(timezone.utc),
end_time=datetime.datetime.now(timezone.utc),
)
assert payload["model"] == "azure_ai/model_router/model-router"