diff --git a/api/core/workflow/nodes/agent/agent_node.py b/api/core/workflow/nodes/agent/agent_node.py index e5527b7294..7cfcc30e7a 100644 --- a/api/core/workflow/nodes/agent/agent_node.py +++ b/api/core/workflow/nodes/agent/agent_node.py @@ -65,7 +65,7 @@ class AgentNode(BaseNode): node_data: AgentNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = AgentNodeData(**data) + self.node_data = AgentNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -365,7 +365,7 @@ class AgentNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = AgentNodeData(**node_data) + typed_node_data = AgentNodeData.model_validate(node_data) result: dict[str, Any] = {} for parameter_name in typed_node_data.agent_parameters: diff --git a/api/core/workflow/nodes/answer/answer_node.py b/api/core/workflow/nodes/answer/answer_node.py index 63dfb2d5db..1e510befa6 100644 --- a/api/core/workflow/nodes/answer/answer_node.py +++ b/api/core/workflow/nodes/answer/answer_node.py @@ -22,7 +22,7 @@ class AnswerNode(BaseNode): node_data: AnswerNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = AnswerNodeData(**data) + self.node_data = AnswerNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -67,15 +67,8 @@ class AnswerNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = AnswerNodeData(**node_data) + typed_node_data = AnswerNodeData.model_validate(node_data) - """ - Extract variable selector to variable mapping - :param graph_config: graph config - :param node_id: node id - :param node_data: node data - :return: - """ variable_template_parser = VariableTemplateParser(template=typed_node_data.answer) variable_selectors = variable_template_parser.extract_variable_selectors() diff --git a/api/core/workflow/nodes/code/code_node.py b/api/core/workflow/nodes/code/code_node.py index ad57a13bf8..c9eac98d39 100644 --- a/api/core/workflow/nodes/code/code_node.py +++ b/api/core/workflow/nodes/code/code_node.py @@ -27,7 +27,7 @@ class CodeNode(BaseNode): node_data: CodeNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = CodeNodeData(**data) + self.node_data = CodeNodeData.model_validate(data) @classmethod def get_default_config(cls, filters: Optional[dict] = None) -> dict: @@ -341,15 +341,8 @@ class CodeNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = CodeNodeData(**node_data) + typed_node_data = CodeNodeData.model_validate(node_data) - """ - Extract variable selector to variable mapping - :param graph_config: graph config - :param node_id: node id - :param node_data: node data - :return: - """ return { node_id + "." + variable_selector.variable: variable_selector.value_selector for variable_selector in typed_node_data.variables diff --git a/api/core/workflow/nodes/document_extractor/node.py b/api/core/workflow/nodes/document_extractor/node.py index f0e188c528..bb79b6b914 100644 --- a/api/core/workflow/nodes/document_extractor/node.py +++ b/api/core/workflow/nodes/document_extractor/node.py @@ -47,7 +47,7 @@ class DocumentExtractorNode(BaseNode): node_data: DocumentExtractorNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = DocumentExtractorNodeData(**data) + self.node_data = DocumentExtractorNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -104,7 +104,7 @@ class DocumentExtractorNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = DocumentExtractorNodeData(**node_data) + typed_node_data = DocumentExtractorNodeData.model_validate(node_data) return {node_id + ".files": typed_node_data.variable_selector} diff --git a/api/core/workflow/nodes/http_request/node.py b/api/core/workflow/nodes/http_request/node.py index d4917b79c1..85320b58f2 100644 --- a/api/core/workflow/nodes/http_request/node.py +++ b/api/core/workflow/nodes/http_request/node.py @@ -38,7 +38,7 @@ class HttpRequestNode(BaseNode): node_data: HttpRequestNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = HttpRequestNodeData(**data) + self.node_data = HttpRequestNodeData.model_validate(data) @classmethod def get_default_config(cls, filters: Optional[dict[str, Any]] = None) -> dict: @@ -138,7 +138,7 @@ class HttpRequestNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = HttpRequestNodeData(**node_data) + typed_node_data = HttpRequestNodeData.model_validate(node_data) selectors: list[VariableSelector] = [] selectors += variable_template_parser.extract_selectors_from_template(typed_node_data.url) diff --git a/api/core/workflow/nodes/if_else/if_else_node.py b/api/core/workflow/nodes/if_else/if_else_node.py index 91d98188ab..c417b88982 100644 --- a/api/core/workflow/nodes/if_else/if_else_node.py +++ b/api/core/workflow/nodes/if_else/if_else_node.py @@ -19,7 +19,7 @@ class IfElseNode(BaseNode): node_data: IfElseNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = IfElseNodeData(**data) + self.node_data = IfElseNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -105,7 +105,7 @@ class IfElseNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = IfElseNodeData(**node_data) + typed_node_data = IfElseNodeData.model_validate(node_data) var_mapping: dict[str, list[str]] = {} for case in typed_node_data.cases or []: diff --git a/api/core/workflow/nodes/iteration/iteration_node.py b/api/core/workflow/nodes/iteration/iteration_node.py index b41b6c5de3..f9479d559d 100644 --- a/api/core/workflow/nodes/iteration/iteration_node.py +++ b/api/core/workflow/nodes/iteration/iteration_node.py @@ -66,7 +66,7 @@ class IterationNode(BaseNode): node_data: IterationNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = IterationNodeData(**data) + self.node_data = IterationNodeData.model_validate(data) @classmethod def get_default_config(cls, filters: Optional[dict] = None) -> dict: @@ -312,7 +312,7 @@ class IterationNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = IterationNodeData(**node_data) + typed_node_data = IterationNodeData.model_validate(node_data) variable_mapping: dict[str, Sequence[str]] = { f"{node_id}.input_selector": typed_node_data.iterator_selector, diff --git a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py index e977314b34..197afd2252 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -125,7 +125,7 @@ class KnowledgeRetrievalNode(BaseNode): self._llm_file_saver = llm_file_saver def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = KnowledgeRetrievalNodeData(**data) + self.node_data = KnowledgeRetrievalNodeData.model_validate(data) @classmethod def version(cls): @@ -622,7 +622,7 @@ class KnowledgeRetrievalNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = KnowledgeRetrievalNodeData(**node_data) + typed_node_data = KnowledgeRetrievalNodeData.model_validate(node_data) variable_mapping = {} variable_mapping[node_id + ".query"] = typed_node_data.query_variable_selector diff --git a/api/core/workflow/nodes/llm/node.py b/api/core/workflow/nodes/llm/node.py index 8175e73525..4e59c33a2e 100644 --- a/api/core/workflow/nodes/llm/node.py +++ b/api/core/workflow/nodes/llm/node.py @@ -138,7 +138,7 @@ class LLMNode(BaseNode): self._llm_file_saver = llm_file_saver def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = LLMNodeData(**data) + self.node_data = LLMNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -791,7 +791,7 @@ class LLMNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = LLMNodeData(**node_data) + typed_node_data = LLMNodeData.model_validate(node_data) prompt_template = typed_node_data.prompt_template variable_selectors = [] diff --git a/api/core/workflow/nodes/loop/loop_node.py b/api/core/workflow/nodes/loop/loop_node.py index e12e4a3a3e..4d76eb0d66 100644 --- a/api/core/workflow/nodes/loop/loop_node.py +++ b/api/core/workflow/nodes/loop/loop_node.py @@ -53,7 +53,7 @@ class LoopNode(BaseNode): node_data: LoopNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = LoopNodeData(**data) + self.node_data = LoopNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -445,7 +445,7 @@ class LoopNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = LoopNodeData(**node_data) + typed_node_data = LoopNodeData.model_validate(node_data) variable_mapping = {} diff --git a/api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py b/api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py index 240c7c4d76..0b18e5e4f7 100644 --- a/api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py +++ b/api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py @@ -96,7 +96,7 @@ class ParameterExtractorNode(BaseNode): node_data: ParameterExtractorNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = ParameterExtractorNodeData(**data) + self.node_data = ParameterExtractorNodeData.model_validate(data) _model_instance: Optional[ModelInstance] = None _model_config: Optional[ModelConfigWithCredentialsEntity] = None @@ -833,7 +833,7 @@ class ParameterExtractorNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = ParameterExtractorNodeData(**node_data) + typed_node_data = ParameterExtractorNodeData.model_validate(node_data) variable_mapping: dict[str, Sequence[str]] = {"query": typed_node_data.query} diff --git a/api/core/workflow/nodes/question_classifier/question_classifier_node.py b/api/core/workflow/nodes/question_classifier/question_classifier_node.py index 318bb5969d..318b3c0421 100644 --- a/api/core/workflow/nodes/question_classifier/question_classifier_node.py +++ b/api/core/workflow/nodes/question_classifier/question_classifier_node.py @@ -82,7 +82,7 @@ class QuestionClassifierNode(BaseNode): self._llm_file_saver = llm_file_saver def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = QuestionClassifierNodeData(**data) + self.node_data = QuestionClassifierNodeData.model_validate(data) @classmethod def version(cls): @@ -239,7 +239,7 @@ class QuestionClassifierNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = QuestionClassifierNodeData(**node_data) + typed_node_data = QuestionClassifierNodeData.model_validate(node_data) variable_mapping = {"query": typed_node_data.query_variable_selector} variable_selectors = [] diff --git a/api/core/workflow/nodes/template_transform/template_transform_node.py b/api/core/workflow/nodes/template_transform/template_transform_node.py index 7a25c8a588..f2ebf33d9a 100644 --- a/api/core/workflow/nodes/template_transform/template_transform_node.py +++ b/api/core/workflow/nodes/template_transform/template_transform_node.py @@ -18,7 +18,7 @@ class TemplateTransformNode(BaseNode): node_data: TemplateTransformNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = TemplateTransformNodeData(**data) + self.node_data = TemplateTransformNodeData.model_validate(data) @classmethod def get_default_config(cls, filters: Optional[dict] = None) -> dict: @@ -67,7 +67,7 @@ class TemplateTransformNode(BaseNode): cls, *, graph_config: Mapping[str, Any], node_id: str, node_data: Mapping[str, Any] ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = TemplateTransformNodeData(**node_data) + typed_node_data = TemplateTransformNodeData.model_validate(node_data) return { node_id + "." + variable_selector.variable: variable_selector.value_selector diff --git a/api/core/workflow/nodes/tool/tool_node.py b/api/core/workflow/nodes/tool/tool_node.py index ce10ec6452..3dc70d909b 100644 --- a/api/core/workflow/nodes/tool/tool_node.py +++ b/api/core/workflow/nodes/tool/tool_node.py @@ -45,7 +45,7 @@ class ToolNode(BaseNode): node_data: ToolNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = ToolNodeData(**data) + self.node_data = ToolNodeData.model_validate(data) @classmethod def version(cls) -> str: @@ -383,7 +383,7 @@ class ToolNode(BaseNode): :return: """ # Create typed NodeData from dict - typed_node_data = ToolNodeData(**node_data) + typed_node_data = ToolNodeData.model_validate(node_data) result = {} for parameter_name in typed_node_data.tool_parameters: diff --git a/api/core/workflow/nodes/variable_assigner/v1/node.py b/api/core/workflow/nodes/variable_assigner/v1/node.py index 809018519e..5433ff939e 100644 --- a/api/core/workflow/nodes/variable_assigner/v1/node.py +++ b/api/core/workflow/nodes/variable_assigner/v1/node.py @@ -29,7 +29,7 @@ class VariableAssignerNode(BaseNode): node_data: VariableAssignerData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = VariableAssignerData(**data) + self.node_data = VariableAssignerData.model_validate(data) def __init__( self, @@ -66,7 +66,7 @@ class VariableAssignerNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = VariableAssignerData(**node_data) + typed_node_data = VariableAssignerData.model_validate(node_data) mapping = {} assigned_variable_node_id = typed_node_data.assigned_variable_selector[0] diff --git a/api/core/workflow/nodes/variable_assigner/v2/node.py b/api/core/workflow/nodes/variable_assigner/v2/node.py index 8f18924f88..82c39d13dc 100644 --- a/api/core/workflow/nodes/variable_assigner/v2/node.py +++ b/api/core/workflow/nodes/variable_assigner/v2/node.py @@ -60,7 +60,7 @@ class VariableAssignerNode(BaseNode): node_data: VariableAssignerNodeData def init_node_data(self, data: Mapping[str, Any]) -> None: - self.node_data = VariableAssignerNodeData(**data) + self.node_data = VariableAssignerNodeData.model_validate(data) def _conv_var_updater_factory(self) -> ConversationVariableUpdater: return conversation_variable_updater_factory() @@ -78,7 +78,7 @@ class VariableAssignerNode(BaseNode): node_data: Mapping[str, Any], ) -> Mapping[str, Sequence[str]]: # Create typed NodeData from dict - typed_node_data = VariableAssignerNodeData(**node_data) + typed_node_data = VariableAssignerNodeData.model_validate(node_data) var_mapping: dict[str, Sequence[str]] = {} for item in typed_node_data.items: