update metagpt entry

This commit is contained in:
better629 2025-03-02 18:19:20 +08:00
parent f36a4ece63
commit 2c22a94aa4
5 changed files with 32 additions and 23 deletions

View file

@ -63,6 +63,7 @@ class Config(CLIParams, YamlModel):
# Tool Parameters
search: SearchConfig = SearchConfig()
enable_search: bool = False
browser: BrowserConfig = BrowserConfig()
mermaid: MermaidConfig = MermaidConfig()

View file

@ -14,6 +14,9 @@ from metagpt.roles.engineer import Engineer
from metagpt.roles.qa_engineer import QaEngineer
from metagpt.roles.searcher import Searcher
from metagpt.roles.sales import Sales
from metagpt.roles.di.data_analyst import DataAnalyst
from metagpt.roles.di.team_leader import TeamLeader
from metagpt.roles.di.engineer2 import Engineer2
__all__ = [
@ -25,4 +28,7 @@ __all__ = [
"QaEngineer",
"Searcher",
"Sales",
"DataAnalyst",
"TeamLeader",
"Engineer2",
]

View file

@ -127,8 +127,9 @@ class RoleZero(Role):
"Plan.replace_task": self.planner.plan.replace_task,
"RoleZero.ask_human": self.ask_human,
"RoleZero.reply_to_human": self.reply_to_human,
"SearchEnhancedQA.run": SearchEnhancedQA().run,
}
if self.config.enable_search:
self.tool_execution_map["SearchEnhancedQA.run"] = SearchEnhancedQA().run
self.tool_execution_map.update(
{
f"Browser.{i}": getattr(self.browser, i)

View file

@ -7,7 +7,6 @@ from pathlib import Path
import typer
from metagpt.const import CONFIG_ROOT
from metagpt.utils.common import any_to_str
app = typer.Typer(add_completion=False, pretty_exceptions_show_locals=False)
@ -31,10 +30,10 @@ def generate_repo(
from metagpt.context import Context
from metagpt.roles import (
Architect,
Engineer,
DataAnalyst,
Engineer2,
ProductManager,
ProjectManager,
QaEngineer,
TeamLeader,
)
from metagpt.team import Team
@ -45,19 +44,22 @@ def generate_repo(
company = Team(context=ctx)
company.hire(
[
TeamLeader(),
ProductManager(),
Architect(),
ProjectManager(),
Engineer2(),
# ProjectManager(),
DataAnalyst(),
]
)
if implement or code_review:
company.hire([Engineer(n_borg=5, use_code_review=code_review)])
if run_tests:
company.hire([QaEngineer()])
if n_round < 8:
n_round = 8 # If `--run-tests` is enabled, at least 8 rounds are required to run all QA actions.
# if implement or code_review:
# company.hire([Engineer(n_borg=5, use_code_review=code_review)])
#
# if run_tests:
# company.hire([QaEngineer()])
# if n_round < 8:
# n_round = 8 # If `--run-tests` is enabled, at least 8 rounds are required to run all QA actions.
else:
stg_path = Path(recover_path)
if not stg_path.exists() or not str(stg_path).endswith("team"):
@ -67,8 +69,7 @@ def generate_repo(
idea = company.idea
company.invest(investment)
company.run_project(idea, send_to=any_to_str(ProductManager))
asyncio.run(company.run(n_round=n_round))
asyncio.run(company.run(n_round=n_round, idea=idea))
return ctx.kwargs.get("project_path")

View file

@ -14,13 +14,13 @@ from typing import Any, Optional
from pydantic import BaseModel, ConfigDict, Field
from metagpt.actions import UserRequirement
from metagpt.const import MESSAGE_ROUTE_TO_ALL, SERDESER_PATH
from metagpt.const import SERDESER_PATH
from metagpt.context import Context
from metagpt.environment import Environment
from metagpt.environment.mgx.mgx_env import MGXEnv
from metagpt.logs import logger
from metagpt.roles import Role
from metagpt.schema import UserMessage
from metagpt.schema import Message
from metagpt.utils.common import (
NoMoneyException,
read_json_file,
@ -40,12 +40,15 @@ class Team(BaseModel):
env: Optional[Environment] = None
investment: float = Field(default=10.0)
idea: str = Field(default="")
use_mgx: bool = Field(default=True)
def __init__(self, context: Context = None, **data: Any):
super(Team, self).__init__(**data)
ctx = context or Context()
if not self.env:
if not self.env and not self.use_mgx:
self.env = Environment(context=ctx)
elif not self.env and self.use_mgx:
self.env = MGXEnv(context=ctx)
else:
self.env.context = ctx # The `env` object is allocated by deserialization
if "roles" in data:
@ -101,10 +104,7 @@ class Team(BaseModel):
self.idea = idea
# Human requirement.
self.env.publish_message(
UserMessage(content=idea, cause_by=UserRequirement, send_to=send_to or MESSAGE_ROUTE_TO_ALL),
peekable=False,
)
self.env.publish_message(Message(content=idea))
def start_project(self, idea, send_to: str = ""):
"""