import { useState } from 'react' import type { FC } from 'react' import { useTranslation } from 'react-i18next' import type { Provider, ProviderWithQuota } from '../declarations' import Tooltip from '@/app/components/base/tooltip' import { InfoCircle } from '@/app/components/base/icons/src/vender/line/general' import { getPayUrl } from '@/service/common' import Button from '@/app/components/base/button' import { formatNumber } from '@/utils/format' type QuotaProps = { currentProvider: Provider } const Quota: FC = ({ currentProvider, }) => { const { t } = useTranslation() const [loading, setLoading] = useState(false) const systemTrial = currentProvider.providers.find(p => p.provider_type === 'system' && (p as ProviderWithQuota)?.quota_type === 'trial') as ProviderWithQuota const systemPaid = currentProvider.providers.find(p => p.provider_type === 'system' && (p as ProviderWithQuota)?.quota_type === 'paid') as ProviderWithQuota const QUOTA_UNIT_MAP: Record = { times: t('common.modelProvider.card.callTimes'), tokens: 'Tokens', } const renderStatus = () => { const totalQuota = (systemPaid?.is_valid ? systemPaid.quota_limit : 0) + systemTrial.quota_limit const totalUsed = (systemPaid?.is_valid ? systemPaid.quota_used : 0) + systemTrial.quota_used if (totalQuota === totalUsed) { return (
{t('common.modelProvider.card.quotaExhausted')}
) } if (systemPaid?.is_valid) { return (
{t('common.modelProvider.card.paid')}
) } return (
{t('common.modelProvider.card.onTrial')}
) } const renderQuota = () => { if (systemPaid?.is_valid) return formatNumber(systemPaid.quota_limit - systemPaid.quota_used) if (systemTrial.is_valid) return formatNumber(systemTrial.quota_limit - systemTrial.quota_used) } const renderUnit = () => { if (systemPaid?.is_valid) return QUOTA_UNIT_MAP[systemPaid.quota_unit] if (systemTrial.is_valid) return QUOTA_UNIT_MAP[systemTrial.quota_unit] } const handleGetPayUrl = async () => { setLoading(true) try { const res = await getPayUrl(`/workspaces/current/model-providers/${systemPaid.provider_name}/checkout-url`) window.location.href = res.url } finally { setLoading(false) } } return (
{t('common.modelProvider.card.quota')}
{renderStatus()}
{renderQuota()}
{renderUnit()}
{t('common.modelProvider.card.tip')}
} >
{ systemPaid && ( ) } ) } export default Quota