Spaces:
Build error
Build error
import logging | |
from abc import abstractmethod | |
from typing import List, NamedTuple, Set, Union | |
from string import Template | |
from pydantic import BaseModel, Field | |
from agentverse.llms import BaseLLM | |
from agentverse.memory import BaseMemory, ChatHistoryMemory | |
from agentverse.message import Message | |
from agentverse.output_parser import OutputParser | |
from agentverse.memory_manipulator import BaseMemoryManipulator | |
class BaseAgent(BaseModel): | |
name: str | |
llm: BaseLLM | |
output_parser: OutputParser | |
prepend_prompt_template: str = Field(default="") | |
append_prompt_template: str = Field(default="") | |
prompt_template: str = Field(default="") | |
role_description: str = Field(default="") | |
memory: BaseMemory = Field(default_factory=ChatHistoryMemory) | |
memory_manipulator: BaseMemoryManipulator = Field( | |
default_factory=BaseMemoryManipulator | |
) | |
max_retry: int = Field(default=3) | |
receiver: Set[str] = Field(default=set({"all"})) | |
async_mode: bool = Field(default=True) | |
def step(self, env_description: str = "") -> Message: | |
"""Get one step response""" | |
pass | |
def astep(self, env_description: str = "") -> Message: | |
"""Asynchronous version of step""" | |
pass | |
def reset(self) -> None: | |
"""Reset the agent""" | |
pass | |
def add_message_to_memory(self, messages: List[Message]) -> None: | |
"""Add a message to the memory""" | |
pass | |
def get_spend(self) -> float: | |
return self.llm.get_spend() | |
def get_spend_formatted(self) -> str: | |
two_trailing = f"${self.get_spend():.2f}" | |
if two_trailing == "$0.00": | |
return f"${self.get_spend():.6f}" | |
return two_trailing | |
def get_all_prompts(self, **kwargs): | |
prepend_prompt = Template(self.prepend_prompt_template).safe_substitute( | |
**kwargs | |
) | |
append_prompt = Template(self.append_prompt_template).safe_substitute(**kwargs) | |
return prepend_prompt, append_prompt | |
def get_receiver(self) -> Set[str]: | |
return self.receiver | |
def set_receiver(self, receiver: Union[Set[str], str]) -> None: | |
if isinstance(receiver, str): | |
self.receiver = set({receiver}) | |
elif isinstance(receiver, set): | |
self.receiver = receiver | |
else: | |
raise ValueError( | |
"input argument `receiver` must be a string or a set of string" | |
) | |
def add_receiver(self, receiver: Union[Set[str], str]) -> None: | |
if isinstance(receiver, str): | |
self.receiver.add(receiver) | |
elif isinstance(receiver, set): | |
self.receiver = self.receiver.union(receiver) | |
else: | |
raise ValueError( | |
"input argument `receiver` must be a string or a set of string" | |
) | |
def remove_receiver(self, receiver: Union[Set[str], str]) -> None: | |
if isinstance(receiver, str): | |
try: | |
self.receiver.remove(receiver) | |
except KeyError as e: | |
logging.warning(f"Receiver {receiver} not found.") | |
elif isinstance(receiver, set): | |
self.receiver = self.receiver.difference(receiver) | |
else: | |
raise ValueError( | |
"input argument `receiver` must be a string or a set of string" | |
) | |