File size: 2,841 Bytes
56325dc
8f8f414
 
949011b
8f8f414
19ea0c5
edfcf73
19ea0c5
 
 
 
 
56325dc
 
edfcf73
8f8f414
 
edfcf73
8f8f414
 
 
 
0c91845
8f8f414
 
 
 
 
 
 
 
 
 
 
 
 
 
56325dc
8f8f414
c2bc50b
 
8f8f414
 
 
 
 
 
 
 
 
 
 
 
 
949011b
 
 
 
 
 
8f8f414
 
 
 
 
 
56325dc
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import streamlit as st
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
)
from config import supabase
from config import HF_API_TOKEN, HF_HEADERS, HF_MODELS
import fitz  # PyMuPDF
from io import BytesIO
from dotenv import load_dotenv
import os
import requests

def main():
    st.set_page_config(page_title="TalentLens.AI", layout="centered")

    st.markdown("<h1 style='text-align: center;'>TalentLens.AI</h1>", unsafe_allow_html=True)
    st.divider()
    st.markdown("<h3 style='text-align: center;'>AI-Powered Intelligent Resume Screening</h3>", unsafe_allow_html=True)

    # Limit resume uploads to 10
    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

    job_description = st.text_area("Enter Job Description")

    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
        #if uploaded_files and job_description:
        st.write("### ๐Ÿ“Š Evaluating Resumes...")
        
        # ๐Ÿ”น Extract required keywords dynamically from the job description
        # required_keywords = extract_keywords(job_description)
        # st.write(f"**Extracted Keywords:** {', '.join(required_keywords)}")

        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 PDF Report
            pdf_report = generate_pdf_report(shortlisted)
            st.download_button("Download Shortlist Report", pdf_report, "shortlist.pdf")
            
            # 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{idx}.** {q}")

        # ๐Ÿ”ป Display removed candidates due to missing keywords
        if removed_candidates:
            st.subheader("โŒ Resumes Removed:")
            for removed in removed_candidates:
                st.write(f"**{removed['name']}** - {removed['reason']}")

if __name__ == "__main__":
    main()