AutoAgents / autoagents /explorer.py
Orami01's picture
Upload 274 files
9c48ae2
raw
history blame
1.93 kB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2023/5/12 00:30
@Author : alexanderwu
@Modified From : https://github.com/geekan/MetaGPT/blob/main/metagpt/software_company.py
"""
from pydantic import BaseModel, Field
from .roles import Role
from .actions import Requirement
from .environment import Environment
from .system.config import CONFIG
from .system.logs import logger
from .system.schema import Message
from .system.utils.common import NoMoneyException
class Explorer(BaseModel):
environment: Environment = Field(default_factory=Environment)
investment: float = Field(default=10.0)
class Config:
arbitrary_types_allowed = True
def hire(self, roles: list[Role]):
self.environment.add_roles(roles)
def invest(self, investment: float):
self.investment = investment
CONFIG.max_budget = investment
logger.info(f'Investment: ${investment}.')
def _check_balance(self):
if CONFIG.total_cost > CONFIG.max_budget:
raise NoMoneyException(CONFIG.total_cost, f'Insufficient funds: {CONFIG.max_budget}')
async def start_project(self, idea=None, llm_api_key=None, proxy=None, serpapi_key=None, task_id=None, alg_msg_queue=None):
self.environment.llm_api_key = llm_api_key
self.environment.proxy = proxy
self.environment.task_id = task_id
self.environment.alg_msg_queue = alg_msg_queue
self.environment.serpapi_key = serpapi_key
await self.environment.publish_message(Message(role="Question/Task", content=idea, cause_by=Requirement))
def _save(self):
logger.info(self.json())
async def run(self, n_round=3):
while n_round > 0:
# self._save()
n_round -= 1
logger.debug(f"{n_round=}")
self._check_balance()
await self.environment.run()
return self.environment.history