File size: 4,944 Bytes
df1c813
23e626d
 
 
df1c813
23e626d
df1c813
 
 
 
 
 
23e626d
df1c813
 
 
 
a4361ce
df1c813
 
 
 
23e626d
df1c813
 
 
 
 
 
a4361ce
 
 
 
df1c813
 
829a498
ecec5fa
a4361ce
df1c813
a4361ce
df1c813
a4361ce
df1c813
a4361ce
df1c813
a4361ce
df1c813
ecec5fa
a4361ce
 
ecec5fa
fa3549f
 
4546ea6
df1c813
 
dc71633
df1c813
 
 
 
23e626d
 
 
 
 
 
 
 
df1c813
 
 
23e626d
 
 
 
 
 
 
 
 
 
df1c813
 
 
 
 
 
 
 
 
 
 
fb015d5
df1c813
 
23e626d
 
 
 
 
 
 
df1c813
 
 
 
 
7542014
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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("""
    <div style="background-color:#f9f9f9;padding:10px;border-radius:5px;">
        <h3>Bienvenue sur l'outil d'analyse de CV GFSI</h3>
        <p>Utilisez cet outil pour évaluer un CV selon les référentiels tels que BRCGS, FSSC 22000, et IFS.</p>
        <ol>
            <li>Entrez votre clé API Groq.</li>
            <li>Téléchargez un CV au format PDF.</li>
            <li>Sélectionnez un référentiel pour l'analyse.</li>
        </ol>
    </div>
    """, 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"<div style='font-size:16px;line-height:1.6;'>{analysis}</div>", unsafe_allow_html=True)
                conclusion = generate_conclusion(analysis)
                st.markdown(f"""
                <div style="background-color:#dff0d8;padding:10px;border-radius:5px;margin-top:20px;">
                    <strong>Conclusion :</strong> {conclusion}
                </div>
                """, 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()