import type { LangBotModelAvailabilityItem } from '@/app/infra/entities/api'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { Coins, TriangleAlert } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import ModelAvailabilityIndicator from './ModelAvailabilityIndicator'; interface LangBotModelMetadataProps { metadata?: LangBotModelAvailabilityItem; loaded: boolean; compact?: boolean; } function formatCredits(value: number, locale: string): string { if (value >= 1000) { const thousands = value / 1000; return `${thousands.toFixed(thousands >= 10 ? 0 : 1).replace(/\.0$/, '')}K`; } return new Intl.NumberFormat(locale, { maximumFractionDigits: 2, }).format(value); } export default function LangBotModelMetadata({ metadata, loaded, compact = false, }: LangBotModelMetadataProps) { const { t, i18n } = useTranslation(); if (!loaded) return null; const inputCredits = metadata?.input_credits; const outputCredits = metadata?.output_credits; const hasPricing = inputCredits != null && outputCredits != null; const input = inputCredits != null ? formatCredits(inputCredits, i18n.language) : ''; const output = outputCredits != null ? formatCredits(outputCredits, i18n.language) : ''; return ( {hasPricing ? ( <> event.preventDefault()} > {compact ? t('models.pricing.compact', { input, output }) : t('models.pricing.inline', { input, output })}

{t('models.pricing.title')}

{t('models.pricing.input', { credits: input, })}

{t('models.pricing.output', { credits: output, })}

) : ( event.preventDefault()} >

{t('models.pricing.unavailable')}

)}
); }