constants.ts 14 KB

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