dify/web/app/components/header/account-setting/model-provider-page/derive-model-status.ts
Stephen Zhou 36e840cd87
chore: knip fix (#34481)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-02 15:03:42 +00:00

73 lines
2.5 KiB
TypeScript

import type { Model, ModelItem, ModelProvider } from './declarations'
import type { CredentialPanelState } from './provider-added-card/use-credential-panel-state'
import { ModelStatusEnum } from './declarations'
type DerivedModelStatus
= | 'empty'
| 'active'
| 'configure-required'
| 'credits-exhausted'
| 'api-key-unavailable'
| 'disabled'
| 'incompatible'
export const DERIVED_MODEL_STATUS_BADGE_I18N = {
'configure-required': 'modelProvider.selector.configureRequired',
'credits-exhausted': 'modelProvider.selector.creditsExhausted',
'api-key-unavailable': 'modelProvider.selector.apiKeyUnavailable',
'disabled': 'modelProvider.selector.disabled',
'incompatible': 'modelProvider.selector.incompatible',
} as const satisfies Partial<Record<DerivedModelStatus, string>>
export const DERIVED_MODEL_STATUS_TOOLTIP_I18N = {
'credits-exhausted': 'modelProvider.selector.creditsExhaustedTip',
'api-key-unavailable': 'modelProvider.selector.apiKeyUnavailableTip',
'incompatible': 'modelProvider.selector.incompatibleTip',
} as const satisfies Partial<Record<DerivedModelStatus, string>>
export const deriveModelStatus = (
modelId: string | undefined,
providerName: string | undefined,
currentModelProvider: ModelProvider | Model | undefined,
currentModel: ModelItem | undefined,
credentialState: CredentialPanelState,
): DerivedModelStatus => {
if (!modelId || !providerName)
return 'empty'
if (!currentModelProvider)
return 'incompatible'
const isCreditsExhaustedWithoutApiKey = credentialState.supportsCredits
&& credentialState.isCreditsExhausted
&& !credentialState.hasCredentials
const isCreditsPriorityExhausted = credentialState.priority === 'credits'
&& credentialState.supportsCredits
&& credentialState.isCreditsExhausted
if (isCreditsPriorityExhausted || isCreditsExhaustedWithoutApiKey)
return 'credits-exhausted'
if (!currentModel)
return 'incompatible'
if (credentialState.variant === 'api-unavailable')
return 'api-key-unavailable'
switch (currentModel.status) {
case ModelStatusEnum.active:
return 'active'
case ModelStatusEnum.noConfigure:
return 'configure-required'
case ModelStatusEnum.quotaExceeded:
return 'credits-exhausted'
case ModelStatusEnum.credentialRemoved:
return 'api-key-unavailable'
case ModelStatusEnum.disabled:
return 'disabled'
case ModelStatusEnum.noPermission:
default:
return 'incompatible'
}
}