kaushikpaul's picture
Deploy Space
ca22196 verified
Raw
History Blame Contribute Delete
3.06 kB
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,
)