'use client' import type { FC } from 'react' import React, { useState } from 'react' import { useTranslation } from 'react-i18next' import ScoreSlider from './score-slider' import { Item } from './config-param' import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' import Toast from '@/app/components/base/toast' import type { AnnotationReplyConfig } from '@/models/debug' import { ANNOTATION_DEFAULT } from '@/config' import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector' import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks' import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' type Props = { appId: string isShow: boolean onHide: () => void onSave: (embeddingModel: { embedding_provider_name: string embedding_model_name: string }, score: number) => void isInit?: boolean annotationConfig: AnnotationReplyConfig } const ConfigParamModal: FC = ({ isShow, onHide: doHide, onSave, isInit, annotationConfig: oldAnnotationConfig, }) => { const { t } = useTranslation() const { modelList: embeddingsModelList, defaultModel: embeddingsDefaultModel, currentModel: isEmbeddingsDefaultModelValid, } = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.textEmbedding) const [annotationConfig, setAnnotationConfig] = useState(oldAnnotationConfig) const [isLoading, setLoading] = useState(false) const [embeddingModel, setEmbeddingModel] = useState(oldAnnotationConfig.embedding_model ? { providerName: oldAnnotationConfig.embedding_model.embedding_provider_name, modelName: oldAnnotationConfig.embedding_model.embedding_model_name, } : (embeddingsDefaultModel ? { providerName: embeddingsDefaultModel.provider.provider, modelName: embeddingsDefaultModel.model, } : undefined)) const onHide = () => { if (!isLoading) doHide() } const handleSave = async () => { if (!embeddingModel || !embeddingModel.modelName || (embeddingModel.modelName === embeddingsDefaultModel?.model && !isEmbeddingsDefaultModelValid)) { Toast.notify({ message: t('common.modelProvider.embeddingModel.required'), type: 'error', }) return } setLoading(true) await onSave({ embedding_provider_name: embeddingModel.providerName, embedding_model_name: embeddingModel.modelName, }, annotationConfig.score_threshold) setLoading(false) } return (
{t(`appAnnotation.initSetup.${isInit ? 'title' : 'configTitle'}`)}
{ setAnnotationConfig({ ...annotationConfig, score_threshold: val / 100, }) }} />
{ setEmbeddingModel({ providerName: val.provider, modelName: val.model, }) }} />
) } export default React.memo(ConfigParamModal)