Resume_QA_Bot / app.py
AnnaMathews's picture
Update app.py
0db47a5 verified
import os
import gradio as gr
from llama_index.readers.file import PDFReader
from llama_index.core import VectorStoreIndex
from llama_index.llms.openai import OpenAI
# Set API key (best practice: use HF secrets in actual deployment)
os.environ['OPENAI_API_KEY'] = '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'
# Global vars
query_engine = None
interview_questions = []
resume_summary = ""
# Step 1: Load Resume
def load_resume(file):
global query_engine, interview_questions, resume_summary
reader = PDFReader()
documents = reader.load_data(file=file.name)
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
# Summarize resume
resume_summary = query_engine.query("Summarize the key points in this resume")
# Generate interview questions
q_prompt = "Generate 5 interview questions based on this resume:\n" + str(resume_summary)
interview_questions.clear()
for i in range(5):
q = query_engine.query(q_prompt + f"\nQuestion {i+1}")
interview_questions.append(str(q))
return f"βœ… Resume uploaded.\n\nπŸ“ Summary:\n{resume_summary}"
# Step 2: Show Questions
def show_questions():
if not interview_questions:
return "❌ Please upload and analyze a resume first."
return "\n".join([f"{i+1}. {q}" for i, q in enumerate(interview_questions)])
# Step 3: Evaluate Answer
def evaluate_answer(answer):
if not answer.strip():
return "⚠️ Please provide an answer."
word_count = len(answer.split())
score = min(word_count // 10, 5)
stars = "⭐" * score
return f"βœ… Answer received.\nScore: {stars} ({score}/5)"
# Step 4: Rate Resume
def rate_resume():
if not resume_summary:
return "❌ Upload a resume first."
rating = query_engine.query("Evaluate and rate the quality of this resume from 1 to 10. Only return the number.")
return f"πŸ“Š Resume Rating: {rating}/10"
# Interface layout
with gr.Blocks() as demo:
gr.Markdown("# πŸ€– Resume Interview Bot\nUpload your resume, get interview questions, answer them, and get feedback!")
with gr.Row():
resume_input = gr.File(label="πŸ“„ Upload Resume (.pdf)", file_types=[".pdf"])
resume_status = gr.Textbox(label="Resume Summary", lines=6)
gr.Button("Analyze Resume").click(load_resume, inputs=resume_input, outputs=resume_status)
gr.Markdown("### 🎯 Generated Interview Questions")
question_box = gr.Textbox(label="Questions", lines=7)
gr.Button("Get Questions").click(show_questions, outputs=question_box)
gr.Markdown("### πŸ—£οΈ Answer a Question")
answer_input = gr.Textbox(label="Your Answer")
answer_result = gr.Textbox(label="Feedback", interactive=False)
gr.Button("Submit Answer").click(evaluate_answer, inputs=answer_input, outputs=answer_result)
gr.Markdown("### πŸ“ˆ Resume Quality Rating")
rating_output = gr.Textbox(label="Rating", interactive=False)
gr.Button("Rate Resume").click(rate_resume, outputs=rating_output)
demo.launch()