diff --git a/metagpt/roles/engineer.py b/metagpt/roles/engineer.py index 78a7f3ba2..2bb1f3ea2 100644 --- a/metagpt/roles/engineer.py +++ b/metagpt/roles/engineer.py @@ -70,96 +70,6 @@ class Engineer(Role): m = json.loads(task_msg.content) return m.get("Task list") - # @classmethod - # def parse_tasks(cls, task_msg: Message) -> list[str]: - # if task_msg.instruct_content: - # return task_msg.instruct_content.dict().get("Task list") - # return CodeParser.parse_file_list(block="Task list", text=task_msg.content) - # - # @classmethod - # def parse_code(cls, code_text: str) -> str: - # return CodeParser.parse_code(block="", text=code_text) - # - # @classmethod - # def parse_workspace(cls, system_design_msg: Message) -> str: - # if system_design_msg.instruct_content: - # return system_design_msg.instruct_content.dict().get("project_name").strip().strip("'").strip('"') - # return CodeParser.parse_str(block="project_name", text=system_design_msg.content) - # - # def get_workspace(self) -> Path: - # msg = self._rc.memory.get_by_action(WriteDesign)[-1] - # if not msg: - # return CONFIG.workspace_path / "src" - # workspace = self.parse_workspace(msg) - # # Codes are written in workspace/{package_name}/{package_name} - # return CONFIG.workspace_path / workspace / workspace - # - # def recreate_workspace(self): - # workspace = self.get_workspace() - # try: - # shutil.rmtree(workspace) - # except FileNotFoundError: - # pass # The folder does not exist, but we don't care - # workspace.mkdir(parents=True, exist_ok=True) - # - # def write_file(self, filename: str, code: str): - # workspace = self.get_workspace() - # filename = filename.replace('"', "").replace("\n", "") - # file = workspace / filename - # file.parent.mkdir(parents=True, exist_ok=True) - # file.write_text(code) - # return file - # - # def recv(self, message: Message) -> None: - # self._rc.memory.add(message) - # if message in self._rc.important_memory: - # self.todos = self.parse_tasks(message) - # - # async def _act_mp(self) -> Message: - # # self.recreate_workspace() - # todo_coros = [] - # for todo in self.todos: - # todo_coro = WriteCode().run( - # context=self._rc.memory.get_by_actions([WriteTasks, WriteDesign]), filename=todo - # ) - # todo_coros.append(todo_coro) - # - # rsps = await gather_ordered_k(todo_coros, self.n_borg) - # for todo, code_rsp in zip(self.todos, rsps): - # _ = self.parse_code(code_rsp) - # logger.info(todo) - # logger.info(code_rsp) - # # self.write_file(todo, code) - # msg = Message(content=code_rsp, role=self.profile, cause_by=type(self._rc.todo)) - # self._rc.memory.add(msg) - # del self.todos[0] - # - # logger.info(f"Done {self.get_workspace()} generating.") - # msg = Message(content="all done.", role=self.profile, cause_by=type(self._rc.todo)) - # return msg - # - # async def _act_sp(self) -> Message: - # code_msg_all = [] # gather all code info, will pass to qa_engineer for tests later - # for todo in self.todos: - # code = await WriteCode().run(context=self._rc.history, filename=todo) - # # logger.info(todo) - # # logger.info(code_rsp) - # # code = self.parse_code(code_rsp) - # file_path = self.write_file(todo, code) - # msg = Message(content=code, role=self.profile, cause_by=type(self._rc.todo)) - # self._rc.memory.add(msg) - # - # code_msg = todo + FILENAME_CODE_SEP + str(file_path) - # code_msg_all.append(code_msg) - # - # logger.info(f"Done {self.get_workspace()} generating.") - # msg = Message( - # content=MSG_SEP.join(code_msg_all), role=self.profile, cause_by=type(self._rc.todo), send_to="QaEngineer" - # ) - # return msg - - # async def _act_sp_with_cr(self) -> Message: - # code_msg_all = [] # gather all code info, will pass to qa_engineer for tests later async def _act_sp_with_cr(self, review=False) -> Set[str]: changed_files = set() src_file_repo = CONFIG.git_repo.new_file_repository(CONFIG.src_workspace) diff --git a/metagpt/roles/role.py b/metagpt/roles/role.py index ba07c0c16..47ffb3f9e 100644 --- a/metagpt/roles/role.py +++ b/metagpt/roles/role.py @@ -287,6 +287,7 @@ class Role: ) else: msg = Message(content=response, role=self.profile, cause_by=self._rc.todo) + self._rc.memory.add(msg) return msg @@ -295,9 +296,10 @@ class Role: # Read unprocessed messages from the msg buffer. news = self._rc.msg_buffer.pop_all() # Store the read messages in your own memory to prevent duplicate processing. + old_messages = self._rc.memory.get() self._rc.memory.add_batch(news) # Filter out messages of interest. - self._rc.news = [n for n in news if n.cause_by in self._rc.watch] + self._rc.news = [n for n in news if n.cause_by in self._rc.watch and n not in old_messages] # Design Rules: # If you need to further categorize Message objects, you can do so using the Message.set_meta function. diff --git a/metagpt/roles/sk_agent.py b/metagpt/roles/sk_agent.py index 92de94bd4..56482ef26 100644 --- a/metagpt/roles/sk_agent.py +++ b/metagpt/roles/sk_agent.py @@ -74,5 +74,4 @@ class SkAgent(Role): msg = Message(content=result, role=self.profile, cause_by=self._rc.todo) self._rc.memory.add(msg) - self.publish_message(msg) return msg