feat/enhance the multi-modal support (#8818)

This commit is contained in:
-LAN-
2024-10-21 10:43:49 +08:00
committed by GitHub
parent 7a1d6fe509
commit e61752bd3a
267 changed files with 6263 additions and 3523 deletions

View File

@@ -0,0 +1,3 @@
from .code_node import CodeNode
__all__ = ["CodeNode"]

View File

@@ -1,18 +1,19 @@
from collections.abc import Mapping, Sequence
from typing import Any, Optional, Union, cast
from typing import Any, Optional, Union
from configs import dify_config
from core.helper.code_executor.code_executor import CodeExecutionError, CodeExecutor, CodeLanguage
from core.helper.code_executor.code_node_provider import CodeNodeProvider
from core.helper.code_executor.javascript.javascript_code_provider import JavascriptCodeProvider
from core.helper.code_executor.python3.python3_code_provider import Python3CodeProvider
from core.workflow.entities.node_entities import NodeRunResult, NodeType
from core.workflow.nodes.base_node import BaseNode
from core.workflow.entities.node_entities import NodeRunResult
from core.workflow.nodes.base import BaseNode
from core.workflow.nodes.code.entities import CodeNodeData
from core.workflow.nodes.enums import NodeType
from models.workflow import WorkflowNodeExecutionStatus
class CodeNode(BaseNode):
class CodeNode(BaseNode[CodeNodeData]):
_node_data_cls = CodeNodeData
_node_type = NodeType.CODE
@@ -33,20 +34,13 @@ class CodeNode(BaseNode):
return code_provider.get_default_config()
def _run(self) -> NodeRunResult:
"""
Run code
:return:
"""
node_data = self.node_data
node_data = cast(CodeNodeData, node_data)
# Get code language
code_language = node_data.code_language
code = node_data.code
code_language = self.node_data.code_language
code = self.node_data.code
# Get variables
variables = {}
for variable_selector in node_data.variables:
for variable_selector in self.node_data.variables:
variable = variable_selector.variable
value = self.graph_runtime_state.variable_pool.get_any(variable_selector.value_selector)
@@ -60,7 +54,7 @@ class CodeNode(BaseNode):
)
# Transform result
result = self._transform_result(result, node_data.outputs)
result = self._transform_result(result, self.node_data.outputs)
except (CodeExecutionError, ValueError) as e:
return NodeRunResult(status=WorkflowNodeExecutionStatus.FAILED, inputs=variables, error=str(e))
@@ -316,7 +310,11 @@ class CodeNode(BaseNode):
@classmethod
def _extract_variable_selector_to_variable_mapping(
cls, graph_config: Mapping[str, Any], node_id: str, node_data: CodeNodeData
cls,
*,
graph_config: Mapping[str, Any],
node_id: str,
node_data: CodeNodeData,
) -> Mapping[str, Sequence[str]]:
"""
Extract variable selector to variable mapping

View File

@@ -3,8 +3,8 @@ from typing import Literal, Optional
from pydantic import BaseModel
from core.helper.code_executor.code_executor import CodeLanguage
from core.workflow.entities.base_node_data_entities import BaseNodeData
from core.workflow.entities.variable_entities import VariableSelector
from core.workflow.nodes.base import BaseNodeData
class CodeNodeData(BaseNodeData):