Spaces:
Running
Running
import chainlit as cl | |
from init_setup import ChainlitEnv | |
from metagpt.roles import ( | |
Architect, | |
Engineer, | |
ProductManager, | |
ProjectManager, | |
QaEngineer, | |
) | |
from metagpt.team import Team | |
# https://docs.chainlit.io/concepts/starters | |
async def chat_profile() -> list[cl.ChatProfile]: | |
"""Generates a chat profile containing starter messages which can be triggered to run MetaGPT | |
Returns: | |
list[chainlit.ChatProfile]: List of Chat Profile | |
""" | |
return [ | |
cl.ChatProfile( | |
name="MetaGPT", | |
icon="/public/MetaGPT-new-log.jpg", | |
markdown_description="It takes a **one line requirement** as input and outputs **user stories / competitive analysis / requirements / data structures / APIs / documents, etc.**, But `everything in UI`.", | |
starters=[ | |
cl.Starter( | |
label="Create a 2048 Game", | |
message="Create a 2048 game", | |
icon="/public/2048.jpg", | |
), | |
cl.Starter( | |
label="Write a cli Blackjack Game", | |
message="Write a cli Blackjack Game", | |
icon="/public/blackjack.jpg", | |
), | |
], | |
) | |
] | |
# https://docs.chainlit.io/concepts/message | |
async def startup(message: cl.Message) -> None: | |
"""On Message in UI, Create a MetaGPT software company | |
Args: | |
message (chainlit.Message): message by chainlist | |
""" | |
idea = message.content | |
company = Team(env=ChainlitEnv()) | |
# Similar to software_company.py | |
company.hire( | |
[ | |
ProductManager(), | |
Architect(), | |
ProjectManager(), | |
Engineer(n_borg=5, use_code_review=True), | |
QaEngineer(), | |
] | |
) | |
company.invest(investment=3.0) | |
company.run_project(idea=idea) | |
await company.run(n_round=5) | |
workdir = company.env.context.git_repo.workdir | |
files = company.env.context.git_repo.get_files(workdir) | |
files = "\n".join([f"{workdir}/{file}" for file in files if not file.startswith(".git")]) | |
await cl.Message( | |
content=f""" | |
Codes can be found here: | |
{files} | |
--- | |
Total cost: `{company.cost_manager.total_cost}` | |
""" | |
).send() | |