|
|
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_dotenv() |
|
|
|
|
|
|
|
|
if not os.getenv("OPENAI_API_KEY"): |
|
|
st.error("Please set your OPENAI_API_KEY in the .env file") |
|
|
st.stop() |
|
|
|
|
|
|
|
|
st.set_page_config( |
|
|
page_title="Resume Analyzer & Job Matcher", |
|
|
page_icon="📄", |
|
|
layout="wide" |
|
|
) |
|
|
|
|
|
|
|
|
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() |
|
|
|
|
|
|
|
|
uploaded_file = render_upload_section() |
|
|
|
|
|
|
|
|
if uploaded_file is not None and st.button("Analyze Resume"): |
|
|
with st.spinner("Analyzing your resume..."): |
|
|
|
|
|
resume_parser = ResumeParser() |
|
|
resume_data = resume_parser.parse(uploaded_file) |
|
|
st.session_state.resume_data = resume_data |
|
|
|
|
|
|
|
|
langflow_chain = LangflowChain() |
|
|
analysis_results = langflow_chain.analyze_resume(resume_data) |
|
|
|
|
|
|
|
|
job_matcher = JobMatcher() |
|
|
job_matches = job_matcher.find_matches(analysis_results) |
|
|
|
|
|
|
|
|
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!") |
|
|
|
|
|
|
|
|
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() |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|
|
|
|
|
|
|
|
|
|