import type { FC } from 'react' import { useTranslation } from 'react-i18next' import type { ModelProvider, TypeWithI18N, } from '../declarations' import { ConfigurateMethodEnum } from '../declarations' import { DEFAULT_BACKGROUND_COLOR, MODEL_PROVIDER_QUOTA_GET_FREE, modelTypeFormat, } from '../utils' import { useAnthropicBuyQuota, useFreeQuota, useLanguage, useUpdateModelProviders, } from '../hooks' import ModelBadge from '../model-badge' import ProviderIcon from '../provider-icon' import s from './index.module.css' import { Plus, Settings01 } from '@/app/components/base/icons/src/vender/line/general' import Button from '@/app/components/base/button' import { IS_CE_EDITION } from '@/config' type ProviderCardProps = { provider: ModelProvider onOpenModal: (configurateMethod: ConfigurateMethodEnum) => void } const TIP_MAP: { [k: string]: TypeWithI18N } = { minimax: { en_US: 'Earn 1 million tokens for free', zh_Hans: '免费获取 100 万个 token', }, spark: { en_US: 'Earn 3 million tokens (v3.0) for free', zh_Hans: '免费获取 300 万个 token (v3.0)', }, zhipuai: { en_US: 'Earn 10 million tokens for free', zh_Hans: '免费获取 1000 万个 token', }, } const ProviderCard: FC = ({ provider, onOpenModal, }) => { const { t } = useTranslation() const language = useLanguage() const updateModelProviders = useUpdateModelProviders() const handlePay = useAnthropicBuyQuota() const handleFreeQuotaSuccess = () => { updateModelProviders() } const handleFreeQuota = useFreeQuota(handleFreeQuotaSuccess) const configurateMethods = provider.configurate_methods.filter(method => method !== ConfigurateMethodEnum.fetchFromRemote) const canGetFreeQuota = MODEL_PROVIDER_QUOTA_GET_FREE.includes(provider.provider) && !IS_CE_EDITION && provider.system_configuration.enabled return (
{ provider.description && (
{provider.description[language] || provider.description.en_US}
) }
{ provider.supported_model_types.map(modelType => ( {modelTypeFormat(modelType)} )) } { canGetFreeQuota && (
📣 
{TIP_MAP[provider.provider][language]}
) }
{ canGetFreeQuota && (
) }
{ configurateMethods.map((method) => { if (method === ConfigurateMethodEnum.predefinedModel) { return ( ) } return ( ) }) }
) } export default ProviderCard