| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | from enum import Enumfrom typing import Any, Literal, Optional, Unionfrom pydantic import BaseModelclass AgentToolEntity(BaseModel):    """    Agent Tool Entity.    """    provider_type: Literal["builtin", "api", "workflow"]    provider_id: str    tool_name: str    tool_parameters: dict[str, Any] = {}class AgentPromptEntity(BaseModel):    """    Agent Prompt Entity.    """    first_prompt: str    next_iteration: strclass AgentScratchpadUnit(BaseModel):    """    Agent First Prompt Entity.    """    class Action(BaseModel):        """        Action Entity.        """        action_name: str        action_input: Union[dict, str]        def to_dict(self) -> dict:            """            Convert to dictionary.            """            return {                'action': self.action_name,                'action_input': self.action_input,            }    agent_response: Optional[str] = None    thought: Optional[str] = None    action_str: Optional[str] = None    observation: Optional[str] = None    action: Optional[Action] = None    def is_final(self) -> bool:        """        Check if the scratchpad unit is final.        """        return self.action is None or (            'final' in self.action.action_name.lower() and             'answer' in self.action.action_name.lower()        )class AgentEntity(BaseModel):    """    Agent Entity.    """    class Strategy(Enum):        """        Agent Strategy.        """        CHAIN_OF_THOUGHT = 'chain-of-thought'        FUNCTION_CALLING = 'function-calling'    provider: str    model: str    strategy: Strategy    prompt: Optional[AgentPromptEntity] = None    tools: list[AgentToolEntity] = None    max_iteration: int = 5
 |