constants.ts 11 KB

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