'use client' import type { FC } from 'react' import type { AnnotationReplyConfig } from '@/models/debug' import { Button } from '@langgenius/dify-ui/button' import { Dialog, DialogContent } from '@langgenius/dify-ui/dialog' import { toast } from '@langgenius/dify-ui/toast' import * as React from 'react' import { useState } from 'react' import { useTranslation } from 'react-i18next' 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 = Readonly<{ 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 ( { if (!open) onHide() }} >
{t(($) => $[`initSetup.${isInit ? 'title' : 'configTitle'}`], { ns: 'appAnnotation' })}
$['feature.annotation.scoreThreshold.title'], { ns: 'appDebug' })} tooltip={t(($) => $['feature.annotation.scoreThreshold.description'], { ns: 'appDebug', })} > { setAnnotationConfig({ ...annotationConfig, score_threshold: val / 100, }) }} /> $['modelProvider.embeddingModel.key'], { ns: 'common' })} tooltip={t(($) => $.embeddingModelSwitchTip, { ns: 'appAnnotation' })} >
{ setEmbeddingModel({ providerName: val.provider, modelName: val.model, }) }} />
) } export default React.memo(ConfigParamModal)