import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import SystemModelSelector from './system-model-selector' import ProviderAddedCard, { UPDATE_MODEL_PROVIDER_CUSTOM_MODEL_LIST } from './provider-added-card' import ProviderCard from './provider-card' import type { CustomConfigrationModelFixedFields, ModelProvider, } from './declarations' import { ConfigurateMethodEnum, CustomConfigurationStatusEnum, } from './declarations' import { useDefaultModel, useUpdateModelProvidersAndModelList, } from './hooks' import { AlertTriangle } from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback' import { useProviderContext } from '@/context/provider-context' import { useModalContext } from '@/context/modal-context' import { useEventEmitterContextContext } from '@/context/event-emitter' const ModelProviderPage = () => { const { t } = useTranslation() const { eventEmitter } = useEventEmitterContextContext() const updateModelProvidersAndModelList = useUpdateModelProvidersAndModelList() const { data: textGenerationDefaultModel } = useDefaultModel(1) const { data: embeddingsDefaultModel } = useDefaultModel(2) const { data: rerankDefaultModel } = useDefaultModel(3) const { data: speech2textDefaultModel } = useDefaultModel(4) const { modelProviders: providers } = useProviderContext() const { setShowModelModal } = useModalContext() const defaultModelNotConfigured = !textGenerationDefaultModel && !embeddingsDefaultModel && !speech2textDefaultModel && !rerankDefaultModel const [configedProviders, notConfigedProviders] = useMemo(() => { const configedProviders: ModelProvider[] = [] const notConfigedProviders: ModelProvider[] = [] providers.forEach((provider) => { if (provider.custom_configuration.status === CustomConfigurationStatusEnum.active || provider.system_configuration.enabled === true) configedProviders.push(provider) else notConfigedProviders.push(provider) }) return [configedProviders, notConfigedProviders] }, [providers]) const handleOpenModal = ( provider: ModelProvider, configurateMethod: ConfigurateMethodEnum, customConfigrationModelFixedFields?: CustomConfigrationModelFixedFields, ) => { setShowModelModal({ payload: { currentProvider: provider, currentConfigurateMethod: configurateMethod, currentCustomConfigrationModelFixedFields: customConfigrationModelFixedFields, }, onSaveCallback: () => { updateModelProvidersAndModelList() if (configurateMethod === ConfigurateMethodEnum.customizableModel && provider.custom_configuration.status === CustomConfigurationStatusEnum.active) { eventEmitter?.emit({ type: UPDATE_MODEL_PROVIDER_CUSTOM_MODEL_LIST, payload: provider.provider, } as any) } }, }) } return (
{ defaultModelNotConfigured ? (
{t('common.modelProvider.notConfigured')}
) :
{t('common.modelProvider.models')}
}
{ !!configedProviders?.length && (
{ configedProviders?.map(provider => ( handleOpenModal(provider, configurateMethod, currentCustomConfigrationModelFixedFields)} /> )) }
) } { !!notConfigedProviders?.length && ( <>
+ {t('common.modelProvider.addMoreModelProvider')}
{ notConfigedProviders?.map(provider => ( handleOpenModal(provider, configurateMethod)} /> )) }
) }
) } export default ModelProviderPage