mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-04-25 00:36:55 +02:00
fixbug: recovered role can't observe new message
This commit is contained in:
parent
ab846f65e4
commit
8a9cd6a2e7
3 changed files with 14 additions and 3 deletions
|
|
@ -81,7 +81,7 @@ class Memory(BaseModel):
|
|||
return self.storage[-k:]
|
||||
|
||||
def find_news(self, observed: list[Message], k=0) -> list[Message]:
|
||||
"""find news (previously unseen messages) from the the most recent k memories, from all memories when k=0"""
|
||||
"""find news (previously unseen messages) from the most recent k memories, from all memories when k=0"""
|
||||
already_observed = self.get(k)
|
||||
news: list[Message] = []
|
||||
for i in observed:
|
||||
|
|
|
|||
|
|
@ -422,8 +422,8 @@ class Role(SerializationMixin, ContextMixin, BaseModel):
|
|||
"""Prepare new messages for processing from the message buffer and other sources."""
|
||||
# Read unprocessed messages from the msg buffer.
|
||||
news = []
|
||||
if self.recovered:
|
||||
news = [self.latest_observed_msg] if self.latest_observed_msg else []
|
||||
if self.recovered and self.latest_observed_msg:
|
||||
news = self.rc.memory.find_news(observed=[self.latest_observed_msg], k=10)
|
||||
if not news:
|
||||
news = self.rc.msg_buffer.pop_all()
|
||||
# Store the read messages in your own memory to prevent duplicate processing.
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import pytest
|
|||
|
||||
from metagpt.provider.human_provider import HumanProvider
|
||||
from metagpt.roles.role import Role
|
||||
from metagpt.schema import Message, UserMessage
|
||||
|
||||
|
||||
def test_role_desc():
|
||||
|
|
@ -18,5 +19,15 @@ def test_role_human(context):
|
|||
assert isinstance(role.llm, HumanProvider)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_recovered():
|
||||
role = Role(profile="Tester", desc="Tester", recovered=True)
|
||||
role.put_message(UserMessage(content="2"))
|
||||
role.latest_observed_msg = Message(content="1")
|
||||
await role._observe()
|
||||
await role._observe()
|
||||
assert role.rc.msg_buffer.empty()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pytest.main([__file__, "-s"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue