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: [], } } }