""" CRUD ENDPOINTS FOR GUARDRAILS """ from typing import Dict, List, Optional, cast from fastapi import APIRouter, Depends, HTTPException, status from litellm.proxy.auth.user_api_key_auth import user_api_key_auth from litellm.types.guardrails import GuardrailInfoResponse, ListGuardrailsResponse #### GUARDRAILS ENDPOINTS #### router = APIRouter() def _get_guardrails_list_response( guardrails_config: List[Dict], ) -> ListGuardrailsResponse: """ Helper function to get the guardrails list response """ guardrail_configs: List[GuardrailInfoResponse] = [] for guardrail in guardrails_config: guardrail_configs.append( GuardrailInfoResponse( guardrail_name=guardrail.get("guardrail_name"), guardrail_info=guardrail.get("guardrail_info"), ) ) return ListGuardrailsResponse(guardrails=guardrail_configs) @router.get( "/guardrails/list", tags=["Guardrails"], dependencies=[Depends(user_api_key_auth)], response_model=ListGuardrailsResponse, ) async def list_guardrails(): """ List the guardrails that are available on the proxy server 👉 [Guardrail docs](https://docs.litellm.ai/docs/proxy/guardrails/quick_start) Example Request: ```bash curl -X GET "http://localhost:4000/guardrails/list" -H "Authorization: Bearer " ``` Example Response: ```json { "guardrails": [ { "guardrail_name": "bedrock-pre-guard", "guardrail_info": { "params": [ { "name": "toxicity_score", "type": "float", "description": "Score between 0-1 indicating content toxicity level" }, { "name": "pii_detection", "type": "boolean" } ] } } ] } ``` """ from litellm.proxy.proxy_server import proxy_config config = proxy_config.config _guardrails_config = cast(Optional[list[dict]], config.get("guardrails")) if _guardrails_config is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail={"error": "No guardrails found in config"}, ) return _get_guardrails_list_response(_guardrails_config)