You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import { ReactComponent as SelectedFilesCollapseIcon } from '@/assets/svg/selected-files-collapse.svg';
  2. import Image from '@/components/image';
  3. import { ITestingChunk } from '@/interfaces/database/knowledge';
  4. import {
  5. Card,
  6. Collapse,
  7. Flex,
  8. Pagination,
  9. PaginationProps,
  10. Popover,
  11. Space,
  12. } from 'antd';
  13. import { useDispatch, useSelector } from 'umi';
  14. import { TestingModelState } from '../model';
  15. import styles from './index.less';
  16. import SelectFiles from './select-files';
  17. const similarityList: Array<{ field: keyof ITestingChunk; label: string }> = [
  18. { field: 'similarity', label: 'Hybrid Similarity' },
  19. { field: 'term_similarity', label: 'Term Similarity' },
  20. { field: 'vector_similarity', label: 'Vector Similarity' },
  21. ];
  22. const ChunkTitle = ({ item }: { item: ITestingChunk }) => {
  23. return (
  24. <Flex gap={10}>
  25. {similarityList.map((x) => (
  26. <Space key={x.field}>
  27. <span className={styles.similarityCircle}>
  28. {((item[x.field] as number) * 100).toFixed(2)}%
  29. </span>
  30. <span className={styles.similarityText}>Hybrid Similarity</span>
  31. </Space>
  32. ))}
  33. </Flex>
  34. );
  35. };
  36. interface IProps {
  37. handleTesting: () => Promise<any>;
  38. }
  39. const TestingResult = ({ handleTesting }: IProps) => {
  40. const {
  41. documents,
  42. chunks,
  43. total,
  44. pagination,
  45. selectedDocumentIds,
  46. }: TestingModelState = useSelector((state: any) => state.testingModel);
  47. const dispatch = useDispatch();
  48. const onChange: PaginationProps['onChange'] = (pageNumber, pageSize) => {
  49. console.log('Page: ', pageNumber, pageSize);
  50. dispatch({
  51. type: 'testingModel/setPagination',
  52. payload: { current: pageNumber, pageSize },
  53. });
  54. handleTesting();
  55. };
  56. return (
  57. <section className={styles.testingResultWrapper}>
  58. <Collapse
  59. expandIcon={() => (
  60. <SelectedFilesCollapseIcon></SelectedFilesCollapseIcon>
  61. )}
  62. className={styles.selectFilesCollapse}
  63. items={[
  64. {
  65. key: '1',
  66. label: (
  67. <Flex
  68. justify={'space-between'}
  69. align="center"
  70. className={styles.selectFilesTitle}
  71. >
  72. <span>
  73. {selectedDocumentIds?.length ?? 0}/{documents.length} Files
  74. Selected
  75. </span>
  76. <Space size={52}>
  77. <b>Hits</b>
  78. <b>View</b>
  79. </Space>
  80. </Flex>
  81. ),
  82. children: (
  83. <div>
  84. <SelectFiles handleTesting={handleTesting}></SelectFiles>
  85. </div>
  86. ),
  87. },
  88. ]}
  89. />
  90. <Flex
  91. gap={'large'}
  92. vertical
  93. flex={1}
  94. className={styles.selectFilesCollapse}
  95. >
  96. {chunks.map((x) => (
  97. <Card key={x.chunk_id} title={<ChunkTitle item={x}></ChunkTitle>}>
  98. <Flex gap={'middle'}>
  99. {x.img_id && (
  100. <Popover
  101. placement="topRight"
  102. content={
  103. <Image
  104. id={x.img_id}
  105. className={styles.imagePreview}
  106. ></Image>
  107. }
  108. >
  109. <Image id={x.img_id} className={styles.image}></Image>
  110. </Popover>
  111. )}
  112. <div>{x.content_with_weight}</div>
  113. </Flex>
  114. </Card>
  115. ))}
  116. </Flex>
  117. <Pagination
  118. size={'small'}
  119. showQuickJumper
  120. current={pagination.current}
  121. pageSize={pagination.pageSize}
  122. total={total}
  123. showSizeChanger
  124. onChange={onChange}
  125. />
  126. </section>
  127. );
  128. };
  129. export default TestingResult;