From e3293ee264fa9a10c05167e68e87c1b516ec5b68 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Thu, 14 Sep 2023 14:19:51 -0700 Subject: [PATCH] exposing a litellm.max budget --- litellm/__init__.py | 3 ++- litellm/__pycache__/__init__.cpython-311.pyc | Bin 8226 -> 8271 bytes litellm/__pycache__/utils.cpython-311.pyc | Bin 105961 -> 106427 bytes litellm/exceptions.py | 9 +++++++- litellm/tests/test_budget_manager.py | 2 +- litellm/tests/test_litellm_max_budget.py | 21 +++++++++++++++++++ litellm/utils.py | 13 +++++++++++- pyproject.toml | 2 +- 8 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 litellm/tests/test_litellm_max_budget.py diff --git a/litellm/__init__.py b/litellm/__init__.py index 8b8a50e462..03114b78e0 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -36,7 +36,8 @@ caching = False # deprecated son caching_with_models = False # if you want the caching key to be model + prompt # deprecated soon cache: Optional[Cache] = None # cache object model_alias_map: Dict[str, str] = {} - +max_budget = None # set the max budget across all providers +_current_cost = 0 # private variable, used if max budget is set ############################################# def get_model_cost_map(): diff --git a/litellm/__pycache__/__init__.cpython-311.pyc b/litellm/__pycache__/__init__.cpython-311.pyc index dabe860d76eb111a592350b3841d8d8f9225abeb..9d7f4f02b45a07e21ea401f93f7eb5ebbe5828c5 100644 GIT binary patch delta 615 zcmZ9H%TE(g6o>DfA&m@9l=zCM3w$B8JX&6*rR`8!>Z9&hoe)OoJxsy5nm|d63Btm} zwVADMSm45qW)gQM{s+2j`VY7zF>&F_U#}PwPxAY|xpU4vnK|^ndhR>dbp+~5%jUh; z?q%8eIP}3vN*YmulIq$^K`Bdc>IgIMyMv}^bW_k6C%BKtqhHqG{>0zTk&QXzPf;3o z)BoMgs6lLS3X3eFQaSK&0g1ZUtH=Q#fy-^=rc1;e6Y$*^qb87>$u8deQ! z;ELcSbEtGlcd>dBtMC0=%>^!UnX6pm5_^2IMoqnO=)Rf`Bt1|wYBsFvI@P7Xb2faq z-1S@-?e!EYdX-kSPyR{ok?Cc_HRD{kt{c?Qij-zzy+Io~pg=dNY3B3crrx5h_-D^6 zTPEWdrdG8a{xZ?YU;==63NtE&fp=JDG$K$F`KR9m#?7@tJ{T>vY@gKXBS-`w!gXM9fz|+rI(YW1lGi delta 598 zcmZ9HO-~b16o&7aAq0zE7!wIZRQ!ULk3yl)k7=1wDq6wBL^mf!zRqcjnY(glV!9!^ z)+TOr#R3;@G?TdVH$YtZFC=kqe0znMc#`uxbI-YXXXYq82$LU^$%H|@%lb-hlEd`< z%lK!nGrDg$?HNrUV)vUQ~P)43RJ*=^poJG^6edDjYyRaV>Nrn_H?TDHyY z_;=rHpVINGfi_XG`}5orDs9e*nhfkY4}* diff --git a/litellm/__pycache__/utils.cpython-311.pyc b/litellm/__pycache__/utils.cpython-311.pyc index 76b82a67db3f31c3f7de008a20b84fc3a414b35b..d323a9eaefad64aba61db22e26fc245aea144e49 100644 GIT binary patch delta 14589 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 S5Uh9h_x!8qayV*8=Klh8eac+` delta 14716 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 rN-bjQ&n;7i{I7p>yT}^& litellm.max_budget: + raise BudgetExceededError(current_cost=litellm._current_cost, max_budget=litellm.max_budget) + # [OPTIONAL] CHECK CACHE # remove this after deprecating litellm.caching if (litellm.caching or litellm.caching_with_models) and litellm.cache is None: @@ -567,6 +574,10 @@ def client(original_function): if litellm.caching or litellm.caching_with_models or litellm.cache != None: # user init a cache object litellm.cache.add_cache(result, *args, **kwargs) + # [OPTIONAL] UPDATE BUDGET + if litellm.max_budget: + litellm._current_cost += litellm.completion_cost(completion_response=result) + # [OPTIONAL] Return LiteLLM call_id if litellm.use_client == True: result['litellm_call_id'] = litellm_call_id diff --git a/pyproject.toml b/pyproject.toml index e73a67509b..e19396fd8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.628" +version = "0.1.629" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License"