'use client' import type { FC } from 'react' import React from 'react' import { useTranslation } from 'react-i18next' import RetrievalParamConfig from '../retrieval-param-config' import type { RetrievalConfig } from '@/types/app' import { RETRIEVE_METHOD } from '@/types/app' import RadioCard from '@/app/components/base/radio-card' import { PatternRecognition, Semantic } from '@/app/components/base/icons/src/vender/solid/development' import { FileSearch02 } from '@/app/components/base/icons/src/vender/solid/files' import { useProviderContext } from '@/context/provider-context' import { useDefaultModel } from '@/app/components/header/account-setting/model-provider-page/hooks' import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import { DEFAULT_WEIGHTED_SCORE, RerankingModeEnum, WeightedScoreEnum, } from '@/models/datasets' type Props = { value: RetrievalConfig onChange: (value: RetrievalConfig) => void } const RetrievalMethodConfig: FC = ({ value: passValue, onChange, }) => { const { t } = useTranslation() const { supportRetrievalMethods } = useProviderContext() const { data: rerankDefaultModel } = useDefaultModel(ModelTypeEnum.rerank) const value = (() => { if (!passValue.reranking_model.reranking_model_name) { return { ...passValue, reranking_model: { reranking_provider_name: rerankDefaultModel?.provider.provider || '', reranking_model_name: rerankDefaultModel?.model || '', }, reranking_mode: passValue.reranking_mode || (rerankDefaultModel ? RerankingModeEnum.RerankingModel : RerankingModeEnum.WeightedScore), weights: passValue.weights || { weight_type: WeightedScoreEnum.Customized, vector_setting: { vector_weight: DEFAULT_WEIGHTED_SCORE.other.semantic, embedding_provider_name: '', embedding_model_name: '', }, keyword_setting: { keyword_weight: DEFAULT_WEIGHTED_SCORE.other.keyword, }, }, } } return passValue })() return (
{supportRetrievalMethods.includes(RETRIEVE_METHOD.semantic) && ( } title={t('dataset.retrieval.semantic_search.title')} description={t('dataset.retrieval.semantic_search.description')} isChosen={value.search_method === RETRIEVE_METHOD.semantic} onChosen={() => onChange({ ...value, search_method: RETRIEVE_METHOD.semantic, })} chosenConfig={ } /> )} {supportRetrievalMethods.includes(RETRIEVE_METHOD.semantic) && ( } title={t('dataset.retrieval.full_text_search.title')} description={t('dataset.retrieval.full_text_search.description')} isChosen={value.search_method === RETRIEVE_METHOD.fullText} onChosen={() => onChange({ ...value, search_method: RETRIEVE_METHOD.fullText, })} chosenConfig={ } /> )} {supportRetrievalMethods.includes(RETRIEVE_METHOD.semantic) && ( } title={
{t('dataset.retrieval.hybrid_search.title')}
{t('dataset.retrieval.hybrid_search.recommend')}
} description={t('dataset.retrieval.hybrid_search.description')} isChosen={value.search_method === RETRIEVE_METHOD.hybrid} onChosen={() => onChange({ ...value, search_method: RETRIEVE_METHOD.hybrid, reranking_enable: true, })} chosenConfig={ } /> )}
) } export default React.memo(RetrievalMethodConfig)