Spaces:
Runtime error
Runtime error
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
from typing import Iterable, Type | |
from pydantic import BaseModel, Field | |
from autoagents.actions import Requirement, CreateRoles, CheckRoles, CheckPlans | |
from autoagents.roles import Role | |
from autoagents.actions import Action, ActionOutput | |
from autoagents.system.config import CONFIG | |
from autoagents.system.llm import LLM | |
from autoagents.system.logs import logger | |
from autoagents.system.memory import Memory, LongTermMemory | |
from autoagents.system.schema import Message | |
class Manager(Role): | |
def __init__(self, name="Ethan", profile="Manager", goal="Efficiently to finish the tasks or solve the problem", | |
constraints="", serpapi_key=None, **kwargs): | |
super().__init__(name, profile, goal, constraints, **kwargs) | |
self._init_actions([CreateRoles, CheckRoles, CheckPlans]) | |
self._watch([Requirement]) | |
async def _act(self) -> Message: | |
logger.info(f"{self._setting}: ready to {self._rc.todo}") | |
roles_plan, suggestions_roles, suggestions_plan = '', '', '' | |
suggestions, num_steps = '', 3 | |
steps, consensus = 0, False | |
while not consensus and steps < num_steps: | |
self._set_state(0) | |
response = await self._rc.todo.run(self._rc.important_memory, history=roles_plan, suggestions=suggestions) | |
roles_plan = str(response.instruct_content) | |
if 'No Suggestions' not in suggestions_roles or 'No Suggestions' not in suggestions_plan: | |
self._set_state(1) | |
history_roles = f"## Role Suggestions\n{suggestions_roles}\n\n## Feedback\n{response.instruct_content.RoleFeedback}" | |
_suggestions_roles = await self._rc.todo.run(response.content, history=history_roles) | |
suggestions_roles += _suggestions_roles.instruct_content.Suggestions | |
self._set_state(2) | |
history_plan = f"## Plan Suggestions\n{suggestions_roles}\n\n## Feedback\n{response.instruct_content.PlanFeedback}" | |
_suggestions_plan = await self._rc.todo.run(response.content, history=history_plan) | |
suggestions_plan += _suggestions_plan.instruct_content.Suggestions | |
suggestions = f"## Role Suggestions\n{_suggestions_roles.instruct_content.Suggestions}\n\n## Plan Suggestions\n{_suggestions_plan.instruct_content.Suggestions}" | |
if 'No Suggestions' in suggestions_roles and 'No Suggestions' in suggestions_plan: | |
consensus = True | |
steps += 1 | |
if isinstance(response, ActionOutput): | |
msg = Message(content=response.content, instruct_content=response.instruct_content, | |
role=self.profile, cause_by=type(self._rc.todo)) | |
else: | |
msg = Message(content=response, role=self.profile, cause_by=type(self._rc.todo)) | |
self._rc.memory.add(msg) | |
return msg |