fixbug: write to folder

This commit is contained in:
黄伟韬 2024-08-05 19:17:43 +08:00
parent 654ed131d7
commit fd080fa633
8 changed files with 16 additions and 11 deletions

View file

@ -83,7 +83,7 @@ class WriteDesign(Action):
prd_filename (str, optional): The filename of the Product Requirement Document (PRD).
legacy_design_filename (str, optional): The filename of the legacy design document.
extra_info (str, optional): Additional information to be included in the system design.
output_pathname (str, optional): The output path name of file that the system design should be saved to.
output_pathname (str, optional): The output path name of file that the system design should be saved to. The path name must must end with '.json'.
Returns:
str: The file path of the generated system design.

View file

@ -62,7 +62,7 @@ class WriteTasks(Action):
Args:
user_requirement (str, optional): A string specifying the user's requirements. Defaults to an empty string.
design_filename (str): The filename of the project system design file. Defaults to an empty string.
design_filename (str): The filename of the project system design file. The path name must must end with '.json'. Defaults to an empty string.
output_pathname (str, optional): The output path name of file that the project schedule should be saved to.
**kwargs: Additional keyword arguments.
@ -73,10 +73,11 @@ class WriteTasks(Action):
# Write a project schedule with a given system design.
>>> design_filename = "/absolute/path/to/snake_game/docs/system_design.json"
>>> output_pathname = "/absolute/path/to/snake_game/docs/project_schedule.json"
>>> user_requirement = "Write project schedule for a snake game following these requirements:..."
>>> action = WriteTasks()
>>> result = await action.run(design_filename=design_filename, output_pathname=output_pathname)
>>> result = await action.run(user_requirement=user_requirement,design_filename=design_filename, output_pathname=output_pathname)
>>> print(result)
The project schedule is at /absolute/path/to/snake_game/docs/project_schedule.json
The project schedule is at /absolute/path/to/nake_game/docs/project_schedule.json
# Write a project schedule with a user requirement.
>>> user_requirement = "Write project schedule for a snake game following these requirements: ..."

View file

@ -12,7 +12,7 @@ from metagpt.actions.action_node import ActionNode
REQUIRED_PYTHON_PACKAGES = ActionNode(
key="Required Python packages",
expected_type=List[str],
instruction="Provide required Python packages in requirements.txt format.",
instruction="Provide required Python packages in requirements.txt format. The response language should correspond to the context and requirements.",
example=["flask==1.1.2", "bcrypt==3.2.0"],
)

View file

@ -98,7 +98,7 @@ class WritePRD(Action):
Args:
user_requirement (str): A string detailing the user's requirements.
output_pathname (str, optional): The path name of file that the output document should be saved to. Defaults to "".
output_pathname (str, optional): The path name of file that the output document should be saved to. The path name must must end with '.json'. Defaults to "".
legacy_prd_filename (str, optional): The file path of the legacy Product Requirement Document to use as a reference. Defaults to "".
extra_info (str, optional): Additional information to include in the document. Defaults to "".
**kwargs: Additional keyword arguments.

View file

@ -56,7 +56,7 @@ In your response, include at least one command.
Some text indicating your thoughts before JSON is required, such as what tasks have been completed, what tasks are next, how you should update the plan status, respond to inquiry, or seek for help. Then a json array of commands. You must output ONE and ONLY ONE json array. DON'T output multiple json arrays with thoughts between them.
Output should adhere to the following format.
{thought_guidance}
Finally, combine your thoughts, describe what you want to do conscisely in 20 words, including which process you will taked and whether you will end, then follow your thoughts to list the commands, adhering closely to the instructions provided.
Finally, combine your thoughts, describe what you want to do, including which process you will taked and whether you will end, then follow your thoughts to list the commands, adhering closely to the instructions provided.
```json
[
{{
@ -71,7 +71,7 @@ Notice: your output JSON data section must start with **```json [**
THOUGHT_GUIDANCE = """
First, describe the actions you have taken recently.
Second, describe the messages you have received recently, with a particular emphasis on messages from users.
Third, describe the plan status and the current task. Review the histroy, if `Current Task` has been undertaken and completed by you or anyone, you MUST use the **Plan.finish_current_task** command to finish it first before taking any action, the command will automatically move you to the next task.
Third, describe the plan status and the current task. Review the histroy, if `Current Task` has been undertaken and completed by you or anyone, you MUST use the **Plan.finish_current_task** command to finish it first, the command will automatically move you to the next task.
Fourth, describe any necessary human interaction. Use **RoleZero.reply_to_human** to report your progress if you complete a task or the overall requirement, pay attention to the history, DON'T repeat reporting. Use **RoleZero.ask_human** if you failed the current task, unsure of the situation encountered, need any help from human, or executing repetitive commands but receiving repetitive feedbacks without making progress.
Fifth, describe if you should terminate, you should use **end** command to terminate if any of the following is met:
- You have completed the overall user requirement

View file

@ -30,6 +30,7 @@ Note:
10. Do not use escape characters in json data, particularly within file paths.
11. Analyze the capabilities of team members and assign tasks to them based on user Requirements. If the requirements ask to ignore certain tasks, follow the requirements.
12. Add default web technologies: HTML (*.html), CSS (*.css), and JavaScript (*.js) to your requirements.If no specific programming language is required, include these technologies in the project requirements. Using instruction to forward this information to your team members.
13. If you find there are no specific tasks or user requirements, you must ask a human for advice on what to do next.
"""
TL_THOUGHT_GUIDANCE = (
THOUGHT_GUIDANCE

View file

@ -368,6 +368,9 @@ class RoleZero(Role):
elif cmd["command_name"] == "end":
self._set_state(-1)
# When all the plans have been completed, clear the plan's goal and wait for the next requirements.
if self.planner.current_task is None:
self.planner.plan.goal = ""
command_output = ""
# output from bash.run may be empty, add decorations to the output to ensure visibility.
@ -376,10 +379,10 @@ class RoleZero(Role):
tool_output = await tool_obj(**cmd["args"])
if len(tool_output) <= 10:
command_output += (
f"\n[command]: {cmd['args']['cmd']} \n [command output] : {tool_output} (pay attention to this.)"
f"\n[command]: {cmd['args']['cmd']} \n[command output] : {tool_output} (pay attention to this.)"
)
else:
command_output += f"\n[command]: {cmd['args']['cmd']} \n [command output] : {tool_output}"
command_output += f"\n[command]: {cmd['args']['cmd']} \n[command output] : {tool_output}"
return command_output
def _get_plan_status(self) -> Tuple[str, str]:

View file

@ -25,7 +25,7 @@ class Editor:
self.resource = EditorReporter()
def write(self, path: str, content: str):
"""Write the whole content to a file. When used, make sure content arg contains the full content of the file."""
"""Write the whole content to a file. The path must be a file path with a specific file extension. When used, make sure content arg contains the full content of the file."""
if "\n" not in content and "\\n" in content:
# A very raw rule to correct the content: If 'content' lacks actual newlines ('\n') but includes '\\n', consider
# replacing them with '\n' to potentially correct mistaken representations of newline characters.