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.agent import AgentNode
|
||||||
from app.core.workflow.nodes.transform import TransformNode
|
from app.core.workflow.nodes.base_node import BaseNode, WorkflowState
|
||||||
from app.core.workflow.nodes.start import StartNode
|
|
||||||
from app.core.workflow.nodes.end import EndNode
|
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__ = [
|
__all__ = [
|
||||||
"BaseNode",
|
"BaseNode",
|
||||||
@@ -18,7 +19,9 @@ __all__ = [
|
|||||||
"LLMNode",
|
"LLMNode",
|
||||||
"AgentNode",
|
"AgentNode",
|
||||||
"TransformNode",
|
"TransformNode",
|
||||||
|
"IfElseNode",
|
||||||
"StartNode",
|
"StartNode",
|
||||||
"EndNode",
|
"EndNode",
|
||||||
"NodeFactory",
|
"NodeFactory",
|
||||||
|
"WorkflowNode"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
from enum import StrEnum
|
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):
|
class NodeType(StrEnum):
|
||||||
@@ -25,12 +16,21 @@ class NodeType(StrEnum):
|
|||||||
AGENT = "agent"
|
AGENT = "agent"
|
||||||
|
|
||||||
|
|
||||||
WorkflowNode = Union[
|
class ComparisonOperator(StrEnum):
|
||||||
BaseNode,
|
EMPTY = "empty"
|
||||||
StartNode,
|
NOT_EMPTY = "not_empty"
|
||||||
EndNode,
|
CONTAINS = "contains"
|
||||||
LLMNode,
|
NOT_CONTAINS = "not_contains"
|
||||||
IfElseNode,
|
START_WITH = "startwith"
|
||||||
AgentNode,
|
END_WITH = "endwith"
|
||||||
TransformNode,
|
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"""
|
"""Condition Configuration"""
|
||||||
from pydantic import Field, BaseModel, field_validator
|
from pydantic import Field, BaseModel, field_validator
|
||||||
from enum import StrEnum
|
|
||||||
from app.core.workflow.nodes.base_config import BaseNodeConfig
|
from app.core.workflow.nodes.base_config import BaseNodeConfig
|
||||||
|
from app.core.workflow.nodes.enums import ComparisonOperator, LogicOperator
|
||||||
|
|
||||||
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"
|
|
||||||
|
|
||||||
|
|
||||||
class ConditionDetail(BaseModel):
|
class ConditionDetail(BaseModel):
|
||||||
@@ -77,7 +58,7 @@ class IfElseNodeConfig(BaseNodeConfig):
|
|||||||
{
|
{
|
||||||
"logical_operator": "and",
|
"logical_operator": "and",
|
||||||
"conditions": [
|
"conditions": [
|
||||||
{
|
[
|
||||||
{
|
{
|
||||||
"left": "node.userinput.message",
|
"left": "node.userinput.message",
|
||||||
"comparison_operator": "eq",
|
"comparison_operator": "eq",
|
||||||
@@ -88,14 +69,14 @@ class IfElseNodeConfig(BaseNodeConfig):
|
|||||||
"comparison_operator": "eq",
|
"comparison_operator": "eq",
|
||||||
"right": "True"
|
"right": "True"
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
# CASE1 / ELIF Branch
|
# CASE1 / ELIF Branch
|
||||||
{
|
{
|
||||||
"logical_operator": "or",
|
"logical_operator": "or",
|
||||||
"conditions": [
|
"conditions": [
|
||||||
{
|
[
|
||||||
{
|
{
|
||||||
"left": "node.userinput.test",
|
"left": "node.userinput.test",
|
||||||
"comparison_operator": "eq",
|
"comparison_operator": "eq",
|
||||||
@@ -106,7 +87,7 @@ class IfElseNodeConfig(BaseNodeConfig):
|
|||||||
"comparison_operator": "contains",
|
"comparison_operator": "contains",
|
||||||
"right": "'123'"
|
"right": "'123'"
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
# CASE3 / ELSE Branch
|
# CASE3 / ELSE Branch
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from simpleeval import NameNotDefined, InvalidExpression
|
|
||||||
|
|
||||||
from app.core.workflow.nodes import BaseNode, WorkflowState
|
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 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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -5,19 +5,29 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
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.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.if_else import IfElseNode
|
||||||
from app.core.workflow.nodes.llm import LLMNode
|
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.start import StartNode
|
||||||
from app.core.workflow.nodes.end import EndNode
|
from app.core.workflow.nodes.transform import TransformNode
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
WorkflowNode = Union[
|
||||||
|
BaseNode,
|
||||||
|
StartNode,
|
||||||
|
EndNode,
|
||||||
|
LLMNode,
|
||||||
|
IfElseNode,
|
||||||
|
AgentNode,
|
||||||
|
TransformNode,
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class NodeFactory:
|
class NodeFactory:
|
||||||
"""节点工厂
|
"""节点工厂
|
||||||
@@ -54,9 +64,9 @@ class NodeFactory:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_node(
|
def create_node(
|
||||||
cls,
|
cls,
|
||||||
node_config: dict[str, Any],
|
node_config: dict[str, Any],
|
||||||
workflow_config: dict[str, Any]
|
workflow_config: dict[str, Any]
|
||||||
) -> WorkflowNode | None:
|
) -> WorkflowNode | None:
|
||||||
"""创建节点实例
|
"""创建节点实例
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user