import streamlit as st from referentials import REFERENTIALS # Chargement des référentiels depuis un fichier from PyPDF2 import PdfReader from pocketgroq import GroqProvider # Fonction pour obtenir le fournisseur Groq def get_groq_provider(): if "api_key" not in st.session_state or not st.session_state.api_key: st.error("Veuillez entrer votre clé API Groq.") return None return GroqProvider(api_key=st.session_state.api_key) # Extraction de texte depuis un PDF def extract_text_from_pdf(file): try: reader = PdfReader(file) text = " ".join(page.extract_text() for page in reader.pages if page.extract_text()) return text except Exception as e: st.error(f"Erreur lors de l'extraction du texte : {str(e)}") return None # Analyse du CV avec Groq et référentiel def analyze_cv_with_groq(cv_text, referential): groq = get_groq_provider() if not groq: return "Erreur : clé API non fournie." referential_data = REFERENTIALS.get(referential, {}) general_requirements = referential_data.get("General_Requirements", {}) qualifications = referential_data.get("Qualifications", {}) audit_experience = referential_data.get("Audit_Experience", {}) advanced_requirements = referential_data.get("Advanced_Requirements", {}) prompt = f""" Vous êtes un expert en évaluation des compétences selon les référentiels GFSI ({referential}). Analysez ce CV, sans citer le nom du candidat (toujours faire référence en le nommant : le candidat), pour vérifier sa conformité avec les exigences suivantes : Général : {general_requirements} Qualifications : {qualifications} Expérience en audit : {audit_experience} Exigences avancées : {advanced_requirements} Contenu du CV : {cv_text} Fournissez une analyse détaillée rédigée en langue française , de manière prefessionnelle et complète, en identifiant : 1. Les exigences remplies. 2. Les lacunes ou non-conformités. 3. Des recommandations pour combler les lacunes par rapports aux exigences strictes du référentiel. Il faut rester au plus proche des exigences des référentiels , ne pas ajouter des exigences, toujours faire une vérification sur la base de la chain of thoughts avec un réévaluation a chaque fois pour confirmer qu'il s'agit bien d'exigences demandés par le referentiel choisi dans REFERENTIALS.keys il ne faut evaluer le cv que sur le referentiel choisi , il ne faut pas mélanger les référentiels """ try: return groq.generate(prompt, max_tokens=1000, temperature=0.2, use_cot=True) except Exception as e: st.error(f"Erreur lors de l'analyse du CV : {str(e)}") return None # Génération d'une conclusion def generate_conclusion(analysis): if "non-conformité" in analysis: return "Le candidat répond partiellement aux exigences du référentiel sélectionné. Des améliorations spécifiques sont recommandées." else: return "Le candidat satisfait pleinement aux exigences du référentiel sélectionné." # Interface utilisateur principale def main(): st.title("Analyse de CV selon les référentiels GFSI") st.markdown("""

Bienvenue sur l'outil d'analyse de CV GFSI

Utilisez cet outil pour évaluer un CV selon les référentiels tels que BRCGS, FSSC 22000, et IFS.

  1. Entrez votre clé API Groq.
  2. Téléchargez un CV au format PDF.
  3. Sélectionnez un référentiel pour l'analyse.
""", unsafe_allow_html=True) api_key = st.text_input("Entrez votre clé API Groq :", type="password") if api_key: st.session_state.api_key = api_key uploaded_file = st.file_uploader("Téléchargez un fichier PDF (CV)", type="pdf") referential = st.selectbox("Sélectionnez un référentiel", list(REFERENTIALS.keys())) if uploaded_file and referential: cv_text = extract_text_from_pdf(uploaded_file) if cv_text: st.markdown("### Résultat de l'analyse") analysis = analyze_cv_with_groq(cv_text, referential) if analysis: st.markdown(f"
{analysis}
", unsafe_allow_html=True) conclusion = generate_conclusion(analysis) st.markdown(f"""
Conclusion : {conclusion}
""", unsafe_allow_html=True) else: st.error("Impossible d'extraire le texte du CV. Vérifiez que le fichier PDF est lisible.") if __name__ == "__main__": main()