cvmatcher / src /crew.py
Chirag20's picture
Initial deployment: job application intelligence agent
ec55f11
import os
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parents[1]
os.environ["XDG_DATA_HOME"] = str(PROJECT_ROOT / ".local" / "share")
from crewai import Crew, Process
# pyrefly: ignore [missing-import]
from src.tasks.tasks import (
cv_parsing_task,
jd_analysis_task,
company_research_task,
gap_analysis_task,
cv_optimization_task,
outreach_writing_task
)
# pyrefly: ignore [missing-import]
from src.agents.agents import (
cv_parser_agent,
jd_analyzer_agent,
company_research_agent,
gap_analyst_agent,
cv_optimizer_agent,
outreach_writer_agent
)
def build_crew(cv_path: str, jd_source: str, company_name: str, city: str):
cv_parser = cv_parser_agent()
jd_analyzer = jd_analyzer_agent()
company_researcher = company_research_agent()
gap_analyst = gap_analyst_agent()
cv_optimizer = cv_optimizer_agent()
outreach_writer = outreach_writer_agent()
agents = [
cv_parser,
jd_analyzer,
company_researcher,
gap_analyst,
cv_optimizer,
outreach_writer
]
# Create tasks with explicit context dependencies
cv_task = cv_parsing_task(cv_path, cv_parser)
jd_task = jd_analysis_task(jd_source, jd_analyzer)
company_task = company_research_task(company_name, city, company_researcher)
gap_task = gap_analysis_task(gap_analyst, cv_task=cv_task, jd_task=jd_task)
optimization_task = cv_optimization_task(
cv_optimizer,
cv_task=cv_task,
jd_task=jd_task,
gap_task=gap_task,
company_task=company_task
)
outreach_task = outreach_writing_task(
outreach_writer,
cv_task=cv_task,
jd_task=jd_task,
gap_task=gap_task,
company_task=company_task
)
tasks = [
cv_task,
jd_task,
company_task,
gap_task,
optimization_task,
outreach_task
]
crew = Crew(
agents=agents,
tasks=tasks,
process=Process.sequential,
verbose=True,
cache=False
)
return crew