constants.ts 16 KB

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