Spaces:
Sleeping
Sleeping
| from typing import Any, Dict | |
| import streamlit as st | |
| def display_skill_validation(analysis: Dict[str, Any]) -> None: | |
| details = analysis.get("skill_validation_details") or {} | |
| validated = details.get("validated", []) | |
| unvalidated = details.get("unvalidated", []) | |
| total = details.get("total", len(validated) + len(unvalidated)) | |
| pct = details.get("validation_pct", 0.0) | |
| st.markdown("### β Skill Validation") | |
| if total == 0: | |
| st.info("No skills detected on the resume.") | |
| return | |
| c1, c2, c3 = st.columns(3) | |
| c1.metric("Total Skills", total) | |
| c2.metric("Validated", len(validated)) | |
| c3.metric("Validation %", f"{pct:.0f}%") | |
| st.progress(min(max(pct / 100.0, 0.0), 1.0)) | |
| if validated: | |
| with st.expander(f"β Validated skills ({len(validated)})", expanded=False): | |
| for entry in validated: | |
| skill = entry.get("skill", "?") | |
| projects = entry.get("projects", []) or [] | |
| similarity = entry.get("similarity") | |
| project_text = ", ".join(projects[:3]) if projects else "experience section" | |
| sim_text = f" ({similarity * 100:.0f}% match)" if isinstance(similarity, (int, float)) else "" | |
| st.markdown(f"- **{skill}**{sim_text} β demonstrated in: {project_text}") | |
| if unvalidated: | |
| with st.expander(f"β οΈ Unvalidated skills ({len(unvalidated)})", expanded=False): | |
| st.caption("These skills are listed but not tied to a project or experience bullet.") | |
| for skill in unvalidated: | |
| st.markdown(f"- β {skill}") | |