mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-06 08:16:43 +00:00
refactor(prometheus): apply review nits - drop narration, build test fixtures in one shot
This commit is contained in:
parent
56d6288380
commit
e211587740
2 changed files with 21 additions and 26 deletions
|
|
@ -2620,11 +2620,6 @@ class PrometheusLogger(CustomLogger):
|
|||
label_litellm_model_name = litellm_model_name
|
||||
label_model_id = model_id
|
||||
label_api_base = api_base
|
||||
# custom_llm_provider can be absent from litellm_params when a
|
||||
# resolved deployment fails (e.g. fallbacks); fall back to the
|
||||
# best-effort resolver and coalesce to "" so the label never
|
||||
# serializes as the literal "None" (same pattern as
|
||||
# set_deployment_partial_outage below).
|
||||
label_api_provider = ( # pyright: ignore[reportUnknownVariableType] # bare-dict kwargs, same pattern as every label reader in this handler
|
||||
llm_provider
|
||||
or self._extract_api_provider_from_request_data(
|
||||
|
|
|
|||
|
|
@ -21,31 +21,32 @@ def prometheus_logger():
|
|||
|
||||
def _failure_samples(logger: PrometheusLogger):
|
||||
"""Collected samples of the deployment-failure counter, as (labels, value)."""
|
||||
samples = []
|
||||
for metric in logger.litellm_deployment_failure_responses.collect():
|
||||
for sample in metric.samples:
|
||||
if sample.name == "litellm_deployment_failure_responses_total":
|
||||
samples.append((dict(sample.labels), sample.value))
|
||||
return samples
|
||||
return [
|
||||
(dict(sample.labels), sample.value)
|
||||
for metric in logger.litellm_deployment_failure_responses.collect()
|
||||
for sample in metric.samples
|
||||
if sample.name == "litellm_deployment_failure_responses_total"
|
||||
]
|
||||
|
||||
|
||||
def _request_kwargs(model: str, standard_custom_provider: str | None = None) -> dict:
|
||||
standard_logging_object = {
|
||||
"model_id": "resolved-deployment-id",
|
||||
"model_group": "my-model-group",
|
||||
"api_base": "https://example.com",
|
||||
"metadata": {},
|
||||
}
|
||||
if standard_custom_provider is not None:
|
||||
standard_logging_object["custom_llm_provider"] = standard_custom_provider
|
||||
def _request_kwargs(model: str, litellm_params_provider: str | None = None) -> dict:
|
||||
"""A deployment-failure request as the proxy hands it to the logger.
|
||||
|
||||
Omitting litellm_params_provider leaves custom_llm_provider unset — the #38531 scenario.
|
||||
"""
|
||||
return {
|
||||
"model": model,
|
||||
"exception": Exception("upstream 503"),
|
||||
"litellm_params": {
|
||||
# no "custom_llm_provider" key — the #38531 scenario
|
||||
"metadata": {},
|
||||
**({} if litellm_params_provider is None else {"custom_llm_provider": litellm_params_provider}),
|
||||
},
|
||||
"standard_logging_object": {
|
||||
"model_id": "resolved-deployment-id",
|
||||
"model_group": "my-model-group",
|
||||
"api_base": "https://example.com",
|
||||
"metadata": {},
|
||||
},
|
||||
"standard_logging_object": standard_logging_object,
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -73,10 +74,9 @@ def test_missing_provider_infers_from_provider_prefixed_model(prometheus_logger)
|
|||
def test_explicit_provider_still_wins(prometheus_logger):
|
||||
"""Behavior is unchanged when custom_llm_provider is present."""
|
||||
|
||||
kwargs = _request_kwargs("openai/gpt-4o-mini")
|
||||
kwargs["litellm_params"]["custom_llm_provider"] = "azure"
|
||||
|
||||
prometheus_logger.set_llm_deployment_failure_metrics(kwargs)
|
||||
prometheus_logger.set_llm_deployment_failure_metrics(
|
||||
_request_kwargs("openai/gpt-4o-mini", litellm_params_provider="azure")
|
||||
)
|
||||
|
||||
samples = _failure_samples(prometheus_logger)
|
||||
assert len(samples) == 1
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue