dify/web/app/components/header/account-setting/model-provider-page/derive-model-status.ts
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

70 lines
2.4 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'
}
}