Source code for backend.metagpt
import asyncio
import streamlit as st
from metagpt.roles import Architect, Engineer, ProductManager
from metagpt.roles import ProjectManager, QaEngineer
from metagpt.software_company import SoftwareCompany
from metagpt.config import CONFIG
from handlers.group_chat_handler import StreamlitCallbackHandler
from ui_elements.group_setting import MetaGPTSetting
[docs]
def run_metagpt(setting:MetaGPTSetting, characters:list['GroupAgentCharacter'],
idea:str):
with st.sidebar:
cost_container = st.empty()
cost_container.progress(0)
mapping = {Architect : 'Architect',
Engineer : 'Engineer',
ProductManager : 'Product Manager',
ProjectManager : 'Project Manager',
QaEngineer : 'QA Engineer'}
character_role_map = {}
for character in characters:
character_role_map[character.role] = character
company = SoftwareCompany()
roles_to_hire = [ProductManager, Architect, ProjectManager]
CONFIG.openai_api_key = setting.openai_api_key
# if implement or code_review
if setting.implement or setting.code_review:
# developing features: implement the idea
roles_to_hire.append(Engineer)
if setting.run_tests:
# developing features: run tests on the spot and identify bugs
# (bug fixing capability comes soon!)
roles_to_hire.append(QaEngineer)
role_objs_to_hire = []
for role in roles_to_hire:
role_name = mapping[role]
character = character_role_map[role_name]
options = {"name" : character.name,
"callback_handler" : StreamlitCallbackHandler(character.icon,
setting.investment,
cost_container)
}
if mapping[role] == 'Engineer':
options["use_code_review"] = setting.code_review
options["n_borg"] = 5
role_obj = role(**options)
role_objs_to_hire.append(role_obj)
company.hire(role_objs_to_hire)
company.invest(setting.investment)
company.start_project(idea)
asyncio.run(company.run(n_round=5))