+
+
+
>
);
}
diff --git a/web/src/pages/dataset/dataset-setting/hooks.ts b/web/src/pages/dataset/dataset-setting/hooks.ts
index 9fdcb9981..bb9fd8d83 100644
--- a/web/src/pages/dataset/dataset-setting/hooks.ts
+++ b/web/src/pages/dataset/dataset-setting/hooks.ts
@@ -41,6 +41,16 @@ export const useFetchKnowledgeConfigurationOnMount = (
const parser_config = {
...form.formState?.defaultValues?.parser_config,
...knowledgeDetails.parser_config,
+ raptor: {
+ ...form.formState?.defaultValues?.parser_config?.raptor,
+ ...knowledgeDetails.parser_config?.raptor,
+ use_raptor: true,
+ },
+ graphrag: {
+ ...form.formState?.defaultValues?.parser_config?.graphrag,
+ ...knowledgeDetails.parser_config?.graphrag,
+ use_graphrag: true,
+ },
};
const formValues = {
...pick({ ...knowledgeDetails, parser_config: parser_config }, [
diff --git a/web/src/pages/dataset/dataset-setting/index.tsx b/web/src/pages/dataset/dataset-setting/index.tsx
index e6ba5bcb7..06e8b9b85 100644
--- a/web/src/pages/dataset/dataset-setting/index.tsx
+++ b/web/src/pages/dataset/dataset-setting/index.tsx
@@ -1,3 +1,4 @@
+import { IDataPipelineSelectNode } from '@/components/data-pipeline-select';
import GraphRagItems from '@/components/parse-configuration/graph-rag-form-fields';
import RaptorFormFields from '@/components/parse-configuration/raptor-form-fields';
import { Button } from '@/components/ui/button';
@@ -6,11 +7,15 @@ import { Form } from '@/components/ui/form';
import { DocumentParserType } from '@/constants/knowledge';
import { PermissionRole } from '@/constants/permission';
import { zodResolver } from '@hookform/resolvers/zod';
+import { useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { useTranslation } from 'react-i18next';
import { z } from 'zod';
import { TopTitle } from '../dataset-title';
-import LinkDataPipeline from './components/link-data-pipeline';
+import { IGenerateLogButtonProps } from '../dataset/generate-button/generate';
+import LinkDataPipeline, {
+ IDataPipelineNodeProps,
+} from './components/link-data-pipeline';
import { MainContainer } from './configuration-form-container';
import { formSchema } from './form-schema';
import { GeneralForm } from './general-form';
@@ -51,24 +56,70 @@ export default function DatasetSettings() {
html4excel: false,
topn_tags: 3,
raptor: {
- use_raptor: false,
+ use_raptor: true,
+ max_token: 256,
+ threshold: 0.1,
+ max_cluster: 64,
+ random_seed: 0,
+ prompt: t('knowledgeConfiguration.promptText'),
},
graphrag: {
- use_graphrag: false,
+ use_graphrag: true,
entity_types: initialEntityTypes,
method: MethodValue.Light,
},
},
+ pipeline_id: '',
pagerank: 0,
},
});
- useFetchKnowledgeConfigurationOnMount(form);
+ const knowledgeDetails = useFetchKnowledgeConfigurationOnMount(form);
+
+ const [pipelineData, setPipelineData] = useState
();
+ const [graphRagGenerateData, setGraphRagGenerateData] =
+ useState();
+ const [raptorGenerateData, setRaptorGenerateData] =
+ useState();
+ useEffect(() => {
+ console.log('🚀 ~ DatasetSettings ~ knowledgeDetails:', knowledgeDetails);
+ if (knowledgeDetails) {
+ const data: IDataPipelineNodeProps = {
+ id: knowledgeDetails.pipeline_id,
+ name: knowledgeDetails.pipeline_name,
+ avatar: knowledgeDetails.pipeline_avatar,
+ linked: true,
+ };
+ setPipelineData(data);
+ setGraphRagGenerateData({
+ finish_at: knowledgeDetails.mindmap_task_finish_at,
+ task_id: knowledgeDetails.mindmap_task_id,
+ } as IGenerateLogButtonProps);
+ setRaptorGenerateData({
+ finish_at: knowledgeDetails.raptor_task_finish_at,
+ task_id: knowledgeDetails.raptor_task_id,
+ } as IGenerateLogButtonProps);
+ }
+ }, [knowledgeDetails]);
async function onSubmit(data: z.infer) {
- console.log('🚀 ~ DatasetSettings ~ data:', data);
+ try {
+ console.log('Form validation passed, submit data', data);
+ } catch (error) {
+ console.error('An error occurred during submission:', error);
+ }
}
-
+ const handleLinkOrEditSubmit = (
+ data: IDataPipelineSelectNode | undefined,
+ ) => {
+ console.log('🚀 ~ DatasetSettings ~ data:', data);
+ if (data) {
+ setPipelineData(data);
+ form.setValue('pipeline_id', data.id || '');
+ // form.setValue('pipeline_name', data.name || '');
+ // form.setValue('pipeline_avatar', data.avatar || '');
+ }
+ };
return (
diff --git a/web/src/pages/dataset/dataset-setting/saving-button.tsx b/web/src/pages/dataset/dataset-setting/saving-button.tsx
index 1fac81ea7..7a063081a 100644
--- a/web/src/pages/dataset/dataset-setting/saving-button.tsx
+++ b/web/src/pages/dataset/dataset-setting/saving-button.tsx
@@ -62,7 +62,7 @@ export function SavingButton() {
if (beValid) {
form.handleSubmit(async (values) => {
console.log('saveKnowledgeConfiguration: ', values);
- delete values['avatar'];
+ // delete values['avatar'];
await saveKnowledgeConfiguration({
kb_id,
...values,
diff --git a/web/src/pages/dataset/dataset/generate-button/generate.tsx b/web/src/pages/dataset/dataset/generate-button/generate.tsx
index aa891e215..483309b6c 100644
--- a/web/src/pages/dataset/dataset/generate-button/generate.tsx
+++ b/web/src/pages/dataset/dataset/generate-button/generate.tsx
@@ -9,6 +9,7 @@ import {
import { Modal } from '@/components/ui/modal/modal';
import { cn } from '@/lib/utils';
import { toFixed } from '@/utils/common-util';
+import { formatDate } from '@/utils/date';
import { UseMutateAsyncFunction } from '@tanstack/react-query';
import { t } from 'i18next';
import { lowerFirst } from 'lodash';
@@ -29,7 +30,13 @@ export enum GenerateType {
const MenuItem: React.FC<{
name: GenerateType;
data: ITraceInfo;
- pauseGenerate: () => void;
+ pauseGenerate: ({
+ task_id,
+ type,
+ }: {
+ task_id: string;
+ type: GenerateType;
+ }) => void;
runGenerate: UseMutateAsyncFunction<
any,
Error,
@@ -38,13 +45,12 @@ const MenuItem: React.FC<{
},
unknown
>;
-}> = ({ name, runGenerate, data, pauseGenerate }) => {
- console.log(name, 'pppp', data);
+}> = ({ name: type, runGenerate, data, pauseGenerate }) => {
const iconKeyMap = {
KnowledgeGraph: 'knowledgegraph',
Raptor: 'dataflow-01',
};
- const type = useMemo(() => {
+ const status = useMemo(() => {
if (!data) {
return generateStatus.start;
}
@@ -60,9 +66,9 @@ const MenuItem: React.FC<{
}, [data]);
const percent =
- type === generateStatus.failed
+ status === generateStatus.failed
? 100
- : type === generateStatus.running
+ : status === generateStatus.running
? data.progress * 100
: 0;
@@ -72,9 +78,9 @@ const MenuItem: React.FC<{
'border cursor-pointer p-2 rounded-md focus:bg-transparent',
{
'hover:border-accent-primary hover:bg-[rgba(59,160,92,0.1)]':
- type === generateStatus.start,
+ status === generateStatus.start,
'hover:border-border hover:bg-[rgba(59,160,92,0)]':
- type !== generateStatus.start,
+ status !== generateStatus.start,
},
)}
onSelect={(e) => {
@@ -87,56 +93,65 @@ const MenuItem: React.FC<{
{
- if (type === generateStatus.start) {
- runGenerate({ type: name });
+ if (status === generateStatus.start) {
+ runGenerate({ type });
}
}}
>
- {t(`knowledgeDetails.${lowerFirst(name)}`)}
+ {t(`knowledgeDetails.${lowerFirst(type)}`)}
- {type === generateStatus.start && (
+ {status === generateStatus.start && (
- {t(`knowledgeDetails.generate${name}`)}
+ {t(`knowledgeDetails.generate${type}`)}
)}
- {(type === generateStatus.running ||
- type === generateStatus.failed) && (
+ {(status === generateStatus.running ||
+ status === generateStatus.failed) && (
- {type === generateStatus.running && (
+ {status === generateStatus.running && (
{(toFixed(percent) as string) + '%'}
)}
-
{
- e.stopPropagation();
- pauseGenerate();
- }}
- >
- {type === generateStatus.failed ? (
+ {status === generateStatus.failed && (
+ {
+ e.stopPropagation();
+ runGenerate({ type });
+ }}
+ >
- ) : (
+
+ )}
+ {status !== generateStatus.failed && (
+ {
+ e.stopPropagation();
+ pauseGenerate({ task_id: data.id, type });
+ }}
+ >
- )}
-
+
+ )}
)}
@@ -202,7 +217,12 @@ const Generate: React.FC = () => {
export default Generate;
-export type IGenerateLogProps = {
+export type IGenerateLogButtonProps = {
+ finish_at: string;
+ task_id: string;
+};
+
+export type IGenerateLogProps = IGenerateLogButtonProps & {
id?: string;
status: 0 | 1;
message?: string;
@@ -214,16 +234,7 @@ export type IGenerateLogProps = {
};
export const GenerateLogButton = (props: IGenerateLogProps) => {
const { t } = useTranslation();
- const {
- id,
- status,
- message,
- created_at,
- updated_at,
- type,
- className,
- onDelete,
- } = props;
+ const { task_id, message, finish_at, type, onDelete } = props;
const handleDelete = () => {
Modal.show({
visible: true,
@@ -278,11 +289,11 @@ export const GenerateLogButton = (props: IGenerateLogProps) => {
className={cn('flex bg-bg-card rounded-md py-1 px-3', props.className)}
>
- {status === 1 && (
+ {finish_at && (
<>
{message || t('knowledgeDetails.generatedOn')}
- {created_at}
+ {formatDate(finish_at)}
{
/>
>
)}
- {status === 0 && {t('knowledgeDetails.notGenerated')}
}
+ {!finish_at && {t('knowledgeDetails.notGenerated')}
}
);
diff --git a/web/src/pages/dataset/dataset/generate-button/hook.ts b/web/src/pages/dataset/dataset/generate-button/hook.ts
index 80f6ce0a9..c2aa21aba 100644
--- a/web/src/pages/dataset/dataset/generate-button/hook.ts
+++ b/web/src/pages/dataset/dataset/generate-button/hook.ts
@@ -1,8 +1,9 @@
import message from '@/components/ui/message';
+import agentService from '@/services/agent-service';
import kbService from '@/services/knowledge-service';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { t } from 'i18next';
-import { useCallback, useEffect, useState } from 'react';
+import { useEffect, useState } from 'react';
import { useParams } from 'umi';
import { GenerateType } from './generate';
export const generateStatus = {
@@ -14,6 +15,7 @@ export const generateStatus = {
enum DatasetKey {
generate = 'generate',
+ pauseGenerate = 'pauseGenerate',
}
export interface ITraceInfo {
@@ -126,9 +128,28 @@ export const useDatasetGenerate = () => {
return data;
},
});
- const pauseGenerate = useCallback(() => {
- // TODO: pause generate
- console.log('pause generate');
- }, []);
+ // const pauseGenerate = useCallback(() => {
+ // // TODO: pause generate
+ // console.log('pause generate');
+ // }, []);
+ const { mutateAsync: pauseGenerate } = useMutation({
+ mutationKey: [DatasetKey.pauseGenerate],
+ mutationFn: async ({
+ task_id,
+ type,
+ }: {
+ task_id: string;
+ type: GenerateType;
+ }) => {
+ const { data } = await agentService.cancelDataflow(task_id);
+ if (data.code === 0) {
+ message.success(t('message.operated'));
+ queryClient.invalidateQueries({
+ queryKey: [type],
+ });
+ }
+ return data;
+ },
+ });
return { runGenerate: mutateAsync, pauseGenerate, data, loading };
};
diff --git a/web/src/pages/dataset/dataset/parsing-status-cell.tsx b/web/src/pages/dataset/dataset/parsing-status-cell.tsx
index 1f1703ea1..2bf8b0524 100644
--- a/web/src/pages/dataset/dataset/parsing-status-cell.tsx
+++ b/web/src/pages/dataset/dataset/parsing-status-cell.tsx
@@ -23,7 +23,9 @@ const IconMap = {
[RunningStatus.UNSTART]: (
),
- [RunningStatus.RUNNING]:
,
+ [RunningStatus.RUNNING]: (
+
+ ),
[RunningStatus.CANCEL]: (
),