MMOON commited on
Commit
fb015d5
·
verified ·
1 Parent(s): 829a498

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -85
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import streamlit as st
2
  from referentials import REFERENTIALS # Import des exigences depuis le fichier referentials.py
3
  from PyPDF2 import PdfReader # Pour extraire le texte des CV en PDF
4
- from pocketgroq import GroqProvider # Bibliothèque pour interagir avec Groq API
5
 
6
  # Initialisation du fournisseur Groq
7
  def get_groq_provider():
@@ -17,7 +17,7 @@ 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
@@ -39,7 +39,7 @@ def analyze_cv_with_groq(cv_text, referential):
39
  # Construire le prompt enrichi pour l'API Groq
40
  prompt = f"""
41
  Vous êtes un expert en évaluation des compétences selon les référentiels GFSI ({referential}).
42
- Votre objectif est de vérifier la conformité d'un candidat avec les exigences suivantes du référentiel GFSI ({referential}) :
43
 
44
  ### Exigences Générales
45
  {general_requirements}
@@ -57,98 +57,31 @@ def analyze_cv_with_groq(cv_text, referential):
57
  {cv_text}
58
 
59
  #### Tâches demandées :
60
- 1. Pour chaque exigence (générales, qualifications, expérience, exigences avancées), identifiez si le CV est **conforme** ou **non conforme**.
61
- 2. Expliquez pourquoi le CV est conforme ou non conforme, en fournissant des preuves ou des justifications basées sur le contenu du CV.
62
- 3. Si le CV est non conforme à une exigence, proposez une recommandation spécifique et applicable pour combler cette lacune.
63
- 4. Regroupez vos réponses dans une structure claire et bien formatée, avec les sections suivantes :
64
-
65
- - **Exigences Remplies** : Détaillez toutes les exigences remplies avec des explications.
66
- - **Lacunes ou Non-Conformités** : Pour chaque non-conformité, expliquez en détail ce qui manque.
67
- - **Recommandations** : Proposez des actions concrètes et adaptées au candidat pour répondre aux exigences manquantes.
68
  """
69
 
70
  try:
71
  # Appel à l'API Groq
72
- response = groq.generate(prompt, max_tokens=2000, temperature=0.5, use_cot=True)
73
- analysis_data = parse_groq_response(response) # Fonction fictive pour parser la réponse
74
- return format_analysis_result(analysis_data, referential)
 
 
 
 
75
  except Exception as e:
76
  st.error(f"Erreur lors de l'analyse du CV : {str(e)}")
77
  return None
78
 
79
- # Parsing de la réponse Groq (fonction fictive)
80
- def parse_groq_response(response):
81
- """Parse la réponse de l'API Groq pour retourner un dictionnaire structuré."""
82
- # Simulation de parsing (vous pouvez adapter selon votre API Groq)
83
- return {
84
- "fulfilled": [
85
- {
86
- "category": "Éducation",
87
- "requirement": "Diplôme en sciences alimentaires ou biosciences",
88
- "result": "Master en food industries quality, ce qui dépasse les exigences."
89
- },
90
- {
91
- "category": "Expérience professionnelle",
92
- "requirement": "Minimum de 3 ans d'expérience",
93
- "result": "Plus de 5 ans d'expérience couvrant qualité, sécurité alimentaire et R&D."
94
- }
95
- ],
96
- "gaps": [
97
- {
98
- "category": "Formation Lead Auditor",
99
- "requirement": "Cours de Lead Auditor (40 heures minimum)",
100
- "result": "Cours suivi : Lead Auditor IFS Global Markets Food v2, mais durée insuffisante."
101
- }
102
- ],
103
- "recommendations": [
104
- {
105
- "category": "Formation complémentaire",
106
- "recommendation": "Compléter un cours de Lead Auditor reconnu (IFS ou IRCA) répondant à la durée minimale de 40 heures."
107
- }
108
- ]
109
- }
110
-
111
- # Formatage des résultats de l'analyse
112
- def format_analysis_result(analysis_data, referential):
113
- """Formate les résultats de l'analyse pour un affichage clair et structuré."""
114
- formatted_result = f"<h3 style='text-align: center;'>Analyse du CV ({referential})</h3><hr>"
115
-
116
- # Exigences remplies
117
- formatted_result += "<h4 style='color: green;'>Exigences remplies</h4><ul>"
118
- for item in analysis_data.get('fulfilled', []):
119
- formatted_result += (
120
- f"<li><strong>{item['category']}</strong><br>"
121
- f"<span style='color: blue;'>Exigence :</span> {item['requirement']}<br>"
122
- f"<span style='color: green;'>Résultat :</span> {item['result']}</li><br>"
123
- )
124
- formatted_result += "</ul>"
125
-
126
- # Lacunes ou non-conformités
127
- formatted_result += "<h4 style='color: red;'>Lacunes ou non-conformités</h4><ul>"
128
- for item in analysis_data.get('gaps', []):
129
- formatted_result += (
130
- f"<li><strong>{item['category']}</strong><br>"
131
- f"<span style='color: blue;'>Exigence :</span> {item['requirement']}<br>"
132
- f"<span style='color: red;'>Résultat :</span> {item['result']}</li><br>"
133
- )
134
- formatted_result += "</ul>"
135
-
136
- # Recommandations
137
- formatted_result += "<h4 style='color: orange;'>Recommandations</h4><ul>"
138
- for rec in analysis_data.get('recommendations', []):
139
- formatted_result += (
140
- f"<li><strong>{rec['category']}</strong>: {rec['recommendation']}</li><br>"
141
- )
142
- formatted_result += "</ul>"
143
-
144
- return formatted_result
145
-
146
  # Interface utilisateur Streamlit
147
  def main():
 
148
  st.title("Analyse de CV selon les référentiels GFSI")
149
  st.markdown("""
150
- Cette application évalue un CV selon les référentiels GFSI (BRCGS, FSSC 22000, et IFS).
151
- Téléchargez un CV, sélectionnez un référentiel, et obtenez une analyse détaillée.
152
  """)
153
 
154
  # Entrée clé API
@@ -164,10 +97,10 @@ def main():
164
  # Extraire le texte du CV
165
  cv_text = extract_text_from_pdf(uploaded_file)
166
  if cv_text:
167
- st.markdown("<h3>Résultat de l'analyse</h3>", unsafe_allow_html=True)
168
  analysis = analyze_cv_with_groq(cv_text, referential)
169
  if analysis:
170
- st.markdown(analysis, unsafe_allow_html=True)
171
  else:
172
  st.error("Impossible d'extraire le texte du CV. Vérifiez que le fichier PDF est lisible.")
173
 
 
1
  import streamlit as st
2
  from referentials import REFERENTIALS # Import des exigences depuis le fichier referentials.py
3
  from PyPDF2 import PdfReader # Pour extraire le texte des CV en PDF
4
+ from pocketgroq import GroqProvider # Assurez-vous d'installer et configurer cette bibliothèque
5
 
6
  # Initialisation du fournisseur Groq
7
  def get_groq_provider():
 
17
  try:
18
  reader = PdfReader(file)
19
  text = " ".join(page.extract_text() for page in reader.pages if page.extract_text())
20
+ return text.strip() # Retirer les espaces inutiles
21
  except Exception as e:
22
  st.error(f"Erreur lors de l'extraction du texte : {str(e)}")
23
  return None
 
39
  # Construire le prompt enrichi pour l'API Groq
40
  prompt = f"""
41
  Vous êtes un expert en évaluation des compétences selon les référentiels GFSI ({referential}).
42
+ Analysez ce CV pour vérifier sa conformité avec les exigences suivantes :
43
 
44
  ### Exigences Générales
45
  {general_requirements}
 
57
  {cv_text}
58
 
59
  #### Tâches demandées :
60
+ 1. Pour chaque exigence, identifiez si le CV est conforme ou non conforme.
61
+ 2. Fournissez des justifications précises pour chaque conformité ou non-conformité.
62
+ 3. Proposez des recommandations spécifiques pour combler les lacunes éventuelles.
 
 
 
 
 
63
  """
64
 
65
  try:
66
  # Appel à l'API Groq
67
+ response = groq.generate(prompt, max_tokens=1500, temperature=0.5, use_cot=True)
68
+
69
+ # Vérifier et analyser la réponse
70
+ if response and "choices" in response and len(response["choices"]) > 0:
71
+ return response["choices"][0]["text"].strip()
72
+ else:
73
+ return "Erreur : L'API Groq n'a pas renvoyé de réponse valide."
74
  except Exception as e:
75
  st.error(f"Erreur lors de l'analyse du CV : {str(e)}")
76
  return None
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  # Interface utilisateur Streamlit
79
  def main():
80
+ """Interface utilisateur principale pour l'application."""
81
  st.title("Analyse de CV selon les référentiels GFSI")
82
  st.markdown("""
83
+ Cette application permet d'évaluer un CV en fonction des référentiels GFSI tels que BRCGS, FSSC 22000, et IFS.
84
+ Téléchargez un CV en PDF, sélectionnez un référentiel, et lancez l'analyse.
85
  """)
86
 
87
  # Entrée clé API
 
97
  # Extraire le texte du CV
98
  cv_text = extract_text_from_pdf(uploaded_file)
99
  if cv_text:
100
+ st.markdown("### Résultat de l'analyse")
101
  analysis = analyze_cv_with_groq(cv_text, referential)
102
  if analysis:
103
+ st.text_area("Analyse générée :", analysis, height=400)
104
  else:
105
  st.error("Impossible d'extraire le texte du CV. Vérifiez que le fichier PDF est lisible.")
106