Spaces:
Running
Running
import pandas as pd | |
from typing import List | |
from pydantic import BaseModel, Field | |
from crewai import Agent, Task, Crew | |
class TaskEstimate(BaseModel): | |
task_name: str = Field(..., description="Name of the task") | |
estimated_time_hours: float = Field(..., description = "Estimated time to complete the task in hours") | |
required_resources: List[str] = Field(..., description = "List of resources required to complete the task") | |
class Milestone(BaseModel): | |
milestone_name: str = Field(..., description = "Name of the milestone") | |
tasks: List[str] = Field(..., description = "List of task IDs associated with this milestone") | |
class ProjectPlan(BaseModel): | |
tasks: List[TaskEstimate] = Field(..., description = "List of tasks with their estimates") | |
milestones: List[Milestone] = Field(..., description = "List of project milestones") | |
class ProjectPlanner: | |
def __init__(self, agents_config, tasks_config, llm): | |
# Creating Agents | |
project_planning_agent = Agent(config = agents_config['project_planning_agent'], llm = llm) | |
estimation_agent = Agent(config = agents_config['estimation_agent'], llm = llm) | |
resource_allocation_agent = Agent(config = agents_config['resource_allocation_agent'], llm = llm) | |
# Creating Tasks | |
task_breakdown = Task(config = tasks_config['task_breakdown'], agent = project_planning_agent) | |
time_resource_estimation = Task(config = tasks_config['time_resource_estimation'], agent = estimation_agent) | |
resource_allocation = Task(config = tasks_config['resource_allocation'], agent = resource_allocation_agent, | |
output_pydantic = ProjectPlan # This is the structured output we want | |
) | |
# Creating Crew | |
self.crew = Crew( | |
agents = [project_planning_agent, estimation_agent, resource_allocation_agent], | |
tasks = [task_breakdown, time_resource_estimation, resource_allocation], | |
verbose = True | |
) | |
def getPlanning(self, project_details): | |
results = self.crew.kickoff(inputs = project_details) | |
task_breakdown = results.pydantic.model_dump()['tasks'] | |
df_tasks = pd.DataFrame(task_breakdown) | |
milestones = results.pydantic.model_dump()['milestones'] | |
df_milestones = pd.DataFrame(milestones) | |
return df_tasks, df_milestones |