diff --git a/litellm/proxy/common_utils/admin_ui_utils.py b/litellm/proxy/common_utils/admin_ui_utils.py new file mode 100644 index 00000000000..e734f2d1d53 --- /dev/null +++ b/litellm/proxy/common_utils/admin_ui_utils.py @@ -0,0 +1,166 @@ +import os + + +def show_missing_vars_in_env(): + from fastapi.responses import HTMLResponse + + from litellm.proxy.proxy_server import master_key, prisma_client + + if prisma_client is None and master_key is None: + return HTMLResponse( + content=missing_keys_form( + missing_key_names="DATABASE_URL, LITELLM_MASTER_KEY" + ), + status_code=200, + ) + if prisma_client is None: + return HTMLResponse( + content=missing_keys_form(missing_key_names="DATABASE_URL"), status_code=200 + ) + + if master_key is None: + return HTMLResponse( + content=missing_keys_form(missing_key_names="LITELLM_MASTER_KEY"), + status_code=200, + ) + return None + + +# LiteLLM Admin UI - Non SSO Login +url_to_redirect_to = os.getenv("PROXY_BASE_URL", "") +url_to_redirect_to += "/login" +html_form = f""" + + +
+Please add the following variables to your environment variables:
++ LITELLM_MASTER_KEY="sk-1234" # Your master key for the proxy server. Can use this to send /chat/completion requests etc + LITELLM_SALT_KEY="sk-XXXXXXXX" # Can NOT CHANGE THIS ONCE SET - It is used to encrypt/decrypt credentials stored in DB. If value of 'LITELLM_SALT_KEY' changes your models cannot be retrieved from DB + DATABASE_URL="postgres://..." # Need a postgres database? (Check out Supabase, Neon, etc) + ## OPTIONAL ## + PORT=4000 # DO THIS FOR RENDER/RAILWAY + STORE_MODEL_IN_DB="True" # Allow storing models in db ++
{missing_keys}
+Docs: https://docs.litellm.ai/docs/
+ + + """ + return missing_keys_html_form.format(missing_keys=missing_key_names) diff --git a/litellm/proxy/common_utils/encrypt_decrypt_utils.py b/litellm/proxy/common_utils/encrypt_decrypt_utils.py index 80ffe1ee5e1..f0090046b52 100644 --- a/litellm/proxy/common_utils/encrypt_decrypt_utils.py +++ b/litellm/proxy/common_utils/encrypt_decrypt_utils.py @@ -4,6 +4,9 @@ import os from litellm._logging import verbose_proxy_logger LITELLM_SALT_KEY = os.getenv("LITELLM_SALT_KEY", None) +verbose_proxy_logger.debug( + "LITELLM_SALT_KEY is None using master_key to encrypt/decrypt secrets stored in DB" +) def encrypt_value_helper(value: str): @@ -11,9 +14,6 @@ def encrypt_value_helper(value: str): signing_key = LITELLM_SALT_KEY if LITELLM_SALT_KEY is None: - verbose_proxy_logger.debug( - "LITELLM_SALT_KEY is None using master_key to encrypt value" - ) signing_key = master_key try: @@ -35,9 +35,6 @@ def decrypt_value_helper(value: str): signing_key = LITELLM_SALT_KEY if LITELLM_SALT_KEY is None: - verbose_proxy_logger.debug( - "LITELLM_SALT_KEY is None using master_key to decrypt value" - ) signing_key = master_key try: diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index f7bcf1fde9b..d5b47855253 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -140,6 +140,10 @@ from litellm.proxy.auth.user_api_key_auth import user_api_key_auth ## Import All Misc routes here ## from litellm.proxy.caching_routes import router as caching_router +from litellm.proxy.common_utils.admin_ui_utils import ( + html_form, + show_missing_vars_in_env, +) 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, @@ -193,8 +197,6 @@ from litellm.proxy.utils import ( get_error_message_str, get_instance_fn, hash_token, - html_form, - missing_keys_html_form, reset_budget, send_email, update_spend, @@ -7169,10 +7171,9 @@ async def google_login(request: Request): ) ####### Detect DB + MASTER KEY in .env ####### - if prisma_client is None or master_key is None: - from fastapi.responses import HTMLResponse - - return HTMLResponse(content=missing_keys_html_form, status_code=200) + missing_env_vars = show_missing_vars_in_env() + if missing_env_vars is not None: + return missing_env_vars # get url from request redirect_url = os.getenv("PROXY_BASE_URL", str(request.base_url)) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 5d68c4d3a26..4fdd9f3b37c 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -2705,137 +2705,6 @@ def _is_valid_team_configs(team_id=None, team_config=None, request_data=None): return -# LiteLLM Admin UI - Non SSO Login -url_to_redirect_to = os.getenv("PROXY_BASE_URL", "") -url_to_redirect_to += "/login" -html_form = f""" - - - -Please add the following configurations to your environment variables:
--LITELLM_MASTER_KEY="sk-1234" # make this unique. must start with `sk-`. -DATABASE_URL="postgres://..." # Need a postgres database? (Check out Supabase, Neon, etc) - -## OPTIONAL ## -PORT=4000 # DO THIS FOR RENDER/RAILWAY -STORE_MODEL_IN_DB="True" # Allow storing models in db --