feat: add default subscriptions to all Role

This commit is contained in:
莘权 马 2023-11-06 22:38:43 +08:00
parent c6f97f7487
commit c496b6b5f6
3 changed files with 8 additions and 0 deletions

View file

@ -48,3 +48,4 @@ MESSAGE_ROUTE_FROM = "msg_from"
MESSAGE_ROUTE_TO = "msg_to"
MESSAGE_ROUTE_CAUSE_BY = "cause_by"
MESSAGE_META_ROLE = "role"
MESSAGE_ROUTE_TO_ALL = "<all>"

View file

@ -135,6 +135,10 @@ class Role:
def _watch(self, actions: Iterable[Type[Action]]):
"""Listen to the corresponding behaviors"""
tags = {get_class_name(t) for t in actions}
# Add default subscription tags for developers' direct use.
if self.name:
tags.add(self.name)
tags.add(get_object_name(self))
self.subscribe(tags)
def subscribe(self, tags: Set[str]):

View file

@ -22,6 +22,7 @@ from metagpt.const import (
MESSAGE_ROUTE_CAUSE_BY,
MESSAGE_ROUTE_FROM,
MESSAGE_ROUTE_TO,
MESSAGE_ROUTE_TO_ALL,
)
from metagpt.logs import logger
from metagpt.utils.common import any_to_str
@ -71,6 +72,8 @@ class Routes(BaseModel):
if not to_tags:
return True
if MESSAGE_ROUTE_TO_ALL in to_tags:
return True
for k in tags:
if k in to_tags:
return True