AgentVerse's picture
bump version to 0.1.8
01523b5
raw
history blame contribute delete
No virus
1.44 kB
from __future__ import annotations
from agentverse.logging import logger
from abc import abstractmethod
from typing import TYPE_CHECKING, Any, Dict, List
from pydantic import BaseModel
# from agentverse.agents.agent import Agent
if TYPE_CHECKING:
from agentverse.agents.base import BaseAgent
from agentverse.message import Message
class BaseRule(BaseModel):
pass
class BaseEnvironment(BaseModel):
"""
Base class for environment.
Args:
agents: List of agents
rule: Rule for the environment
max_turns: Maximum number of turns
cnt_turn: Current turn number
last_messages: Messages from last turn
rule_params: Variables set by the rule
"""
agents: List[BaseAgent]
rule: BaseRule
max_turns: int = 10
cnt_turn: int = 0
last_messages: List[Message] = []
rule_params: Dict = {}
@abstractmethod
async def step(self) -> List[Message]:
"""Run one step of the environment"""
pass
@abstractmethod
def reset(self) -> None:
"""Reset the environment"""
pass
def report_metrics(self) -> None:
"""Report useful metrics"""
total_spent = sum([agent.get_spend() for agent in self.agents])
logger.info(f"Total spent: ${total_spent}")
pass
def is_done(self) -> bool:
"""Check if the environment is done"""
return self.cnt_turn >= self.max_turns