Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import tempfile | |
| from core.ingestion.docling_loader import load_and_convert_cv | |
| from core.parsing.extractor import extract_resume | |
| from core.processing.dataframe import resume_to_df, resume_to_dfs | |
| st.title("📊 Resume Details Extractor") | |
| # ---- session state init ---- | |
| if "processed" not in st.session_state: | |
| st.session_state.processed = False | |
| if "dfs" not in st.session_state: | |
| st.session_state.dfs = None | |
| uploaded_file = st.file_uploader("Upload CV (PDF)", type=["pdf"]) | |
| if not uploaded_file: | |
| st.session_state.processed = False | |
| st.session_state.dfs = None | |
| # ---- process only once ---- | |
| if uploaded_file and not st.session_state.processed: | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp: | |
| tmp.write(uploaded_file.read()) | |
| pdf_path = tmp.name | |
| text = load_and_convert_cv(pdf_path) | |
| data = extract_resume(text) | |
| dfs = resume_to_dfs(data) | |
| st.session_state.data = data | |
| st.session_state.dfs = dfs | |
| st.session_state.processed = True | |
| # ---- display from session (no recompute) ---- | |
| if st.session_state.processed and st.session_state.dfs is not None: | |
| dfs = st.session_state.dfs | |
| data = st.session_state.data # Ensure data is pulled from state | |
| # Display other tables (Experience, Education, etc.) | |
| for label, df in dfs.items(): | |
| st.subheader(label.replace("_", " ").title()) | |
| st.dataframe(df, use_container_width=True) | |
| csv = df.to_csv(index=False).encode("utf-8") | |
| st.download_button( | |
| "Download CSV", | |
| data=csv, | |
| file_name=f"{label}.csv", | |
| mime="text/csv" | |
| ) |