From 178ddaecb184b4333050d32f4ff4ef2164a26416 Mon Sep 17 00:00:00 2001 From: liuminhui Date: Fri, 28 Feb 2025 16:12:05 +0800 Subject: [PATCH 1/4] example fix --- examples/android_assistant/run_assistant.py | 3 ++- examples/data/di/dog.jpg | Bin 0 -> 15016 bytes examples/data/di/receipt_shopping.jpg | Bin 0 -> 33408 bytes examples/data/omniparse/test01.docx | Bin 10228 -> 44 bytes examples/di/ocr_receipt.py | 9 +++++---- examples/di/rm_image_background.py | 5 +++-- examples/rag/omniparse.py | 4 +++- metagpt/environment/werewolf/env_space.py | 2 +- 8 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 examples/data/di/dog.jpg create mode 100644 examples/data/di/receipt_shopping.jpg diff --git a/examples/android_assistant/run_assistant.py b/examples/android_assistant/run_assistant.py index 7d5d4d5c8..dbd1dc6ff 100644 --- a/examples/android_assistant/run_assistant.py +++ b/examples/android_assistant/run_assistant.py @@ -9,7 +9,7 @@ from pathlib import Path import typer -from metagpt.config2 import config +from metagpt.config2 import Config from metagpt.environment.android.android_env import AndroidEnv from metagpt.ext.android_assistant.roles.android_assistant import AndroidAssistant from metagpt.team import Team @@ -41,6 +41,7 @@ def startup( ), device_id: str = typer.Option(default="emulator-5554", help="The Android device_id"), ): + config = Config.default() config.extra = { "stage": stage, "mode": mode, diff --git a/examples/data/di/dog.jpg b/examples/data/di/dog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..679a932e826d7c893583de4d4a74f94c15f7d098 GIT binary patch literal 15016 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 literal 0 HcmV?d00001 diff --git a/examples/data/di/receipt_shopping.jpg b/examples/data/di/receipt_shopping.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3368eb42fed31b5f0140e129cd733c18bfd18dbd GIT binary patch literal 33408 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 SQs%5rdONfrwk%Sz17Nz2Mn;L0e?Em&CEOB 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 MK&~e=>L<|u2UZQR&j0`b diff --git a/examples/di/ocr_receipt.py b/examples/di/ocr_receipt.py index af54d519b..1755f6490 100644 --- a/examples/di/ocr_receipt.py +++ b/examples/di/ocr_receipt.py @@ -1,17 +1,18 @@ +from metagpt.const import EXAMPLE_DATA_PATH from metagpt.roles.di.data_interpreter import DataInterpreter async def main(): # Notice: pip install metagpt[ocr] before using this example - image_path = "image.jpg" + image_path = EXAMPLE_DATA_PATH / "di/receipt_shopping.jpg" language = "English" requirement = f"""This is a {language} receipt image. Your goal is to perform OCR on images using PaddleOCR, output text content from the OCR results and discard - coordinates and confidence levels, then recognize the total amount from ocr text content, and finally save as table. + coordinates and confidence levels, then recognize the total amount from ocr text content, and finally save as csv table. Image path: {image_path}. NOTE: The environments for Paddle and PaddleOCR are all ready and has been fully installed.""" - di = DataInterpreter() - + di = DataInterpreter(react_mode="react") + print(requirement) await di.run(requirement) diff --git a/examples/di/rm_image_background.py b/examples/di/rm_image_background.py index cb7900a0a..e28778241 100644 --- a/examples/di/rm_image_background.py +++ b/examples/di/rm_image_background.py @@ -1,5 +1,6 @@ import asyncio +from metagpt.const import DEFAULT_WORKSPACE_ROOT, EXAMPLE_DATA_PATH from metagpt.roles.di.data_interpreter import DataInterpreter @@ -9,7 +10,7 @@ async def main(requirement: str = ""): if __name__ == "__main__": - image_path = "/your/path/to/the/image.jpeg" - save_path = "/your/intended/save/path/for/image_rm_bg.png" + image_path = EXAMPLE_DATA_PATH / "di/dog.jpg" + save_path = DEFAULT_WORKSPACE_ROOT / "image_rm_bg.png" requirement = f"This is a image, you need to use python toolkit rembg to remove the background of the image and save the result. image path:{image_path}; save path:{save_path}." asyncio.run(main(requirement)) diff --git a/examples/rag/omniparse.py b/examples/rag/omniparse.py index b9159dae5..5295afa00 100644 --- a/examples/rag/omniparse.py +++ b/examples/rag/omniparse.py @@ -1,6 +1,6 @@ import asyncio -from metagpt.config2 import config +from metagpt.config2 import Config from metagpt.const import EXAMPLE_DATA_PATH from metagpt.logs import logger from metagpt.rag.parsers import OmniParse @@ -12,6 +12,8 @@ TEST_PDF = EXAMPLE_DATA_PATH / "omniparse/test02.pdf" TEST_VIDEO = EXAMPLE_DATA_PATH / "omniparse/test03.mp4" TEST_AUDIO = EXAMPLE_DATA_PATH / "omniparse/test04.mp3" +config = Config.default() + async def omniparse_client_example(): client = OmniParseClient(base_url=config.omniparse.base_url) diff --git a/metagpt/environment/werewolf/env_space.py b/metagpt/environment/werewolf/env_space.py index e6243b10f..dd6ceeabe 100644 --- a/metagpt/environment/werewolf/env_space.py +++ b/metagpt/environment/werewolf/env_space.py @@ -5,7 +5,7 @@ from gymnasium import spaces from pydantic import ConfigDict, Field -from metagpt.environment.base_env_space import BaseEnvAction, BaseEnvActionType +from metagpt.base.base_env_space import BaseEnvAction, BaseEnvActionType from metagpt.environment.werewolf.const import STEP_INSTRUCTIONS From e6494f83ecba8c1621699880c960a6009e666928 Mon Sep 17 00:00:00 2001 From: liuminhui Date: Fri, 28 Feb 2025 16:50:53 +0800 Subject: [PATCH 2/4] config import opt --- metagpt/config2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/metagpt/config2.py b/metagpt/config2.py index 1942e5ef5..84b6059ef 100644 --- a/metagpt/config2.py +++ b/metagpt/config2.py @@ -178,3 +178,4 @@ def merge_dict(dicts: Iterable[Dict]) -> Dict: _CONFIG_CACHE = {} +config = Config.default() From cdecf5dad77ca1310a41e607ecc7a315f9dfda36 Mon Sep 17 00:00:00 2001 From: liuminhui Date: Fri, 28 Feb 2025 17:13:30 +0800 Subject: [PATCH 3/4] code opt --- examples/android_assistant/run_assistant.py | 3 +-- examples/di/ocr_receipt.py | 1 - examples/rag/omniparse.py | 4 +--- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/examples/android_assistant/run_assistant.py b/examples/android_assistant/run_assistant.py index dbd1dc6ff..7d5d4d5c8 100644 --- a/examples/android_assistant/run_assistant.py +++ b/examples/android_assistant/run_assistant.py @@ -9,7 +9,7 @@ from pathlib import Path import typer -from metagpt.config2 import Config +from metagpt.config2 import config from metagpt.environment.android.android_env import AndroidEnv from metagpt.ext.android_assistant.roles.android_assistant import AndroidAssistant from metagpt.team import Team @@ -41,7 +41,6 @@ def startup( ), device_id: str = typer.Option(default="emulator-5554", help="The Android device_id"), ): - config = Config.default() config.extra = { "stage": stage, "mode": mode, diff --git a/examples/di/ocr_receipt.py b/examples/di/ocr_receipt.py index 1755f6490..bf32f5722 100644 --- a/examples/di/ocr_receipt.py +++ b/examples/di/ocr_receipt.py @@ -12,7 +12,6 @@ async def main(): Image path: {image_path}. NOTE: The environments for Paddle and PaddleOCR are all ready and has been fully installed.""" di = DataInterpreter(react_mode="react") - print(requirement) await di.run(requirement) diff --git a/examples/rag/omniparse.py b/examples/rag/omniparse.py index 5295afa00..b9159dae5 100644 --- a/examples/rag/omniparse.py +++ b/examples/rag/omniparse.py @@ -1,6 +1,6 @@ import asyncio -from metagpt.config2 import Config +from metagpt.config2 import config from metagpt.const import EXAMPLE_DATA_PATH from metagpt.logs import logger from metagpt.rag.parsers import OmniParse @@ -12,8 +12,6 @@ TEST_PDF = EXAMPLE_DATA_PATH / "omniparse/test02.pdf" TEST_VIDEO = EXAMPLE_DATA_PATH / "omniparse/test03.mp4" TEST_AUDIO = EXAMPLE_DATA_PATH / "omniparse/test04.mp3" -config = Config.default() - async def omniparse_client_example(): client = OmniParseClient(base_url=config.omniparse.base_url) From a553be61c55d5034ade4eb67d09f1c39b9f724e3 Mon Sep 17 00:00:00 2001 From: liuminhui Date: Fri, 28 Feb 2025 17:53:01 +0800 Subject: [PATCH 4/4] pre-commit opt --- examples/di/interacting_with_human.py | 1 + examples/write_design.py | 4 ++-- tests/metagpt/roles/di/test_swe_agent.py | 11 +++-------- tests/metagpt/roles/test_architect.py | 5 +++-- tests/metagpt/roles/test_engineer.py | 4 ++-- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/examples/di/interacting_with_human.py b/examples/di/interacting_with_human.py index c0ce02a40..a02f7c3bc 100644 --- a/examples/di/interacting_with_human.py +++ b/examples/di/interacting_with_human.py @@ -1,4 +1,5 @@ import fire + from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.logs import logger from metagpt.roles.di.team_leader import TeamLeader diff --git a/examples/write_design.py b/examples/write_design.py index 7eaa1a87b..fbbe9e1f0 100644 --- a/examples/write_design.py +++ b/examples/write_design.py @@ -1,10 +1,10 @@ import asyncio +from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.logs import logger from metagpt.roles.architect import Architect -from metagpt.environment.mgx.mgx_env import MGXEnv -from metagpt.schema import Message from metagpt.roles.di.team_leader import TeamLeader +from metagpt.schema import Message async def main(): diff --git a/tests/metagpt/roles/di/test_swe_agent.py b/tests/metagpt/roles/di/test_swe_agent.py index 325e7bed8..3dbfa910b 100644 --- a/tests/metagpt/roles/di/test_swe_agent.py +++ b/tests/metagpt/roles/di/test_swe_agent.py @@ -1,22 +1,17 @@ import pytest +from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.roles.di.swe_agent import SWEAgent +from metagpt.roles.di.team_leader import TeamLeader from metagpt.schema import Message from metagpt.tools.libs.terminal import Bash -from metagpt.environment.mgx.mgx_env import MGXEnv -from metagpt.roles.di.team_leader import TeamLeader @pytest.fixture def env(): test_env = MGXEnv() tl = TeamLeader() - test_env.add_roles( - [ - tl, - SWEAgent() - ] - ) + test_env.add_roles([tl, SWEAgent()]) return test_env diff --git a/tests/metagpt/roles/test_architect.py b/tests/metagpt/roles/test_architect.py index 9a834ffbe..cb636b6a1 100644 --- a/tests/metagpt/roles/test_architect.py +++ b/tests/metagpt/roles/test_architect.py @@ -8,18 +8,19 @@ distribution feature for message handling. """ import uuid +from pathlib import Path import pytest from metagpt.actions import WritePRD +from metagpt.actions.di.run_command import RunCommand from metagpt.const import PRDS_FILE_REPO from metagpt.logs import logger from metagpt.roles import Architect from metagpt.schema import Message from metagpt.utils.common import any_to_str, awrite from tests.metagpt.roles.mock import MockMessages -from pathlib import Path -from metagpt.actions.di.run_command import RunCommand + @pytest.mark.asyncio async def test_architect(context): diff --git a/tests/metagpt/roles/test_engineer.py b/tests/metagpt/roles/test_engineer.py index c340e910f..18b297ae5 100644 --- a/tests/metagpt/roles/test_engineer.py +++ b/tests/metagpt/roles/test_engineer.py @@ -9,6 +9,7 @@ """ import json from pathlib import Path +from types import SimpleNamespace import pytest @@ -19,9 +20,8 @@ from metagpt.roles.engineer import Engineer from metagpt.schema import CodingContext, Message from metagpt.utils.common import CodeParser, any_to_name, any_to_str, aread, awrite from metagpt.utils.git_repository import ChangeType -from tests.metagpt.roles.mock import STRS_FOR_PARSING, TASKS, MockMessages from metagpt.utils.project_repo import ProjectRepo -from types import SimpleNamespace +from tests.metagpt.roles.mock import STRS_FOR_PARSING, TASKS, MockMessages @pytest.mark.asyncio