From 8f7453352a2dacdd629492c14b91fa02591d377f Mon Sep 17 00:00:00 2001 From: voidking Date: Tue, 16 Jul 2024 17:44:14 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feature:=20=E4=B8=BB=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AEagentops?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/unittest.yaml | 2 +- config/config2.example.yaml | 2 ++ metagpt/config2.py | 1 + metagpt/roles/architect.py | 3 +++ metagpt/roles/engineer.py | 3 +++ metagpt/roles/product_manager.py | 3 +++ metagpt/roles/project_manager.py | 3 +++ metagpt/roles/qa_engineer.py | 3 +++ metagpt/software_company.py | 7 +++++++ requirements.txt | 1 + 10 files changed, 27 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index dc5ae605b..f51d80a14 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -39,7 +39,7 @@ jobs: - name: Show failed tests and overall summary run: | grep -E "FAILED tests|ERROR tests|[0-9]+ passed," unittest.txt - failed_count=$(grep -E "FAILED|ERROR" unittest.txt | wc -l) + failed_count=$(grep -E "FAILED tests|ERROR tests|[0-9]+ passed," unittest.txt | wc -l) if [[ "$failed_count" -gt 0 ]]; then echo "$failed_count failed lines found! Task failed." exit 1 diff --git a/config/config2.example.yaml b/config/config2.example.yaml index 64cce630f..c474ac8ba 100644 --- a/config/config2.example.yaml +++ b/config/config2.example.yaml @@ -59,3 +59,5 @@ iflytek_api_key: "YOUR_API_KEY" iflytek_api_secret: "YOUR_API_SECRET" metagpt_tti_url: "YOUR_MODEL_URL" + +agentops_api_key: "YOUR_AGENTOPS_API_KEY" # get key from https://app.agentops.ai/settings/projects \ No newline at end of file diff --git a/metagpt/config2.py b/metagpt/config2.py index 58a99c920..fff1799a7 100644 --- a/metagpt/config2.py +++ b/metagpt/config2.py @@ -69,6 +69,7 @@ class Config(CLIParams, YamlModel): workspace: WorkspaceConfig = WorkspaceConfig() enable_longterm_memory: bool = False code_review_k_times: int = 2 + agentops_api_key: str = "" # Will be removed in the future metagpt_tti_url: str = "" diff --git a/metagpt/roles/architect.py b/metagpt/roles/architect.py index 166f8cfd0..8c9d9835b 100644 --- a/metagpt/roles/architect.py +++ b/metagpt/roles/architect.py @@ -6,11 +6,14 @@ @File : architect.py """ +import agentops + from metagpt.actions import WritePRD from metagpt.actions.design_api import WriteDesign from metagpt.roles.role import Role +@agentops.track_agent(name="Architect") class Architect(Role): """ Represents an Architect role in a software development process. diff --git a/metagpt/roles/engineer.py b/metagpt/roles/engineer.py index 5055037f5..b032446c6 100644 --- a/metagpt/roles/engineer.py +++ b/metagpt/roles/engineer.py @@ -24,6 +24,8 @@ from collections import defaultdict from pathlib import Path from typing import Optional, Set +import agentops + from metagpt.actions import Action, WriteCode, WriteCodeReview, WriteTasks from metagpt.actions.fix_bug import FixBug from metagpt.actions.project_management_an import REFINED_TASK_LIST, TASK_LIST @@ -58,6 +60,7 @@ otherwise, answer 'YES' in JSON format. """ +@agentops.track_agent(name="Engineer") class Engineer(Role): """ Represents an Engineer role responsible for writing and possibly reviewing code. diff --git a/metagpt/roles/product_manager.py b/metagpt/roles/product_manager.py index 9db9f7d9e..a21ebf35b 100644 --- a/metagpt/roles/product_manager.py +++ b/metagpt/roles/product_manager.py @@ -7,12 +7,15 @@ @Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135. """ +import agentops + from metagpt.actions import UserRequirement, WritePRD from metagpt.actions.prepare_documents import PrepareDocuments from metagpt.roles.role import Role, RoleReactMode from metagpt.utils.common import any_to_name +@agentops.track_agent(name="ProductManager") class ProductManager(Role): """ Represents a Product Manager role responsible for product development and management. diff --git a/metagpt/roles/project_manager.py b/metagpt/roles/project_manager.py index 422d2889b..7fba8b28a 100644 --- a/metagpt/roles/project_manager.py +++ b/metagpt/roles/project_manager.py @@ -6,11 +6,14 @@ @File : project_manager.py """ +import agentops + from metagpt.actions import WriteTasks from metagpt.actions.design_api import WriteDesign from metagpt.roles.role import Role +@agentops.track_agent(name="ProjectManager") class ProjectManager(Role): """ Represents a Project Manager role responsible for overseeing project execution and team efficiency. diff --git a/metagpt/roles/qa_engineer.py b/metagpt/roles/qa_engineer.py index c73c10ef3..91122877d 100644 --- a/metagpt/roles/qa_engineer.py +++ b/metagpt/roles/qa_engineer.py @@ -15,6 +15,8 @@ of SummarizeCode. """ +import agentops + from metagpt.actions import DebugError, RunCode, WriteTest from metagpt.actions.summarize_code import SummarizeCode from metagpt.const import MESSAGE_ROUTE_TO_NONE @@ -24,6 +26,7 @@ from metagpt.schema import Document, Message, RunCodeContext, TestingContext from metagpt.utils.common import any_to_str_set, parse_recipient +@agentops.track_agent(name="QaEngineer") class QaEngineer(Role): name: str = "Edward" profile: str = "QaEngineer" diff --git a/metagpt/software_company.py b/metagpt/software_company.py index 103ac0551..bb35aa016 100644 --- a/metagpt/software_company.py +++ b/metagpt/software_company.py @@ -4,6 +4,7 @@ import asyncio from pathlib import Path +import agentops import typer from metagpt.const import CONFIG_ROOT @@ -38,6 +39,9 @@ def generate_repo( ) from metagpt.team import Team + if config.agentops_api_key != "": + agentops.init(config.agentops_api_key, tags=["software_company"]) + config.update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code) ctx = Context(config=config) @@ -68,6 +72,9 @@ def generate_repo( company.run_project(idea) asyncio.run(company.run(n_round=n_round)) + if config.agentops_api_key != "": + agentops.end_session("Success") + return ctx.repo diff --git a/requirements.txt b/requirements.txt index dc8a86ae2..b7a13583c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -72,3 +72,4 @@ rank-bm25==0.2.2 # for tool recommendation gymnasium==0.29.1 boto3~=1.34.69 spark_ai_python~=0.3.30 +agentops From 896fb86c03a42677735f4d084827b7e7c07fd977 Mon Sep 17 00:00:00 2001 From: voidking Date: Tue, 16 Jul 2024 20:18:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20=E8=AE=A1=E7=AE=97=E5=8D=95?= =?UTF-8?q?=E6=B5=8B=E8=A6=86=E7=9B=96=E7=8E=87=E6=97=B6=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E5=AE=89=E5=8D=93=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .coveragerc | 7 +++++++ .github/workflows/unittest.yaml | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..ff6f19aab --- /dev/null +++ b/.coveragerc @@ -0,0 +1,7 @@ +[run] +source = + ./metagpt/ +omit = + */metagpt/environment/android/* + */metagpt/ext/android_assistant/* + */metagpt/ext/werewolf/* \ No newline at end of file diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index f51d80a14..dfc161deb 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -32,7 +32,9 @@ jobs: run: | export ALLOW_OPENAI_API_CALL=0 mkdir -p ~/.metagpt && cp tests/config2.yaml ~/.metagpt/config2.yaml - pytest tests/ --ignore=tests/metagpt/environment/android_env --ignore=tests/metagpt/ext/android_assistant --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov --durations=20 | tee unittest.txt + pytest tests/ --ignore=tests/metagpt/environment/android_env --ignore=tests/metagpt/ext/android_assistant \ + --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov \ + --durations=20 | tee unittest.txt - name: Show coverage report run: | coverage report -m From 25e5fa2cb41029e89883132f8af7fc04a7ae0fa4 Mon Sep 17 00:00:00 2001 From: voidking Date: Thu, 18 Jul 2024 15:11:36 +0800 Subject: [PATCH 3/3] =?UTF-8?q?bugfix:=20=E4=BF=AE=E5=A4=8D=E5=8D=95?= =?UTF-8?q?=E6=B5=8BInterrupted=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/unittest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index dfc161deb..9b2499881 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -32,7 +32,7 @@ jobs: run: | export ALLOW_OPENAI_API_CALL=0 mkdir -p ~/.metagpt && cp tests/config2.yaml ~/.metagpt/config2.yaml - pytest tests/ --ignore=tests/metagpt/environment/android_env --ignore=tests/metagpt/ext/android_assistant \ + pytest --continue-on-collection-errors tests/ --ignore=tests/metagpt/environment/android_env --ignore=tests/metagpt/ext/android_assistant \ --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov \ --durations=20 | tee unittest.txt - name: Show coverage report