From f05aba1f8553f0ca6361aed1232fb86b2dde1b3b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 19 Jan 2024 17:29:47 -0800 Subject: [PATCH 1/3] fix(utils.py): add metadata to logging obj on setup, if exists --- .../proxy/hooks/parallel_request_limiter.py | 2 +- litellm/utils.py | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/litellm/proxy/hooks/parallel_request_limiter.py b/litellm/proxy/hooks/parallel_request_limiter.py index 0a38e5ededd..30877daf396 100644 --- a/litellm/proxy/hooks/parallel_request_limiter.py +++ b/litellm/proxy/hooks/parallel_request_limiter.py @@ -186,4 +186,4 @@ class MaxParallelRequestsHandler(CustomLogger): request_count_api_key, new_val, ttl=60 ) # save in cache for up to 1 min. except Exception as e: - self.print_verbose(f"An exception occurred - {str(e)}") # noqa + print(f"An exception occurred - {str(e)}") # noqa diff --git a/litellm/utils.py b/litellm/utils.py index dbfbf46ecba..325139d9d44 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -773,7 +773,7 @@ class Logging: self.model = model self.user = user self.litellm_params = litellm_params - self.logger_fn = litellm_params["logger_fn"] + self.logger_fn = litellm_params.get("logger_fn", None) print_verbose(f"self.optional_params: {self.optional_params}") self.model_call_details = { "model": self.model, @@ -1941,6 +1941,15 @@ def client(original_function): call_type=call_type, start_time=start_time, ) + ## check if metadata is passed in + if "metadata" in kwargs: + litellm_params = {"metadata": kwargs["metadata"]} + logging_obj.update_environment_variables( + model=model, + user="", + optional_params={}, + litellm_params=litellm_params, + ) return logging_obj except Exception as e: import logging @@ -5731,15 +5740,6 @@ def exception_type( model=model, llm_provider="openai", ) - else: - exception_mapping_worked = True - raise APIError( - status_code=original_exception.status_code, - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", - model=model, - request=original_exception.request, - ) else: # if no status code then it is an APIConnectionError: https://github.com/openai/openai-python#handling-errors raise APIConnectionError( From f2a8ceddc24952eefd520a840d5a1c5f9d625fe5 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 19 Jan 2024 17:39:35 -0800 Subject: [PATCH 2/3] fix(utils.py): revert exception mapping change --- litellm/utils.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/litellm/utils.py b/litellm/utils.py index 325139d9d44..a70db73a14b 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5740,6 +5740,15 @@ def exception_type( model=model, llm_provider="openai", ) + else: + exception_mapping_worked = True + raise APIError( + status_code=original_exception.status_code, + message=f"OpenAIException - {original_exception.message}", + llm_provider="openai", + model=model, + request=original_exception.request, + ) else: # if no status code then it is an APIConnectionError: https://github.com/openai/openai-python#handling-errors raise APIConnectionError( From 2c2163e4e573d281a971951c4565c9d11c538027 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Fri, 19 Jan 2024 18:52:09 -0800 Subject: [PATCH 3/3] fix(proxy_server.py): fix key info to handle pydantic v1 --- litellm/proxy/proxy_server.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 15fda1501d6..cd10af91f30 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -2227,7 +2227,11 @@ async def info_key_fn( ) key_info = await prisma_client.get_data(token=key) ## REMOVE HASHED TOKEN INFO BEFORE RETURNING ## - key_info = key_info.model_dump() + try: + key_info = key_info.model_dump() # noqa + except: + # if using pydantic v1 + key_info = key_info.dict() key_info.pop("token") return {"key": key, "info": key_info} except Exception as e: @@ -2366,7 +2370,11 @@ async def user_info( ) ## REMOVE HASHED TOKEN INFO before returning ## for key in keys: - key = key.model_dump() + try: + key = key.model_dump() # noqa + except: + # if using pydantic v1 + key = key.dict() key.pop("token", None) return {"user_id": user_id, "user_info": user_info, "keys": keys} except Exception as e: