diff --git a/litellm/proxy/_experimental/out/onboarding.html b/litellm/proxy/_experimental/out/onboarding.html deleted file mode 100644 index 5d742a7a85..0000000000 --- a/litellm/proxy/_experimental/out/onboarding.html +++ /dev/null @@ -1 +0,0 @@ -LiteLLM Dashboard \ No newline at end of file diff --git a/litellm/proxy/guardrails/guardrail_endpoints.py b/litellm/proxy/guardrails/guardrail_endpoints.py index b1919b45ef..3b31c31a97 100644 --- a/litellm/proxy/guardrails/guardrail_endpoints.py +++ b/litellm/proxy/guardrails/guardrail_endpoints.py @@ -79,9 +79,6 @@ async def list_guardrails(): _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([]) return _get_guardrails_list_response(_guardrails_config) diff --git a/ui/litellm-dashboard/src/app/page.tsx b/ui/litellm-dashboard/src/app/page.tsx index 5894df2c71..3a089bf806 100644 --- a/ui/litellm-dashboard/src/app/page.tsx +++ b/ui/litellm-dashboard/src/app/page.tsx @@ -25,7 +25,7 @@ import Usage from "@/components/usage"; import CacheDashboard from "@/components/cache_dashboard"; import { setGlobalLitellmHeaderName } from "@/components/networking"; import { Organization } from "@/components/networking"; - +import GuardrailsPanel from "@/components/guardrails"; function getCookie(name: string) { const cookieValue = document.cookie .split("; ") @@ -309,6 +309,8 @@ export default function CreateKeyPage() { /> ) : page == "budgets" ? ( + ) : page == "guardrails" ? ( + ) : page == "general-settings" ? ( = ({ accessToken }) => { + const [guardrailsList, setGuardrailsList] = useState([]); + + useEffect(() => { + if (!accessToken) { + return; + } + + const fetchGuardrails = async () => { + try { + const response = await getGuardrailsList(accessToken); + setGuardrailsList(response); + } catch (error) { + console.error('Error fetching guardrails:', error); + } + }; + + fetchGuardrails(); + }, [accessToken]); + + return ( +
+ + Configured guardrails and their current status. + + + + Guardrail Name + Mode + Status + + + + + {guardrailsList.map((guardrail: GuardrailItem, index: number) => ( + + {guardrail.name} + {guardrail.mode} + + {guardrail.status === 'always_on' ? 'Always On' : 'Per Request'} + + + ))} + +
+
+
+ ); +}; + +export default GuardrailsPanel; \ No newline at end of file diff --git a/ui/litellm-dashboard/src/components/leftnav.tsx b/ui/litellm-dashboard/src/components/leftnav.tsx index 54668233d5..4811f2d5b2 100644 --- a/ui/litellm-dashboard/src/components/leftnav.tsx +++ b/ui/litellm-dashboard/src/components/leftnav.tsx @@ -67,7 +67,7 @@ const menuItems: MenuItem[] = [ children: [ { key: "9", page: "caching", label: "Caching", icon: , roles: all_admin_roles }, { key: "10", page: "budgets", label: "Budgets", icon: , roles: all_admin_roles }, - { key: "11", page: "budgets", label: "Guardrails", icon: , roles: all_admin_roles }, + { key: "11", page: "guardrails", label: "Guardrails", icon: , roles: all_admin_roles }, ] }, {