import type { FC } from 'react' import type { KnowledgeRetrievalNodeType } from './types' import type { NodePanelProps } from '@/app/components/workflow/types' import { intersectionBy } from 'es-toolkit/compat' import { memo, useMemo } from 'react' import { useTranslation } from 'react-i18next' import Field from '@/app/components/workflow/nodes/_base/components/field' import OutputVars, { VarItem } from '@/app/components/workflow/nodes/_base/components/output-vars' import Split from '@/app/components/workflow/nodes/_base/components/split' import VarReferencePicker from '../_base/components/variable/var-reference-picker' import AddKnowledge from './components/add-dataset' import DatasetList from './components/dataset-list' import MetadataFilter from './components/metadata/metadata-filter' import RetrievalConfig from './components/retrieval-config' import useConfig from './use-config' const i18nPrefix = 'nodes.knowledgeRetrieval' const Panel: FC> = ({ id, data }) => { const { t } = useTranslation() const { readOnly, inputs, handleQueryVarChange, handleQueryAttachmentChange, filterStringVar, filterFileVar, handleModelChanged, handleCompletionParamsChange, handleRetrievalModeChange, handleMultipleRetrievalConfigChange, selectedDatasets, selectedDatasetsLoaded, handleOnDatasetsChange, rerankModelOpen, setRerankModelOpen, handleAddCondition, handleMetadataFilterModeChange, handleRemoveCondition, handleToggleConditionLogicalOperator, handleUpdateCondition, handleMetadataModelChange, handleMetadataCompletionParamsChange, availableStringVars, availableStringNodesWithParent, availableNumberVars, availableNumberNodesWithParent, showImageQueryVarSelector, } = useConfig(id, data) const metadataList = useMemo(() => { return intersectionBy( ...selectedDatasets .filter((dataset) => { return !!dataset.doc_metadata }) .map((dataset) => { return dataset.doc_metadata! }), 'name', ) }, [selectedDatasets]) return (
$[`${i18nPrefix}.queryText`], { ns: 'workflow' })}> {showImageQueryVarSelector && ( $[`${i18nPrefix}.queryAttachment`], { ns: 'workflow' })}> )} $[`${i18nPrefix}.knowledge`], { ns: 'workflow' })} required operations={
{!readOnly &&
} {!readOnly && ( )}
} >
<> $[`${i18nPrefix}.outputVars.output`], { ns: 'workflow' })} subItems={[ { name: 'content', type: 'string', description: t(($) => $[`${i18nPrefix}.outputVars.content`], { ns: 'workflow' }), }, // url, title, link like bing search reference result: link, link page title, link page icon { name: 'title', type: 'string', description: t(($) => $[`${i18nPrefix}.outputVars.title`], { ns: 'workflow' }), }, { name: 'url', type: 'string', description: t(($) => $[`${i18nPrefix}.outputVars.url`], { ns: 'workflow' }), }, { name: 'icon', type: 'string', description: t(($) => $[`${i18nPrefix}.outputVars.icon`], { ns: 'workflow' }), }, { name: 'metadata', type: 'object', description: t(($) => $[`${i18nPrefix}.outputVars.metadata`], { ns: 'workflow' }), }, { name: 'files', type: 'Array[File]', description: t(($) => $[`${i18nPrefix}.outputVars.files`], { ns: 'workflow' }), }, ]} />
) } export default memo(Panel)