diff --git a/enterprise/litellm_enterprise/proxy/guardrails/endpoints.py b/enterprise/litellm_enterprise/proxy/guardrails/endpoints.py index 47bec519c4..fcd5e82ab3 100644 --- a/enterprise/litellm_enterprise/proxy/guardrails/endpoints.py +++ b/enterprise/litellm_enterprise/proxy/guardrails/endpoints.py @@ -97,9 +97,7 @@ async def get_guardrails_for_virtual_key( """ Get all guardrails associated with a virtual key """ - verbose_proxy_logger.debug(f"Getting guardrails for virtual key: {virtual_key_id}") guardrails = IN_MEMORY_GUARDRAIL_HANDLER.get_guardrails_for_virtual_key(virtual_key_id) - verbose_proxy_logger.debug(f"Found {len(guardrails)} guardrails for virtual key {virtual_key_id}") return VirtualKeyGuardrailsResponse( virtual_key_id=virtual_key_id, diff --git a/litellm/proxy/guardrails/guardrail_registry.py b/litellm/proxy/guardrails/guardrail_registry.py index 7d3432d5cb..523ff9f4cd 100644 --- a/litellm/proxy/guardrails/guardrail_registry.py +++ b/litellm/proxy/guardrails/guardrail_registry.py @@ -567,7 +567,6 @@ class InMemoryGuardrailHandler: Get all guardrails associated with a virtual key """ guardrail_ids = self.virtual_key_to_guardrails.get(virtual_key_id, []) - verbose_proxy_logger.debug(f"Getting guardrails for virtual key {virtual_key_id}: {guardrail_ids}") return [self.IN_MEMORY_GUARDRAILS[gid] for gid in guardrail_ids if gid in self.IN_MEMORY_GUARDRAILS] diff --git a/ui/litellm-dashboard/src/components/virtual_keys/virtual_key_detail.tsx b/ui/litellm-dashboard/src/components/virtual_keys/virtual_key_detail.tsx deleted file mode 100644 index 111bd26841..0000000000 --- a/ui/litellm-dashboard/src/components/virtual_keys/virtual_key_detail.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { Card, Flex, Text, Heading, Button, Dialog, TextField, Select, Box, Tabs } from '@radix-ui/themes'; -import { toast } from 'react-hot-toast'; -import { VirtualKey } from '../../types/virtual_key'; -import { fetchVirtualKey, updateVirtualKey } from '../../services/virtual_keys'; -import { VirtualKeyGuardrails } from './virtual_key_guardrails'; -import { fetchGuardrails } from '../../services/guardrails'; -import { Guardrail } from '../../types/guardrail'; -import { associateGuardrailWithVirtualKey } from '../../services/virtual_key_guardrails'; - -interface VirtualKeyDetailProps { - virtualKeyId: string; - onClose: () => void; -} - -export const VirtualKeyDetail: React.FC = ({ virtualKeyId, onClose }) => { - const [virtualKey, setVirtualKey] = useState(null); - const [loading, setLoading] = useState(true); - const [availableGuardrails, setAvailableGuardrails] = useState([]); - const [selectedGuardrailId, setSelectedGuardrailId] = useState(''); - const [refreshTrigger, setRefreshTrigger] = useState(0); - - useEffect(() => { - const loadVirtualKey = async () => { - try { - const data = await fetchVirtualKey(virtualKeyId); - setVirtualKey(data); - } catch (error) { - console.error('Error loading virtual key:', error); - toast.error('Failed to load virtual key details'); - } finally { - setLoading(false); - } - }; - - const loadGuardrails = async () => { - try { - const data = await fetchGuardrails(); - setAvailableGuardrails(data.guardrails); - } catch (error) { - console.error('Error loading guardrails:', error); - } - }; - - loadVirtualKey(); - loadGuardrails(); - }, [virtualKeyId]); - - const handleAddGuardrail = async () => { - if (!selectedGuardrailId) { - toast.error('Please select a guardrail'); - return; - } - - try { - await associateGuardrailWithVirtualKey(virtualKeyId, selectedGuardrailId); - toast.success('Guardrail added to virtual key'); - setSelectedGuardrailId(''); - setRefreshTrigger(prev => prev + 1); - } catch (error) { - console.error('Error adding guardrail:', error); - toast.error('Failed to add guardrail'); - } - }; - - if (loading) { - return ( - - - Virtual Key Details - Loading... - - - ); - } - - if (!virtualKey) { - return ( - - - Error - Virtual key not found - - - - - - ); - } - - return ( - - - Virtual Key: {virtualKey.key_name || 'Unnamed Key'} - - - - Details - Guardrails - - - - - - - - Key ID: - {virtualKey.key_id} - - - Team ID: - {virtualKey.team_id || 'N/A'} - - - Models: - {virtualKey.models?.join(', ') || 'All models'} - - - Spend: - ${virtualKey.spend?.toFixed(2) || '0.00'} - - - - - - - - - Add Guardrail - - - - - {availableGuardrails.map(guardrail => ( - - {guardrail.guardrail_name || `Guardrail ${guardrail.guardrail_id.substring(0, 8)}`} - - ))} - - - - - - - - - - - - - - - - - - ); -}; diff --git a/ui/litellm-dashboard/src/components/virtual_keys/virtual_key_guardrails.tsx b/ui/litellm-dashboard/src/components/virtual_keys/virtual_key_guardrails.tsx deleted file mode 100644 index 0acbc9d3f4..0000000000 --- a/ui/litellm-dashboard/src/components/virtual_keys/virtual_key_guardrails.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { Badge, Button, Card, Flex, Heading, Text, Box, Spinner } from '@radix-ui/themes'; -import { fetchGuardrailsForVirtualKey, associateGuardrailWithVirtualKey, disassociateGuardrailFromVirtualKey } from '../../services/virtual_key_guardrails'; -import { Guardrail } from '../../types/guardrail'; -import { toast } from 'react-hot-toast'; - -interface VirtualKeyGuardrailsProps { - virtualKeyId: string; - refreshTrigger?: number; -} - -export const VirtualKeyGuardrails: React.FC = ({ - virtualKeyId, - refreshTrigger = 0 -}) => { - const [guardrails, setGuardrails] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - const loadGuardrails = async () => { - if (!virtualKeyId) return; - - setLoading(true); - try { - const data = await fetchGuardrailsForVirtualKey(virtualKeyId); - setGuardrails(data.guardrails); - setError(null); - } catch (err) { - console.error('Error loading guardrails for virtual key:', err); - setError('Failed to load guardrails'); - setGuardrails([]); - } finally { - setLoading(false); - } - }; - - loadGuardrails(); - }, [virtualKeyId, refreshTrigger]); - - const handleRemoveGuardrail = async (guardrailId: string) => { - try { - await disassociateGuardrailFromVirtualKey(virtualKeyId, guardrailId); - setGuardrails(guardrails.filter(g => g.guardrail_id !== guardrailId)); - toast.success('Guardrail removed from virtual key'); - } catch (err) { - console.error('Error removing guardrail:', err); - toast.error('Failed to remove guardrail'); - } - }; - - if (loading) { - return ( - - - - - - ); - } - - if (error) { - return ( - - {error} - - ); - } - - return ( - - Attached Guardrails - {guardrails.length === 0 ? ( - No guardrails attached to this virtual key - ) : ( - - {guardrails.map((guardrail) => ( - - - {guardrail.guardrail_name || 'Unnamed Guardrail'} - Type: {guardrail.litellm_params?.guardrail} - Mode: {guardrail.litellm_params?.mode} - - - - ))} - - )} - - ); -}; diff --git a/ui/litellm-dashboard/src/services/guardrails.ts b/ui/litellm-dashboard/src/services/guardrails.ts deleted file mode 100644 index 2cb7b80a4b..0000000000 --- a/ui/litellm-dashboard/src/services/guardrails.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Guardrail } from '../types/guardrail'; - -interface GuardrailsResponse { - guardrails: Guardrail[]; -} - -export async function fetchGuardrails(): Promise { - const response = await fetch('/api/guardrails'); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to fetch guardrails: ${errorText}`); - } - - return await response.json(); -} - -export async function fetchGuardrail(guardrailId: string): Promise { - const response = await fetch(`/api/guardrails/${guardrailId}`); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to fetch guardrail: ${errorText}`); - } - - return await response.json(); -} diff --git a/ui/litellm-dashboard/src/services/virtual_key_guardrails.ts b/ui/litellm-dashboard/src/services/virtual_key_guardrails.ts deleted file mode 100644 index de7ce30d89..0000000000 --- a/ui/litellm-dashboard/src/services/virtual_key_guardrails.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Guardrail } from '../types/guardrail'; - -interface VirtualKeyGuardrailsResponse { - virtual_key_id: string; - guardrails: Guardrail[]; -} - -export async function fetchGuardrailsForVirtualKey(virtualKeyId: string): Promise { - const response = await fetch(`/api/guardrails/virtual_key/${virtualKeyId}`); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to fetch guardrails: ${errorText}`); - } - - return await response.json(); -} - -export async function associateGuardrailWithVirtualKey(virtualKeyId: string, guardrailId: string): Promise<{ message: string }> { - const response = await fetch('/api/guardrails/virtual_key/associate', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - virtual_key_id: virtualKeyId, - guardrail_id: guardrailId, - }), - }); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to associate guardrail: ${errorText}`); - } - - return await response.json(); -} - -export async function disassociateGuardrailFromVirtualKey(virtualKeyId: string, guardrailId: string): Promise<{ message: string }> { - const response = await fetch('/api/guardrails/virtual_key/disassociate', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - virtual_key_id: virtualKeyId, - guardrail_id: guardrailId, - }), - }); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to disassociate guardrail: ${errorText}`); - } - - return await response.json(); -} diff --git a/ui/litellm-dashboard/src/types/guardrail.ts b/ui/litellm-dashboard/src/types/guardrail.ts deleted file mode 100644 index 6cb26d0497..0000000000 --- a/ui/litellm-dashboard/src/types/guardrail.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface Guardrail { - guardrail_id: string; - guardrail_name: string | null; - litellm_params: { - guardrail: string; - mode: string; - default_on: boolean; - [key: string]: any; - }; - guardrail_info?: Record; -} diff --git a/ui/litellm-dashboard/src/types/virtual_key.ts b/ui/litellm-dashboard/src/types/virtual_key.ts deleted file mode 100644 index e130853b1d..0000000000 --- a/ui/litellm-dashboard/src/types/virtual_key.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface VirtualKey { - key_id: string; - key_name?: string; - team_id?: string; - models?: string[]; - spend?: number; - max_budget?: number; - max_parallel_requests?: number; - metadata?: Record; - expires?: string; - created_at?: string; - updated_at?: string; -}