| import { generateNewNode } from '../utils' | |
| import { | |
| NODE_WIDTH_X_OFFSET, | |
| START_INITIAL_POSITION, | |
| } from '../constants' | |
| import { useIsChatMode } from './use-workflow' | |
| import { useNodesInitialData } from './use-nodes-data' | |
| export const useWorkflowTemplate = () => { | |
| const isChatMode = useIsChatMode() | |
| const nodesInitialData = useNodesInitialData() | |
| const { newNode: startNode } = generateNewNode({ | |
| data: nodesInitialData.start, | |
| position: START_INITIAL_POSITION, | |
| }) | |
| if (isChatMode) { | |
| const { newNode: llmNode } = generateNewNode({ | |
| id: 'llm', | |
| data: { | |
| ...nodesInitialData.llm, | |
| memory: { | |
| window: { enabled: false, size: 10 }, | |
| }, | |
| selected: true, | |
| }, | |
| position: { | |
| x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET, | |
| y: START_INITIAL_POSITION.y, | |
| }, | |
| } as any) | |
| const { newNode: answerNode } = generateNewNode({ | |
| id: 'answer', | |
| data: { | |
| ...nodesInitialData.answer, | |
| answer: `{{#${llmNode.id}.text#}}`, | |
| }, | |
| 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: [], | |
| } | |
| } | |
| } | |