index.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React from 'react'
  4. import { useTranslation } from 'react-i18next'
  5. import Image from 'next/image'
  6. import { retrievalIcon } from '../../create/icons'
  7. import type { RetrievalConfig } from '@/types/app'
  8. import { RETRIEVE_METHOD } from '@/types/app'
  9. import RadioCard from '@/app/components/base/radio-card'
  10. type Props = {
  11. value: RetrievalConfig
  12. }
  13. export const getIcon = (type: RETRIEVE_METHOD) => {
  14. return ({
  15. [RETRIEVE_METHOD.semantic]: retrievalIcon.vector,
  16. [RETRIEVE_METHOD.fullText]: retrievalIcon.fullText,
  17. [RETRIEVE_METHOD.hybrid]: retrievalIcon.hybrid,
  18. [RETRIEVE_METHOD.invertedIndex]: retrievalIcon.vector,
  19. [RETRIEVE_METHOD.keywordSearch]: retrievalIcon.vector,
  20. })[type] || retrievalIcon.vector
  21. }
  22. const EconomicalRetrievalMethodConfig: FC<Props> = ({
  23. // type,
  24. value,
  25. }) => {
  26. const { t } = useTranslation()
  27. const type = value.search_method
  28. const icon = <Image className='size-3.5 text-util-colors-purple-purple-600' src={getIcon(type)} alt='' />
  29. return (
  30. <div className='space-y-2'>
  31. <RadioCard
  32. icon={icon}
  33. title={t(`dataset.retrieval.${type}.title`)}
  34. description={t(`dataset.retrieval.${type}.description`)}
  35. noRadio
  36. chosenConfigWrapClassName='!pb-3'
  37. chosenConfig={
  38. <div className='flex flex-wrap leading-[18px] text-xs font-normal'>
  39. {value.reranking_model.reranking_model_name && (
  40. <div className='mr-8 flex space-x-1'>
  41. <div className='text-gray-500'>{t('common.modelProvider.rerankModel.key')}</div>
  42. <div className='font-medium text-gray-800'>{value.reranking_model.reranking_model_name}</div>
  43. </div>
  44. )}
  45. <div className='mr-8 flex space-x-1'>
  46. <div className='text-gray-500'>{t('appDebug.datasetConfig.top_k')}</div>
  47. <div className='font-medium text-gray-800'>{value.top_k}</div>
  48. </div>
  49. <div className='mr-8 flex space-x-1'>
  50. <div className='text-gray-500'>{t('appDebug.datasetConfig.score_threshold')}</div>
  51. <div className='font-medium text-gray-800'>{value.score_threshold}</div>
  52. </div>
  53. </div>
  54. }
  55. />
  56. </div>
  57. )
  58. }
  59. export default React.memo(EconomicalRetrievalMethodConfig)