diff --git a/web/src/hooks/knowledge-hooks.ts b/web/src/hooks/knowledge-hooks.ts index 4d1abdbbd..f28d4113e 100644 --- a/web/src/hooks/knowledge-hooks.ts +++ b/web/src/hooks/knowledge-hooks.ts @@ -218,9 +218,8 @@ export const useTestChunkRetrieval = (): ResponsePostType & { if (data.code === 0) { const res = data.data; return { - chunks: res.chunks, + ...res, documents: res.doc_aggs, - total: res.total, }; } return ( diff --git a/web/src/interfaces/database/knowledge.ts b/web/src/interfaces/database/knowledge.ts index 9c7c6fbd6..510ffead9 100644 --- a/web/src/interfaces/database/knowledge.ts +++ b/web/src/interfaces/database/knowledge.ts @@ -132,6 +132,7 @@ export interface ITestingResult { chunks: ITestingChunk[]; documents: ITestingDocument[]; total: number; + labels?: Record; } export type IRenameTag = { fromTag: string; toTag: string }; diff --git a/web/src/pages/add-knowledge/components/knowledge-setting/tag-word-cloud.tsx b/web/src/pages/add-knowledge/components/knowledge-setting/tag-word-cloud.tsx index 1bd8282a3..b71ed69af 100644 --- a/web/src/pages/add-knowledge/components/knowledge-setting/tag-word-cloud.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-setting/tag-word-cloud.tsx @@ -26,7 +26,7 @@ export function TagWordCloud() { type: 'wordCloud', autoFit: true, layout: { - fontSize: [20, 100], + fontSize: [10, 50], // fontSize: (d: any) => { // if (d.value) { // return (d.value / sumValue) * 100 * (length / 10); diff --git a/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx b/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx index 609c6bb30..42a70359b 100644 --- a/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/index.tsx @@ -1,10 +1,11 @@ import Rerank from '@/components/rerank'; import SimilaritySlider from '@/components/similarity-slider'; import { useTranslate } from '@/hooks/common-hooks'; +import { useChunkIsTesting } from '@/hooks/knowledge-hooks'; import { Button, Card, Divider, Flex, Form, Input } from 'antd'; import { FormInstance } from 'antd/lib'; +import { LabelWordCloud } from './label-word-cloud'; -import { useChunkIsTesting } from '@/hooks/knowledge-hooks'; import styles from './index.less'; type FieldType = { @@ -58,6 +59,7 @@ const TestingControl = ({ form, handleTesting }: IProps) => { + {/*
diff --git a/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/label-word-cloud.tsx b/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/label-word-cloud.tsx new file mode 100644 index 000000000..b1dbc05ba --- /dev/null +++ b/web/src/pages/add-knowledge/components/knowledge-testing/testing-control/label-word-cloud.tsx @@ -0,0 +1,59 @@ +import { useSelectTestingResult } from '@/hooks/knowledge-hooks'; +import { Chart } from '@antv/g2'; +import { useCallback, useEffect, useMemo, useRef } from 'react'; + +export function LabelWordCloud() { + const domRef = useRef(null); + let chartRef = useRef(); + const { labels } = useSelectTestingResult(); + + const list = useMemo(() => { + if (!labels) { + return []; + } + + return Object.keys(labels).reduce< + Array<{ text: string; name: string; value: number }> + >((pre, cur) => { + pre.push({ name: cur, text: cur, value: labels[cur] }); + + return pre; + }, []); + }, [labels]); + + const renderWordCloud = useCallback(() => { + if (domRef.current && list.length) { + chartRef.current = new Chart({ container: domRef.current }); + + chartRef.current.options({ + type: 'wordCloud', + autoFit: true, + layout: { + fontSize: [6, 15], + }, + data: { + type: 'inline', + value: list, + }, + encode: { color: 'text' }, + legend: false, + tooltip: { + title: 'name', // title + items: ['value'], // data item + }, + }); + + chartRef.current.render(); + } + }, [list]); + + useEffect(() => { + renderWordCloud(); + + return () => { + chartRef.current?.destroy(); + }; + }, [renderWordCloud]); + + return
; +}