mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-08 03:08:45 +00:00
[QA] Disable Logging settings for Keys (#12774)
* fix keyData metadata access * fix helpers
This commit is contained in:
parent
bd134fa2db
commit
805fbf55a2
6 changed files with 59 additions and 19 deletions
|
|
@ -24,6 +24,21 @@ export const callback_map: Record<string, string> = {
|
|||
Arize: "arize",
|
||||
}
|
||||
|
||||
// Reverse mapping from internal values to display names
|
||||
export const reverse_callback_map: Record<string, string> = Object.fromEntries(
|
||||
Object.entries(callback_map).map(([key, value]) => [value, key])
|
||||
);
|
||||
|
||||
// Utility function to convert internal callback values to display names
|
||||
export const mapInternalToDisplayNames = (internalValues: string[]): string[] => {
|
||||
return internalValues.map(value => reverse_callback_map[value] || value);
|
||||
};
|
||||
|
||||
// Utility function to convert display names to internal callback values
|
||||
export const mapDisplayToInternalNames = (displayValues: string[]): string[] => {
|
||||
return displayValues.map(value => callback_map[value] || value);
|
||||
};
|
||||
|
||||
const asset_logos_folder = '/assets/logos/';
|
||||
|
||||
interface CallbackInfo {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ import debounce from 'lodash/debounce';
|
|||
import { rolesWithWriteAccess } from '../utils/roles';
|
||||
import BudgetDurationDropdown from "./common_components/budget_duration_dropdown";
|
||||
import { formatNumberWithCommas } from "@/utils/dataUtils";
|
||||
|
||||
import { callback_map, mapDisplayToInternalNames } from "./callback_info_helpers";
|
||||
|
||||
|
||||
const { Option } = Select;
|
||||
|
|
@ -311,9 +311,11 @@ const CreateKey: React.FC<CreateKeyProps> = ({
|
|||
|
||||
// Add disabled callbacks to the metadata
|
||||
if (disabledCallbacks.length > 0) {
|
||||
// Map display names to internal callback values
|
||||
const mappedDisabledCallbacks = mapDisplayToInternalNames(disabledCallbacks);
|
||||
metadata = {
|
||||
...metadata,
|
||||
litellm_disabled_callbacks: disabledCallbacks
|
||||
litellm_disabled_callbacks: mappedDisabledCallbacks
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import MCPServerSelector from "./mcp_server_management/MCPServerSelector";
|
|||
import EditLoggingSettings from "./team/EditLoggingSettings";
|
||||
import { extractLoggingSettings, formatMetadataForDisplay } from "./key_info_utils";
|
||||
import { fetchMCPAccessGroups } from "./networking";
|
||||
import { mapInternalToDisplayNames, mapDisplayToInternalNames } from "./callback_info_helpers";
|
||||
|
||||
interface KeyEditViewProps {
|
||||
keyData: KeyResponse;
|
||||
|
|
@ -57,7 +58,11 @@ export function KeyEditView({
|
|||
const [availableModels, setAvailableModels] = useState<string[]>([]);
|
||||
const [mcpAccessGroups, setMcpAccessGroups] = useState<string[]>([]);
|
||||
const [mcpAccessGroupsLoaded, setMcpAccessGroupsLoaded] = useState(false);
|
||||
const [disabledCallbacks, setDisabledCallbacks] = useState<string[]>(Array.isArray(keyData.metadata?.litellm_disabled_callbacks) ? keyData.metadata.litellm_disabled_callbacks : []);
|
||||
const [disabledCallbacks, setDisabledCallbacks] = useState<string[]>(
|
||||
Array.isArray(keyData.metadata?.litellm_disabled_callbacks)
|
||||
? mapInternalToDisplayNames(keyData.metadata.litellm_disabled_callbacks)
|
||||
: []
|
||||
);
|
||||
|
||||
const fetchMcpAccessGroups = async () => {
|
||||
if (!accessToken) return;
|
||||
|
|
@ -128,7 +133,9 @@ export function KeyEditView({
|
|||
accessGroups: keyData.object_permission?.mcp_access_groups || []
|
||||
},
|
||||
logging_settings: extractLoggingSettings(keyData.metadata),
|
||||
disabled_callbacks: Array.isArray(keyData.metadata?.litellm_disabled_callbacks) ? keyData.metadata.litellm_disabled_callbacks : []
|
||||
disabled_callbacks: Array.isArray(keyData.metadata?.litellm_disabled_callbacks)
|
||||
? mapInternalToDisplayNames(keyData.metadata.litellm_disabled_callbacks)
|
||||
: []
|
||||
};
|
||||
|
||||
return (
|
||||
|
|
@ -237,9 +244,12 @@ export function KeyEditView({
|
|||
value={form.getFieldValue('logging_settings')}
|
||||
onChange={(values) => form.setFieldValue('logging_settings', values)}
|
||||
disabledCallbacks={disabledCallbacks}
|
||||
onDisabledCallbacksChange={(values) => {
|
||||
setDisabledCallbacks(values);
|
||||
form.setFieldValue('disabled_callbacks', values);
|
||||
onDisabledCallbacksChange={(internalValues) => {
|
||||
// Convert internal values back to display names for UI state
|
||||
const displayNames = mapInternalToDisplayNames(internalValues);
|
||||
setDisabledCallbacks(displayNames);
|
||||
// Store internal values in form for submission
|
||||
form.setFieldValue('disabled_callbacks', internalValues);
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import LoggingSettingsView from "./logging_settings_view";
|
|||
import { copyToClipboard as utilCopyToClipboard, formatNumberWithCommas } from "@/utils/dataUtils";
|
||||
import { extractLoggingSettings, formatMetadataForDisplay } from "./key_info_utils";
|
||||
import { CopyIcon, CheckIcon } from "lucide-react";
|
||||
import { callback_map, mapInternalToDisplayNames, mapDisplayToInternalNames } from "./callback_info_helpers";
|
||||
|
||||
interface KeyInfoViewProps {
|
||||
keyId: string;
|
||||
|
|
@ -105,7 +106,9 @@ export default function KeyInfoView({ keyId, onClose, keyData, accessToken, user
|
|||
? { logging: formValues.logging_settings }
|
||||
: {}),
|
||||
...(formValues.disabled_callbacks?.length > 0
|
||||
? { litellm_disabled_callbacks: formValues.disabled_callbacks }
|
||||
? {
|
||||
litellm_disabled_callbacks: mapDisplayToInternalNames(formValues.disabled_callbacks)
|
||||
}
|
||||
: {}),
|
||||
};
|
||||
} catch (error) {
|
||||
|
|
@ -123,7 +126,9 @@ export default function KeyInfoView({ keyId, onClose, keyData, accessToken, user
|
|||
? { logging: formValues.logging_settings }
|
||||
: {}),
|
||||
...(formValues.disabled_callbacks?.length > 0
|
||||
? { litellm_disabled_callbacks: formValues.disabled_callbacks }
|
||||
? {
|
||||
litellm_disabled_callbacks: mapDisplayToInternalNames(formValues.disabled_callbacks)
|
||||
}
|
||||
: {}),
|
||||
};
|
||||
}
|
||||
|
|
@ -335,8 +340,10 @@ export default function KeyInfoView({ keyId, onClose, keyData, accessToken, user
|
|||
</Card>
|
||||
|
||||
<LoggingSettingsView
|
||||
loggingConfigs={extractLoggingSettings(currentKeyData.metadata)}
|
||||
disabledCallbacks={Array.isArray(currentKeyData.metadata?.litellm_disabled_callbacks) ? currentKeyData.metadata.litellm_disabled_callbacks : []}
|
||||
loggingConfigs={extractLoggingSettings(keyData.metadata)}
|
||||
disabledCallbacks={Array.isArray(keyData.metadata?.litellm_disabled_callbacks)
|
||||
? mapInternalToDisplayNames(keyData.metadata.litellm_disabled_callbacks)
|
||||
: []}
|
||||
variant="card"
|
||||
/>
|
||||
</Grid>
|
||||
|
|
@ -458,9 +465,11 @@ export default function KeyInfoView({ keyId, onClose, keyData, accessToken, user
|
|||
|
||||
<LoggingSettingsView
|
||||
loggingConfigs={extractLoggingSettings(
|
||||
currentKeyData.metadata,
|
||||
keyData.metadata,
|
||||
)}
|
||||
disabledCallbacks={Array.isArray(currentKeyData.metadata?.litellm_disabled_callbacks) ? currentKeyData.metadata.litellm_disabled_callbacks : []}
|
||||
disabledCallbacks={Array.isArray(keyData.metadata?.litellm_disabled_callbacks)
|
||||
? mapInternalToDisplayNames(keyData.metadata.litellm_disabled_callbacks)
|
||||
: []}
|
||||
variant="inline"
|
||||
className="pt-4 border-t border-gray-200"
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import React from "react";
|
||||
import { Text, Badge } from "@tremor/react";
|
||||
import { CogIcon, BanIcon } from "@heroicons/react/outline";
|
||||
import { callbackInfo, callback_map } from "./callback_info_helpers";
|
||||
import { callbackInfo, callback_map, reverse_callback_map } from "./callback_info_helpers";
|
||||
|
||||
interface LoggingConfig {
|
||||
callback_name: string;
|
||||
|
|
@ -127,7 +127,9 @@ export function LoggingSettingsView({
|
|||
{disabledCallbacks.length > 0 ? (
|
||||
<div className="space-y-3">
|
||||
{disabledCallbacks.map((callbackName, index) => {
|
||||
const logoUrl = callbackInfo[callbackName]?.logo;
|
||||
// Handle both display names and internal values
|
||||
const displayName = reverse_callback_map[callbackName] || callbackName;
|
||||
const logoUrl = callbackInfo[displayName]?.logo;
|
||||
|
||||
return (
|
||||
<div
|
||||
|
|
@ -138,14 +140,14 @@ export function LoggingSettingsView({
|
|||
{logoUrl ? (
|
||||
<img
|
||||
src={logoUrl}
|
||||
alt={callbackName}
|
||||
alt={displayName}
|
||||
className="w-5 h-5 object-contain"
|
||||
/>
|
||||
) : (
|
||||
<BanIcon className="h-5 w-5 text-gray-400" />
|
||||
)}
|
||||
<div>
|
||||
<Text className="font-medium text-red-800">{callbackName}</Text>
|
||||
<Text className="font-medium text-red-800">{displayName}</Text>
|
||||
<Text className="text-xs text-red-600">
|
||||
Disabled for this key
|
||||
</Text>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { Form, Select, Space, Tooltip, Divider } from 'antd';
|
|||
import { InfoCircleOutlined } from '@ant-design/icons';
|
||||
import { Button, Card, TextInput } from '@tremor/react';
|
||||
import { PlusIcon, TrashIcon, CogIcon, BanIcon } from '@heroicons/react/outline';
|
||||
import { callbackInfo, Callbacks, callback_map } from '../callback_info_helpers';
|
||||
import { callbackInfo, Callbacks, callback_map, mapDisplayToInternalNames } from '../callback_info_helpers';
|
||||
|
||||
const { Option } = Select;
|
||||
|
||||
|
|
@ -41,7 +41,9 @@ const LoggingSettings: React.FC<LoggingSettingsProps> = ({
|
|||
};
|
||||
|
||||
const handleDisabledCallbacksChange = (newDisabledCallbacks: string[]) => {
|
||||
onDisabledCallbacksChange?.(newDisabledCallbacks);
|
||||
// Map display names to internal callback values
|
||||
const mappedDisabledCallbacks = mapDisplayToInternalNames(newDisabledCallbacks);
|
||||
onDisabledCallbacksChange?.(mappedDisabledCallbacks);
|
||||
};
|
||||
|
||||
const addLoggingConfig = () => {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue