mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-15 11:02:36 +02:00
feat: merge geekan:cli-etc
This commit is contained in:
parent
5351b50d1c
commit
17bf646539
7 changed files with 0 additions and 180 deletions
|
|
@ -258,21 +258,6 @@ class WriteTasks(Action):
|
|||
return task_doc
|
||||
|
||||
async def _run_new_tasks(self, context, format=CONFIG.prompt_format):
|
||||
# =======
|
||||
# def _save(self, context, rsp):
|
||||
# if context[-1].instruct_content:
|
||||
# ws_name = context[-1].instruct_content.dict()["project_name"]
|
||||
# else:
|
||||
# ws_name = CodeParser.parse_str(block="project_name", text=context[-1].content)
|
||||
# file_path = CONFIG.workspace_path / ws_name / "docs/api_spec_and_tasks.md"
|
||||
# file_path.write_text(rsp.instruct_content.json(ensure_ascii=False))
|
||||
#
|
||||
# # Write requirements.txt
|
||||
# requirements_path = CONFIG.workspace_path / ws_name / "requirements.txt"
|
||||
# requirements_path.write_text("\n".join(rsp.instruct_content.dict().get("Required Python third-party packages")))
|
||||
#
|
||||
# async def run(self, context, format=CONFIG.prompt_format):
|
||||
# >>>>>>> feature/geekan_cli_etc
|
||||
prompt_template, format_example = get_template(templates, format)
|
||||
prompt = prompt_template.format(context=context, format_example=format_example)
|
||||
rsp = await self._aask_v1(prompt, "task", OUTPUT_MAPPING, format=format)
|
||||
|
|
|
|||
|
|
@ -79,29 +79,6 @@ class WriteCode(Action):
|
|||
def __init__(self, name="WriteCode", context=None, llm=None):
|
||||
super().__init__(name, context, llm)
|
||||
|
||||
# <<<<<<< HEAD
|
||||
# =======
|
||||
# def _is_invalid(self, filename):
|
||||
# return any(i in filename for i in ["mp3", "wav"])
|
||||
#
|
||||
# def _save(self, context, filename, code):
|
||||
# # logger.info(filename)
|
||||
# # logger.info(code_rsp)
|
||||
# if self._is_invalid(filename):
|
||||
# return
|
||||
#
|
||||
# design = [i for i in context if i.cause_by == WriteDesign][0]
|
||||
#
|
||||
# ws_name = CodeParser.parse_str(block="project_name", text=design.content)
|
||||
# ws_path = CONFIG.workspace_path / ws_name
|
||||
# if f"{ws_name}/" not in filename and all(i not in filename for i in ["requirements.txt", ".md"]):
|
||||
# ws_path = ws_path / ws_name
|
||||
# code_path = ws_path / filename
|
||||
# code_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
# code_path.write_text(code)
|
||||
# logger.info(f"Saving Code to {code_path}")
|
||||
#
|
||||
# >>>>>>> feature/geekan_cli_etc
|
||||
@retry(stop=stop_after_attempt(2), wait=wait_fixed(1))
|
||||
async def write_code(self, prompt) -> str:
|
||||
code_rsp = await self._aask(prompt)
|
||||
|
|
|
|||
|
|
@ -103,23 +103,6 @@ class WriteCodeReview(Action):
|
|||
code = CodeParser.parse_code(block="", text=code_rsp)
|
||||
return result, code
|
||||
|
||||
# <<<<<<< HEAD
|
||||
# async def run(self, *args, **kwargs) -> CodingContext:
|
||||
# format_example = FORMAT_EXAMPLE.format(filename=self.context.code_doc.filename)
|
||||
# context = "\n----------\n".join(
|
||||
# [self.context.design_doc.content, self.context.task_doc.content, self.context.code_doc.content]
|
||||
# )
|
||||
# prompt = PROMPT_TEMPLATE.format(
|
||||
# context=context,
|
||||
# code=self.context.code_doc.content,
|
||||
# filename=self.context.code_doc.filename,
|
||||
# format_example=format_example,
|
||||
# )
|
||||
# logger.info(f"Code review {self.context.code_doc.filename}..")
|
||||
# code = await self.write_code(prompt)
|
||||
# self.context.code_doc.content = code
|
||||
# return self.context
|
||||
# =======
|
||||
async def run(self, *args, **kwargs) -> CodingContext:
|
||||
iterative_code = self.context.code_doc.content
|
||||
k = CONFIG.code_review_k_times or 1
|
||||
|
|
|
|||
|
|
@ -19,34 +19,6 @@ import metagpt
|
|||
OPTIONS = contextvars.ContextVar("OPTIONS")
|
||||
|
||||
|
||||
# <<<<<<< HEAD
|
||||
# def get_project_root():
|
||||
# """Search upwards to find the project root directory."""
|
||||
# current_path = Path.cwd()
|
||||
# while True:
|
||||
# if (
|
||||
# (current_path / ".git").exists()
|
||||
# or (current_path / ".project_root").exists()
|
||||
# or (current_path / ".gitignore").exists()
|
||||
# ):
|
||||
# return current_path
|
||||
# parent_path = current_path.parent
|
||||
# if parent_path == current_path:
|
||||
# raise Exception("Project root not found.")
|
||||
# current_path = parent_path
|
||||
#
|
||||
#
|
||||
# PROJECT_ROOT = get_project_root()
|
||||
# DATA_PATH = PROJECT_ROOT / "data"
|
||||
# WORKSPACE_ROOT = PROJECT_ROOT / "workspace"
|
||||
# PROMPT_PATH = PROJECT_ROOT / "metagpt/prompts"
|
||||
# UT_PATH = PROJECT_ROOT / "data/ut"
|
||||
# SWAGGER_PATH = UT_PATH / "files/api/"
|
||||
# UT_PY_PATH = UT_PATH / "files/ut/"
|
||||
# API_QUESTIONS_PATH = UT_PATH / "files/question/"
|
||||
# YAPI_URL = "http://yapi.deepwisdomai.com/"
|
||||
# TMP = PROJECT_ROOT / "tmp"
|
||||
# =======
|
||||
def get_metagpt_package_root():
|
||||
"""Get the root directory of the installed package."""
|
||||
package_root = Path(metagpt.__file__).parent.parent
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ from metagpt.utils.common import is_subscribed
|
|||
|
||||
|
||||
class Environment(BaseModel):
|
||||
# <<<<<<< HEAD
|
||||
"""环境,承载一批角色,角色可以向环境发布消息,可以被其他角色观察到
|
||||
Environment, hosting a batch of roles, roles can publish messages to the environment, and can be observed by other roles
|
||||
|
||||
|
|
@ -32,17 +31,6 @@ class Environment(BaseModel):
|
|||
roles: dict[str, Role] = Field(default_factory=dict)
|
||||
members: dict[Role, Set] = Field(default_factory=dict)
|
||||
history: str = Field(default="") # For debug
|
||||
# =======
|
||||
# """
|
||||
# Environment, hosting a batch of roles, roles can publish messages to the environment, and can be observed by other roles
|
||||
# """
|
||||
#
|
||||
# roles: dict[str, Role] = Field(default_factory=dict)
|
||||
# memory: Memory = Field(default_factory=Memory) # 已经私有化
|
||||
# history: str = Field(default='')
|
||||
# repo: Repo = Field(default_factory=Repo) # 在CONFIG里
|
||||
# kv: dict = Field(default_factory=dict) # 在CONFIG里
|
||||
# >>>>>>> feature/geekan_cli_etc
|
||||
|
||||
class Config:
|
||||
arbitrary_types_allowed = True
|
||||
|
|
@ -83,38 +71,6 @@ class Environment(BaseModel):
|
|||
|
||||
return True
|
||||
|
||||
# # Replaced by FileRepository.set_file
|
||||
# def set_doc(self, content: str, filename: str):
|
||||
# """向当前环境发布文档(包括代码)"""
|
||||
# return self.repo.set(content, filename)
|
||||
#
|
||||
# # Replaced by FileRepository.get_file
|
||||
# def get_doc(self, filename: str):
|
||||
# return self.repo.get(filename)
|
||||
#
|
||||
# # Replaced by CONFIG.xx
|
||||
# def set(self, k: str, v: str):
|
||||
# self.kv[k] = v
|
||||
#
|
||||
# # Replaced by CONFIG.xx
|
||||
# def get(self, k: str):
|
||||
# return self.kv.get(k, None)
|
||||
|
||||
# Replaced By 增量变更流程
|
||||
# def load_existing_repo(self, path: Path, inc: bool):
|
||||
# self.repo = Repo.from_path(path)
|
||||
# logger.info(self.repo.eda())
|
||||
#
|
||||
# # Incremental mode: publish all docs to messages. Then roles can read the docs.
|
||||
# if inc:
|
||||
# docs = self.repo.get_text_documents()
|
||||
# for doc in docs:
|
||||
# msg = Message(content=doc.content)
|
||||
# self.publish_message(msg)
|
||||
# logger.info(f"Message from existing doc {doc.path}: {msg}")
|
||||
# logger.info(f"Load {len(docs)} docs from existing repo.")
|
||||
# raise NotImplementedError
|
||||
|
||||
async def run(self, k=1):
|
||||
"""处理一次所有信息的运行
|
||||
Process all Role runs at once
|
||||
|
|
|
|||
|
|
@ -183,24 +183,6 @@ class Engineer(Role):
|
|||
msg = Message(
|
||||
content=coding_context.json(), instruct_content=coding_context, role=self.profile, cause_by=WriteCode
|
||||
)
|
||||
# =======
|
||||
# context = []
|
||||
# msg = self._rc.memory.get_by_actions([WriteDesign, WriteTasks, WriteCode])
|
||||
# for m in msg:
|
||||
# context.append(m.content)
|
||||
# context_str = "\n----------\n".join(context)
|
||||
# # Write code
|
||||
# code = await WriteCode().run(context=context_str, filename=todo)
|
||||
# # Code review
|
||||
# if self.use_code_review:
|
||||
# # try:
|
||||
# rewrite_code = await WriteCodeReview().run(context=context_str, code=code, filename=todo)
|
||||
# code = rewrite_code
|
||||
# # except Exception as e:
|
||||
# # logger.error("code review failed!", e)
|
||||
# file_path = self.write_file(todo, code)
|
||||
# msg = Message(content=code, role=self.profile, cause_by=WriteCode)
|
||||
# >>>>>>> feature/geekan_cli_etc
|
||||
self._rc.memory.add(msg)
|
||||
|
||||
changed_files.add(coding_context.code_doc.filename)
|
||||
|
|
@ -273,15 +255,6 @@ class Engineer(Role):
|
|||
coding_doc = Document(root_path=str(src_file_repo.root_path), filename=filename, content=context.json())
|
||||
return coding_doc
|
||||
|
||||
# =======
|
||||
# async def _act(self) -> Message:
|
||||
# """Determines the mode of action based on whether code review is used."""
|
||||
# logger.info(f"{self._setting}: ready to WriteCode")
|
||||
# if self.use_code_review:
|
||||
# return await self._act_sp_with_cr()
|
||||
# return await self._act_sp()
|
||||
# >>>>>>> feature/geekan_cli_etc
|
||||
|
||||
async def _new_code_actions(self):
|
||||
# Prepare file repos
|
||||
src_file_repo = CONFIG.git_repo.new_file_repository(CONFIG.src_workspace)
|
||||
|
|
|
|||
|
|
@ -44,32 +44,6 @@ class QaEngineer(Role):
|
|||
self.test_round = 0
|
||||
self.test_round_allowed = test_round_allowed
|
||||
|
||||
# <<<<<<< HEAD
|
||||
# =======
|
||||
# @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")
|
||||
# return CodeParser.parse_str(block="project_name", text=system_design_msg.content)
|
||||
#
|
||||
# def get_workspace(self, return_proj_dir=True) -> Path:
|
||||
# msg = self._rc.memory.get_by_action(WriteDesign)[-1]
|
||||
# if not msg:
|
||||
# return CONFIG.workspace_path / "src"
|
||||
# workspace = self.parse_workspace(msg)
|
||||
# # project directory: workspace/{package_name}, which contains package source code folder, tests folder, resources folder, etc.
|
||||
# if return_proj_dir:
|
||||
# return CONFIG.workspace_path / workspace
|
||||
# # development codes directory: workspace/{package_name}/{package_name}
|
||||
# return CONFIG.workspace_path / workspace / workspace
|
||||
#
|
||||
# def write_file(self, filename: str, code: str):
|
||||
# workspace = self.get_workspace() / "tests"
|
||||
# file = workspace / filename
|
||||
# file.parent.mkdir(parents=True, exist_ok=True)
|
||||
# file.write_text(code)
|
||||
#
|
||||
# >>>>>>> feature/geekan_cli_etc
|
||||
async def _write_test(self, message: Message) -> None:
|
||||
changed_files = message.content.splitlines()
|
||||
src_file_repo = CONFIG.git_repo.new_file_repository(CONFIG.src_workspace)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue