Orami01's picture
Upload 274 files
9c48ae2
raw
history blame
2.92 kB
#!/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