Merge pull request #577 from iorisa/feature/geekan/readme

feat: +Incremental Requirement & Fix Bug
This commit is contained in:
geekan 2023-12-28 13:52:24 +08:00 committed by GitHub
commit 7df636f8e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 38 additions and 12 deletions

View file

@ -1,7 +1,7 @@
default_stages: [ commit ]
# Install
# 1. pip install pre-commit
# 1. pip install pre-commit isort black
# 2. pre-commit install(the first time you download the repo, it will be cached for future use)
repos:
- repo: https://github.com/pycqa/isort

View file

@ -92,6 +92,16 @@ ### QuickStart & Demo Video
https://github.com/geekan/MetaGPT/assets/34952977/34345016-5d13-489d-b9f9-b82ace413419
### Incremental Requirement & Fix Bug
By using the following parameters, it is possible to iterate continuously on the project generated by MetaGPT.
| CLI Parameter Name | Value Type | Optional/Required | Description | Usage |
|--------------------|------------| --------- |------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--project-path` | path | Optional | The path where to load the project file from the previous version. | metagpt "BUG_FEEDBACK_XXX" --project-path "YOUR_PROJECT_FULL_PATH"<br/><br/>metagpt "INCREMENT_REQUIREMENTS" --project-path "YOUR_PROJECT_FULL_PATH" |
| `--reqa-file` | File name | Optional | The name of the file for which to regenerate unit tests. This is a relative path based on the source code folder.<br/>`--reqa-file "main.py"` | metagpt --reqa-file "main.py |
| `--project-name` | str | Optional | Specify the name of new project to be used. The project name must adhere to both folder and code variable naming conventions. | metagpt "NEW_REQUIREMENTS" --project-name "YOUR_PROJECT_NAME" |
## Tutorial
- 🗒 [Online Document](https://docs.deepwisdom.ai/)

View file

@ -52,6 +52,7 @@ def dict_to_markdown(d, prefix="-", postfix="\n"):
class ActionNode:
"""ActionNode is a tree of nodes."""
mode: str
# Action Context
@ -70,8 +71,15 @@ class ActionNode:
content: str
instruct_content: BaseModel
def __init__(self, key: str, expected_type: Type, instruction: str, example: str, content: str = "",
children: dict[str, "ActionNode"] = None):
def __init__(
self,
key: str,
expected_type: Type,
instruction: str,
example: str,
content: str = "",
children: dict[str, "ActionNode"] = None,
):
self.key = key
self.expected_type = expected_type
self.instruction = instruction

View file

@ -44,7 +44,7 @@ FULL_API_SPEC = ActionNode(
key="Full API spec",
expected_type=str,
instruction="Describe all APIs using OpenAPI 3.0 spec that may be used by both frontend and backend. If front-end "
"and back-end communication is not required, leave it blank.",
"and back-end communication is not required, leave it blank.",
example="openapi: 3.0.0 ...",
)

View file

@ -154,11 +154,15 @@ class WriteCodeReview(Action):
code=iterative_code,
filename=self.context.code_doc.filename,
)
cr_prompt = EXAMPLE_AND_INSTRUCTION.format(format_example=format_example, )
cr_prompt = EXAMPLE_AND_INSTRUCTION.format(
format_example=format_example,
)
logger.info(
f"Code review and rewrite {self.context.code_doc.filename}: {i+1}/{k} | {len(iterative_code)=}, {len(self.context.code_doc.content)=}"
)
result, rewrited_code = await self.write_code_review_and_rewrite(context_prompt, cr_prompt, self.context.code_doc.filename)
result, rewrited_code = await self.write_code_review_and_rewrite(
context_prompt, cr_prompt, self.context.code_doc.filename
)
if "LBTM" in result:
iterative_code = rewrited_code
elif "LGTM" in result:

View file

@ -28,7 +28,7 @@ class Architect(Role):
profile: str = "Architect",
goal: str = "design a concise, usable, complete software system",
constraints: str = "make sure the architecture is simple enough and use appropriate open source libraries."
"Use same language as user requirement"
"Use same language as user requirement",
) -> None:
"""Initializes the Architect with given attributes."""
super().__init__(name, profile, goal, constraints)

View file

@ -73,7 +73,7 @@ class Engineer(Role):
profile: str = "Engineer",
goal: str = "write elegant, readable, extensible, efficient code",
constraints: str = "the code should conform to standards like google-style and be modular and maintainable. "
"Use same language as user requirement",
"Use same language as user requirement",
n_borg: int = 1,
use_code_review: bool = False,
) -> None:

View file

@ -26,7 +26,7 @@ class ProjectManager(Role):
name: str = "Eve",
profile: str = "Project Manager",
goal: str = "break down tasks according to PRD/technical design, generate a task list, and analyze task "
"dependencies to start with the prerequisite modules",
"dependencies to start with the prerequisite modules",
constraints: str = "use same language as user requirement",
) -> None:
"""

View file

@ -8,6 +8,7 @@
Section 2.2.3.3 of RFC 135.
"""
import warnings
from pydantic import BaseModel, Field
from metagpt.actions import UserRequirement
@ -61,9 +62,12 @@ class Team(BaseModel):
Deprecated: This method will be removed in the future.
Please use the `run_project` method instead.
"""
warnings.warn("The 'start_project' method is deprecated and will be removed in the future. "
"Please use the 'run_project' method instead.",
DeprecationWarning, stacklevel=2)
warnings.warn(
"The 'start_project' method is deprecated and will be removed in the future. "
"Please use the 'run_project' method instead.",
DeprecationWarning,
stacklevel=2,
)
return self.run_project(idea=idea, send_to=send_to)
def _save(self):