File size: 1,943 Bytes
360d784
 
 
 
 
 
4e8e742
 
360d784
 
 
4e8e742
 
 
 
 
 
 
 
360d784
 
4e8e742
 
 
 
 
 
 
 
 
 
 
360d784
4e8e742
 
360d784
4e8e742
360d784
 
 
 
 
4e8e742
 
 
 
 
 
 
 
360d784
4e8e742
 
360d784
4e8e742
 
360d784
 
 
 
 
 
4e8e742
 
360d784
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import asyncio
import platform
import fire

from metagpt.roles import Architect, Engineer, ProductManager
from metagpt.roles import ProjectManager, QaEngineer
from metagpt.software_company import SoftwareCompany


async def startup(
    idea: str,
    investment: float = 3.0,
    n_round: int = 5,
    code_review: bool = False,
    run_tests: bool = False,
    implement: bool = True
):
    """Run a startup. Be a boss."""
    company = SoftwareCompany()
    company.hire([
        ProductManager(),
        Architect(),
        ProjectManager(),
    ])

    # if implement or code_review
    if implement or code_review:
        # developing features: implement the idea
        company.hire([Engineer(n_borg=5, use_code_review=code_review)])

    if run_tests:
        # developing features: run tests on the spot and identify bugs
        # (bug fixing capability comes soon!)
        company.hire([QaEngineer()])

    company.invest(investment)
    company.start_project(idea)
    await company.run(n_round=n_round)


def main(
    idea: str,
    investment: float = 3.0,
    n_round: int = 5,
    code_review: bool = False,
    run_tests: bool = False,
    implement: bool = False
):
    """
    We are a software startup comprised of AI. By investing in us,
    you are empowering a future filled with limitless possibilities.
    :param idea: Your innovative idea, such as "Creating a snake game."
    :param investment: As an investor, you have the opportunity to contribute
    a certain dollar amount to this AI company.
    :param n_round:
    :param code_review: Whether to use code review.
    :return:
    """
    if platform.system() == "Windows":
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(startup(idea, investment, n_round,
                code_review, run_tests, implement))


if __name__ == '__main__':
    fire.Fire(main)