AgentVerse's picture
bump version to 0.1.8
01523b5
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."""
@memory_manipulator_registry.register("plan")
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