diff --git a/metagpt/actions/design_api.py b/metagpt/actions/design_api.py index 0525233fe..b71c66543 100644 --- a/metagpt/actions/design_api.py +++ b/metagpt/actions/design_api.py @@ -24,9 +24,9 @@ from metagpt.actions.design_api_an import ( ) from metagpt.const import DATA_API_DESIGN_FILE_REPO, SEQ_FLOW_FILE_REPO from metagpt.logs import logger -from metagpt.report import DocsReporter from metagpt.schema import Document, Documents, Message from metagpt.utils.mermaid import mermaid_to_file +from metagpt.utils.report import DocsReporter NEW_REQ_TEMPLATE = """ ### Legacy Content diff --git a/metagpt/actions/di/execute_nb_code.py b/metagpt/actions/di/execute_nb_code.py index ca0efc5d0..1df17f2c6 100644 --- a/metagpt/actions/di/execute_nb_code.py +++ b/metagpt/actions/di/execute_nb_code.py @@ -27,7 +27,7 @@ from rich.syntax import Syntax from metagpt.actions import Action from metagpt.const import DEFAULT_WORKSPACE_ROOT from metagpt.logs import logger -from metagpt.report import NotebookReporter +from metagpt.utils.report import NotebookReporter INSTALL_KEEPLEN = 500 diff --git a/metagpt/actions/project_management.py b/metagpt/actions/project_management.py index fa1c0c42f..5aace9fa9 100644 --- a/metagpt/actions/project_management.py +++ b/metagpt/actions/project_management.py @@ -18,8 +18,8 @@ from metagpt.actions.action_output import ActionOutput from metagpt.actions.project_management_an import PM_NODE, REFINED_PM_NODE from metagpt.const import PACKAGE_REQUIREMENTS_FILENAME from metagpt.logs import logger -from metagpt.report import DocsReporter from metagpt.schema import Document, Documents +from metagpt.utils.report import DocsReporter NEW_REQ_TEMPLATE = """ ### Legacy Content diff --git a/metagpt/actions/write_code.py b/metagpt/actions/write_code.py index a44fb22a0..c56fe65f3 100644 --- a/metagpt/actions/write_code.py +++ b/metagpt/actions/write_code.py @@ -25,10 +25,10 @@ from metagpt.actions.project_management_an import REFINED_TASK_LIST, TASK_LIST from metagpt.actions.write_code_plan_and_change_an import REFINED_TEMPLATE from metagpt.const import BUGFIX_FILENAME, REQUIREMENT_FILENAME from metagpt.logs import logger -from metagpt.report import EditorReporter from metagpt.schema import CodingContext, Document, RunCodeResult from metagpt.utils.common import CodeParser from metagpt.utils.project_repo import ProjectRepo +from metagpt.utils.report import EditorReporter PROMPT_TEMPLATE = """ NOTICE diff --git a/metagpt/actions/write_prd.py b/metagpt/actions/write_prd.py index 968f1147d..3ba7e9543 100644 --- a/metagpt/actions/write_prd.py +++ b/metagpt/actions/write_prd.py @@ -33,11 +33,11 @@ from metagpt.const import ( REQUIREMENT_FILENAME, ) from metagpt.logs import logger -from metagpt.report import DocsReporter from metagpt.schema import BugFixContext, Document, Documents, Message from metagpt.utils.common import CodeParser from metagpt.utils.file_repository import FileRepository from metagpt.utils.mermaid import mermaid_to_file +from metagpt.utils.report import DocsReporter CONTEXT_TEMPLATE = """ ### Project Name diff --git a/metagpt/schema.py b/metagpt/schema.py index dd81427d2..af641821e 100644 --- a/metagpt/schema.py +++ b/metagpt/schema.py @@ -48,9 +48,9 @@ from metagpt.const import ( ) from metagpt.logs import logger from metagpt.repo_parser import DotClassInfo -from metagpt.report import TaskReporter from metagpt.utils.common import any_to_str, any_to_str_set, import_class from metagpt.utils.exceptions import handle_exception +from metagpt.utils.report import TaskReporter from metagpt.utils.serialize import ( actionoutout_schema_to_mapping, actionoutput_mapping_to_str, diff --git a/metagpt/tools/libs/browser.py b/metagpt/tools/libs/browser.py index 60129c6e3..6a7fd8e3b 100644 --- a/metagpt/tools/libs/browser.py +++ b/metagpt/tools/libs/browser.py @@ -1,8 +1,8 @@ from playwright.async_api import async_playwright from metagpt.const import DEFAULT_WORKSPACE_ROOT -from metagpt.report import BrowserReporter from metagpt.tools.tool_registry import register_tool +from metagpt.utils.report import BrowserReporter @register_tool() diff --git a/metagpt/tools/libs/deployer.py b/metagpt/tools/libs/deployer.py index ca6b312ca..c30ad0176 100644 --- a/metagpt/tools/libs/deployer.py +++ b/metagpt/tools/libs/deployer.py @@ -1,5 +1,5 @@ -from metagpt.report import ServerReporter from metagpt.tools.tool_registry import register_tool +from metagpt.utils.report import ServerReporter # An un-implemented tool reserved for deploying a local service to public diff --git a/metagpt/tools/libs/file_manager.py b/metagpt/tools/libs/file_manager.py index ba06b764a..588059dc5 100644 --- a/metagpt/tools/libs/file_manager.py +++ b/metagpt/tools/libs/file_manager.py @@ -4,8 +4,8 @@ import subprocess from pydantic import BaseModel, Field -from metagpt.report import EditorReporter from metagpt.tools.tool_registry import register_tool +from metagpt.utils.report import EditorReporter class FileBlock(BaseModel): diff --git a/metagpt/tools/libs/terminal.py b/metagpt/tools/libs/terminal.py index 28a6e227a..5f5989e1a 100644 --- a/metagpt/tools/libs/terminal.py +++ b/metagpt/tools/libs/terminal.py @@ -2,8 +2,8 @@ import subprocess import threading from queue import Queue -from metagpt.report import END_MARKER_VALUE, TerminalReporter from metagpt.tools.tool_registry import register_tool +from metagpt.utils.report import END_MARKER_VALUE, TerminalReporter @register_tool() diff --git a/metagpt/report.py b/metagpt/utils/report.py similarity index 99% rename from metagpt/report.py rename to metagpt/utils/report.py index 5bc0ec03d..717e8223d 100644 --- a/metagpt/report.py +++ b/metagpt/utils/report.py @@ -89,7 +89,7 @@ class ResourceReporter(BaseModel): ... print(value, name) ``` """ - cls._report = fn + cls._async_report = fn def _report(self, value: Any, name: str): if not self.callback_url: @@ -146,14 +146,14 @@ class ResourceReporter(BaseModel): async def __aexit__(self, *args, **kwargs): """Exit the asynchronous streaming callback context.""" - await self.async_report(None, END_MARKER_NAME) self.is_chunk = False if self.enable_llm_stream: self._llm_task.cancel() self._llm_task = None + await self.async_report(None, END_MARKER_NAME) async def _llm_stream_report(self, queue: asyncio.Queue): - while True: + while self.is_chunk: await self.async_report(await queue.get(), "content") async def wait_llm_stream_report(self): diff --git a/tests/metagpt/test_reporter.py b/tests/metagpt/test_reporter.py index f7dadf0f0..41d963448 100644 --- a/tests/metagpt/test_reporter.py +++ b/tests/metagpt/test_reporter.py @@ -5,7 +5,7 @@ import aiohttp.web import pytest from metagpt.logs import log_llm_stream -from metagpt.report import ( +from metagpt.utils.report import ( END_MARKER_NAME, BlockType, BrowserReporter,