"""Choice Call的输入和输出"""
import uuid
from enum import Enum
from pydantic import Field
from apps.scheduler.call.core import DataBase
from apps.schemas.parameters import (
BoolOperate,
DictOperate,
ListOperate,
NumberOperate,
StringOperate,
Type,
)
class Logic(str, Enum):
"""Choice 工具支持的逻辑运算符"""
AND = "and"
OR = "or"
class Value(DataBase):
"""值的结构"""
step_id: str | None = Field(description="步骤id", default=None)
type: Type | None = Field(description="值的类型", default=None)
name: str | None = Field(description="值的名称", default=None)
value: str | float | int | bool | list | dict | None = Field(description="值", default=None)
class Condition(DataBase):
"""单个条件"""
left: Value = Field(description="左值", default=Value())
right: Value = Field(description="右值", default=Value())
operate: NumberOperate | StringOperate | ListOperate | BoolOperate | DictOperate | None = Field(
description="运算符", default=None)
id: str = Field(description="条件ID", default_factory=lambda: str(uuid.uuid4()))
class ChoiceBranch(DataBase):
"""子分支"""
branch_id: str = Field(description="分支ID", default_factory=lambda: str(uuid.uuid4()))
logic: Logic = Field(description="逻辑运算符", default=Logic.AND)
conditions: list[Condition] = Field(description="条件列表", default=[])
is_default: bool = Field(description="是否为默认分支", default=True)
class ChoiceInput(DataBase):
"""Choice Call的输入"""
choices: list[ChoiceBranch] = Field(description="分支", default=[])
class ChoiceOutput(DataBase):
"""Choice Call的输出"""
branch_id: str = Field(description="分支ID", default="")