import os from io import BytesIO import streamlit as st import fitz # PyMuPDF import requests from dotenv import load_dotenv from config import supabase, HF_API_TOKEN, HF_HEADERS, HF_MODELS from utils import ( evaluate_resumes, generate_pdf_report, store_in_supabase, extract_email, score_candidate, parse_resume, summarize_resume, extract_keywords, generate_interview_questions_from_summaries, ) # ------------------------- Main App Function ------------------------- def main(): st.set_page_config(page_title="TalentLens.AI", layout="centered") st.markdown("

TalentLens.AI

", unsafe_allow_html=True) st.divider() st.markdown("

AI-Powered Intelligent Resume Screening

", unsafe_allow_html=True) # Upload resumes (limit: 10 files) uploaded_files = st.file_uploader( "Upload Resumes (PDF Only, Max: 10)", accept_multiple_files=True, type=["pdf"] ) if uploaded_files and len(uploaded_files) > 10: st.error("⚠️ You can upload a maximum of 10 resumes at a time.") return # Input job description job_description = st.text_area("Enter Job Description") # Evaluation trigger if st.button("Evaluate Resumes"): if not job_description: st.error("⚠️ Please enter a job description.") return if not uploaded_files: st.error("⚠️ Please upload at least one resume.") return st.write("### 📊 Evaluating Resumes...") # Resume Evaluation shortlisted, removed_candidates = evaluate_resumes(uploaded_files, job_description) if not shortlisted: st.warning("⚠️ No resumes matched the required keywords.") else: st.subheader("✅ Shortlisted Candidates:") for candidate in shortlisted: st.write(f"**{candidate['name']}**") # Generate Interview Questions questions = generate_interview_questions_from_summaries(shortlisted) st.subheader("🧠 Suggested Interview Questions:") for idx, q in enumerate(questions, 1): st.markdown(f"{q}") # Downloadable PDF Report pdf_report = generate_pdf_report(shortlisted, questions) st.download_button("Download Shortlist Report", pdf_report, "shortlist.pdf") # Removed Candidates Info if removed_candidates: st.subheader("❌ Resumes Removed:") for removed in removed_candidates: st.write(f"**{removed['name']}** - {removed['reason']}") # ------------------------- Run the App ------------------------- if __name__ == "__main__": main()