|
'use client'
|
|
import type { FC } from 'react'
|
|
import React from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import type { RetrievalConfig } from '@/types/app'
|
|
import { RETRIEVE_METHOD } from '@/types/app'
|
|
import RadioCard from '@/app/components/base/radio-card'
|
|
import { HighPriority } from '@/app/components/base/icons/src/vender/solid/arrows'
|
|
import { PatternRecognition, Semantic } from '@/app/components/base/icons/src/vender/solid/development'
|
|
import { FileSearch02 } from '@/app/components/base/icons/src/vender/solid/files'
|
|
|
|
type Props = {
|
|
value: RetrievalConfig
|
|
}
|
|
|
|
export const getIcon = (type: RETRIEVE_METHOD) => {
|
|
return ({
|
|
[RETRIEVE_METHOD.semantic]: Semantic,
|
|
[RETRIEVE_METHOD.fullText]: FileSearch02,
|
|
[RETRIEVE_METHOD.hybrid]: PatternRecognition,
|
|
[RETRIEVE_METHOD.invertedIndex]: HighPriority,
|
|
})[type] || FileSearch02
|
|
}
|
|
|
|
const EconomicalRetrievalMethodConfig: FC<Props> = ({
|
|
// type,
|
|
value,
|
|
}) => {
|
|
const { t } = useTranslation()
|
|
const type = value.search_method
|
|
const Icon = getIcon(type)
|
|
return (
|
|
<div className='space-y-2'>
|
|
<RadioCard
|
|
icon={<Icon className='w-4 h-4 text-[#7839EE]' />}
|
|
title={t(`dataset.retrieval.${type}.title`)}
|
|
description={t(`dataset.retrieval.${type}.description`)}
|
|
noRadio
|
|
chosenConfigWrapClassName='!pb-3'
|
|
chosenConfig={
|
|
<div className='flex flex-wrap leading-[18px] text-xs font-normal'>
|
|
{value.reranking_model.reranking_model_name && (
|
|
<div className='mr-8 flex space-x-1'>
|
|
<div className='text-gray-500'>{t('common.modelProvider.rerankModel.key')}</div>
|
|
<div className='font-medium text-gray-800'>{value.reranking_model.reranking_model_name}</div>
|
|
</div>
|
|
)}
|
|
|
|
<div className='mr-8 flex space-x-1'>
|
|
<div className='text-gray-500'>{t('appDebug.datasetConfig.top_k')}</div>
|
|
<div className='font-medium text-gray-800'>{value.top_k}</div>
|
|
</div>
|
|
|
|
<div className='mr-8 flex space-x-1'>
|
|
<div className='text-gray-500'>{t('appDebug.datasetConfig.score_threshold')}</div>
|
|
<div className='font-medium text-gray-800'>{value.score_threshold}</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
/>
|
|
</div>
|
|
)
|
|
}
|
|
export default React.memo(EconomicalRetrievalMethodConfig)
|
|
|