Spaces:
Runtime error
Runtime error
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
@Time : 2023/5/11 14:43 | |
@Author : alexanderwu | |
@From : https://github.com/geekan/MetaGPT/blob/main/metagpt/actions/project_management.py | |
""" | |
from typing import List, Tuple | |
from autoagents.actions.action import Action | |
from autoagents.system.const import WORKSPACE_ROOT | |
from autoagents.system.utils.common import CodeParser | |
PROMPT_TEMPLATE = ''' | |
# Context | |
{context} | |
## Format example | |
{format_example} | |
----- | |
Role: You are a project manager; the goal is to break down tasks according to PRD/technical design, give a task list, and analyze task dependencies to start with the prerequisite modules | |
Requirements: Based on the context, fill in the following missing information, note that all sections are returned in Python code triple quote form seperatedly. Here the granularity of the task is a file, if there are any missing files, you can supplement them | |
Attention: Use '##' to split sections, not '#', and '## <SECTION_NAME>' SHOULD WRITE BEFORE the code and triple quote. | |
## Required Python third-party packages: Provided in requirements.txt format | |
## Required Other language third-party packages: Provided in requirements.txt format | |
## Full API spec: Use OpenAPI 3.0. Describe all APIs that may be used by both frontend and backend. | |
## Logic Analysis: Provided as a Python list[str, str]. the first is filename, the second is class/method/function should be implemented in this file. Analyze the dependencies between the files, which work should be done first | |
## Task list: Provided as Python list[str]. Each str is a filename, the more at the beginning, the more it is a prerequisite dependency, should be done first | |
## Shared Knowledge: Anything that should be public like utils' functions, config's variables details that should make clear first. | |
## Anything UNCLEAR: Provide as Plain text. Make clear here. For example, don't forget a main entry. don't forget to init 3rd party libs. | |
''' | |
FORMAT_EXAMPLE = ''' | |
--- | |
## Required Python third-party packages | |
```python | |
""" | |
flask==1.1.2 | |
bcrypt==3.2.0 | |
""" | |
``` | |
## Required Other language third-party packages | |
```python | |
""" | |
No third-party ... | |
""" | |
``` | |
## Full API spec | |
```python | |
""" | |
openapi: 3.0.0 | |
... | |
description: A JSON object ... | |
""" | |
``` | |
## Logic Analysis | |
```python | |
[ | |
("game.py", "Contains ..."), | |
] | |
``` | |
## Task list | |
```python | |
[ | |
"game.py", | |
] | |
``` | |
## Shared Knowledge | |
```python | |
""" | |
'game.py' contains ... | |
""" | |
``` | |
## Anything UNCLEAR | |
We need ... how to start. | |
--- | |
''' | |
OUTPUT_MAPPING = { | |
"Required Python third-party packages": (str, ...), | |
"Required Other language third-party packages": (str, ...), | |
"Full API spec": (str, ...), | |
"Logic Analysis": (List[Tuple[str, str]], ...), | |
"Task list": (List[str], ...), | |
"Shared Knowledge": (str, ...), | |
"Anything UNCLEAR": (str, ...), | |
} | |
class WriteTasks(Action): | |
def __init__(self, name="CreateTasks", context=None, llm=None): | |
super().__init__(name, context, llm) | |
def _save(self, context, rsp): | |
ws_name = CodeParser.parse_str(block="Python package name", text=context[-1].content) | |
file_path = WORKSPACE_ROOT / ws_name / 'docs/api_spec_and_tasks.md' | |
file_path.write_text(rsp.content) | |
# Write requirements.txt | |
requirements_path = WORKSPACE_ROOT / ws_name / 'requirements.txt' | |
requirements_path.write_text(rsp.instruct_content.dict().get("Required Python third-party packages").strip('"\n')) | |
async def run(self, context): | |
prompt = PROMPT_TEMPLATE.format(context=context, format_example=FORMAT_EXAMPLE) | |
rsp = await self._aask_v1(prompt, "task", OUTPUT_MAPPING) | |
self._save(context, rsp) | |
return rsp | |
class AssignTasks(Action): | |
async def run(self, *args, **kwargs): | |
# Here you should implement the actual action | |
pass |