From d1dc5f25e575abf453ffd4d1413b1e7afeee3e0c Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Fri, 28 Aug 2026 14:06:50 -0700 Subject: [PATCH] fix(proxy): use default_factory for _BudgetCascade.rollover_caps (#38687) A MappingProxyType instance is unhashable, and dataclasses rejects any unhashable default value outright, so importing this module raised ValueError: mutable default for field rollover_caps at import time, taking down the whole proxy (and every test that imports it). --- litellm/proxy/common_utils/reset_budget_job.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/common_utils/reset_budget_job.py b/litellm/proxy/common_utils/reset_budget_job.py index b8b9500ff63..d065b062517 100644 --- a/litellm/proxy/common_utils/reset_budget_job.py +++ b/litellm/proxy/common_utils/reset_budget_job.py @@ -3,7 +3,7 @@ import json import math import time from collections.abc import Awaitable, Callable, Iterable, Mapping, Sequence -from dataclasses import dataclass +from dataclasses import dataclass, field from datetime import datetime, timezone from enum import Enum from types import MappingProxyType @@ -224,7 +224,7 @@ class _BudgetCascade: endusers: tuple[_EndUserRow, ...] = () counter_resets: tuple[tuple[str, float], ...] = () cache_keys: tuple[str, ...] = () - rollover_caps: Mapping[str, float] = MappingProxyType({}) + rollover_caps: Mapping[str, float] = field(default_factory=lambda: MappingProxyType({})) @dataclass(frozen=True, slots=True)