Skip to content

Commit b66bd5f

Browse files
CodingOnStarCodingOnStarCodingOnStar
authored
feat: enhance quota panel with installed providers mapping (#31546)
Co-authored-by: CodingOnStar <hanxujiang@dify.ai> Co-authored-by: CodingOnStar <hanxujiang@dify.com>
1 parent c8abe1c commit b66bd5f

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

web/app/components/header/account-setting/model-provider-page/provider-added-card/quota-panel.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ const QuotaPanel: FC<QuotaPanelProps> = ({
6161
const providerMap = useMemo(() => new Map(
6262
providers.map(p => [p.provider, p.preferred_provider_type]),
6363
), [providers])
64+
const installedProvidersMap = useMemo(() => new Map(
65+
providers.map(p => [p.provider, p.custom_configuration.available_credentials]),
66+
), [providers])
6467
const { formatTime } = useTimestamp()
6568
const {
6669
plugins: allPlugins,
@@ -73,8 +76,8 @@ const QuotaPanel: FC<QuotaPanelProps> = ({
7376
const selectedPluginIdRef = useRef<string | null>(null)
7477

7578
const handleIconClick = useCallback((key: ModelProviderQuotaGetPaid) => {
76-
const providerType = providerMap.get(key)
77-
if (!providerType && allPlugins) {
79+
const isInstalled = providerMap.get(key)
80+
if (!isInstalled && allPlugins) {
7881
const pluginId = providerKeyToPluginId[key]
7982
const plugin = allPlugins.find(p => p.plugin_id === pluginId)
8083
if (plugin) {
@@ -131,13 +134,14 @@ const QuotaPanel: FC<QuotaPanelProps> = ({
131134
<div className="flex items-center gap-1">
132135
{allProviders.filter(({ key }) => trial_models.includes(key)).map(({ key, Icon }) => {
133136
const providerType = providerMap.get(key)
134-
const usingQuota = providerType === PreferredProviderTypeEnum.system
137+
const isConfigured = (installedProvidersMap.get(key)?.length ?? 0) > 0 // means the provider is configured API key
135138
const getTooltipKey = () => {
136-
if (usingQuota)
137-
return 'modelProvider.card.modelSupported'
138-
if (providerType === PreferredProviderTypeEnum.custom)
139+
// if provider type is not set, it means the provider is not installed
140+
if (!providerType)
141+
return 'modelProvider.card.modelNotSupported'
142+
if (isConfigured && providerType === PreferredProviderTypeEnum.custom)
139143
return 'modelProvider.card.modelAPI'
140-
return 'modelProvider.card.modelNotSupported'
144+
return 'modelProvider.card.modelSupported'
141145
}
142146
return (
143147
<Tooltip
@@ -149,7 +153,7 @@ const QuotaPanel: FC<QuotaPanelProps> = ({
149153
onClick={() => handleIconClick(key)}
150154
>
151155
<Icon className="h-6 w-6 rounded-lg" />
152-
{!usingQuota && (
156+
{!providerType && (
153157
<div className="absolute inset-0 rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default-dodge opacity-30" />
154158
)}
155159
</div>

web/app/components/header/account-setting/model-provider-page/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121

2222
export { ModelProviderQuotaGetPaid } from '@/types/model-provider'
2323

24-
export const MODEL_PROVIDER_QUOTA_GET_PAID = [ModelProviderQuotaGetPaid.ANTHROPIC, ModelProviderQuotaGetPaid.OPENAI, ModelProviderQuotaGetPaid.GEMINI, ModelProviderQuotaGetPaid.X, ModelProviderQuotaGetPaid.DEEPSEEK, ModelProviderQuotaGetPaid.TONGYI]
24+
export const MODEL_PROVIDER_QUOTA_GET_PAID = [ModelProviderQuotaGetPaid.OPENAI, ModelProviderQuotaGetPaid.ANTHROPIC, ModelProviderQuotaGetPaid.GEMINI, ModelProviderQuotaGetPaid.X, ModelProviderQuotaGetPaid.DEEPSEEK, ModelProviderQuotaGetPaid.TONGYI]
2525

2626
export const modelNameMap = {
2727
[ModelProviderQuotaGetPaid.OPENAI]: 'OpenAI',

0 commit comments

Comments
 (0)