|
import logging |
|
import os |
|
from pathlib import Path |
|
from dotenv import load_dotenv |
|
from crewai import Crew |
|
from langchain_groq import ChatGroq |
|
import gradio as gr |
|
from resume import extract_text_from_file |
|
from crew import FormFillingAgents, FormFillingTasks |
|
|
|
|
|
def build_gradio_app(): |
|
"""Builds the Gradio interface for the form-filling app.""" |
|
logging.basicConfig(level=logging.INFO) |
|
|
|
|
|
resume_input = gr.File(label="Upload Resume", file_types=[".pdf", ".docx", ".txt"]) |
|
job_desc_input = gr.Textbox(label="Job Description", placeholder="Enter job description here") |
|
questions_input = gr.Textbox(label="Questions", placeholder="Enter questions, separated by commas") |
|
api_key_input = gr.Textbox(label="GROQ API Key", placeholder="Enter your GROQ API Key") |
|
|
|
|
|
answers = gr.Textbox(label="Tailored Answer to the Question Based on Your Resume", interactive=False) |
|
|
|
|
|
def process_inputs(api_key, resume_input, job_desc, questions): |
|
try: |
|
|
|
logging.info("Received API Key, Resume, Job Description, and Questions.") |
|
logging.info(f"API Key: {api_key}") |
|
|
|
if api_key: |
|
env_path = Path(__file__).parent / ".env" |
|
with open(env_path, "w") as env_file: |
|
env_file.write(f"GROQ_API_KEY={api_key}") |
|
logging.info("API Key saved to .env file.") |
|
else: |
|
logging.warning("No API Key provided.") |
|
|
|
load_dotenv() |
|
|
|
|
|
llm = ChatGroq( |
|
model="groq/llama-3.1-8b-instant", |
|
api_key=os.getenv("GROQ_API_KEY"), |
|
) |
|
logging.info("Language model initialized successfully.") |
|
|
|
|
|
resume_text = extract_text_from_file(resume_input) |
|
logging.info("Resume text extracted.") |
|
|
|
|
|
agents = FormFillingAgents() |
|
analysis_agent = agents.resume_analysis_agent(llm) |
|
qa_agent = agents.question_answering_agent(llm) |
|
tasks = FormFillingTasks() |
|
profile_task = tasks.profile_analysis_task(analysis_agent, resume_text, job_desc) |
|
qa_task = tasks.question_answering_task(qa_agent, questions) |
|
|
|
|
|
crew = Crew( |
|
agents=[analysis_agent, qa_agent], |
|
tasks=[profile_task, qa_task], |
|
verbose=True, |
|
max_rpm=29, |
|
) |
|
results = crew.kickoff() |
|
logging.info("Pipeline executed successfully.") |
|
return str(results) |
|
|
|
except Exception as e: |
|
logging.error(f"Error during processing: {e}") |
|
return f"Error during processing: {str(e)}" |
|
|
|
interface = gr.Interface( |
|
fn=process_inputs, |
|
inputs=[api_key_input, resume_input, job_desc_input, questions_input], |
|
outputs=[answers], |
|
title="Form Filling Assistant", |
|
description="Upload a resume, provide a job description, input API key, and ask questions to get tailored responses.", |
|
) |
|
interface.launch() |
|
|
|
if __name__ == '__main__': |
|
build_gradio_app() |
|
|