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