refactor(workflow): unify all enum classes in one file and restructure workflow node type definitions
This commit is contained in:
@@ -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"
|
||||
]
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__)
|
||||
|
||||
|
||||
@@ -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:
|
||||
"""创建节点实例
|
||||
|
||||
|
||||
Reference in New Issue
Block a user