constants.ts 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. import type { Var } from './types'
  2. import { BlockEnum, VarType } from './types'
  3. import StartNodeDefault from './nodes/start/default'
  4. import AnswerDefault from './nodes/answer/default'
  5. import LLMDefault from './nodes/llm/default'
  6. import KnowledgeRetrievalDefault from './nodes/knowledge-retrieval/default'
  7. import QuestionClassifierDefault from './nodes/question-classifier/default'
  8. import IfElseDefault from './nodes/if-else/default'
  9. import CodeDefault from './nodes/code/default'
  10. import TemplateTransformDefault from './nodes/template-transform/default'
  11. import HttpRequestDefault from './nodes/http/default'
  12. import ToolDefault from './nodes/tool/default'
  13. import VariableAssignerDefault from './nodes/variable-assigner/default'
  14. import EndNodeDefault from './nodes/end/default'
  15. type NodesExtraData = {
  16. author: string
  17. about: string
  18. availablePrevNodes: BlockEnum[]
  19. availableNextNodes: BlockEnum[]
  20. getAvailablePrevNodes: (isChatMode: boolean) => BlockEnum[]
  21. getAvailableNextNodes: (isChatMode: boolean) => BlockEnum[]
  22. checkValid: any
  23. }
  24. export const NODES_EXTRA_DATA: Record<BlockEnum, NodesExtraData> = {
  25. [BlockEnum.Start]: {
  26. author: 'Dify',
  27. about: '',
  28. availablePrevNodes: [],
  29. availableNextNodes: [],
  30. getAvailablePrevNodes: StartNodeDefault.getAvailablePrevNodes,
  31. getAvailableNextNodes: StartNodeDefault.getAvailableNextNodes,
  32. checkValid: StartNodeDefault.checkValid,
  33. },
  34. [BlockEnum.End]: {
  35. author: 'Dify',
  36. about: '',
  37. availablePrevNodes: [],
  38. availableNextNodes: [],
  39. getAvailablePrevNodes: EndNodeDefault.getAvailablePrevNodes,
  40. getAvailableNextNodes: EndNodeDefault.getAvailableNextNodes,
  41. checkValid: EndNodeDefault.checkValid,
  42. },
  43. [BlockEnum.Answer]: {
  44. author: 'Dify',
  45. about: '',
  46. availablePrevNodes: [],
  47. availableNextNodes: [],
  48. getAvailablePrevNodes: AnswerDefault.getAvailablePrevNodes,
  49. getAvailableNextNodes: AnswerDefault.getAvailableNextNodes,
  50. checkValid: AnswerDefault.checkValid,
  51. },
  52. [BlockEnum.LLM]: {
  53. author: 'Dify',
  54. about: '',
  55. availablePrevNodes: [],
  56. availableNextNodes: [],
  57. getAvailablePrevNodes: LLMDefault.getAvailablePrevNodes,
  58. getAvailableNextNodes: LLMDefault.getAvailableNextNodes,
  59. checkValid: LLMDefault.checkValid,
  60. },
  61. [BlockEnum.KnowledgeRetrieval]: {
  62. author: 'Dify',
  63. about: '',
  64. availablePrevNodes: [],
  65. availableNextNodes: [],
  66. getAvailablePrevNodes: KnowledgeRetrievalDefault.getAvailablePrevNodes,
  67. getAvailableNextNodes: KnowledgeRetrievalDefault.getAvailableNextNodes,
  68. checkValid: KnowledgeRetrievalDefault.checkValid,
  69. },
  70. [BlockEnum.IfElse]: {
  71. author: 'Dify',
  72. about: '',
  73. availablePrevNodes: [],
  74. availableNextNodes: [],
  75. getAvailablePrevNodes: IfElseDefault.getAvailablePrevNodes,
  76. getAvailableNextNodes: IfElseDefault.getAvailableNextNodes,
  77. checkValid: IfElseDefault.checkValid,
  78. },
  79. [BlockEnum.Code]: {
  80. author: 'Dify',
  81. about: '',
  82. availablePrevNodes: [],
  83. availableNextNodes: [],
  84. getAvailablePrevNodes: CodeDefault.getAvailablePrevNodes,
  85. getAvailableNextNodes: CodeDefault.getAvailableNextNodes,
  86. checkValid: CodeDefault.checkValid,
  87. },
  88. [BlockEnum.TemplateTransform]: {
  89. author: 'Dify',
  90. about: '',
  91. availablePrevNodes: [],
  92. availableNextNodes: [],
  93. getAvailablePrevNodes: TemplateTransformDefault.getAvailablePrevNodes,
  94. getAvailableNextNodes: TemplateTransformDefault.getAvailableNextNodes,
  95. checkValid: TemplateTransformDefault.checkValid,
  96. },
  97. [BlockEnum.QuestionClassifier]: {
  98. author: 'Dify',
  99. about: '',
  100. availablePrevNodes: [],
  101. availableNextNodes: [],
  102. getAvailablePrevNodes: QuestionClassifierDefault.getAvailablePrevNodes,
  103. getAvailableNextNodes: QuestionClassifierDefault.getAvailableNextNodes,
  104. checkValid: QuestionClassifierDefault.checkValid,
  105. },
  106. [BlockEnum.HttpRequest]: {
  107. author: 'Dify',
  108. about: '',
  109. availablePrevNodes: [],
  110. availableNextNodes: [],
  111. getAvailablePrevNodes: HttpRequestDefault.getAvailablePrevNodes,
  112. getAvailableNextNodes: HttpRequestDefault.getAvailableNextNodes,
  113. checkValid: HttpRequestDefault.checkValid,
  114. },
  115. [BlockEnum.VariableAssigner]: {
  116. author: 'Dify',
  117. about: '',
  118. availablePrevNodes: [],
  119. availableNextNodes: [],
  120. getAvailablePrevNodes: VariableAssignerDefault.getAvailablePrevNodes,
  121. getAvailableNextNodes: VariableAssignerDefault.getAvailableNextNodes,
  122. checkValid: VariableAssignerDefault.checkValid,
  123. },
  124. [BlockEnum.Tool]: {
  125. author: 'Dify',
  126. about: '',
  127. availablePrevNodes: [],
  128. availableNextNodes: [],
  129. getAvailablePrevNodes: ToolDefault.getAvailablePrevNodes,
  130. getAvailableNextNodes: ToolDefault.getAvailableNextNodes,
  131. checkValid: ToolDefault.checkValid,
  132. },
  133. }
  134. export const ALL_CHAT_AVAILABLE_BLOCKS = Object.keys(NODES_EXTRA_DATA).filter(key => key !== BlockEnum.End && key !== BlockEnum.Start) as BlockEnum[]
  135. export const ALL_COMPLETION_AVAILABLE_BLOCKS = Object.keys(NODES_EXTRA_DATA).filter(key => key !== BlockEnum.Answer && key !== BlockEnum.Start) as BlockEnum[]
  136. export const NODES_INITIAL_DATA = {
  137. [BlockEnum.Start]: {
  138. type: BlockEnum.Start,
  139. title: '',
  140. desc: '',
  141. ...StartNodeDefault.defaultValue,
  142. },
  143. [BlockEnum.End]: {
  144. type: BlockEnum.End,
  145. title: '',
  146. desc: '',
  147. ...EndNodeDefault.defaultValue,
  148. },
  149. [BlockEnum.Answer]: {
  150. type: BlockEnum.Answer,
  151. title: '',
  152. desc: '',
  153. ...AnswerDefault.defaultValue,
  154. },
  155. [BlockEnum.LLM]: {
  156. type: BlockEnum.LLM,
  157. title: '',
  158. desc: '',
  159. variables: [],
  160. ...LLMDefault.defaultValue,
  161. },
  162. [BlockEnum.KnowledgeRetrieval]: {
  163. type: BlockEnum.KnowledgeRetrieval,
  164. title: '',
  165. desc: '',
  166. query_variable_selector: [],
  167. dataset_ids: [],
  168. retrieval_mode: 'single',
  169. ...KnowledgeRetrievalDefault.defaultValue,
  170. },
  171. [BlockEnum.IfElse]: {
  172. type: BlockEnum.IfElse,
  173. title: '',
  174. desc: '',
  175. ...IfElseDefault.defaultValue,
  176. },
  177. [BlockEnum.Code]: {
  178. type: BlockEnum.Code,
  179. title: '',
  180. desc: '',
  181. variables: [],
  182. code_language: 'python3',
  183. code: '',
  184. outputs: [],
  185. ...CodeDefault.defaultValue,
  186. },
  187. [BlockEnum.TemplateTransform]: {
  188. type: BlockEnum.TemplateTransform,
  189. title: '',
  190. desc: '',
  191. variables: [],
  192. template: '',
  193. ...TemplateTransformDefault.defaultValue,
  194. },
  195. [BlockEnum.QuestionClassifier]: {
  196. type: BlockEnum.QuestionClassifier,
  197. title: '',
  198. desc: '',
  199. query_variable_selector: [],
  200. topics: [],
  201. ...QuestionClassifierDefault.defaultValue,
  202. },
  203. [BlockEnum.HttpRequest]: {
  204. type: BlockEnum.HttpRequest,
  205. title: '',
  206. desc: '',
  207. variables: [],
  208. ...HttpRequestDefault.defaultValue,
  209. },
  210. [BlockEnum.VariableAssigner]: {
  211. type: BlockEnum.VariableAssigner,
  212. title: '',
  213. desc: '',
  214. variables: [],
  215. output_type: '',
  216. ...VariableAssignerDefault.defaultValue,
  217. },
  218. [BlockEnum.Tool]: {
  219. type: BlockEnum.Tool,
  220. title: '',
  221. desc: '',
  222. ...ToolDefault.defaultValue,
  223. },
  224. }
  225. export const NODE_WIDTH = 240
  226. export const X_OFFSET = 60
  227. export const NODE_WIDTH_X_OFFSET = NODE_WIDTH + X_OFFSET
  228. export const Y_OFFSET = 39
  229. export const MAX_TREE_DEEPTH = 50
  230. export const START_INITIAL_POSITION = { x: 80, y: 282 }
  231. export const AUTO_LAYOUT_OFFSET = {
  232. x: -42,
  233. y: 243,
  234. }
  235. export const RETRIEVAL_OUTPUT_STRUCT = `{
  236. "content": "",
  237. "title": "",
  238. "url": "",
  239. "icon": "",
  240. "metadata": {
  241. "dataset_id": "",
  242. "dataset_name": "",
  243. "document_id": [],
  244. "document_name": "",
  245. "document_data_source_type": "",
  246. "segment_id": "",
  247. "segment_position": "",
  248. "segment_word_count": "",
  249. "segment_hit_count": "",
  250. "segment_index_node_hash": "",
  251. "score": ""
  252. }
  253. }`
  254. export const SUPPORT_OUTPUT_VARS_NODE = [
  255. BlockEnum.Start, BlockEnum.LLM, BlockEnum.KnowledgeRetrieval, BlockEnum.Code, BlockEnum.TemplateTransform,
  256. BlockEnum.HttpRequest, BlockEnum.Tool, BlockEnum.VariableAssigner, BlockEnum.QuestionClassifier,
  257. ]
  258. export const LLM_OUTPUT_STRUCT: Var[] = [
  259. {
  260. variable: 'text',
  261. type: VarType.string,
  262. },
  263. ]
  264. export const KNOWLEDGE_RETRIEVAL_OUTPUT_STRUCT: Var[] = [
  265. {
  266. variable: 'result',
  267. type: VarType.arrayObject,
  268. },
  269. ]
  270. export const TEMPLATE_TRANSFORM_OUTPUT_STRUCT: Var[] = [
  271. {
  272. variable: 'output',
  273. type: VarType.string,
  274. },
  275. ]
  276. export const QUESTION_CLASSIFIER_OUTPUT_STRUCT = [
  277. {
  278. variable: 'class_name',
  279. type: VarType.string,
  280. },
  281. ]
  282. export const HTTP_REQUEST_OUTPUT_STRUCT: Var[] = [
  283. {
  284. variable: 'body',
  285. type: VarType.string,
  286. },
  287. {
  288. variable: 'status_code',
  289. type: VarType.number,
  290. },
  291. {
  292. variable: 'headers',
  293. type: VarType.string,
  294. },
  295. {
  296. variable: 'files',
  297. type: VarType.arrayFile,
  298. },
  299. ]
  300. export const TOOL_OUTPUT_STRUCT: Var[] = [
  301. {
  302. variable: 'text',
  303. type: VarType.string,
  304. },
  305. {
  306. variable: 'files',
  307. type: VarType.arrayFile,
  308. },
  309. ]
  310. export const WORKFLOW_DATA_UPDATE = 'WORKFLOW_DATA_UPDATE'