| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | from collections.abc import Mappingfrom enum import Enumfrom typing import Any, Optionalfrom pydantic import BaseModelfrom core.model_runtime.entities.llm_entities import LLMUsagefrom models.workflow import WorkflowNodeExecutionStatusclass NodeRunMetadataKey(str, Enum):    """    Node Run Metadata Key.    """    TOTAL_TOKENS = "total_tokens"    TOTAL_PRICE = "total_price"    CURRENCY = "currency"    TOOL_INFO = "tool_info"    ITERATION_ID = "iteration_id"    ITERATION_INDEX = "iteration_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"class NodeRunResult(BaseModel):    """    Node Run Result.    """    status: WorkflowNodeExecutionStatus = WorkflowNodeExecutionStatus.RUNNING    inputs: Optional[Mapping[str, Any]] = None  # node inputs    process_data: Optional[dict[str, Any]] = None  # process data    outputs: Optional[dict[str, Any]] = None  # node outputs    metadata: Optional[dict[NodeRunMetadataKey, Any]] = None  # node metadata    llm_usage: Optional[LLMUsage] = None  # llm usage    edge_source_handle: Optional[str] = None  # source handle id of node with multiple branches    error: Optional[str] = None  # error message if status is failed
 |