| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import { ReactComponent as SelectedFilesCollapseIcon } from '@/assets/svg/selected-files-collapse.svg';
- import Image from '@/components/image';
- import { useTranslate } from '@/hooks/common-hooks';
- import { ITestingChunk } from '@/interfaces/database/knowledge';
- import {
- Card,
- Collapse,
- Empty,
- Flex,
- Pagination,
- PaginationProps,
- Popover,
- Space,
- } from 'antd';
- import camelCase from 'lodash/camelCase';
- import SelectFiles from './select-files';
-
- import {
- useSelectIsTestingSuccess,
- useSelectTestingResult,
- } from '@/hooks/knowledge-hooks';
- import { useGetPaginationWithRouter } from '@/hooks/logic-hooks';
- import { useCallback, useState } from 'react';
- import styles from './index.less';
-
- const similarityList: Array<{ field: keyof ITestingChunk; label: string }> = [
- { field: 'similarity', label: 'Hybrid Similarity' },
- { field: 'term_similarity', label: 'Term Similarity' },
- { field: 'vector_similarity', label: 'Vector Similarity' },
- ];
-
- const ChunkTitle = ({ item }: { item: ITestingChunk }) => {
- const { t } = useTranslate('knowledgeDetails');
- return (
- <Flex gap={10}>
- {similarityList.map((x) => (
- <Space key={x.field}>
- <span className={styles.similarityCircle}>
- {((item[x.field] as number) * 100).toFixed(2)}
- </span>
- <span className={styles.similarityText}>{t(camelCase(x.field))}</span>
- </Space>
- ))}
- </Flex>
- );
- };
-
- interface IProps {
- handleTesting: (documentIds?: string[]) => Promise<any>;
- }
-
- const TestingResult = ({ handleTesting }: IProps) => {
- const [selectedDocumentIds, setSelectedDocumentIds] = useState<string[]>([]);
- const { documents, chunks, total } = useSelectTestingResult();
- const { t } = useTranslate('knowledgeDetails');
- const { pagination, setPagination } = useGetPaginationWithRouter();
- const isSuccess = useSelectIsTestingSuccess();
-
- const onChange: PaginationProps['onChange'] = (pageNumber, pageSize) => {
- pagination.onChange?.(pageNumber, pageSize);
- handleTesting(selectedDocumentIds);
- };
-
- const onTesting = useCallback(
- (ids: string[]) => {
- setPagination({ page: 1 });
- handleTesting(ids);
- },
- [setPagination, handleTesting],
- );
-
- return (
- <section className={styles.testingResultWrapper}>
- <Collapse
- expandIcon={() => (
- <SelectedFilesCollapseIcon></SelectedFilesCollapseIcon>
- )}
- className={styles.selectFilesCollapse}
- items={[
- {
- key: '1',
- label: (
- <Flex
- justify={'space-between'}
- align="center"
- className={styles.selectFilesTitle}
- >
- <Space>
- <span>
- {selectedDocumentIds?.length ?? 0}/{documents?.length ?? 0}
- </span>
- {t('filesSelected')}
- </Space>
- </Flex>
- ),
- children: (
- <div>
- <SelectFiles
- setSelectedDocumentIds={setSelectedDocumentIds}
- handleTesting={onTesting}
- ></SelectFiles>
- </div>
- ),
- },
- ]}
- />
- <Flex
- gap={'large'}
- vertical
- flex={1}
- className={styles.selectFilesCollapse}
- >
- {isSuccess && chunks.length > 0 ? (
- chunks?.map((x) => (
- <Card key={x.chunk_id} title={<ChunkTitle item={x}></ChunkTitle>}>
- <Flex gap={'middle'}>
- {x.img_id && (
- <Popover
- placement="left"
- content={
- <Image
- id={x.img_id}
- className={styles.imagePreview}
- ></Image>
- }
- >
- <Image id={x.img_id} className={styles.image}></Image>
- </Popover>
- )}
- <div>{x.content_with_weight}</div>
- </Flex>
- </Card>
- ))
- ) : isSuccess && chunks.length === 0 ? (
- <Empty></Empty>
- ) : null}
- </Flex>
- <Pagination
- {...pagination}
- size={'small'}
- total={total}
- onChange={onChange}
- />
- </section>
- );
- };
-
- export default TestingResult;
|