Spaces:
Runtime error
Runtime error
from __future__ import annotations | |
import asyncio | |
from colorama import Fore | |
from agentverse.logging import get_logger | |
import bdb | |
from string import Template | |
from typing import TYPE_CHECKING, List | |
from agentverse.message import RoleAssignerMessage, Message | |
from agentverse.agents import agent_registry | |
from agentverse.agents.base import BaseAgent | |
logger = get_logger() | |
class RoleAssignerAgent(BaseAgent): | |
def step( | |
self, advice: str, task_description: str, cnt_critic_agents: int | |
) -> RoleAssignerMessage: | |
logger.debug("", self.name, Fore.MAGENTA) | |
prepend_prompt, append_prompt = self.get_all_prompts( | |
advice=advice, | |
task_description=task_description, | |
cnt_critic_agents=cnt_critic_agents, | |
) | |
history = self.memory.to_messages(self.name) | |
parsed_response = None | |
for i in range(self.max_retry): | |
try: | |
response = self.llm.generate_response( | |
prepend_prompt, history, append_prompt | |
) | |
parsed_response = self.output_parser.parse(response) | |
if len(parsed_response) < cnt_critic_agents: | |
logger.warn( | |
f"Number of generate roles ({len(parsed_response)}) and number of group members ({cnt_critic_agents}) do not match." | |
) | |
logger.warn("Retrying...") | |
continue | |
break | |
except (KeyboardInterrupt, bdb.BdbQuit): | |
raise | |
except Exception as e: | |
logger.error(e) | |
logger.warn("Retrying...") | |
continue | |
if parsed_response is None: | |
logger.error(f"{self.name} failed to generate valid response.") | |
message = RoleAssignerMessage( | |
content=parsed_response, sender=self.name, sender_agent=self | |
) | |
return message | |
async def astep(self, env_description: str = "") -> RoleAssignerMessage: | |
"""Asynchronous version of step""" | |
pass | |
def _fill_prompt_template( | |
self, advice, task_description: str, cnt_critic_agents: int | |
) -> str: | |
"""Fill the placeholders in the prompt template | |
In the role_assigner agent, three placeholders are supported: | |
- ${task_description} | |
- ${cnt_critic_agnets} | |
- ${advice} | |
""" | |
input_arguments = { | |
"task_description": task_description, | |
"cnt_critic_agents": cnt_critic_agents, | |
"advice": advice, | |
} | |
return Template(self.prompt_template).safe_substitute(input_arguments) | |
def add_message_to_memory(self, messages: List[Message]) -> None: | |
self.memory.add_message(messages) | |
def reset(self) -> None: | |
"""Reset the agent""" | |
self.memory.reset() | |
# TODO: reset receiver | |