You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

use-workflow-template.ts 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { useTranslation } from 'react-i18next'
  2. import { generateNewNode } from '@/app/components/workflow/utils'
  3. import {
  4. NODE_WIDTH_X_OFFSET,
  5. START_INITIAL_POSITION,
  6. } from '@/app/components/workflow/constants'
  7. import { useIsChatMode } from './use-is-chat-mode'
  8. import type { StartNodeType } from '@/app/components/workflow/nodes/start/types'
  9. import startDefault from '@/app/components/workflow/nodes/start/default'
  10. import llmDefault from '@/app/components/workflow/nodes/llm/default'
  11. import answerDefault from '@/app/components/workflow/nodes/answer/default'
  12. export const useWorkflowTemplate = () => {
  13. const isChatMode = useIsChatMode()
  14. const { t } = useTranslation()
  15. const { newNode: startNode } = generateNewNode({
  16. data: {
  17. ...startDefault.defaultValue as StartNodeType,
  18. type: startDefault.metaData.type,
  19. title: t(`workflow.blocks.${startDefault.metaData.type}`),
  20. },
  21. position: START_INITIAL_POSITION,
  22. })
  23. if (isChatMode) {
  24. const { newNode: llmNode } = generateNewNode({
  25. id: 'llm',
  26. data: {
  27. ...llmDefault.defaultValue,
  28. memory: {
  29. window: { enabled: false, size: 10 },
  30. query_prompt_template: '{{#sys.query#}}\n\n{{#sys.files#}}',
  31. },
  32. selected: true,
  33. type: llmDefault.metaData.type,
  34. title: t(`workflow.blocks.${llmDefault.metaData.type}`),
  35. },
  36. position: {
  37. x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET,
  38. y: START_INITIAL_POSITION.y,
  39. },
  40. } as any)
  41. const { newNode: answerNode } = generateNewNode({
  42. id: 'answer',
  43. data: {
  44. ...answerDefault.defaultValue,
  45. answer: `{{#${llmNode.id}.text#}}`,
  46. type: answerDefault.metaData.type,
  47. title: t(`workflow.blocks.${answerDefault.metaData.type}`),
  48. },
  49. position: {
  50. x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET * 2,
  51. y: START_INITIAL_POSITION.y,
  52. },
  53. } as any)
  54. const startToLlmEdge = {
  55. id: `${startNode.id}-${llmNode.id}`,
  56. source: startNode.id,
  57. sourceHandle: 'source',
  58. target: llmNode.id,
  59. targetHandle: 'target',
  60. }
  61. const llmToAnswerEdge = {
  62. id: `${llmNode.id}-${answerNode.id}`,
  63. source: llmNode.id,
  64. sourceHandle: 'source',
  65. target: answerNode.id,
  66. targetHandle: 'target',
  67. }
  68. return {
  69. nodes: [startNode, llmNode, answerNode],
  70. edges: [startToLlmEdge, llmToAnswerEdge],
  71. }
  72. }
  73. else {
  74. return {
  75. nodes: [startNode],
  76. edges: [],
  77. }
  78. }
  79. }