mirror of
https://github.com/crewAIInc/crewAI-examples.git
synced 2026-04-23 03:00:08 -04:00
created crew.py
This commit is contained in:
96
job-posting/src/job_posting/crew.py
Normal file
96
job-posting/src/job_posting/crew.py
Normal file
@@ -0,0 +1,96 @@
|
||||
from typing import List
|
||||
from crewai import Agent, Crew, Process, Task
|
||||
from crewai.project import CrewBase, agent, crew, task
|
||||
|
||||
# Check our tools documentations for more information on how to use them
|
||||
from crewai_tools import SerperDevTool, ScrapeWebsiteTool, WebsiteSearchTool, FileReadTool
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
web_search_tool = WebsiteSearchTool()
|
||||
seper_dev_tool = SerperDevTool()
|
||||
file_read_tool = FileReadTool(
|
||||
file_path='job_description_example.md',
|
||||
description='A tool to read the job description example file.'
|
||||
)
|
||||
|
||||
class ResearchRoleRequirements(BaseModel):
|
||||
"""Research role requirements model"""
|
||||
skills: List[str] = Field(..., description="List of recommended skills for the ideal candidate aligned with the company's culture, ongoing projects, and the specific role's requirements.")
|
||||
experience: List[str] = Field(..., description="List of recommended experience for the ideal candidate aligned with the company's culture, ongoing projects, and the specific role's requirements.")
|
||||
qualities: List[str] = Field(..., description="List of recommended qualities for the ideal candidate aligned with the company's culture, ongoing projects, and the specific role's requirements.")
|
||||
|
||||
@CrewBase
|
||||
class JobPostingCrew:
|
||||
"""JobPosting crew"""
|
||||
agents_config = 'config/agents.yaml'
|
||||
tasks_config = 'config/tasks.yaml'
|
||||
|
||||
@agent
|
||||
def research_agent(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['research_agent'],
|
||||
tools=[web_search_tool, seper_dev_tool],
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@agent
|
||||
def writer_agent(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['writer_agent'],
|
||||
tools=[web_search_tool, seper_dev_tool, file_read_tool],
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@agent
|
||||
def review_agent(self) -> Agent:
|
||||
return Agent(
|
||||
config=self.agents_config['review_agent'],
|
||||
tools=[web_search_tool, seper_dev_tool, file_read_tool],
|
||||
verbose=True
|
||||
)
|
||||
|
||||
@task
|
||||
def research_company_culture_task(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['research_company_culture_task'],
|
||||
agent=self.research_agent()
|
||||
)
|
||||
|
||||
@task
|
||||
def research_role_requirements_task(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['research_role_requirements_task'],
|
||||
agent=self.research_agent(),
|
||||
output_json=ResearchRoleRequirements
|
||||
)
|
||||
|
||||
@task
|
||||
def draft_job_posting_task(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['draft_job_posting_task'],
|
||||
agent=self.writer_agent()
|
||||
)
|
||||
|
||||
@task
|
||||
def review_and_edit_job_posting_task(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['review_and_edit_job_posting_task'],
|
||||
agent=self.review_agent()
|
||||
)
|
||||
|
||||
@task
|
||||
def industry_analysis_task(self) -> Task:
|
||||
return Task(
|
||||
config=self.tasks_config['industry_analysis_task'],
|
||||
agent=self.research_agent()
|
||||
)
|
||||
|
||||
@crew
|
||||
def crew(self) -> Crew:
|
||||
"""Creates the JobPostingCrew"""
|
||||
return Crew(
|
||||
agents=self.agents, # Automatically created by the @agent decorator
|
||||
tasks=self.tasks, # Automatically created by the @task decorator
|
||||
process=Process.sequential,
|
||||
verbose=2,
|
||||
)
|
||||
Reference in New Issue
Block a user