[UI QA] 1.74.0.rc (#12348)

* fix alignment

* fix msg

* ui qa  - use correct input type

* fix logo

* fix

* fix preview

* add PremiumLoggingSettingsProps

* fix duration

* fix img

* fix img

* ui new build
This commit is contained in:
Ishaan Jaff 2025-07-05 15:47:20 -07:00 committed by GitHub
parent 303c4bd628
commit ca4d886cd0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 80 additions and 13 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 KiB

View File

@ -129,8 +129,19 @@ html_form = f"""
margin-bottom: 20px;
}}
.toggle-password input {{
margin-right: 6px;
.toggle-password input[type="checkbox"] {{
margin-right: 8px;
margin-bottom: 0;
vertical-align: middle;
width: 16px;
height: 16px;
}}
.toggle-password label {{
margin-bottom: 0;
font-size: 14px;
cursor: pointer;
line-height: 1;
}}
input[type="submit"] {{

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 KiB

View File

@ -0,0 +1,44 @@
import React from 'react';
import { Text } from "@tremor/react";
import LoggingSettings from "../team/LoggingSettings";
interface PremiumLoggingSettingsProps {
value: any[];
onChange: (settings: any[]) => void;
premiumUser?: boolean;
}
export function PremiumLoggingSettings({
value,
onChange,
premiumUser = false
}: PremiumLoggingSettingsProps) {
if (!premiumUser) {
return (
<div>
<div className="flex flex-wrap gap-2 mb-3">
<div className="inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50">
langfuse-logging
</div>
<div className="inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50">
datadog-logging
</div>
</div>
<div className="p-3 bg-yellow-50 border border-yellow-200 rounded-lg">
<Text className="text-sm text-yellow-800">
Setting Key/Team logging settings is a LiteLLM Enterprise feature. Global Logging Settings are available for all free users. Get a trial key <a href="https://www.litellm.ai/#pricing" target="_blank" rel="noopener noreferrer" className="underline">here</a>.
</Text>
</div>
</div>
);
}
return (
<LoggingSettings
value={value}
onChange={onChange}
/>
);
}
export default PremiumLoggingSettings;

View File

@ -40,7 +40,7 @@ import { Team } from "./key_team_helpers/key_list";
import TeamDropdown from "./common_components/team_dropdown";
import { InfoCircleOutlined } from '@ant-design/icons';
import { Tooltip } from 'antd';
import LoggingSettings from "./team/LoggingSettings";
import PremiumLoggingSettings from "./common_components/PremiumLoggingSettings";
import Createuser from "./create_user_button";
import debounce from 'lodash/debounce';
import { rolesWithWriteAccess } from '../utils/roles';
@ -512,7 +512,7 @@ const CreateKey: React.FC<CreateKeyProps> = ({
{isFormDisabled && (
<div className="mb-8 p-4 bg-blue-50 border border-blue-200 rounded-md">
<Text className="text-blue-800 text-sm">
Please select a team to continue configuring your API key.
Please select a team to continue configuring your API key. If you do not see any teams, please contact your Proxy Admin to either provide you with access to models or to add you to a team.
</Text>
</div>
)}
@ -822,7 +822,11 @@ const CreateKey: React.FC<CreateKeyProps> = ({
</AccordionHeader>
<AccordionBody>
<div className="mt-4">
<LoggingSettings value={loggingSettings} onChange={setLoggingSettings} />
<PremiumLoggingSettings
value={loggingSettings}
onChange={setLoggingSettings}
premiumUser={premiumUser}
/>
</div>
</AccordionBody>
</Accordion>

View File

@ -3,7 +3,7 @@
import React, { useState } from 'react';
import { Form, Select, Space, Tooltip, Divider } from 'antd';
import { InfoCircleOutlined } from '@ant-design/icons';
import { Button, Card } from '@tremor/react';
import { Button, Card, TextInput } from '@tremor/react';
import { PlusIcon, TrashIcon, CogIcon } from '@heroicons/react/outline';
import { callbackInfo, Callbacks, callback_map } from '../callback_info_helpers';
@ -111,9 +111,8 @@ const LoggingSettings: React.FC<LoggingSettingsProps> = ({ value = [], onChange
</span>
)}
</label>
<input
<TextInput
type={paramType === 'password' ? 'password' : 'text'}
className="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors duration-200"
placeholder={`os.environ/${paramName.toUpperCase()}`}
value={config.callback_vars[paramName] || ''}
onChange={(e) => updateCallbackVar(configIndex, paramName, e.target.value)}

View File

@ -60,7 +60,7 @@ import AvailableTeamsPanel from "@/components/team/available_teams";
import VectorStoreSelector from "./vector_store_management/VectorStoreSelector";
import PremiumVectorStoreSelector from "./common_components/PremiumVectorStoreSelector";
import PremiumMCPSelector from "./common_components/PremiumMCPSelector";
import LoggingSettings from "./team/LoggingSettings";
import PremiumLoggingSettings from "./common_components/PremiumLoggingSettings";
import type { KeyResponse, Team } from "./key_team_helpers/key_list";
import { formatNumberWithCommas } from "../utils/dataUtils";
@ -1178,9 +1178,10 @@ const Teams: React.FC<TeamProps> = ({
</AccordionHeader>
<AccordionBody>
<div className="mt-4">
<LoggingSettings
<PremiumLoggingSettings
value={loggingSettings}
onChange={setLoggingSettings}
premiumUser={premiumUser}
/>
</div>
</AccordionBody>

View File

@ -18,6 +18,11 @@ interface AuditLogsProps {
allTeams: Team[];
}
const asset_logos_folder = '../ui/assets/';
export const auditLogsPreviewImg = `${asset_logos_folder}audit-logs-preview.png`;
export default function AuditLogs({
userID,
userRole,
@ -402,16 +407,19 @@ export default function AuditLogs({
Here&apos;s a preview of what Audit Logs offer:
</Text>
<img
src="/audit-logs-preview.png"
src={auditLogsPreviewImg}
alt="Audit Logs Preview"
style={{
maxWidth: '100%',
maxHeight: '700px',
border: '1px solid #ccc',
borderRadius: '8px',
boxShadow: '0 4px 8px rgba(0,0,0,0.1)',
margin: '0 auto'
}}
onError={(e) => {
console.error('Failed to load audit logs preview image');
(e.target as HTMLImageElement).style.display = 'none';
}}
/>
</div>
);

View File

@ -163,7 +163,7 @@ export const columns: ColumnDef<LogEntry>[] = [
),
},
{
header: "Duration",
header: "Duration (s)",
accessorKey: "duration",
cell: (info: any) => (
<Tooltip title={String(info.getValue() || "-")}>