fix: llm can get the right filled var

pull/21369/head
Joel 1 year ago
parent d17098429d
commit 77773c9c5c

@ -19,6 +19,7 @@ import { isConversationVar, isENV, isSystemVar } from '../nodes/_base/components
import produce from 'immer' import produce from 'immer'
import type { Node } from '@/app/components/workflow/types' import type { Node } from '@/app/components/workflow/types'
import { useNodesInteractionsWithoutSync } from './use-nodes-interactions-without-sync' import { useNodesInteractionsWithoutSync } from './use-nodes-interactions-without-sync'
import { useEdgesInteractionsWithoutSync } from './use-edges-interactions-without-sync'
const useInspectVarsCrud = () => { const useInspectVarsCrud = () => {
const workflowStore = useWorkflowStore() const workflowStore = useWorkflowStore()
@ -45,7 +46,7 @@ const useInspectVarsCrud = () => {
const { mutate: doEditInspectorVar } = useEditInspectorVar(appId) const { mutate: doEditInspectorVar } = useEditInspectorVar(appId)
const { handleCancelNodeSuccessStatus } = useNodesInteractionsWithoutSync() const { handleCancelNodeSuccessStatus } = useNodesInteractionsWithoutSync()
const { handleEdgeCancelRunningStatus } = useEdgesInteractionsWithoutSync()
const getNodeInspectVars = useCallback((nodeId: string) => { const getNodeInspectVars = useCallback((nodeId: string) => {
const node = nodesWithInspectVars.find(node => node.nodeId === nodeId) const node = nodesWithInspectVars.find(node => node.nodeId === nodeId)
return node return node
@ -61,15 +62,15 @@ const useInspectVarsCrud = () => {
return varId return varId
}, [getNodeInspectVars]) }, [getNodeInspectVars])
const getInspectVar = useCallback((nodeId: string, name: string) => { const getInspectVar = useCallback((nodeId: string, name: string): VarInInspect | undefined => {
const node = getNodeInspectVars(nodeId) const node = getNodeInspectVars(nodeId)
if (!node) if (!node)
return undefined return undefined
const variable = node.vars.find((varItem) => { const variable = node.vars.find((varItem) => {
return varItem.selector[1] === name return varItem.name === name
})?.value })
return variable return variable
}, [getNodeInspectVars]) }, [getNodeInspectVars])
const hasSetInspectVar = useCallback((nodeId: string, name: string, sysVars: VarInInspect[], conversationVars: VarInInspect[]) => { const hasSetInspectVar = useCallback((nodeId: string, name: string, sysVars: VarInInspect[], conversationVars: VarInInspect[]) => {
@ -145,6 +146,7 @@ const useInspectVarsCrud = () => {
await invalidateConversationVarValues() await invalidateConversationVarValues()
await invalidateSysVarValues() await invalidateSysVarValues()
deleteAllInspectVarsInStore() deleteAllInspectVarsInStore()
handleEdgeCancelRunningStatus()
} }
const editInspectVarValue = useCallback(async (nodeId: string, varId: string, value: any) => { const editInspectVarValue = useCallback(async (nodeId: string, varId: string, value: any) => {
@ -191,10 +193,10 @@ const useInspectVarsCrud = () => {
const isInspectVarEdited = useCallback((nodeId: string, name: string) => { const isInspectVarEdited = useCallback((nodeId: string, name: string) => {
const inspectVar = getInspectVar(nodeId, name) const inspectVar = getInspectVar(nodeId, name)
if (!inspectVar) if (!inspectVar)
return false return false
return inspectVar.edited return inspectVar.edited
}, [getInspectVar]) }, [getInspectVar])
const resetToLastRunVar = (nodeId: string, varId: string) => { const resetToLastRunVar = (nodeId: string, varId: string) => {

@ -2,11 +2,9 @@ import { useCallback } from 'react'
import produce from 'immer' import produce from 'immer'
import { useStoreApi } from 'reactflow' import { useStoreApi } from 'reactflow'
import { NodeRunningStatus } from '../types' import { NodeRunningStatus } from '../types'
import { useEdgesInteractionsWithoutSync } from './use-edges-interactions-without-sync'
export const useNodesInteractionsWithoutSync = () => { export const useNodesInteractionsWithoutSync = () => {
const store = useStoreApi() const store = useStoreApi()
const { handleEdgeCancelRunningStatus } = useEdgesInteractionsWithoutSync()
const handleNodeCancelRunningStatus = useCallback(() => { const handleNodeCancelRunningStatus = useCallback(() => {
const { const {
@ -38,8 +36,7 @@ export const useNodesInteractionsWithoutSync = () => {
}) })
}) })
setNodes(newNodes) setNodes(newNodes)
handleEdgeCancelRunningStatus() }, [store])
}, [handleEdgeCancelRunningStatus, store])
const handleCancelNodeSuccessStatus = useCallback((nodeId: string) => { const handleCancelNodeSuccessStatus = useCallback((nodeId: string) => {
const { const {

@ -21,7 +21,7 @@ import useVariableAggregatorSingleRunFormParams from '@/app/components/workflow/
import useToolGetDataForCheckMore from '@/app/components/workflow/nodes/tool/use-get-data-for-check-more' import useToolGetDataForCheckMore from '@/app/components/workflow/nodes/tool/use-get-data-for-check-more'
// import // import
import type { CommonNodeType } from '@/app/components/workflow/types' import type { CommonNodeType, ValueSelector } from '@/app/components/workflow/types'
import { BlockEnum } from '@/app/components/workflow/types' import { BlockEnum } from '@/app/components/workflow/types'
import { import {
useNodesSyncDraft, useNodesSyncDraft,
@ -171,7 +171,10 @@ const useLastRun = <T>({
const valuesArr = forms.map((form) => { const valuesArr = forms.map((form) => {
const values: Record<string, boolean> = {} const values: Record<string, boolean> = {}
form.inputs.forEach(({ variable }) => { form.inputs.forEach(({ variable }) => {
const selector = variable.slice(1, -1).split('.') if(!variable.includes('.') && !singleRunParams?.getDependentVar)
return
const selector = !variable.includes('.') ? singleRunParams?.getDependentVar(variable) : variable.slice(1, -1).split('.')
const [nodeId, varName] = selector.slice(0, 2) const [nodeId, varName] = selector.slice(0, 2)
const inspectVarValue = hasSetInspectVar(nodeId, varName, systemVars, conversationVars) // also detect system var , env and conversation var const inspectVarValue = hasSetInspectVar(nodeId, varName, systemVars, conversationVars) // also detect system var , env and conversation var
if (inspectVarValue) if (inspectVarValue)
@ -182,6 +185,16 @@ const useLastRun = <T>({
return valuesArr return valuesArr
} }
const isAllVarsHasValue = (vars?: ValueSelector[]) => {
if(!vars || vars.length === 0)
return true
return vars.every((varItem) => {
const [nodeId, varName] = varItem.slice(0, 2)
const inspectVarValue = hasSetInspectVar(nodeId, varName, systemVars, conversationVars) // also detect system var , env and conversation var
return inspectVarValue
})
}
const getFilteredExistVarForms = (forms: FormProps[]) => { const getFilteredExistVarForms = (forms: FormProps[]) => {
if (!forms || forms.length === 0) if (!forms || forms.length === 0)
return [] return []
@ -200,14 +213,14 @@ const useLastRun = <T>({
} }
const handleSingleRun = () => { const handleSingleRun = () => {
const filteredExistVarForms = getFilteredExistVarForms(singleRunParams.forms) // no need to input params
if (filteredExistVarForms.length > 0) { if (isAllVarsHasValue(singleRunParams?.getDependentVars?.())) {
showSingleRun()
}
else { // no need to input params
callRunApi({}) callRunApi({})
setTabType(TabType.lastRun) setTabType(TabType.lastRun)
} }
else {
showSingleRun()
}
} }
return { return {

@ -167,8 +167,31 @@ const useSingleRunFormParams = ({
return forms return forms
})() })()
const getDependentVars = () => {
const promptVars = varInputs.map(item => item.variable.slice(1, -1).split('.'))
const contextVar = payload.context.variable_selector
const vars = [...promptVars, contextVar]
if (isVisionModel && payload.vision?.enabled && payload.vision?.configs?.variable_selector) {
const visionVar = payload.vision.configs.variable_selector
vars.push(visionVar)
}
return vars
}
const getDependentVar = (variable: string) => {
if(variable === '#context#')
return payload.context.variable_selector
if(variable === '#files#')
return payload.vision.configs?.variable_selector
return false
}
return { return {
forms, forms,
getDependentVars,
getDependentVar,
} }
} }

Loading…
Cancel
Save