mirror of
https://gitee.com/dify_ai/dify.git
synced 2024-12-05 04:38:37 +08:00
83 lines
1.7 KiB
Python
83 lines
1.7 KiB
Python
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
|