2025-09-18 12:49:10 +08:00
|
|
|
from enum import Enum, StrEnum
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NodeState(Enum):
|
|
|
|
|
"""State of a node or edge during workflow execution."""
|
|
|
|
|
|
|
|
|
|
UNKNOWN = "unknown"
|
|
|
|
|
TAKEN = "taken"
|
|
|
|
|
SKIPPED = "skipped"
|
2024-08-15 10:53:05 +08:00
|
|
|
|
|
|
|
|
|
2024-11-24 13:28:46 +08:00
|
|
|
class SystemVariableKey(StrEnum):
|
2024-08-15 10:53:05 +08:00
|
|
|
"""
|
|
|
|
|
System Variables.
|
|
|
|
|
"""
|
|
|
|
|
|
2024-08-20 17:52:06 +08:00
|
|
|
QUERY = "query"
|
|
|
|
|
FILES = "files"
|
|
|
|
|
CONVERSATION_ID = "conversation_id"
|
|
|
|
|
USER_ID = "user_id"
|
|
|
|
|
DIALOGUE_COUNT = "dialogue_count"
|
2024-10-10 11:15:52 +08:00
|
|
|
APP_ID = "app_id"
|
|
|
|
|
WORKFLOW_ID = "workflow_id"
|
2025-05-30 11:05:08 +08:00
|
|
|
WORKFLOW_EXECUTION_ID = "workflow_run_id"
|
2025-09-18 12:49:10 +08:00
|
|
|
# RAG Pipeline
|
|
|
|
|
DOCUMENT_ID = "document_id"
|
|
|
|
|
ORIGINAL_DOCUMENT_ID = "original_document_id"
|
|
|
|
|
BATCH = "batch"
|
|
|
|
|
DATASET_ID = "dataset_id"
|
|
|
|
|
DATASOURCE_TYPE = "datasource_type"
|
|
|
|
|
DATASOURCE_INFO = "datasource_info"
|
|
|
|
|
INVOKE_FROM = "invoke_from"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NodeType(StrEnum):
|
|
|
|
|
START = "start"
|
|
|
|
|
END = "end"
|
|
|
|
|
ANSWER = "answer"
|
|
|
|
|
LLM = "llm"
|
|
|
|
|
KNOWLEDGE_RETRIEVAL = "knowledge-retrieval"
|
|
|
|
|
KNOWLEDGE_INDEX = "knowledge-index"
|
|
|
|
|
IF_ELSE = "if-else"
|
|
|
|
|
CODE = "code"
|
|
|
|
|
TEMPLATE_TRANSFORM = "template-transform"
|
|
|
|
|
QUESTION_CLASSIFIER = "question-classifier"
|
|
|
|
|
HTTP_REQUEST = "http-request"
|
|
|
|
|
TOOL = "tool"
|
|
|
|
|
DATASOURCE = "datasource"
|
|
|
|
|
VARIABLE_AGGREGATOR = "variable-aggregator"
|
|
|
|
|
LEGACY_VARIABLE_AGGREGATOR = "variable-assigner" # TODO: Merge this into VARIABLE_AGGREGATOR in the database.
|
|
|
|
|
LOOP = "loop"
|
|
|
|
|
LOOP_START = "loop-start"
|
|
|
|
|
LOOP_END = "loop-end"
|
|
|
|
|
ITERATION = "iteration"
|
|
|
|
|
ITERATION_START = "iteration-start" # Fake start node for iteration.
|
|
|
|
|
PARAMETER_EXTRACTOR = "parameter-extractor"
|
|
|
|
|
VARIABLE_ASSIGNER = "assigner"
|
|
|
|
|
DOCUMENT_EXTRACTOR = "document-extractor"
|
|
|
|
|
LIST_OPERATOR = "list-operator"
|
|
|
|
|
AGENT = "agent"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NodeExecutionType(StrEnum):
|
|
|
|
|
"""Node execution type classification."""
|
|
|
|
|
|
|
|
|
|
EXECUTABLE = "executable" # Regular nodes that execute and produce outputs
|
|
|
|
|
RESPONSE = "response" # Response nodes that stream outputs (Answer, End)
|
|
|
|
|
BRANCH = "branch" # Nodes that can choose different branches (if-else, question-classifier)
|
|
|
|
|
CONTAINER = "container" # Container nodes that manage subgraphs (iteration, loop, graph)
|
|
|
|
|
ROOT = "root" # Nodes that can serve as execution entry points
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ErrorStrategy(StrEnum):
|
|
|
|
|
FAIL_BRANCH = "fail-branch"
|
|
|
|
|
DEFAULT_VALUE = "default-value"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FailBranchSourceHandle(StrEnum):
|
|
|
|
|
FAILED = "fail-branch"
|
|
|
|
|
SUCCESS = "success-branch"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkflowType(StrEnum):
|
|
|
|
|
"""
|
|
|
|
|
Workflow Type Enum for domain layer
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
WORKFLOW = "workflow"
|
|
|
|
|
CHAT = "chat"
|
|
|
|
|
RAG_PIPELINE = "rag-pipeline"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkflowExecutionStatus(StrEnum):
|
|
|
|
|
RUNNING = "running"
|
|
|
|
|
SUCCEEDED = "succeeded"
|
|
|
|
|
FAILED = "failed"
|
|
|
|
|
STOPPED = "stopped"
|
|
|
|
|
PARTIAL_SUCCEEDED = "partial-succeeded"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkflowNodeExecutionMetadataKey(StrEnum):
|
|
|
|
|
"""
|
|
|
|
|
Node Run Metadata Key.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
TOTAL_TOKENS = "total_tokens"
|
|
|
|
|
TOTAL_PRICE = "total_price"
|
|
|
|
|
CURRENCY = "currency"
|
|
|
|
|
TOOL_INFO = "tool_info"
|
|
|
|
|
AGENT_LOG = "agent_log"
|
|
|
|
|
ITERATION_ID = "iteration_id"
|
|
|
|
|
ITERATION_INDEX = "iteration_index"
|
|
|
|
|
LOOP_ID = "loop_id"
|
|
|
|
|
LOOP_INDEX = "loop_index"
|
|
|
|
|
PARALLEL_ID = "parallel_id"
|
|
|
|
|
PARALLEL_START_NODE_ID = "parallel_start_node_id"
|
|
|
|
|
PARENT_PARALLEL_ID = "parent_parallel_id"
|
|
|
|
|
PARENT_PARALLEL_START_NODE_ID = "parent_parallel_start_node_id"
|
|
|
|
|
PARALLEL_MODE_RUN_ID = "parallel_mode_run_id"
|
|
|
|
|
ITERATION_DURATION_MAP = "iteration_duration_map" # single iteration duration if iteration node runs
|
|
|
|
|
LOOP_DURATION_MAP = "loop_duration_map" # single loop duration if loop node runs
|
|
|
|
|
ERROR_STRATEGY = "error_strategy" # node in continue on error mode return the field
|
|
|
|
|
LOOP_VARIABLE_MAP = "loop_variable_map" # single loop variable output
|
|
|
|
|
DATASOURCE_INFO = "datasource_info"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkflowNodeExecutionStatus(StrEnum):
|
|
|
|
|
PENDING = "pending" # Node is scheduled but not yet executing
|
|
|
|
|
RUNNING = "running"
|
|
|
|
|
SUCCEEDED = "succeeded"
|
|
|
|
|
FAILED = "failed"
|
|
|
|
|
EXCEPTION = "exception"
|
|
|
|
|
STOPPED = "stopped"
|
|
|
|
|
PAUSED = "paused"
|
|
|
|
|
|
|
|
|
|
# Legacy statuses - kept for backward compatibility
|
|
|
|
|
RETRY = "retry" # Legacy: replaced by retry mechanism in error handling
|