MMOON commited on
Commit
8fc96bc
·
verified ·
1 Parent(s): fa3549f

Create app1.py

Browse files
Files changed (1) hide show
  1. app1.py +115 -0
app1.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from PyPDF2 import PdfReader
3
+ import pandas as pd
4
+ from groq import Groq # Assurez-vous que la bibliothèque `groq` est installée correctement
5
+
6
+ # Fonction pour configurer le client Groq
7
+ def get_groq_client(api_key):
8
+ """Initialise et renvoie un client Groq avec la clé API."""
9
+ try:
10
+ return Groq(api_key=api_key)
11
+ except Exception as e:
12
+ st.error(f"Erreur lors de la configuration du client Groq : {str(e)}")
13
+ return None
14
+
15
+ # Extraction de texte depuis un PDF
16
+ def extract_text_from_pdf(file):
17
+ try:
18
+ reader = PdfReader(file)
19
+ text = " ".join(page.extract_text() for page in reader.pages if page.extract_text())
20
+ return text
21
+ except Exception as e:
22
+ st.error(f"Erreur lors de l'extraction du texte : {str(e)}")
23
+ return None
24
+
25
+ # Analyse du CV avec l'API Groq et référentiel
26
+ def analyze_cv_with_groq(cv_text, referential, groq_client, model="llama-3.1-70b-versatile"):
27
+ referential_data = REFERENTIALS.get(referential, {})
28
+ general_requirements = referential_data.get("General_Requirements", {})
29
+ qualifications = referential_data.get("Qualifications", {})
30
+ audit_experience = referential_data.get("Audit_Experience", {})
31
+ advanced_requirements = referential_data.get("Advanced_Requirements", {})
32
+
33
+ prompt = f"""
34
+ Vous êtes un expert en évaluation des compétences selon les référentiels GFSI ({referential}).
35
+ 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 :
36
+ Général :
37
+ {general_requirements}
38
+ Qualifications :
39
+ {qualifications}
40
+ Expérience en audit :
41
+ {audit_experience}
42
+ Exigences avancées :
43
+ {advanced_requirements}
44
+ Contenu du CV :
45
+ {cv_text}
46
+ Fournissez une analyse détaillée rédigée en langue française, de manière professionnelle et complète, en identifiant :
47
+ 1. Les exigences remplies.
48
+ 2. Les lacunes ou non-conformités.
49
+ 3. Des recommandations pour combler les lacunes par rapport aux exigences strictes du référentiel.
50
+ """
51
+
52
+ try:
53
+ messages = [
54
+ {"role": "system", "content": "Vous êtes un assistant spécialisé dans l'analyse de conformité selon des référentiels GFSI."},
55
+ {"role": "user", "content": prompt}
56
+ ]
57
+ response = groq_client.chat.completions.create(
58
+ messages=messages,
59
+ model=model,
60
+ max_tokens=1000,
61
+ temperature=0.2
62
+ )
63
+ return response.choices[0].message.content
64
+ except Exception as e:
65
+ st.error(f"Erreur lors de l'analyse du CV : {str(e)}")
66
+ return None
67
+
68
+ # Génération d'une conclusion
69
+ def generate_conclusion(analysis):
70
+ if "non-conformité" in analysis:
71
+ return "Le candidat répond partiellement aux exigences du référentiel sélectionné. Des améliorations spécifiques sont recommandées."
72
+ else:
73
+ return "Le candidat satisfait pleinement aux exigences du référentiel sélectionné."
74
+
75
+ # Interface utilisateur principale
76
+ def main():
77
+ st.title("Analyse de CV selon les référentiels GFSI")
78
+ st.markdown("""
79
+ 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.
80
+ """)
81
+
82
+ # Saisie de la clé API par l'utilisateur
83
+ api_key = st.text_input("Entrez votre clé API Groq :", type="password")
84
+ if not api_key:
85
+ st.warning("Veuillez entrer votre clé API pour continuer.")
86
+ return
87
+
88
+ groq_client = get_groq_client(api_key)
89
+ if not groq_client:
90
+ return
91
+
92
+ # Chargement du fichier PDF
93
+ uploaded_file = st.file_uploader("Téléchargez un fichier PDF (CV)", type="pdf")
94
+ referential = st.selectbox("Sélectionnez un référentiel", list(REFERENTIALS.keys()))
95
+
96
+ if uploaded_file and referential:
97
+ cv_text = extract_text_from_pdf(uploaded_file)
98
+ if cv_text:
99
+ st.markdown("### Résultat de l'analyse")
100
+ analysis = analyze_cv_with_groq(cv_text, referential, groq_client)
101
+ if analysis:
102
+ st.markdown(f"<div style='font-size:16px;line-height:1.6;'>{analysis}</div>", unsafe_allow_html=True)
103
+ conclusion = generate_conclusion(analysis)
104
+ st.markdown(f"""
105
+ <div style="background-color:#dff0d8;padding:10px;border-radius:5px;margin-top:20px;">
106
+ <strong>Conclusion :</strong> {conclusion}
107
+ </div>
108
+ """, unsafe_allow_html=True)
109
+ else:
110
+ st.error("Impossible d'extraire le texte du CV. Vérifiez que le fichier PDF est lisible.")
111
+ else:
112
+ st.info("Veuillez télécharger un fichier PDF et sélectionner un référentiel pour lancer l'analyse.")
113
+
114
+ if __name__ == "__main__":
115
+ main()