constants.ts 11 KB

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