| import type { Var } from './types' | |
| import { BlockEnum, VarType } from './types' | |
| import StartNodeDefault from './nodes/start/default' | |
| import AnswerDefault from './nodes/answer/default' | |
| import LLMDefault from './nodes/llm/default' | |
| import KnowledgeRetrievalDefault from './nodes/knowledge-retrieval/default' | |
| import QuestionClassifierDefault from './nodes/question-classifier/default' | |
| import IfElseDefault from './nodes/if-else/default' | |
| import CodeDefault from './nodes/code/default' | |
| import TemplateTransformDefault from './nodes/template-transform/default' | |
| import HttpRequestDefault from './nodes/http/default' | |
| import ParameterExtractorDefault from './nodes/parameter-extractor/default' | |
| import ToolDefault from './nodes/tool/default' | |
| import VariableAssignerDefault from './nodes/variable-assigner/default' | |
| import AssignerDefault from './nodes/assigner/default' | |
| import EndNodeDefault from './nodes/end/default' | |
| import IterationDefault from './nodes/iteration/default' | |
| import DocExtractorDefault from './nodes/document-extractor/default' | |
| import ListFilterDefault from './nodes/list-operator/default' | |
| import IterationStartDefault from './nodes/iteration-start/default' | |
| type NodesExtraData = { | |
| author: string | |
| about: string | |
| availablePrevNodes: BlockEnum[] | |
| availableNextNodes: BlockEnum[] | |
| getAvailablePrevNodes: (isChatMode: boolean) => BlockEnum[] | |
| getAvailableNextNodes: (isChatMode: boolean) => BlockEnum[] | |
| checkValid: any | |
| } | |
| export const NODES_EXTRA_DATA: Record<BlockEnum, NodesExtraData> = { | |
| [BlockEnum.Start]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: StartNodeDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: StartNodeDefault.getAvailableNextNodes, | |
| checkValid: StartNodeDefault.checkValid, | |
| }, | |
| [BlockEnum.End]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: EndNodeDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: EndNodeDefault.getAvailableNextNodes, | |
| checkValid: EndNodeDefault.checkValid, | |
| }, | |
| [BlockEnum.Answer]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: AnswerDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: AnswerDefault.getAvailableNextNodes, | |
| checkValid: AnswerDefault.checkValid, | |
| }, | |
| [BlockEnum.LLM]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: LLMDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: LLMDefault.getAvailableNextNodes, | |
| checkValid: LLMDefault.checkValid, | |
| }, | |
| [BlockEnum.KnowledgeRetrieval]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: KnowledgeRetrievalDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: KnowledgeRetrievalDefault.getAvailableNextNodes, | |
| checkValid: KnowledgeRetrievalDefault.checkValid, | |
| }, | |
| [BlockEnum.IfElse]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: IfElseDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: IfElseDefault.getAvailableNextNodes, | |
| checkValid: IfElseDefault.checkValid, | |
| }, | |
| [BlockEnum.Iteration]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: IterationDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: IterationDefault.getAvailableNextNodes, | |
| checkValid: IterationDefault.checkValid, | |
| }, | |
| [BlockEnum.IterationStart]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: IterationStartDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: IterationStartDefault.getAvailableNextNodes, | |
| checkValid: IterationStartDefault.checkValid, | |
| }, | |
| [BlockEnum.Code]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: CodeDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: CodeDefault.getAvailableNextNodes, | |
| checkValid: CodeDefault.checkValid, | |
| }, | |
| [BlockEnum.TemplateTransform]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: TemplateTransformDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: TemplateTransformDefault.getAvailableNextNodes, | |
| checkValid: TemplateTransformDefault.checkValid, | |
| }, | |
| [BlockEnum.QuestionClassifier]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: QuestionClassifierDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: QuestionClassifierDefault.getAvailableNextNodes, | |
| checkValid: QuestionClassifierDefault.checkValid, | |
| }, | |
| [BlockEnum.HttpRequest]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: HttpRequestDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: HttpRequestDefault.getAvailableNextNodes, | |
| checkValid: HttpRequestDefault.checkValid, | |
| }, | |
| [BlockEnum.VariableAssigner]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: VariableAssignerDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: VariableAssignerDefault.getAvailableNextNodes, | |
| checkValid: VariableAssignerDefault.checkValid, | |
| }, | |
| [BlockEnum.Assigner]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: AssignerDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: AssignerDefault.getAvailableNextNodes, | |
| checkValid: AssignerDefault.checkValid, | |
| }, | |
| [BlockEnum.VariableAggregator]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: VariableAssignerDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: VariableAssignerDefault.getAvailableNextNodes, | |
| checkValid: VariableAssignerDefault.checkValid, | |
| }, | |
| [BlockEnum.ParameterExtractor]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: ParameterExtractorDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: ParameterExtractorDefault.getAvailableNextNodes, | |
| checkValid: ParameterExtractorDefault.checkValid, | |
| }, | |
| [BlockEnum.Tool]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: ToolDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: ToolDefault.getAvailableNextNodes, | |
| checkValid: ToolDefault.checkValid, | |
| }, | |
| [BlockEnum.DocExtractor]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: DocExtractorDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: DocExtractorDefault.getAvailableNextNodes, | |
| checkValid: DocExtractorDefault.checkValid, | |
| }, | |
| [BlockEnum.ListFilter]: { | |
| author: 'Dify', | |
| about: '', | |
| availablePrevNodes: [], | |
| availableNextNodes: [], | |
| getAvailablePrevNodes: ListFilterDefault.getAvailablePrevNodes, | |
| getAvailableNextNodes: ListFilterDefault.getAvailableNextNodes, | |
| checkValid: ListFilterDefault.checkValid, | |
| }, | |
| } | |
| export const ALL_CHAT_AVAILABLE_BLOCKS = Object.keys(NODES_EXTRA_DATA).filter(key => key !== BlockEnum.End && key !== BlockEnum.Start) as BlockEnum[] | |
| export const ALL_COMPLETION_AVAILABLE_BLOCKS = Object.keys(NODES_EXTRA_DATA).filter(key => key !== BlockEnum.Answer && key !== BlockEnum.Start) as BlockEnum[] | |
| export const NODES_INITIAL_DATA = { | |
| [BlockEnum.Start]: { | |
| type: BlockEnum.Start, | |
| title: '', | |
| desc: '', | |
| ...StartNodeDefault.defaultValue, | |
| }, | |
| [BlockEnum.End]: { | |
| type: BlockEnum.End, | |
| title: '', | |
| desc: '', | |
| ...EndNodeDefault.defaultValue, | |
| }, | |
| [BlockEnum.Answer]: { | |
| type: BlockEnum.Answer, | |
| title: '', | |
| desc: '', | |
| ...AnswerDefault.defaultValue, | |
| }, | |
| [BlockEnum.LLM]: { | |
| type: BlockEnum.LLM, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| ...LLMDefault.defaultValue, | |
| }, | |
| [BlockEnum.KnowledgeRetrieval]: { | |
| type: BlockEnum.KnowledgeRetrieval, | |
| title: '', | |
| desc: '', | |
| query_variable_selector: [], | |
| dataset_ids: [], | |
| retrieval_mode: 'single', | |
| ...KnowledgeRetrievalDefault.defaultValue, | |
| }, | |
| [BlockEnum.IfElse]: { | |
| type: BlockEnum.IfElse, | |
| title: '', | |
| desc: '', | |
| ...IfElseDefault.defaultValue, | |
| }, | |
| [BlockEnum.Iteration]: { | |
| type: BlockEnum.Iteration, | |
| title: '', | |
| desc: '', | |
| ...IterationDefault.defaultValue, | |
| }, | |
| [BlockEnum.IterationStart]: { | |
| type: BlockEnum.IterationStart, | |
| title: '', | |
| desc: '', | |
| ...IterationStartDefault.defaultValue, | |
| }, | |
| [BlockEnum.Code]: { | |
| type: BlockEnum.Code, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| code_language: 'python3', | |
| code: '', | |
| outputs: [], | |
| ...CodeDefault.defaultValue, | |
| }, | |
| [BlockEnum.TemplateTransform]: { | |
| type: BlockEnum.TemplateTransform, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| template: '', | |
| ...TemplateTransformDefault.defaultValue, | |
| }, | |
| [BlockEnum.QuestionClassifier]: { | |
| type: BlockEnum.QuestionClassifier, | |
| title: '', | |
| desc: '', | |
| query_variable_selector: [], | |
| topics: [], | |
| ...QuestionClassifierDefault.defaultValue, | |
| }, | |
| [BlockEnum.HttpRequest]: { | |
| type: BlockEnum.HttpRequest, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| ...HttpRequestDefault.defaultValue, | |
| }, | |
| [BlockEnum.ParameterExtractor]: { | |
| type: BlockEnum.ParameterExtractor, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| ...ParameterExtractorDefault.defaultValue, | |
| }, | |
| [BlockEnum.VariableAssigner]: { | |
| type: BlockEnum.VariableAssigner, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| output_type: '', | |
| ...VariableAssignerDefault.defaultValue, | |
| }, | |
| [BlockEnum.VariableAggregator]: { | |
| type: BlockEnum.VariableAggregator, | |
| title: '', | |
| desc: '', | |
| variables: [], | |
| output_type: '', | |
| ...VariableAssignerDefault.defaultValue, | |
| }, | |
| [BlockEnum.Assigner]: { | |
| type: BlockEnum.Assigner, | |
| title: '', | |
| desc: '', | |
| ...AssignerDefault.defaultValue, | |
| }, | |
| [BlockEnum.Tool]: { | |
| type: BlockEnum.Tool, | |
| title: '', | |
| desc: '', | |
| ...ToolDefault.defaultValue, | |
| }, | |
| [BlockEnum.DocExtractor]: { | |
| type: BlockEnum.DocExtractor, | |
| title: '', | |
| desc: '', | |
| ...DocExtractorDefault.defaultValue, | |
| }, | |
| [BlockEnum.ListFilter]: { | |
| type: BlockEnum.ListFilter, | |
| title: '', | |
| desc: '', | |
| ...ListFilterDefault.defaultValue, | |
| }, | |
| } | |
| export const MAX_ITERATION_PARALLEL_NUM = 10 | |
| export const MIN_ITERATION_PARALLEL_NUM = 1 | |
| export const DEFAULT_ITER_TIMES = 1 | |
| export const NODE_WIDTH = 240 | |
| export const X_OFFSET = 60 | |
| export const NODE_WIDTH_X_OFFSET = NODE_WIDTH + X_OFFSET | |
| export const Y_OFFSET = 39 | |
| export const MAX_TREE_DEPTH = 50 | |
| export const START_INITIAL_POSITION = { x: 80, y: 282 } | |
| export const AUTO_LAYOUT_OFFSET = { | |
| x: -42, | |
| y: 243, | |
| } | |
| export const ITERATION_NODE_Z_INDEX = 1 | |
| export const ITERATION_CHILDREN_Z_INDEX = 1002 | |
| export const ITERATION_PADDING = { | |
| top: 65, | |
| right: 16, | |
| bottom: 20, | |
| left: 16, | |
| } | |
| export const PARALLEL_LIMIT = 10 | |
| export const PARALLEL_DEPTH_LIMIT = 3 | |
| export const RETRIEVAL_OUTPUT_STRUCT = `{ | |
| "content": "", | |
| "title": "", | |
| "url": "", | |
| "icon": "", | |
| "metadata": { | |
| "dataset_id": "", | |
| "dataset_name": "", | |
| "document_id": [], | |
| "document_name": "", | |
| "document_data_source_type": "", | |
| "segment_id": "", | |
| "segment_position": "", | |
| "segment_word_count": "", | |
| "segment_hit_count": "", | |
| "segment_index_node_hash": "", | |
| "score": "" | |
| } | |
| }` | |
| export const SUPPORT_OUTPUT_VARS_NODE = [ | |
| BlockEnum.Start, BlockEnum.LLM, BlockEnum.KnowledgeRetrieval, BlockEnum.Code, BlockEnum.TemplateTransform, | |
| BlockEnum.HttpRequest, BlockEnum.Tool, BlockEnum.VariableAssigner, BlockEnum.VariableAggregator, BlockEnum.QuestionClassifier, | |
| BlockEnum.ParameterExtractor, BlockEnum.Iteration, | |
| BlockEnum.DocExtractor, BlockEnum.ListFilter, | |
| ] | |
| export const LLM_OUTPUT_STRUCT: Var[] = [ | |
| { | |
| variable: 'text', | |
| type: VarType.string, | |
| }, | |
| ] | |
| export const KNOWLEDGE_RETRIEVAL_OUTPUT_STRUCT: Var[] = [ | |
| { | |
| variable: 'result', | |
| type: VarType.arrayObject, | |
| }, | |
| ] | |
| export const TEMPLATE_TRANSFORM_OUTPUT_STRUCT: Var[] = [ | |
| { | |
| variable: 'output', | |
| type: VarType.string, | |
| }, | |
| ] | |
| export const QUESTION_CLASSIFIER_OUTPUT_STRUCT = [ | |
| { | |
| variable: 'class_name', | |
| type: VarType.string, | |
| }, | |
| ] | |
| export const HTTP_REQUEST_OUTPUT_STRUCT: Var[] = [ | |
| { | |
| variable: 'body', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'status_code', | |
| type: VarType.number, | |
| }, | |
| { | |
| variable: 'headers', | |
| type: VarType.object, | |
| }, | |
| { | |
| variable: 'files', | |
| type: VarType.arrayFile, | |
| }, | |
| ] | |
| export const TOOL_OUTPUT_STRUCT: Var[] = [ | |
| { | |
| variable: 'text', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'files', | |
| type: VarType.arrayFile, | |
| }, | |
| { | |
| variable: 'json', | |
| type: VarType.arrayObject, | |
| }, | |
| ] | |
| export const PARAMETER_EXTRACTOR_COMMON_STRUCT: Var[] = [ | |
| { | |
| variable: '__is_success', | |
| type: VarType.number, | |
| }, | |
| { | |
| variable: '__reason', | |
| type: VarType.string, | |
| }, | |
| ] | |
| export const FILE_STRUCT: Var[] = [ | |
| { | |
| variable: 'name', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'size', | |
| type: VarType.number, | |
| }, | |
| { | |
| variable: 'type', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'extension', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'mime_type', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'transfer_method', | |
| type: VarType.string, | |
| }, | |
| { | |
| variable: 'url', | |
| type: VarType.string, | |
| }, | |
| ] | |
| export const DEFAULT_FILE_UPLOAD_SETTING = { | |
| allowed_file_upload_methods: ['local_file', 'remote_url'], | |
| max_length: 5, | |
| allowed_file_types: ['image'], | |
| allowed_file_extensions: [], | |
| } | |
| export const WORKFLOW_DATA_UPDATE = 'WORKFLOW_DATA_UPDATE' | |
| export const CUSTOM_NODE = 'custom' | |
| export const CUSTOM_EDGE = 'custom' | |
| export const DSL_EXPORT_CHECK = 'DSL_EXPORT_CHECK' | |