| 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 |
|
|