pankajrajdeo's picture
Remove dot from requirements.txt and update project files
df0629c
Raw
History Blame Contribute Delete
4.68 kB
from crewai import Agent, Crew, Process, Task, LLM
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
from crewai.knowledge.source.pdf_knowledge_source import PDFKnowledgeSource
from .models import (
JobRequirements,
ResumeOptimization,
CompanyResearch,
InterviewQuestions
)
@CrewBase
class ResumeCrew():
"""ResumeCrew for resume optimization and interview preparation"""
agents_config = 'config/agents.yaml'
tasks_config = 'config/tasks.yaml'
def __init__(self, model: str, openai_api_key: str, serper_api_key: str, resume_pdf_path: str) -> None:
"""
Initialize ResumeCrew with the selected model and user-provided API keys.
"""
self.model = model
self.openai_api_key = openai_api_key # Store user-provided OpenAI API Key
self.serper_api_key = serper_api_key # Store user-provided Serper API Key
self.resume_pdf = PDFKnowledgeSource(file_paths=[resume_pdf_path]) # Use user-uploaded resume
@agent
def resume_analyzer(self) -> Agent:
return Agent(
config=self.agents_config['resume_analyzer'],
verbose=True,
llm=LLM(self.model, api_key=self.openai_api_key), # Use user-provided OpenAI API Key
knowledge_sources=[self.resume_pdf]
)
@agent
def job_analyzer(self) -> Agent:
return Agent(
config=self.agents_config['job_analyzer'],
verbose=True,
tools=[ScrapeWebsiteTool()],
llm=LLM(self.model, api_key=self.openai_api_key) # Use dynamic API key
)
@agent
def company_researcher(self) -> Agent:
return Agent(
config=self.agents_config['company_researcher'],
verbose=True,
tools=[SerperDevTool(api_key=self.serper_api_key)], # Use user-provided Serper API Key
llm=LLM(self.model, api_key=self.openai_api_key), # Use dynamic API key
knowledge_sources=[self.resume_pdf]
)
@agent
def resume_writer(self) -> Agent:
return Agent(
config=self.agents_config['resume_writer'],
verbose=True,
llm=LLM(self.model, api_key=self.openai_api_key)
)
@agent
def report_generator(self) -> Agent:
return Agent(
config=self.agents_config['report_generator'],
verbose=True,
llm=LLM(self.model, api_key=self.openai_api_key)
)
@agent
def interview_question_generator(self) -> Agent:
return Agent(
config=self.agents_config['interview_question_generator'],
verbose=True,
llm=LLM(self.model, api_key=self.openai_api_key)
)
@task
def analyze_job_task(self) -> Task:
return Task(
config=self.tasks_config['analyze_job_task'],
output_file='output/job_analysis.json',
output_pydantic=JobRequirements
)
@task
def optimize_resume_task(self) -> Task:
return Task(
config=self.tasks_config['optimize_resume_task'],
output_file='output/resume_optimization.json',
output_pydantic=ResumeOptimization
)
@task
def research_company_task(self) -> Task:
return Task(
config=self.tasks_config['research_company_task'],
output_file='output/company_research.json',
output_pydantic=CompanyResearch
)
@task
def generate_resume_task(self) -> Task:
return Task(
config=self.tasks_config['generate_resume_task'],
output_file='output/optimized_resume.md'
)
@task
def generate_report_task(self) -> Task:
return Task(
config=self.tasks_config['generate_report_task'],
output_file='output/final_report.md'
)
@task
def generate_interview_questions_task(self) -> Task:
return Task(
config=self.tasks_config['generate_interview_questions_task'],
output_file='output/interview_questions.json',
output_pydantic=InterviewQuestions
)
@task
def generate_interview_questions_md_task(self) -> Task:
return Task(
config=self.tasks_config['generate_interview_questions_md_task'],
output_file='output/interview_questions.md'
)
@crew
def crew(self) -> Crew:
return Crew(
agents=self.agents,
tasks=self.tasks,
verbose=True,
process=Process.sequential,
knowledge_sources=[self.resume_pdf]
)