Pravincoder's picture
Create app.py
0f1b5d3 verified
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)
# Define input elements
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")
# Define output elements
answers = gr.Textbox(label="Tailored Answer to the Question Based on Your Resume", interactive=False)
# Processing function
def process_inputs(api_key, resume_input, job_desc, questions):
try:
# Debugging
logging.info("Received API Key, Resume, Job Description, and Questions.")
logging.info(f"API Key: {api_key}")
# Save API key to .env file it the user has session active
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()
# Initialize language model
llm = ChatGroq(
model="groq/llama-3.1-8b-instant",
api_key=os.getenv("GROQ_API_KEY"),
)
logging.info("Language model initialized successfully.")
# Extract text from resume
resume_text = extract_text_from_file(resume_input)
logging.info("Resume text extracted.")
# Initialize agents and tasks
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)
# Run Crew pipeline
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)}"
# Gradio interface
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()