refactor(workflow): unify all enum classes in one file and restructure workflow node type definitions

This commit is contained in:
mengyonghao
2025-12-19 15:43:56 +08:00
parent 0ccb4a095a
commit 39de537c14
5 changed files with 52 additions and 59 deletions

View File

@@ -4,13 +4,14 @@
提供各种类型的节点实现,用于工作流执行。
"""
from app.core.workflow.nodes.base_node import BaseNode, WorkflowState
from app.core.workflow.nodes.llm import LLMNode
from app.core.workflow.nodes.agent import AgentNode
from app.core.workflow.nodes.transform import TransformNode
from app.core.workflow.nodes.start import StartNode
from app.core.workflow.nodes.base_node import BaseNode, WorkflowState
from app.core.workflow.nodes.end import EndNode
from app.core.workflow.nodes.node_factory import NodeFactory
from app.core.workflow.nodes.if_else import IfElseNode
from app.core.workflow.nodes.llm import LLMNode
from app.core.workflow.nodes.node_factory import NodeFactory, WorkflowNode
from app.core.workflow.nodes.start import StartNode
from app.core.workflow.nodes.transform import TransformNode
__all__ = [
"BaseNode",
@@ -18,7 +19,9 @@ __all__ = [
"LLMNode",
"AgentNode",
"TransformNode",
"IfElseNode",
"StartNode",
"EndNode",
"NodeFactory",
"WorkflowNode"
]

View File

@@ -1,13 +1,4 @@
from enum import StrEnum
from typing import Union
from app.core.workflow.nodes.base_node import BaseNode
from app.core.workflow.nodes.if_else import IfElseNode
from app.core.workflow.nodes.llm import LLMNode
from app.core.workflow.nodes.agent import AgentNode
from app.core.workflow.nodes.transform import TransformNode
from app.core.workflow.nodes.start import StartNode
from app.core.workflow.nodes.end import EndNode
class NodeType(StrEnum):
@@ -25,12 +16,21 @@ class NodeType(StrEnum):
AGENT = "agent"
WorkflowNode = Union[
BaseNode,
StartNode,
EndNode,
LLMNode,
IfElseNode,
AgentNode,
TransformNode,
]
class ComparisonOperator(StrEnum):
EMPTY = "empty"
NOT_EMPTY = "not_empty"
CONTAINS = "contains"
NOT_CONTAINS = "not_contains"
START_WITH = "startwith"
END_WITH = "endwith"
EQ = "eq"
NE = "ne"
LT = "lt"
LE = "le"
GT = "gt"
GE = "ge"
class LogicOperator(StrEnum):
AND = "and"
OR = "or"

View File

@@ -1,27 +1,8 @@
"""Condition Configuration"""
from pydantic import Field, BaseModel, field_validator
from enum import StrEnum
from app.core.workflow.nodes.base_config import BaseNodeConfig
class LogicOperator(StrEnum):
AND = "and"
OR = "or"
class ComparisonOperator(StrEnum):
EMPTY = "empty"
NOT_EMPTY = "not_empty"
CONTAINS = "contains"
NOT_CONTAINS = "not_contains"
START_WITH = "startwith"
END_WITH = "endwith"
EQ = "eq"
NE = "ne"
LT = "lt"
LE = "le"
GT = "gt"
GE = "ge"
from app.core.workflow.nodes.enums import ComparisonOperator, LogicOperator
class ConditionDetail(BaseModel):
@@ -77,7 +58,7 @@ class IfElseNodeConfig(BaseNodeConfig):
{
"logical_operator": "and",
"conditions": [
{
[
{
"left": "node.userinput.message",
"comparison_operator": "eq",
@@ -88,14 +69,14 @@ class IfElseNodeConfig(BaseNodeConfig):
"comparison_operator": "eq",
"right": "True"
}
}
]
]
},
# CASE1 / ELIF Branch
{
"logical_operator": "or",
"conditions": [
{
[
{
"left": "node.userinput.test",
"comparison_operator": "eq",
@@ -106,7 +87,7 @@ class IfElseNodeConfig(BaseNodeConfig):
"comparison_operator": "contains",
"right": "'123'"
}
}
]
]
}
# CASE3 / ELSE Branch

View File

@@ -1,11 +1,10 @@
import logging
from typing import Any
from simpleeval import NameNotDefined, InvalidExpression
from app.core.workflow.nodes import BaseNode, WorkflowState
from app.core.workflow.nodes.enums import ComparisonOperator
from app.core.workflow.nodes.if_else import IfElseNodeConfig
from app.core.workflow.nodes.if_else.config import LogicOperator, ConditionDetail, ComparisonOperator
from app.core.workflow.nodes.if_else.config import ConditionDetail
logger = logging.getLogger(__name__)

View File

@@ -5,19 +5,29 @@
"""
import logging
from typing import Any
from typing import Any, Union
from app.core.workflow.nodes.agent import AgentNode
from app.core.workflow.nodes.base_node import BaseNode
from app.core.workflow.nodes.enums import NodeType, WorkflowNode
from app.core.workflow.nodes.end import EndNode
from app.core.workflow.nodes.enums import NodeType
from app.core.workflow.nodes.if_else import IfElseNode
from app.core.workflow.nodes.llm import LLMNode
from app.core.workflow.nodes.agent import AgentNode
from app.core.workflow.nodes.transform import TransformNode
from app.core.workflow.nodes.start import StartNode
from app.core.workflow.nodes.end import EndNode
from app.core.workflow.nodes.transform import TransformNode
logger = logging.getLogger(__name__)
WorkflowNode = Union[
BaseNode,
StartNode,
EndNode,
LLMNode,
IfElseNode,
AgentNode,
TransformNode,
]
class NodeFactory:
"""节点工厂
@@ -54,9 +64,9 @@ class NodeFactory:
@classmethod
def create_node(
cls,
node_config: dict[str, Any],
workflow_config: dict[str, Any]
cls,
node_config: dict[str, Any],
workflow_config: dict[str, Any]
) -> WorkflowNode | None:
"""创建节点实例