fix(_health_endpoints.py): protect /health/test_connection - only allow users who are allowed to create models, to call this endpoint

Closes LIT-989
This commit is contained in:
Krrish Dholakia
2025-09-17 15:28:35 -07:00
parent 530662d735
commit d96e397de5
3 changed files with 30 additions and 3 deletions
File diff suppressed because one or more lines are too long
@@ -869,6 +869,10 @@ async def test_model_connection(
None,
description="Parameters for litellm.completion, litellm.embedding for the health check",
),
model_info: Dict = fastapi.Body(
None,
description="Model info for the health check",
),
user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),
):
"""
@@ -897,7 +901,30 @@ async def test_model_connection(
Returns:
dict: A dictionary containing the health check result with either success information or error details.
"""
from litellm.proxy._types import CommonProxyErrors
from litellm.proxy.management_endpoints.model_management_endpoints import (
ModelManagementAuthChecks,
)
from litellm.proxy.proxy_server import premium_user, prisma_client
from litellm.types.router import Deployment, LiteLLM_Params
try:
if prisma_client is None:
raise HTTPException(
status_code=500,
detail={"error": CommonProxyErrors.db_not_connected_error.value},
)
## Auth check
await ModelManagementAuthChecks.can_user_make_model_call(
model_params=Deployment(
model_name="test_model",
litellm_params=LiteLLM_Params(**litellm_params),
model_info=model_info,
),
user_api_key_dict=user_api_key_dict,
prisma_client=prisma_client,
premium_user=premium_user,
)
# Include health_check_params if provided
litellm_params = _update_litellm_params_for_health_check(
model_info={},
@@ -925,11 +952,12 @@ async def test_model_connection(
"result": cleaned_result,
}
except HTTPException as e:
raise e
except Exception as e:
verbose_proxy_logger.error(
verbose_proxy_logger.debug(
f"litellm.proxy.health_endpoints.test_model_connection(): Exception occurred - {str(e)}"
)
verbose_proxy_logger.debug(traceback.format_exc())
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail={"error": f"Failed to test connection: {str(e)}"},