From b71f58cb17ebc8fe3055ab0b140796e201629816 Mon Sep 17 00:00:00 2001 From: pylrn Date: Thu, 3 Sep 2026 19:46:48 +0530 Subject: [PATCH] fix(proxy): allow null-duration rows with stale reset timestamps to be fetched for self-healing --- litellm/proxy/utils.py | 45 +++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index cc6f2c42eac..807ba60f604 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -4045,7 +4045,6 @@ class PrismaClient: response = await VerificationTokenRepository(self).table.find_many( take=limit, where={ - "NOT": {"budget_duration": None}, "AND": [ { "OR": [ @@ -4055,8 +4054,18 @@ class PrismaClient: }, { "OR": [ - {"budget_reset_at": None}, - {"budget_reset_at": {"lt": reset_at}}, + { + "NOT": {"budget_duration": None}, + "OR": [ + {"budget_reset_at": None}, + {"budget_reset_at": {"lt": reset_at}}, + ], + }, + { + "budget_duration": None, + "NOT": {"budget_reset_at": None}, + "budget_reset_at": {"lt": reset_at}, + }, ] }, ], @@ -4121,10 +4130,19 @@ class PrismaClient: # of the row, silently exceeding max_budget. Treat a # NULL budget_reset_at with a non-NULL budget_duration # as due, matching the budget-table query below. - "NOT": {"budget_duration": None}, "OR": [ - {"budget_reset_at": None}, - {"budget_reset_at": {"lt": reset_at}}, + { + "NOT": {"budget_duration": None}, + "OR": [ + {"budget_reset_at": None}, + {"budget_reset_at": {"lt": reset_at}}, + ], + }, + { + "budget_duration": None, + "NOT": {"budget_reset_at": None}, + "budget_reset_at": {"lt": reset_at}, + }, ], }, ) @@ -4212,10 +4230,19 @@ class PrismaClient: # Same NULL budget_reset_at gap as the user query # above: a team with a budget_duration but no # initialized budget_reset_at would never be reset. - "NOT": {"budget_duration": None}, "OR": [ - {"budget_reset_at": None}, - {"budget_reset_at": {"lt": reset_at}}, + { + "NOT": {"budget_duration": None}, + "OR": [ + {"budget_reset_at": None}, + {"budget_reset_at": {"lt": reset_at}}, + ], + }, + { + "budget_duration": None, + "NOT": {"budget_reset_at": None}, + "budget_reset_at": {"lt": reset_at}, + }, ], }, )