From 8ec184b93fc921ba7629e5a60443e21eb85ac056 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 5 Aug 2024 19:19:28 -0700 Subject: [PATCH] add debugging utils to print when connecting to prisma --- litellm/proxy/common_utils/debug_utils.py | 69 +++++++++++++++++++++++ litellm/proxy/proxy_server.py | 3 + 2 files changed, 72 insertions(+) diff --git a/litellm/proxy/common_utils/debug_utils.py b/litellm/proxy/common_utils/debug_utils.py index 2bd2a503c06..b182fd87ab2 100644 --- a/litellm/proxy/common_utils/debug_utils.py +++ b/litellm/proxy/common_utils/debug_utils.py @@ -1,9 +1,11 @@ # Start tracing memory allocations +import json import os import tracemalloc from fastapi import APIRouter +import litellm from litellm._logging import verbose_proxy_logger router = APIRouter() @@ -130,3 +132,70 @@ async def get_otel_spans(): "spans_grouped_by_parent": spans_grouped_by_parent, "most_recent_parent": most_recent_parent, } + + +# Helper functions for debugging +def init_verbose_loggers(): + worker_config = litellm.get_secret("WORKER_CONFIG") + if os.path.isfile(worker_config): + return + # if not, assume it's a json string + _settings = json.loads(os.getenv("WORKER_CONFIG")) + if not isinstance(_settings, dict): + return + + debug = _settings.get("debug", None) + detailed_debug = _settings.get("detailed_debug", None) + if debug is True: # this needs to be first, so users can see Router init debugg + import logging + + from litellm._logging import ( + verbose_logger, + verbose_proxy_logger, + verbose_router_logger, + ) + + # this must ALWAYS remain logging.INFO, DO NOT MODIFY THIS + verbose_logger.setLevel(level=logging.INFO) # sets package logs to info + verbose_router_logger.setLevel(level=logging.INFO) # set router logs to info + verbose_proxy_logger.setLevel(level=logging.INFO) # set proxy logs to info + if detailed_debug == True: + import logging + + from litellm._logging import ( + verbose_logger, + verbose_proxy_logger, + verbose_router_logger, + ) + + verbose_logger.setLevel(level=logging.DEBUG) # set package log to debug + verbose_router_logger.setLevel(level=logging.DEBUG) # set router logs to debug + verbose_proxy_logger.setLevel(level=logging.DEBUG) # set proxy logs to debug + elif debug == False and detailed_debug == False: + # users can control proxy debugging using env variable = 'LITELLM_LOG' + litellm_log_setting = os.environ.get("LITELLM_LOG", "") + if litellm_log_setting != None: + if litellm_log_setting.upper() == "INFO": + import logging + + from litellm._logging import verbose_proxy_logger, verbose_router_logger + + # this must ALWAYS remain logging.INFO, DO NOT MODIFY THIS + + verbose_router_logger.setLevel( + level=logging.INFO + ) # set router logs to info + verbose_proxy_logger.setLevel( + level=logging.INFO + ) # set proxy logs to info + elif litellm_log_setting.upper() == "DEBUG": + import logging + + from litellm._logging import verbose_proxy_logger, verbose_router_logger + + verbose_router_logger.setLevel( + level=logging.DEBUG + ) # set router logs to info + verbose_proxy_logger.setLevel( + level=logging.DEBUG + ) # set proxy logs to debug diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 260c728b50c..db7fa3a5687 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -141,6 +141,7 @@ from litellm.proxy.common_utils.admin_ui_utils import ( setup_admin_ui_on_server_root_path, show_missing_vars_in_env, ) +from litellm.proxy.common_utils.debug_utils import init_verbose_loggers from litellm.proxy.common_utils.debug_utils import router as debugging_endpoints_router from litellm.proxy.common_utils.encrypt_decrypt_utils import ( decrypt_value_helper, @@ -2547,6 +2548,8 @@ async def startup_event(): global prisma_client, master_key, use_background_health_checks, llm_router, llm_model_list, general_settings, proxy_budget_rescheduler_min_time, proxy_budget_rescheduler_max_time, litellm_proxy_admin_name, db_writer_client, store_model_in_db, premium_user, _license_check import json + init_verbose_loggers() + ### LOAD MASTER KEY ### # check if master key set in environment - load from there master_key = litellm.get_secret("LITELLM_MASTER_KEY", None)