Spaces:
Running
Running
| """CV Parser dashboard β entry page. | |
| Run from the project root: | |
| streamlit run dashboard/app.py | |
| """ | |
| import streamlit as st | |
| import config | |
| from lib.ui import model_selector | |
| st.set_page_config(page_title="CV Parser Dashboard", page_icon="π§©", layout="wide") | |
| def model_status_banner(lm): | |
| if lm.is_fallback: | |
| st.warning( | |
| f"**Demo mode β no fine-tuned model loaded.** Source: `{lm.source}`. " | |
| "The classification head is untrained, so entity predictions are " | |
| "**not meaningful** yet. Publish a model from the **Manage Model** page " | |
| f"to `{config.PRIMARY_MODEL_ID}`, or pick one in the sidebar.", | |
| icon="β οΈ", | |
| ) | |
| else: | |
| st.success(f"Model loaded β {lm.source}", icon="β ") | |
| st.title("π§© Automated CV Parser") | |
| st.caption("WQF7007 NLP Β· Resume NER Β· extracts Job Titles, Skills & Education") | |
| lm = model_selector() | |
| model_status_banner(lm) | |
| st.markdown( | |
| """ | |
| ### What's inside | |
| - **π Live Parser** β paste or upload a single CV and watch it get **tokenized and | |
| classified** in real time: sub-word token chips coloured by predicted label, the | |
| original text with highlighted entities, and a clean structured summary. | |
| - **π Analytics** β upload a batch of CVs (PDF / DOCX / TXT) and the page builds a | |
| **skills word cloud** plus top Job Titles / Skills / Education charts across the set. | |
| Use the sidebar to switch pages. | |
| """ | |
| ) | |
| with st.expander("βΉοΈ How the model is resolved"): | |
| st.markdown( | |
| f""" | |
| The sidebar **Model** picker selects which weights run. Options: | |
| 1. **β Best model (Hub)** β `{config.PRIMARY_MODEL_ID}`. The team's current | |
| best model; what the deployed app loads by default. | |
| 2. **Custom HF model ID** β type any Hub repo id to load it live. | |
| 3. **Local export** β `exported_models/β¦` folders (only on dev machines). | |
| 4. **Demo fallback** β `{config.FALLBACK_MODEL}` with a random head | |
| (UI works, predictions don't). | |
| Teammates update the live model from the **π Manage Model** page (uploads | |
| an exported model and pushes it to the Hub repo) β no redeploy needed. | |
| After updating, click **π Reload model** in the sidebar. | |
| Label scheme: `{', '.join(config.LABELS)}` | |
| """ | |
| ) | |