mirror of
https://github.com/langgenius/dify.git
synced 2026-07-28 15:49:42 +08:00
70 lines
2.4 KiB
TypeScript
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'
|
|
}
|
|
}
|