From b875a48f802079b58d87ab52b85bf57e7d189dfd Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 30 Apr 2025 15:04:31 +0800 Subject: [PATCH] feat: knowledge single run --- .../workflow-panel/last-run/use-last-run.ts | 3 +- .../nodes/knowledge-retrieval/panel.tsx | 34 +------------ .../nodes/knowledge-retrieval/use-config.ts | 41 ++------------- .../use-single-run-form-params.ts | 50 +++++++++++++++++++ 4 files changed, 56 insertions(+), 72 deletions(-) create mode 100644 web/app/components/workflow/nodes/knowledge-retrieval/use-single-run-form-params.ts diff --git a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts index 86b8817274..9297636737 100644 --- a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts @@ -5,6 +5,7 @@ import { TabType } from '../tab' import { useWorkflowStore } from '@/app/components/workflow/store' import type { Props as FormProps } from '@/app/components/workflow/nodes/_base/components/before-run-form/form' import useLLMSingleRunFormParams from '@/app/components/workflow/nodes/llm/use-single-run-form-params' +import useKnowledgeRetrievalSingleRunFormParams from '../../../../knowledge-retrieval/use-single-run-form-params' import { BlockEnum } from '@/app/components/workflow/types' import { useNodesSyncDraft, @@ -12,10 +13,10 @@ import { const singleRunFormParamsHooks: Record = { [BlockEnum.LLM]: useLLMSingleRunFormParams, + [BlockEnum.KnowledgeRetrieval]: useKnowledgeRetrievalSingleRunFormParams, [BlockEnum.Start]: undefined, [BlockEnum.End]: undefined, [BlockEnum.Answer]: undefined, - [BlockEnum.KnowledgeRetrieval]: undefined, [BlockEnum.QuestionClassifier]: undefined, [BlockEnum.IfElse]: undefined, [BlockEnum.Code]: undefined, diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx b/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx index 20fd24e50c..fc176b7158 100644 --- a/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx +++ b/web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx @@ -16,9 +16,7 @@ import type { KnowledgeRetrievalNodeType } from './types' import Field from '@/app/components/workflow/nodes/_base/components/field' import Split from '@/app/components/workflow/nodes/_base/components/split' import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' -import { InputVarType, type NodePanelProps } from '@/app/components/workflow/types' -import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form' -import ResultPanel from '@/app/components/workflow/run/result-panel' +import type { NodePanelProps } from '@/app/components/workflow/types' const i18nPrefix = 'workflow.nodes.knowledgeRetrieval' @@ -40,14 +38,6 @@ const Panel: FC> = ({ selectedDatasets, selectedDatasetsLoaded, handleOnDatasetsChange, - isShowSingleRun, - hideSingleRun, - runningStatus, - handleRun, - handleStop, - query, - setQuery, - runResult, rerankModelOpen, setRerankModelOpen, handleAddCondition, @@ -189,28 +179,6 @@ const Panel: FC> = ({ - {isShowSingleRun && ( - setQuery(keyValue.query), - }, - ]} - runningStatus={runningStatus} - onRun={handleRun} - onStop={handleStop} - result={} - /> - )} ) diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts b/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts index 42aa7def25..380f8b95c9 100644 --- a/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts +++ b/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts @@ -37,7 +37,6 @@ import { DATASET_DEFAULT } from '@/config' import type { DataSet } from '@/models/datasets' import { fetchDatasets } from '@/service/datasets' import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' -import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run' import { useCurrentProviderAndModel, useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks' import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import useAvailableVarList from '@/app/components/workflow/nodes/_base/hooks/use-available-var-list' @@ -173,7 +172,7 @@ const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => { } }) setInputs(newInput) - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentProvider?.provider, currentModel, currentRerankModel, rerankDefaultModel]) const [selectedDatasets, setSelectedDatasets] = useState([]) const [rerankModelOpen, setRerankModelOpen] = useState(false) @@ -230,7 +229,7 @@ const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => { setInputs(newInputs) setSelectedDatasetsLoaded(true) })() - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) useEffect(() => { @@ -242,7 +241,7 @@ const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => { setInputs(produce(inputs, (draft) => { draft.query_variable_selector = query_variable_selector })) - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const handleOnDatasetsChange = useCallback((newDatasets: DataSet[]) => { @@ -280,32 +279,6 @@ const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => { return varPayload.type === VarType.string }, []) - // single run - const { - isShowSingleRun, - hideSingleRun, - runningStatus, - handleRun, - handleStop, - runInputData, - setRunInputData, - runResult, - } = useOneStepRun({ - id, - data: inputs, - defaultRunInputData: { - query: '', - }, - }) - - const query = runInputData.query - const setQuery = useCallback((newQuery: string) => { - setRunInputData({ - ...runInputData, - query: newQuery, - }) - }, [runInputData, setRunInputData]) - const handleMetadataFilterModeChange = useCallback((newMode: MetadataFilteringModeEnum) => { setInputs(produce(inputRef.current, (draft) => { draft.metadata_filtering_mode = newMode @@ -425,14 +398,6 @@ const useConfig = (id: string, payload: KnowledgeRetrievalNodeType) => { selectedDatasets: selectedDatasets.filter(d => d.name), selectedDatasetsLoaded, handleOnDatasetsChange, - isShowSingleRun, - hideSingleRun, - runningStatus, - handleRun, - handleStop, - query, - setQuery, - runResult, rerankModelOpen, setRerankModelOpen, handleMetadataFilterModeChange, diff --git a/web/app/components/workflow/nodes/knowledge-retrieval/use-single-run-form-params.ts b/web/app/components/workflow/nodes/knowledge-retrieval/use-single-run-form-params.ts new file mode 100644 index 0000000000..a32a6f22a8 --- /dev/null +++ b/web/app/components/workflow/nodes/knowledge-retrieval/use-single-run-form-params.ts @@ -0,0 +1,50 @@ +import type { MutableRefObject } from 'react' +import { useTranslation } from 'react-i18next' +import type { InputVar, Variable } from '@/app/components/workflow/types' +import { InputVarType } from '@/app/components/workflow/types' +import { useCallback, useMemo } from 'react' + +const i18nPrefix = 'workflow.nodes.knowledgeRetrieval' + +type Params = { + id: string, + runInputData: Record + runInputDataRef: MutableRefObject> + getInputVars: (textList: string[]) => InputVar[] + setRunInputData: (data: Record) => void + toVarInputs: (variables: Variable[]) => InputVar[] +} +const useSingleRunFormParams = ({ + runInputData, + setRunInputData, +}: Params) => { + const { t } = useTranslation() + const query = runInputData.query + const setQuery = useCallback((newQuery: string) => { + setRunInputData({ + ...runInputData, + query: newQuery, + }) + }, [runInputData, setRunInputData]) + + const forms = useMemo(() => { + return [ + { + inputs: [{ + label: t(`${i18nPrefix}.queryVariable`)!, + variable: 'query', + type: InputVarType.paragraph, + required: true, + }], + values: { query }, + onChange: (keyValue: Record) => setQuery(keyValue.query), + }, + ] + }, [query, setQuery, t]) + + return { + forms, + } +} + +export default useSingleRunFormParams