dify/web/app/components/workflow-app/hooks/use-workflow-template.ts

87 lines
2.5 KiB
TypeScript
Raw Normal View History

2025-04-29 16:11:54 +08:00
import { useTranslation } from 'react-i18next'
2025-04-18 13:59:12 +08:00
import { generateNewNode } from '@/app/components/workflow/utils'
import {
NODE_WIDTH_X_OFFSET,
START_INITIAL_POSITION,
2025-04-18 13:59:12 +08:00
} from '@/app/components/workflow/constants'
import { useIsChatMode } from './use-is-chat-mode'
2025-04-24 16:29:58 +08:00
import type { StartNodeType } from '@/app/components/workflow/nodes/start/types'
import startDefault from '@/app/components/workflow/nodes/start/default'
import llmDefault from '@/app/components/workflow/nodes/llm/default'
import answerDefault from '@/app/components/workflow/nodes/answer/default'
export const useWorkflowTemplate = () => {
const isChatMode = useIsChatMode()
2025-04-29 16:11:54 +08:00
const { t } = useTranslation()
const { newNode: startNode } = generateNewNode({
2025-04-29 16:11:54 +08:00
data: {
...startDefault.defaultValue as StartNodeType,
type: startDefault.metaData.type,
title: t(`workflow.blocks.${startDefault.metaData.type}`),
},
position: START_INITIAL_POSITION,
})
if (isChatMode) {
const { newNode: llmNode } = generateNewNode({
id: 'llm',
data: {
2025-04-24 16:29:58 +08:00
...llmDefault.defaultValue,
memory: {
window: { enabled: false, size: 10 },
query_prompt_template: '{{#sys.query#}}\n\n{{#sys.files#}}',
},
selected: true,
2025-04-29 16:11:54 +08:00
type: llmDefault.metaData.type,
title: t(`workflow.blocks.${llmDefault.metaData.type}`),
},
position: {
x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET,
y: START_INITIAL_POSITION.y,
},
} as any)
const { newNode: answerNode } = generateNewNode({
id: 'answer',
data: {
2025-04-24 16:29:58 +08:00
...answerDefault.defaultValue,
answer: `{{#${llmNode.id}.text#}}`,
2025-04-29 16:11:54 +08:00
type: answerDefault.metaData.type,
title: t(`workflow.blocks.${answerDefault.metaData.type}`),
},
position: {
x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET * 2,
y: START_INITIAL_POSITION.y,
},
} as any)
const startToLlmEdge = {
id: `${startNode.id}-${llmNode.id}`,
source: startNode.id,
sourceHandle: 'source',
target: llmNode.id,
targetHandle: 'target',
}
const llmToAnswerEdge = {
id: `${llmNode.id}-${answerNode.id}`,
source: llmNode.id,
sourceHandle: 'source',
target: answerNode.id,
targetHandle: 'target',
}
return {
nodes: [startNode, llmNode, answerNode],
edges: [startToLlmEdge, llmToAnswerEdge],
}
}
else {
return {
nodes: [startNode],
edges: [],
}
}
}