Feat: conversation variable & variable assigner node (#7222)

Signed-off-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: -LAN- <laipz8200@outlook.com>
This commit is contained in:
KVOJJJin 2024-08-13 14:44:10 +08:00 • committed by GitHub
commit 935e72d449
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
128 changed files with 3354 additions and 683 deletions

View file

@ -31,6 +31,7 @@ export const useNodesSyncDraft = () => {
const [x, y, zoom] = transform
const {
appId,
conversationVariables,
environmentVariables,
syncWorkflowDraftHash,
} = workflowStore.getState()
@ -82,6 +83,7 @@ export const useNodesSyncDraft = () => {
file_upload: features.file,
},
environment_variables: environmentVariables,
conversation_variables: conversationVariables,
hash: syncWorkflowDraftHash,
},
}

View file

@ -68,6 +68,7 @@ export const useWorkflowUpdate = () => {
setIsSyncingWorkflowDraft,
setEnvironmentVariables,
setEnvSecrets,
setConversationVariables,
} = workflowStore.getState()
setIsSyncingWorkflowDraft(true)
fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => {
@ -78,6 +79,8 @@ export const useWorkflowUpdate = () => {
return acc
}, {} as Record<string, string>))
setEnvironmentVariables(response.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [])
// #TODO chatVar sync#
setConversationVariables(response.conversation_variables || [])
}).finally(() => setIsSyncingWorkflowDraft(false))
}, [handleUpdateWorkflowCanvas, workflowStore])

View file

@ -67,9 +67,11 @@ export const useWorkflowStartRun = () => {
setShowDebugAndPreviewPanel,
setHistoryWorkflowData,
setShowEnvPanel,
setShowChatVariablePanel,
} = workflowStore.getState()
setShowEnvPanel(false)
setShowChatVariablePanel(false)
if (showDebugAndPreviewPanel)
handleCancelDebugAndPreviewPanel()

View file

@ -12,6 +12,7 @@ import type {
export const useWorkflowVariables = () => {
const { t } = useTranslation()
const environmentVariables = useStore(s => s.environmentVariables)
const conversationVariables = useStore(s => s.conversationVariables)
const getNodeAvailableVars = useCallback(({
parentNode,
@ -19,12 +20,14 @@ export const useWorkflowVariables = () => {
isChatMode,
filterVar,
hideEnv,
hideChatVar,
}: {
parentNode?: Node | null
beforeNodes: Node[]
isChatMode: boolean
filterVar: (payload: Var, selector: ValueSelector) => boolean
hideEnv?: boolean
hideChatVar?: boolean
}): NodeOutPutVar[] => {
return toNodeAvailableVars({
parentNode,
@ -32,9 +35,10 @@ export const useWorkflowVariables = () => {
beforeNodes,
isChatMode,
environmentVariables: hideEnv ? [] : environmentVariables,
conversationVariables: (isChatMode && !hideChatVar) ? conversationVariables : [],
filterVar,
})
}, [environmentVariables, t])
}, [conversationVariables, environmentVariables, t])
const getCurrentVariableType = useCallback(({
parentNode,
@ -59,8 +63,9 @@ export const useWorkflowVariables = () => {
isChatMode,
isConstant,
environmentVariables,
conversationVariables,
})
}, [environmentVariables])
}, [conversationVariables, environmentVariables])
return {
getNodeAvailableVars,

View file

@ -478,6 +478,8 @@ export const useWorkflowInit = () => {
return acc
}, {} as Record<string, string>),
environmentVariables: res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [],
// #TODO chatVar sync#
conversationVariables: res.conversation_variables || [],
})
setSyncWorkflowDraftHash(res.hash)
setIsLoading(false)
@ -498,6 +500,7 @@ export const useWorkflowInit = () => {
retriever_resource: { enabled: true },
},
environment_variables: [],
conversation_variables: [],
},
}).then((res) => {
workflowStore.getState().setDraftUpdatedAt(res.updated_at)