|
from enum import Enum |
|
from typing import Any, Literal, Optional, Union |
|
|
|
from pydantic import BaseModel |
|
|
|
|
|
class 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: str |
|
|
|
|
|
class 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 |
|
|