Spaces:
Build error
Build error
| from __future__ import annotations | |
| from agentverse.logging import get_logger | |
| from colorama import Fore | |
| import bdb | |
| from string import Template | |
| from typing import TYPE_CHECKING, List, Any | |
| from agentverse.message import ExecutorMessage, Message, SolverMessage | |
| from agentverse.utils import AgentFinish, AgentAction | |
| from agentverse.agents import agent_registry | |
| from agentverse.agents.base import BaseAgent | |
| import requests | |
| logger = get_logger() | |
| class ExecutorAgent(BaseAgent): | |
| max_history: int = 5 | |
| def step( | |
| self, task_description: str, solution: str, tools: List[dict] = [], **kwargs | |
| ) -> ExecutorMessage: | |
| logger.debug("", self.name, Fore.MAGENTA) | |
| prepend_prompt, append_prompt = self.get_all_prompts( | |
| task_description=task_description, | |
| solution=solution, | |
| agent_name=self.name, | |
| **kwargs, | |
| ) | |
| history = self.memory.to_messages(self.name, start_index=-self.max_history) | |
| parsed_response = None | |
| for i in range(self.max_retry): | |
| try: | |
| response = self.llm.generate_response( | |
| prepend_prompt, history, append_prompt, tools | |
| ) | |
| parsed_response = self.output_parser.parse(response) | |
| 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.") | |
| if isinstance(parsed_response, AgentFinish): | |
| message = ExecutorMessage( | |
| content=parsed_response.return_values["output"], | |
| sender=self.name, | |
| sender_agent=self, | |
| ) | |
| elif isinstance(parsed_response, AgentAction): | |
| message = ExecutorMessage( | |
| content=parsed_response.log, | |
| sender=self.name, | |
| sender_agent=self, | |
| tool_name=parsed_response.tool, | |
| tool_input=parsed_response.tool_input, | |
| ) | |
| else: | |
| raise ValueError( | |
| f"Error response type: {type(parsed_response)}. Only support \ | |
| AgentFinish and AgentAction. Modify your output parser." | |
| ) | |
| return message | |
| async def astep( | |
| self, task_description: str, solution: str, tools: List[dict] = [], **kwargs | |
| ) -> ExecutorMessage: | |
| logger.debug("", self.name, Fore.MAGENTA) | |
| prepend_prompt, append_prompt = self.get_all_prompts( | |
| task_description=task_description, | |
| solution=solution, | |
| agent_name=self.name, | |
| **kwargs, | |
| ) | |
| history = self.memory.to_messages(self.name, start_index=-self.max_history) | |
| parsed_response = None | |
| for i in range(self.max_retry): | |
| try: | |
| response = await self.llm.agenerate_response( | |
| prepend_prompt, history, append_prompt, tools | |
| ) | |
| parsed_response = self.output_parser.parse(response) | |
| 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.") | |
| parsed_response = AgentAction(tool="", tool_input="", log="") | |
| if isinstance(parsed_response, AgentFinish): | |
| message = ExecutorMessage( | |
| content=parsed_response.return_values["output"], | |
| sender=self.name, | |
| sender_agent=self, | |
| ) | |
| elif isinstance(parsed_response, AgentAction): | |
| message = ExecutorMessage( | |
| content=parsed_response.log, | |
| sender=self.name, | |
| sender_agent=self, | |
| tool_name=parsed_response.tool, | |
| tool_input=parsed_response.tool_input, | |
| ) | |
| else: | |
| raise ValueError( | |
| f"Error response type: {type(parsed_response)}. Only support \ | |
| AgentFinish and AgentAction. Modify your output parser." | |
| ) | |
| return message | |
| 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 | |