diff --git a/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx b/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx index 9eb5aa79e0..d44c201e0e 100644 --- a/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx +++ b/web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx @@ -61,6 +61,9 @@ const QuotaPanel: FC = ({ const providerMap = useMemo(() => new Map( providers.map(p => [p.provider, p.preferred_provider_type]), ), [providers]) + const installedProvidersMap = useMemo(() => new Map( + providers.map(p => [p.provider, p.custom_configuration.available_credentials]), + ), [providers]) const { formatTime } = useTimestamp() const { plugins: allPlugins, @@ -73,8 +76,8 @@ const QuotaPanel: FC = ({ const selectedPluginIdRef = useRef(null) const handleIconClick = useCallback((key: ModelProviderQuotaGetPaid) => { - const providerType = providerMap.get(key) - if (!providerType && allPlugins) { + const isInstalled = providerMap.get(key) + if (!isInstalled && allPlugins) { const pluginId = providerKeyToPluginId[key] const plugin = allPlugins.find(p => p.plugin_id === pluginId) if (plugin) { @@ -131,13 +134,14 @@ const QuotaPanel: FC = ({
{allProviders.filter(({ key }) => trial_models.includes(key)).map(({ key, Icon }) => { const providerType = providerMap.get(key) - const usingQuota = providerType === PreferredProviderTypeEnum.system + const isConfigured = (installedProvidersMap.get(key)?.length ?? 0) > 0 // means the provider is configured API key const getTooltipKey = () => { - if (usingQuota) - return 'modelProvider.card.modelSupported' - if (providerType === PreferredProviderTypeEnum.custom) + // if provider type is not set, it means the provider is not installed + if (!providerType) + return 'modelProvider.card.modelNotSupported' + if (isConfigured && providerType === PreferredProviderTypeEnum.custom) return 'modelProvider.card.modelAPI' - return 'modelProvider.card.modelNotSupported' + return 'modelProvider.card.modelSupported' } return ( = ({ onClick={() => handleIconClick(key)} > - {!usingQuota && ( + {!providerType && (
)}
diff --git a/web/app/components/header/account-setting/model-provider-page/utils.ts b/web/app/components/header/account-setting/model-provider-page/utils.ts index d9a255575b..21e32ad178 100644 --- a/web/app/components/header/account-setting/model-provider-page/utils.ts +++ b/web/app/components/header/account-setting/model-provider-page/utils.ts @@ -21,7 +21,7 @@ import { export { ModelProviderQuotaGetPaid } from '@/types/model-provider' -export const MODEL_PROVIDER_QUOTA_GET_PAID = [ModelProviderQuotaGetPaid.ANTHROPIC, ModelProviderQuotaGetPaid.OPENAI, ModelProviderQuotaGetPaid.GEMINI, ModelProviderQuotaGetPaid.X, ModelProviderQuotaGetPaid.DEEPSEEK, ModelProviderQuotaGetPaid.TONGYI] +export const MODEL_PROVIDER_QUOTA_GET_PAID = [ModelProviderQuotaGetPaid.OPENAI, ModelProviderQuotaGetPaid.ANTHROPIC, ModelProviderQuotaGetPaid.GEMINI, ModelProviderQuotaGetPaid.X, ModelProviderQuotaGetPaid.DEEPSEEK, ModelProviderQuotaGetPaid.TONGYI] export const modelNameMap = { [ModelProviderQuotaGetPaid.OPENAI]: 'OpenAI',