From 68f3865893140f93f2f38fc5591d0b9cb340c871 Mon Sep 17 00:00:00 2001 From: shenchucheng Date: Sun, 17 Dec 2023 00:21:43 +0800 Subject: [PATCH] Add UserRequirement to watch in default if the role is not set to watch --- metagpt/roles/role.py | 14 +++++++++++++- metagpt/schema.py | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/metagpt/roles/role.py b/metagpt/roles/role.py index b07541b09..1e7ebf711 100644 --- a/metagpt/roles/role.py +++ b/metagpt/roles/role.py @@ -27,6 +27,7 @@ from pydantic import BaseModel, Field from metagpt.actions import Action, ActionOutput from metagpt.actions.action_node import ActionNode +from metagpt.actions.add_requirement import UserRequirement from metagpt.llm import LLM, HumanProvider from metagpt.logs import logger from metagpt.memory import Memory @@ -126,7 +127,17 @@ class RoleContext(BaseModel): return self.memory.get() -class Role: +class _RoleInjector(type): + def __call__(cls, *args, **kwargs): + instance = super().__call__(*args, **kwargs) + + if not instance._rc.watch: + instance._watch([UserRequirement]) + + return instance + + +class Role(metaclass=_RoleInjector): """Role/Agent""" def __init__(self, name="", profile="", goal="", constraints="", desc="", is_human=False): @@ -141,6 +152,7 @@ class Role: self._rc = RoleContext() self._subscription = {any_to_str(self), name} if name else {any_to_str(self)} + def _reset(self): self._states = [] self._actions = [] diff --git a/metagpt/schema.py b/metagpt/schema.py index 758149efa..5aec378e4 100644 --- a/metagpt/schema.py +++ b/metagpt/schema.py @@ -121,6 +121,10 @@ class Message(BaseModel): :param send_to: Specifies the target recipient or consumer for message delivery in the environment. :param role: Message meta info tells who sent this message. """ + if not cause_by: + from metagpt.actions import UserRequirement + cause_by = UserRequirement + super().__init__( id=uuid.uuid4().hex, content=content,