Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| from logging import getLogger | |
| from typing import List, TYPE_CHECKING | |
| from . import memory_manipulator_registry | |
| from .base import BaseMemoryManipulator | |
| from ..message import Message | |
| if TYPE_CHECKING: | |
| from agentverse.memory import VectorStoreMemory | |
| from agentverse.agents.reflection_agent import ReflectionAgent | |
| logger = getLogger(__file__) | |
| PLAN_PROMPT = """Now you are act for as an agent named ${agent_name} in a virtual world. | |
| You might need to performing reaction to the observation. | |
| Based on the following information: | |
| (1) The agent's description: ${role_description} | |
| (2) Current time is ${current_time} | |
| (3) Your history memory is ${chat_history} | |
| Now is ${current_time}. If all plans are expired, you have to plan for\ | |
| the next time periods. | |
| Do you need to generate new plans? | |
| If yes, tell me the new plan, including the time period. | |
| If no, just tell me No.""" | |
| class Plan(BaseMemoryManipulator): | |
| """ | |
| Memory manipulator for plan. | |
| """ | |
| memory: VectorStoreMemory = None | |
| agent: ReflectionAgent = None # specify ReflectionAgent | |
| # later considering removing current_time to be more general | |
| # and then change to BaseAgent | |
| plan: List[str] = [] | |
| def manipulate_memory(self) -> str: | |
| """ | |
| Generate new plans | |
| """ | |
| prompt = self._fill_prompt_template() | |
| result = self.agent.llm.generate_response(prompt).content | |
| result = result.strip('.') | |
| logger.info(f"{self.agent.name}'s new plan: {result}") | |
| if result == "No": | |
| return "" | |
| else: | |
| self.plan.append(result) | |
| plan_message = Message( | |
| content=result, | |
| sender=self.agent.name, | |
| receiver={self.agent.name}) | |
| self.agent.memory.add_message([plan_message]) | |
| return result | |
| def _fill_prompt_template(self) -> str: | |
| """Fill the placeholders in the prompt template | |
| In the conversation agent, three placeholders are supported: | |
| - ${agent_name}: the name of the agent | |
| - ${env_description}: the description of the environment | |
| - ${role_description}: the description of the role of the agent | |
| - ${chat_history}: the chat history of the agent | |
| """ | |
| input_arguments = { | |
| "agent_name": self.agent.name, | |
| "role_description": self.agent.role_description, | |
| "chat_history": self.agent.memory.to_string(add_sender_prefix=True), | |
| "current_time": self.agent.current_time, | |
| } | |
| return PLAN_PROMPT.format(**input_arguments) | |
| def reset(self) -> None: | |
| pass | |