import streamlit as st from utils.cv_processor import CVProcessor from utils.rag_agent import RAGInterviewAgent from utils.evaluator import evaluate_answers from utils.report_generator import generate_report import os def main(): st.set_page_config(page_title="RAG Interview Agent", layout="wide") st.title("🧠 RAG-Powered Interview Agent") # Initialize session state if 'stage' not in st.session_state: st.session_state.stage = "upload" if 'answers' not in st.session_state: st.session_state.answers = [] # CV Upload and Processing if st.session_state.stage == "upload": with st.form("candidate_info"): job_role = st.selectbox("Select job role:", ["Software Engineer", "Data Scientist"]) cv_file = st.file_uploader("Upload CV (PDF/DOCX)", type=["pdf", "docx"]) if st.form_submit_button("Submit"): if cv_file: cv_path = f"data/temp_cv.{'pdf' if cv_file.type == 'application/pdf' else 'docx'}" with open(cv_path, "wb") as f: f.write(cv_file.getbuffer()) processor = CVProcessor() evaluation = processor.evaluate(cv_path, job_role) if evaluation["is_qualified"]: st.session_state.cv_summary = evaluation["cv_summary"] st.session_state.job_role = job_role st.session_state.stage = "interview" st.session_state.agent = RAGInterviewAgent(job_role, evaluation["cv_summary"]) st.rerun() else: st.error("CV doesn't meet requirements") # Interview Process elif st.session_state.stage == "interview": agent = st.session_state.agent question = agent.get_current_question() st.subheader(f"Question {agent.current_q + 1}/{len(agent.questions)}") st.write(question["text"]) answer = st.text_area("Your answer:") if st.button("Submit Answer"): evaluation = agent.evaluate_answer(answer) st.session_state.answers.append({ "question": question, "answer": answer, "evaluation": evaluation }) if agent.current_q < len(agent.questions) - 1: agent.next_question() else: st.session_state.stage = "results" st.rerun() # Results Display elif st.session_state.stage == "results": final_eval = evaluate_answers(st.session_state.answers) st.success("Interview Complete!") st.subheader(f"Overall Score: {final_eval['score']}/10") report_path = generate_report( st.session_state.job_role, st.session_state.cv_summary, st.session_state.answers, final_eval ) with open(report_path, "rb") as f: st.download_button("Download Report", f, "interview_report.pdf") if __name__ == "__main__": main()