constants.ts 17 KB

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