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