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