import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import type { ProviderCostHistogramResponse, ProviderLatencyHistogramResponse, ProviderTokenHistogramResponse } from "@/lib/types/logs"; import { CHART_COLORS, CHART_HEADER_ACTIONS_CLASS, CHART_HEADER_CONTROLS_CLASS, CHART_HEADER_LEGEND_CLASS, LATENCY_COLORS, getModelColor, } from "../utils/chartUtils"; import { ChartCard } from "./charts/chartCard"; import { type ChartType, ChartTypeToggle } from "./charts/chartTypeToggle"; import { ProviderCostChart } from "./charts/providerCostChart"; import { ProviderFilterSelect } from "./charts/providerFilterSelect"; import { ProviderLatencyChart } from "./charts/providerLatencyChart"; import { ProviderTokenChart } from "./charts/providerTokenChart"; export interface ProviderUsageTabProps { // Data providerCostData: ProviderCostHistogramResponse | null; providerTokenData: ProviderTokenHistogramResponse | null; providerLatencyData: ProviderLatencyHistogramResponse | null; // Loading states loadingProviderCost: boolean; loadingProviderTokens: boolean; loadingProviderLatency: boolean; // Time range startTime: number; endTime: number; // Chart types providerCostChartType: ChartType; providerTokenChartType: ChartType; providerLatencyChartType: ChartType; // Provider selections providerCostProvider: string; providerTokenProvider: string; providerLatencyProvider: string; // Derived provider lists availableProviders: string[]; providerCostProviders: string[]; providerTokenProviders: string[]; providerLatencyProviders: string[]; // Chart type toggle callbacks onProviderCostChartToggle: (type: ChartType) => void; onProviderTokenChartToggle: (type: ChartType) => void; onProviderLatencyChartToggle: (type: ChartType) => void; // Filter callbacks onProviderCostProviderChange: (provider: string) => void; onProviderTokenProviderChange: (provider: string) => void; onProviderLatencyProviderChange: (provider: string) => void; } export function ProviderUsageTab({ providerCostData, providerTokenData, providerLatencyData, loadingProviderCost, loadingProviderTokens, loadingProviderLatency, startTime, endTime, providerCostChartType, providerTokenChartType, providerLatencyChartType, providerCostProvider, providerTokenProvider, providerLatencyProvider, availableProviders, providerCostProviders, providerTokenProviders, providerLatencyProviders, onProviderCostChartToggle, onProviderTokenChartToggle, onProviderLatencyChartToggle, onProviderCostProviderChange, onProviderTokenProviderChange, onProviderLatencyProviderChange, }: ProviderUsageTabProps) { return (
{/* Provider Cost Chart */}
{providerCostProvider === "all" ? ( providerCostProviders.length > 0 && ( <> {providerCostProviders[0]} {providerCostProviders[0]} {providerCostProviders.length > 1 && (
{providerCostProviders.slice(1).map((provider, idx) => ( {provider} ))}
)} ) ) : ( {providerCostProvider} {providerCostProvider} )}
} > {/* Provider Token Usage Chart */}
{providerTokenProvider === "all" ? ( providerTokenProviders.length > 0 && ( <> {providerTokenProviders[0]} {providerTokenProviders[0]} {providerTokenProviders.length > 1 && (
{providerTokenProviders.slice(1).map((provider, idx) => ( {provider} ))}
)} ) ) : ( <> Input Output )}
} >
{/* Provider Latency Chart */}
{providerLatencyProvider === "all" ? ( providerLatencyProviders.length > 0 && ( <> {providerLatencyProviders[0]} {providerLatencyProviders[0]} {providerLatencyProviders.length > 1 && (
{providerLatencyProviders.slice(1).map((provider, idx) => ( {provider} ))}
)} ) ) : ( <> Avg P90 P95 P99 )}
} >
); }