From 94fbcac6f4cfc6b887a2b5ad7601bc011296230e Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Sat, 18 Apr 2026 10:38:23 -0700 Subject: [PATCH] fix(prometheus): fall back to DB for max_budget when metadata value is None --- litellm/integrations/prometheus.py | 47 ++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/litellm/integrations/prometheus.py b/litellm/integrations/prometheus.py index db1ca54180b..efc2168ecef 100644 --- a/litellm/integrations/prometheus.py +++ b/litellm/integrations/prometheus.py @@ -51,6 +51,7 @@ if TYPE_CHECKING: else: AsyncIOScheduler = Any + class PrometheusLogger(CustomLogger): # Class variables or attributes @@ -991,9 +992,7 @@ class PrometheusLogger(CustomLogger): amount: float = 1.0, ) -> None: _labels = prometheus_label_factory( - supported_enum_labels=self.get_labels_for_metric( - metric_name=metric_name - ), + supported_enum_labels=self.get_labels_for_metric(metric_name=metric_name), enum_values=enum_values, label_context=label_context, ) @@ -1118,7 +1117,9 @@ class PrometheusLogger(CustomLogger): user_api_key = hash_token(user_api_key) - label_context = PrometheusLabelFactoryContext(enum_values) #amortized per request. + label_context = PrometheusLabelFactoryContext( + enum_values + ) # amortized per request. # increment total LLM requests and spend metric self._increment_top_level_request_and_spend_metrics( @@ -3001,6 +3002,22 @@ class PrometheusLogger(CustomLogger): """ Assemble a LiteLLM_TeamTable object """ + if max_budget is None: + from litellm.proxy.auth.auth_checks import get_team_object + from litellm.proxy.proxy_server import prisma_client, user_api_key_cache + + try: + db_team = await get_team_object( + team_id=team_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + ) + max_budget = db_team.max_budget + if budget_reset_at is None: + budget_reset_at = db_team.budget_reset_at + except Exception: + pass + _total_team_spend = (spend or 0) + response_cost team_object = LiteLLM_TeamTable( team_id=team_id, @@ -3290,6 +3307,24 @@ class PrometheusLogger(CustomLogger): """ Assemble a LiteLLM_UserTable object """ + if max_budget is None: + from litellm.proxy.auth.auth_checks import get_user_object + from litellm.proxy.proxy_server import prisma_client, user_api_key_cache + + try: + db_user = await get_user_object( + user_id=user_id, + prisma_client=prisma_client, + user_api_key_cache=user_api_key_cache, + user_id_upsert=False, + ) + if db_user is not None: + max_budget = db_user.max_budget + if budget_reset_at is None: + budget_reset_at = db_user.budget_reset_at + except Exception: + pass + _total_user_spend = (spend or 0) + response_cost user_object = LiteLLM_UserTable( user_id=user_id, @@ -3455,7 +3490,9 @@ def _prometheus_labels_from_context( } if UserAPIKeyLabelNames.END_USER.value in filtered_labels: - filtered_labels[UserAPIKeyLabelNames.END_USER.value] = ctx.get_resolved_end_user() + filtered_labels[UserAPIKeyLabelNames.END_USER.value] = ( + ctx.get_resolved_end_user() + ) for sk, val in ctx._custom_by_sanitized_key.items(): if sk in supported_enum_labels: