import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Card } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import type { ModelPrice } from '@/utils/usage'; import styles from '@/pages/UsagePage.module.scss'; export interface PriceSettingsCardProps { modelNames: string[]; modelPrices: Record; onPricesChange: (prices: Record) => void; } export function PriceSettingsCard({ modelNames, modelPrices, onPricesChange }: PriceSettingsCardProps) { const { t } = useTranslation(); const [selectedModel, setSelectedModel] = useState(''); const [promptPrice, setPromptPrice] = useState(''); const [completionPrice, setCompletionPrice] = useState(''); const [cachePrice, setCachePrice] = useState(''); const handleSavePrice = () => { if (!selectedModel) return; const prompt = parseFloat(promptPrice) || 0; const completion = parseFloat(completionPrice) || 0; const cache = cachePrice.trim() === '' ? prompt : parseFloat(cachePrice) || 0; const newPrices = { ...modelPrices, [selectedModel]: { prompt, completion, cache } }; onPricesChange(newPrices); setSelectedModel(''); setPromptPrice(''); setCompletionPrice(''); setCachePrice(''); }; const handleDeletePrice = (model: string) => { const newPrices = { ...modelPrices }; delete newPrices[model]; onPricesChange(newPrices); }; const handleEditPrice = (model: string) => { const price = modelPrices[model]; setSelectedModel(model); setPromptPrice(price?.prompt?.toString() || ''); setCompletionPrice(price?.completion?.toString() || ''); setCachePrice(price?.cache?.toString() || ''); }; const handleModelSelect = (value: string) => { setSelectedModel(value); const price = modelPrices[value]; if (price) { setPromptPrice(price.prompt.toString()); setCompletionPrice(price.completion.toString()); setCachePrice(price.cache.toString()); } else { setPromptPrice(''); setCompletionPrice(''); setCachePrice(''); } }; return (
{/* Price Form */}
setPromptPrice(e.target.value)} placeholder="0.00" step="0.0001" />
setCompletionPrice(e.target.value)} placeholder="0.00" step="0.0001" />
setCachePrice(e.target.value)} placeholder="0.00" step="0.0001" />
{/* Saved Prices List */}

{t('usage_stats.saved_prices')}

{Object.keys(modelPrices).length > 0 ? (
{Object.entries(modelPrices).map(([model, price]) => (
{model}
{t('usage_stats.model_price_prompt')}: ${price.prompt.toFixed(4)}/1M {t('usage_stats.model_price_completion')}: ${price.completion.toFixed(4)}/1M {t('usage_stats.model_price_cache')}: ${price.cache.toFixed(4)}/1M
))}
) : (
{t('usage_stats.model_price_empty')}
)}
); }