constants.ts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  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 ParameterExtractorDefault from './nodes/parameter-extractor/default'
  13. import ToolDefault from './nodes/tool/default'
  14. import VariableAssignerDefault from './nodes/variable-assigner/default'
  15. import AssignerDefault from './nodes/assigner/default'
  16. import EndNodeDefault from './nodes/end/default'
  17. import IterationDefault from './nodes/iteration/default'
  18. import IterationStartDefault from './nodes/iteration-start/default'
  19. type NodesExtraData = {
  20. author: string
  21. about: string
  22. availablePrevNodes: BlockEnum[]
  23. availableNextNodes: BlockEnum[]
  24. getAvailablePrevNodes: (isChatMode: boolean) => BlockEnum[]
  25. getAvailableNextNodes: (isChatMode: boolean) => BlockEnum[]
  26. checkValid: any
  27. }
  28. export const NODES_EXTRA_DATA: Record<BlockEnum, NodesExtraData> = {
  29. [BlockEnum.Start]: {
  30. author: 'Dify',
  31. about: '',
  32. availablePrevNodes: [],
  33. availableNextNodes: [],
  34. getAvailablePrevNodes: StartNodeDefault.getAvailablePrevNodes,
  35. getAvailableNextNodes: StartNodeDefault.getAvailableNextNodes,
  36. checkValid: StartNodeDefault.checkValid,
  37. },
  38. [BlockEnum.End]: {
  39. author: 'Dify',
  40. about: '',
  41. availablePrevNodes: [],
  42. availableNextNodes: [],
  43. getAvailablePrevNodes: EndNodeDefault.getAvailablePrevNodes,
  44. getAvailableNextNodes: EndNodeDefault.getAvailableNextNodes,
  45. checkValid: EndNodeDefault.checkValid,
  46. },
  47. [BlockEnum.Answer]: {
  48. author: 'Dify',
  49. about: '',
  50. availablePrevNodes: [],
  51. availableNextNodes: [],
  52. getAvailablePrevNodes: AnswerDefault.getAvailablePrevNodes,
  53. getAvailableNextNodes: AnswerDefault.getAvailableNextNodes,
  54. checkValid: AnswerDefault.checkValid,
  55. },
  56. [BlockEnum.LLM]: {
  57. author: 'Dify',
  58. about: '',
  59. availablePrevNodes: [],
  60. availableNextNodes: [],
  61. getAvailablePrevNodes: LLMDefault.getAvailablePrevNodes,
  62. getAvailableNextNodes: LLMDefault.getAvailableNextNodes,
  63. checkValid: LLMDefault.checkValid,
  64. },
  65. [BlockEnum.KnowledgeRetrieval]: {
  66. author: 'Dify',
  67. about: '',
  68. availablePrevNodes: [],
  69. availableNextNodes: [],
  70. getAvailablePrevNodes: KnowledgeRetrievalDefault.getAvailablePrevNodes,
  71. getAvailableNextNodes: KnowledgeRetrievalDefault.getAvailableNextNodes,
  72. checkValid: KnowledgeRetrievalDefault.checkValid,
  73. },
  74. [BlockEnum.IfElse]: {
  75. author: 'Dify',
  76. about: '',
  77. availablePrevNodes: [],
  78. availableNextNodes: [],
  79. getAvailablePrevNodes: IfElseDefault.getAvailablePrevNodes,
  80. getAvailableNextNodes: IfElseDefault.getAvailableNextNodes,
  81. checkValid: IfElseDefault.checkValid,
  82. },
  83. [BlockEnum.Iteration]: {
  84. author: 'Dify',
  85. about: '',
  86. availablePrevNodes: [],
  87. availableNextNodes: [],
  88. getAvailablePrevNodes: IterationDefault.getAvailablePrevNodes,
  89. getAvailableNextNodes: IterationDefault.getAvailableNextNodes,
  90. checkValid: IterationDefault.checkValid,
  91. },
  92. [BlockEnum.IterationStart]: {
  93. author: 'Dify',
  94. about: '',
  95. availablePrevNodes: [],
  96. availableNextNodes: [],
  97. getAvailablePrevNodes: IterationStartDefault.getAvailablePrevNodes,
  98. getAvailableNextNodes: IterationStartDefault.getAvailableNextNodes,
  99. checkValid: IterationStartDefault.checkValid,
  100. },
  101. [BlockEnum.Code]: {
  102. author: 'Dify',
  103. about: '',
  104. availablePrevNodes: [],
  105. availableNextNodes: [],
  106. getAvailablePrevNodes: CodeDefault.getAvailablePrevNodes,
  107. getAvailableNextNodes: CodeDefault.getAvailableNextNodes,
  108. checkValid: CodeDefault.checkValid,
  109. },
  110. [BlockEnum.TemplateTransform]: {
  111. author: 'Dify',
  112. about: '',
  113. availablePrevNodes: [],
  114. availableNextNodes: [],
  115. getAvailablePrevNodes: TemplateTransformDefault.getAvailablePrevNodes,
  116. getAvailableNextNodes: TemplateTransformDefault.getAvailableNextNodes,
  117. checkValid: TemplateTransformDefault.checkValid,
  118. },
  119. [BlockEnum.QuestionClassifier]: {
  120. author: 'Dify',
  121. about: '',
  122. availablePrevNodes: [],
  123. availableNextNodes: [],
  124. getAvailablePrevNodes: QuestionClassifierDefault.getAvailablePrevNodes,
  125. getAvailableNextNodes: QuestionClassifierDefault.getAvailableNextNodes,
  126. checkValid: QuestionClassifierDefault.checkValid,
  127. },
  128. [BlockEnum.HttpRequest]: {
  129. author: 'Dify',
  130. about: '',
  131. availablePrevNodes: [],
  132. availableNextNodes: [],
  133. getAvailablePrevNodes: HttpRequestDefault.getAvailablePrevNodes,
  134. getAvailableNextNodes: HttpRequestDefault.getAvailableNextNodes,
  135. checkValid: HttpRequestDefault.checkValid,
  136. },
  137. [BlockEnum.VariableAssigner]: {
  138. author: 'Dify',
  139. about: '',
  140. availablePrevNodes: [],
  141. availableNextNodes: [],
  142. getAvailablePrevNodes: VariableAssignerDefault.getAvailablePrevNodes,
  143. getAvailableNextNodes: VariableAssignerDefault.getAvailableNextNodes,
  144. checkValid: VariableAssignerDefault.checkValid,
  145. },
  146. [BlockEnum.Assigner]: {
  147. author: 'Dify',
  148. about: '',
  149. availablePrevNodes: [],
  150. availableNextNodes: [],
  151. getAvailablePrevNodes: AssignerDefault.getAvailablePrevNodes,
  152. getAvailableNextNodes: AssignerDefault.getAvailableNextNodes,
  153. checkValid: AssignerDefault.checkValid,
  154. },
  155. [BlockEnum.VariableAggregator]: {
  156. author: 'Dify',
  157. about: '',
  158. availablePrevNodes: [],
  159. availableNextNodes: [],
  160. getAvailablePrevNodes: VariableAssignerDefault.getAvailablePrevNodes,
  161. getAvailableNextNodes: VariableAssignerDefault.getAvailableNextNodes,
  162. checkValid: VariableAssignerDefault.checkValid,
  163. },
  164. [BlockEnum.ParameterExtractor]: {
  165. author: 'Dify',
  166. about: '',
  167. availablePrevNodes: [],
  168. availableNextNodes: [],
  169. getAvailablePrevNodes: ParameterExtractorDefault.getAvailablePrevNodes,
  170. getAvailableNextNodes: ParameterExtractorDefault.getAvailableNextNodes,
  171. checkValid: ParameterExtractorDefault.checkValid,
  172. },
  173. [BlockEnum.Tool]: {
  174. author: 'Dify',
  175. about: '',
  176. availablePrevNodes: [],
  177. availableNextNodes: [],
  178. getAvailablePrevNodes: ToolDefault.getAvailablePrevNodes,
  179. getAvailableNextNodes: ToolDefault.getAvailableNextNodes,
  180. checkValid: ToolDefault.checkValid,
  181. },
  182. }
  183. export const ALL_CHAT_AVAILABLE_BLOCKS = Object.keys(NODES_EXTRA_DATA).filter(key => key !== BlockEnum.End && key !== BlockEnum.Start) as BlockEnum[]
  184. export const ALL_COMPLETION_AVAILABLE_BLOCKS = Object.keys(NODES_EXTRA_DATA).filter(key => key !== BlockEnum.Answer && key !== BlockEnum.Start) as BlockEnum[]
  185. export const NODES_INITIAL_DATA = {
  186. [BlockEnum.Start]: {
  187. type: BlockEnum.Start,
  188. title: '',
  189. desc: '',
  190. ...StartNodeDefault.defaultValue,
  191. },
  192. [BlockEnum.End]: {
  193. type: BlockEnum.End,
  194. title: '',
  195. desc: '',
  196. ...EndNodeDefault.defaultValue,
  197. },
  198. [BlockEnum.Answer]: {
  199. type: BlockEnum.Answer,
  200. title: '',
  201. desc: '',
  202. ...AnswerDefault.defaultValue,
  203. },
  204. [BlockEnum.LLM]: {
  205. type: BlockEnum.LLM,
  206. title: '',
  207. desc: '',
  208. variables: [],
  209. ...LLMDefault.defaultValue,
  210. },
  211. [BlockEnum.KnowledgeRetrieval]: {
  212. type: BlockEnum.KnowledgeRetrieval,
  213. title: '',
  214. desc: '',
  215. query_variable_selector: [],
  216. dataset_ids: [],
  217. retrieval_mode: 'single',
  218. ...KnowledgeRetrievalDefault.defaultValue,
  219. },
  220. [BlockEnum.IfElse]: {
  221. type: BlockEnum.IfElse,
  222. title: '',
  223. desc: '',
  224. ...IfElseDefault.defaultValue,
  225. },
  226. [BlockEnum.Iteration]: {
  227. type: BlockEnum.Iteration,
  228. title: '',
  229. desc: '',
  230. ...IterationDefault.defaultValue,
  231. },
  232. [BlockEnum.IterationStart]: {
  233. type: BlockEnum.IterationStart,
  234. title: '',
  235. desc: '',
  236. ...IterationStartDefault.defaultValue,
  237. },
  238. [BlockEnum.Code]: {
  239. type: BlockEnum.Code,
  240. title: '',
  241. desc: '',
  242. variables: [],
  243. code_language: 'python3',
  244. code: '',
  245. outputs: [],
  246. ...CodeDefault.defaultValue,
  247. },
  248. [BlockEnum.TemplateTransform]: {
  249. type: BlockEnum.TemplateTransform,
  250. title: '',
  251. desc: '',
  252. variables: [],
  253. template: '',
  254. ...TemplateTransformDefault.defaultValue,
  255. },
  256. [BlockEnum.QuestionClassifier]: {
  257. type: BlockEnum.QuestionClassifier,
  258. title: '',
  259. desc: '',
  260. query_variable_selector: [],
  261. topics: [],
  262. ...QuestionClassifierDefault.defaultValue,
  263. },
  264. [BlockEnum.HttpRequest]: {
  265. type: BlockEnum.HttpRequest,
  266. title: '',
  267. desc: '',
  268. variables: [],
  269. ...HttpRequestDefault.defaultValue,
  270. },
  271. [BlockEnum.ParameterExtractor]: {
  272. type: BlockEnum.ParameterExtractor,
  273. title: '',
  274. desc: '',
  275. variables: [],
  276. ...ParameterExtractorDefault.defaultValue,
  277. },
  278. [BlockEnum.VariableAssigner]: {
  279. type: BlockEnum.VariableAssigner,
  280. title: '',
  281. desc: '',
  282. variables: [],
  283. output_type: '',
  284. ...VariableAssignerDefault.defaultValue,
  285. },
  286. [BlockEnum.VariableAggregator]: {
  287. type: BlockEnum.VariableAggregator,
  288. title: '',
  289. desc: '',
  290. variables: [],
  291. output_type: '',
  292. ...VariableAssignerDefault.defaultValue,
  293. },
  294. [BlockEnum.Assigner]: {
  295. type: BlockEnum.Assigner,
  296. title: '',
  297. desc: '',
  298. ...AssignerDefault.defaultValue,
  299. },
  300. [BlockEnum.Tool]: {
  301. type: BlockEnum.Tool,
  302. title: '',
  303. desc: '',
  304. ...ToolDefault.defaultValue,
  305. },
  306. }
  307. export const NODE_WIDTH = 240
  308. export const X_OFFSET = 60
  309. export const NODE_WIDTH_X_OFFSET = NODE_WIDTH + X_OFFSET
  310. export const Y_OFFSET = 39
  311. export const MAX_TREE_DEPTH = 50
  312. export const START_INITIAL_POSITION = { x: 80, y: 282 }
  313. export const AUTO_LAYOUT_OFFSET = {
  314. x: -42,
  315. y: 243,
  316. }
  317. export const ITERATION_NODE_Z_INDEX = 1
  318. export const ITERATION_CHILDREN_Z_INDEX = 1002
  319. export const ITERATION_PADDING = {
  320. top: 65,
  321. right: 16,
  322. bottom: 20,
  323. left: 16,
  324. }
  325. export const PARALLEL_LIMIT = 10
  326. export const PARALLEL_DEPTH_LIMIT = 3
  327. export const RETRIEVAL_OUTPUT_STRUCT = `{
  328. "content": "",
  329. "title": "",
  330. "url": "",
  331. "icon": "",
  332. "metadata": {
  333. "dataset_id": "",
  334. "dataset_name": "",
  335. "document_id": [],
  336. "document_name": "",
  337. "document_data_source_type": "",
  338. "segment_id": "",
  339. "segment_position": "",
  340. "segment_word_count": "",
  341. "segment_hit_count": "",
  342. "segment_index_node_hash": "",
  343. "score": ""
  344. }
  345. }`
  346. export const SUPPORT_OUTPUT_VARS_NODE = [
  347. BlockEnum.Start, BlockEnum.LLM, BlockEnum.KnowledgeRetrieval, BlockEnum.Code, BlockEnum.TemplateTransform,
  348. BlockEnum.HttpRequest, BlockEnum.Tool, BlockEnum.VariableAssigner, BlockEnum.VariableAggregator, BlockEnum.QuestionClassifier,
  349. BlockEnum.ParameterExtractor, BlockEnum.Iteration,
  350. ]
  351. export const LLM_OUTPUT_STRUCT: Var[] = [
  352. {
  353. variable: 'text',
  354. type: VarType.string,
  355. },
  356. ]
  357. export const KNOWLEDGE_RETRIEVAL_OUTPUT_STRUCT: Var[] = [
  358. {
  359. variable: 'result',
  360. type: VarType.arrayObject,
  361. },
  362. ]
  363. export const TEMPLATE_TRANSFORM_OUTPUT_STRUCT: Var[] = [
  364. {
  365. variable: 'output',
  366. type: VarType.string,
  367. },
  368. ]
  369. export const QUESTION_CLASSIFIER_OUTPUT_STRUCT = [
  370. {
  371. variable: 'class_name',
  372. type: VarType.string,
  373. },
  374. ]
  375. export const HTTP_REQUEST_OUTPUT_STRUCT: Var[] = [
  376. {
  377. variable: 'body',
  378. type: VarType.string,
  379. },
  380. {
  381. variable: 'status_code',
  382. type: VarType.number,
  383. },
  384. {
  385. variable: 'headers',
  386. type: VarType.object,
  387. },
  388. {
  389. variable: 'files',
  390. type: VarType.arrayFile,
  391. },
  392. ]
  393. export const TOOL_OUTPUT_STRUCT: Var[] = [
  394. {
  395. variable: 'text',
  396. type: VarType.string,
  397. },
  398. {
  399. variable: 'files',
  400. type: VarType.arrayFile,
  401. },
  402. {
  403. variable: 'json',
  404. type: VarType.arrayObject,
  405. },
  406. ]
  407. export const PARAMETER_EXTRACTOR_COMMON_STRUCT: Var[] = [
  408. {
  409. variable: '__is_success',
  410. type: VarType.number,
  411. },
  412. {
  413. variable: '__reason',
  414. type: VarType.string,
  415. },
  416. ]
  417. export const WORKFLOW_DATA_UPDATE = 'WORKFLOW_DATA_UPDATE'
  418. export const CUSTOM_NODE = 'custom'
  419. export const CUSTOM_EDGE = 'custom'
  420. export const DSL_EXPORT_CHECK = 'DSL_EXPORT_CHECK'