Spaces:
Sleeping
Sleeping
| 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() | |