|
|
|
|
@ -4,7 +4,11 @@ import {
|
|
|
|
|
useWorkflow,
|
|
|
|
|
useWorkflowVariables,
|
|
|
|
|
} from '@/app/components/workflow/hooks'
|
|
|
|
|
import type { Node, ValueSelector, Var } from '@/app/components/workflow/types'
|
|
|
|
|
import type { NodeOutPutVar } from '@/app/components/workflow/types'
|
|
|
|
|
import { BlockEnum, type Node, type ValueSelector, type Var } from '@/app/components/workflow/types'
|
|
|
|
|
import { useStore as useWorkflowStore } from '@/app/components/workflow/store'
|
|
|
|
|
import { inputVarTypeToVarType } from '../../data-source/utils'
|
|
|
|
|
|
|
|
|
|
type Params = {
|
|
|
|
|
onlyLeafNodeVar?: boolean
|
|
|
|
|
hideEnv?: boolean
|
|
|
|
|
@ -24,24 +28,49 @@ const useAvailableVarList = (nodeId: string, {
|
|
|
|
|
onlyLeafNodeVar: false,
|
|
|
|
|
filterVar: () => true,
|
|
|
|
|
}) => {
|
|
|
|
|
const { getTreeLeafNodes, getBeforeNodesInSameBranchIncludeParent } = useWorkflow()
|
|
|
|
|
const { getTreeLeafNodes, getNodeById, getBeforeNodesInSameBranchIncludeParent } = useWorkflow()
|
|
|
|
|
const { getNodeAvailableVars } = useWorkflowVariables()
|
|
|
|
|
const isChatMode = useIsChatMode()
|
|
|
|
|
|
|
|
|
|
const availableNodes = passedInAvailableNodes || (onlyLeafNodeVar ? getTreeLeafNodes(nodeId) : getBeforeNodesInSameBranchIncludeParent(nodeId))
|
|
|
|
|
|
|
|
|
|
const {
|
|
|
|
|
parentNode: iterationNode,
|
|
|
|
|
} = useNodeInfo(nodeId)
|
|
|
|
|
|
|
|
|
|
const availableVars = getNodeAvailableVars({
|
|
|
|
|
const currNode = getNodeById(nodeId)
|
|
|
|
|
const ragPipelineVariables = useWorkflowStore(s => s.ragPipelineVariables)
|
|
|
|
|
const isDataSourceNode = currNode?.data?.type === BlockEnum.DataSource
|
|
|
|
|
const dataSourceRagVars: NodeOutPutVar[] = []
|
|
|
|
|
if(isDataSourceNode) {
|
|
|
|
|
const ragVariablesInDataSource = ragPipelineVariables?.filter(ragVariable => ragVariable.belong_to_node_id === nodeId)
|
|
|
|
|
const filterVars = ragVariablesInDataSource?.filter(v => filterVar({
|
|
|
|
|
variable: v.variable,
|
|
|
|
|
type: inputVarTypeToVarType(v.type),
|
|
|
|
|
nodeId,
|
|
|
|
|
isRagVariable: true,
|
|
|
|
|
}, ['rag', nodeId, v.variable]))
|
|
|
|
|
if(filterVars?.length) {
|
|
|
|
|
dataSourceRagVars.push({
|
|
|
|
|
nodeId,
|
|
|
|
|
title: currNode.data?.title,
|
|
|
|
|
vars: filterVars.map((v) => {
|
|
|
|
|
return {
|
|
|
|
|
variable: `rag.${nodeId}.${v.variable}`,
|
|
|
|
|
type: inputVarTypeToVarType(v.type),
|
|
|
|
|
description: v.label,
|
|
|
|
|
isRagVariable: true,
|
|
|
|
|
} as Var
|
|
|
|
|
}),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const availableVars = [...getNodeAvailableVars({
|
|
|
|
|
parentNode: iterationNode,
|
|
|
|
|
beforeNodes: availableNodes,
|
|
|
|
|
isChatMode,
|
|
|
|
|
filterVar,
|
|
|
|
|
hideEnv,
|
|
|
|
|
hideChatVar,
|
|
|
|
|
})
|
|
|
|
|
}), ...dataSourceRagVars]
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
availableVars,
|
|
|
|
|
|