File size: 2,469 Bytes
cb0c53a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import streamlit as st
from resume_parser import ResumeParser
from job_matcher import JobMatcher
from langflow_chain import LangflowChain
from ui_components import (
    render_header,
    render_upload_section,
    render_results_section,
    render_footer
)
import os
from dotenv import load_dotenv

# Load environment variables
load_dotenv()

# Check if API key is set
if not os.getenv("OPENAI_API_KEY"):
    st.error("Please set your OPENAI_API_KEY in the .env file")
    st.stop()

# Set page configuration
st.set_page_config(
    page_title="Resume Analyzer & Job Matcher",
    page_icon="📄",
    layout="wide"
)

# Initialize session state
if "resume_data" not in st.session_state:
    st.session_state.resume_data = None
    st.session_state.job_matches = None
    st.session_state.skill_gaps = None
    st.session_state.improvement_tips = None
    st.session_state.processed = False

def main():
    # Render header
    render_header()
    
    # Render upload section
    uploaded_file = render_upload_section()
    
    # Process the uploaded file
    if uploaded_file is not None and st.button("Analyze Resume"):
        with st.spinner("Analyzing your resume..."):
            # Parse resume
            resume_parser = ResumeParser()
            resume_data = resume_parser.parse(uploaded_file)
            st.session_state.resume_data = resume_data
            
            # Process with LLM
            langflow_chain = LangflowChain()
            analysis_results = langflow_chain.analyze_resume(resume_data)
            
            # Match jobs
            job_matcher = JobMatcher()
            job_matches = job_matcher.find_matches(analysis_results)
            
            # Store results in session state
            st.session_state.job_matches = analysis_results.get("job_matches", [])
            st.session_state.skill_gaps = analysis_results.get("skill_gaps", [])
            st.session_state.improvement_tips = analysis_results.get("improvement_tips", [])
            st.session_state.processed = True
            
            st.success("Resume analyzed successfully!")
    
    # Render results
    if st.session_state.processed:
        render_results_section(
            st.session_state.resume_data,
            st.session_state.job_matches,
            st.session_state.skill_gaps,
            st.session_state.improvement_tips
        )
    
    # Render footer
    render_footer()

if __name__ == "__main__":
    main()