File size: 3,056 Bytes
784651e
 
1bd9ce8
 
 
ca22196
1bd9ce8
 
784651e
 
 
 
 
 
 
1bd9ce8
 
 
 
 
 
 
 
ca22196
 
 
 
 
1bd9ce8
 
 
ca22196
 
1bd9ce8
 
 
 
 
 
ca22196
 
1bd9ce8
 
784651e
1bd9ce8
 
 
 
 
 
 
ca22196
 
1bd9ce8
 
 
 
 
 
ca22196
 
1bd9ce8
 
784651e
1bd9ce8
 
 
 
 
 
 
ca22196
 
1bd9ce8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca22196
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import os

from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task

from .model_client import create_llm
from .tools.python_code_run_tool import PythonCodeRunTool

def is_running_in_hf_space() -> bool:
    """Returns True if running in a Hugging Face Space."""
    return os.environ.get("SPACE_ID") is not None

# If running in Hugging Face Space, then do not run code execution in docker
run_in_docker = "unsafe" if is_running_in_hf_space() else "safe"


@CrewBase
class EngineeringTeam():
    """EngineeringTeam crew"""

    agents_config = 'config/agents.yaml'
    tasks_config = 'config/tasks.yaml'

    def _agent_config(self, name: str) -> dict:
        config = dict(self.agents_config[name])
        config.pop("llm", None)
        return config

    @agent
    def engineering_lead(self) -> Agent:
        return Agent(
            config=self._agent_config('engineering_lead'),
            llm=create_llm(),
            verbose=True,
        )

    @agent
    def backend_engineer(self) -> Agent:
        return Agent(
            config=self._agent_config('backend_engineer'),
            llm=create_llm(),
            verbose=True,
            allow_code_execution=True,
            code_execution_mode=run_in_docker,
            max_execution_time=500, 
            max_retry_limit=3 
        )
    
    @agent
    def frontend_engineer(self) -> Agent:
        return Agent(
            config=self._agent_config('frontend_engineer'),
            llm=create_llm(),
            verbose=True,
        )
    
    @agent
    def test_engineer(self) -> Agent:
        return Agent(
            config=self._agent_config('test_engineer'),
            llm=create_llm(),
            verbose=True,
            allow_code_execution=True,
            code_execution_mode=run_in_docker,
            max_execution_time=500, 
            max_retry_limit=3 
        )

    @agent
    def python_code_runner(self) -> Agent:
        return Agent(
            config=self._agent_config('python_code_runner'),
            llm=create_llm(),
            verbose=True,
            tools=[PythonCodeRunTool()],
        )

    @task
    def design_task(self) -> Task:
        return Task(
            config=self.tasks_config['design_task']
        )

    @task
    def code_task(self) -> Task:
        return Task(
            config=self.tasks_config['code_task'],
        )

    @task
    def frontend_task(self) -> Task:
        return Task(
            config=self.tasks_config['frontend_task'],
        )

    @task
    def test_task(self) -> Task:
        return Task(
            config=self.tasks_config['test_task'],
        )

    @task
    def python_code_run_task(self) -> Task:
        return Task(
            config=self.tasks_config['python_code_run_task']
        )

    @crew
    def crew(self) -> Crew:
        """Creates the research crew"""
        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True,
        )