'use client' import type { FC } from 'react' import React from 'react' import { useTranslation } from 'react-i18next' import cn from 'classnames' import TopKItem from '@/app/components/base/param-item/top-k-item' import ScoreThresholdItem from '@/app/components/base/param-item/score-threshold-item' import { RETRIEVE_METHOD } from '@/types/app' import Switch from '@/app/components/base/switch' import Tooltip from '@/app/components/base/tooltip-plus' import { HelpCircle } from '@/app/components/base/icons/src/vender/line/general' import type { RetrievalConfig } from '@/types/app' import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector' import { useModelListAndDefaultModel } from '@/app/components/header/account-setting/model-provider-page/hooks' import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' type Props = { type: RETRIEVE_METHOD value: RetrievalConfig onChange: (value: RetrievalConfig) => void } const RetrievalParamConfig: FC = ({ type, value, onChange, }) => { const { t } = useTranslation() const canToggleRerankModalEnable = type !== RETRIEVE_METHOD.hybrid const isEconomical = type === RETRIEVE_METHOD.invertedIndex const { defaultModel: rerankDefaultModel, modelList: rerankModelList, } = useModelListAndDefaultModel(ModelTypeEnum.rerank) const rerankModel = (() => { if (value.reranking_model) { return { provider_name: value.reranking_model.reranking_provider_name, model_name: value.reranking_model.reranking_model_name, } } else if (rerankDefaultModel) { return { provider_name: rerankDefaultModel.provider.provider, model_name: rerankDefaultModel.model, } } })() return (
{!isEconomical && (
{canToggleRerankModalEnable && ( { onChange({ ...value, reranking_enable: v, }) }} /> )}
{t('common.modelProvider.rerankModel.key')} {t('common.modelProvider.rerankModel.tip')}
}>
{ onChange({ ...value, reranking_model: { reranking_provider_name: v.provider, reranking_model_name: v.model, }, }) }} />
)}
{ onChange({ ...value, top_k: v, }) }} enable={true} /> {(!isEconomical && !(value.search_method === RETRIEVE_METHOD.fullText && !value.reranking_enable)) && ( { onChange({ ...value, score_threshold: v, }) }} enable={value.score_threshold_enabled} hasSwitch={true} onSwitchChange={(_key, v) => { onChange({ ...value, score_threshold_enabled: v, }) }} /> )}
) } export default React.memo(RetrievalParamConfig)