refactor: According to RFC 113, add message dispatching functionality.

This commit is contained in:
莘权 马 2023-11-08 20:44:39 +08:00
parent e5c792e512
commit 47d47d274e
2 changed files with 14 additions and 1 deletions

View file

@ -19,6 +19,7 @@ from pydantic import BaseModel, Field
from metagpt.logs import logger
from metagpt.roles import Role
from metagpt.schema import Message
from metagpt.utils.common import is_subscribed
class Environment(BaseModel):
@ -63,7 +64,7 @@ class Environment(BaseModel):
found = False
# According to the routing feature plan in Chapter 2.2.3.2 of RFC 113
for obj, subscribed_tags in self.consumers.items():
if message.contain_any(subscribed_tags):
if is_subscribed(message, subscribed_tags):
obj.put_message(message)
found = True
if not found:

View file

@ -15,6 +15,7 @@ import platform
import re
from typing import List, Tuple, Union
from metagpt.const import MESSAGE_ROUTE_TO_ALL
from metagpt.logs import logger
@ -336,3 +337,14 @@ def any_to_str_set(val) -> set:
else:
res.add(any_to_str(val))
return res
def is_subscribed(message, tags):
"""Return whether it's consumer"""
if MESSAGE_ROUTE_TO_ALL in message.send_to:
return True
for t in tags:
if t in message.send_to:
return True
return False