'use client' import type { FC } from 'react' import type { AnnotationReplyConfig } from '@/models/debug' import * as React from 'react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '@/app/components/base/button' import Modal from '@/app/components/base/modal' import { toast } from '@/app/components/base/ui/toast' import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks' import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector' import { ANNOTATION_DEFAULT } from '@/config' import { Item } from './config-param' import ScoreSlider from './score-slider' 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.error(t('modelProvider.embeddingModel.required', { ns: 'common' })) return } setLoading(true) await onSave({ embedding_provider_name: embeddingModel.providerName, embedding_model_name: embeddingModel.modelName, }, annotationConfig.score_threshold) setLoading(false) } return (
{t(`initSetup.${isInit ? 'title' : 'configTitle'}`, { ns: 'appAnnotation' })}
{ setAnnotationConfig({ ...annotationConfig, score_threshold: val / 100, }) }} />
{ setEmbeddingModel({ providerName: val.provider, modelName: val.model, }) }} />
) } export default React.memo(ConfigParamModal)