LilRg commited on
Commit
cae3bf8
·
verified ·
1 Parent(s): d1f9405

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -18
app.py CHANGED
@@ -44,16 +44,18 @@ def get_last_user_id():
44
  if len(data['records']) > 0:
45
  last_record = data['records'][0]
46
  last_user_id = last_record['fields'].get('ID_Etu', 'Aucun ID trouvé')
47
- return last_user_id
 
 
48
  else:
49
- return None
50
  else:
51
- logger.error(f"Erreur lors de la récupération des ID : {response.status_code} - {response.text}")
52
- return None
53
 
54
  except Exception as e:
55
- logger.error(f"Erreur lors de la récupération des ID : {str(e)}")
56
- return None
57
 
58
  def call_api_for_response_analysis(question, response):
59
  messages = [
@@ -135,7 +137,7 @@ def call_api_for_skill_assessment(responses):
135
  return f"Erreur: {str(e)}"
136
 
137
  def get_enterprise_descriptions():
138
- url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/DescriptionsEntreprises"
139
  headers = {
140
  "Authorization": f"Bearer {AIRTABLE_API_KEY}",
141
  "Content-Type": "application/json"
@@ -145,8 +147,15 @@ def get_enterprise_descriptions():
145
 
146
  if response.status_code == 200:
147
  data = response.json()
148
- descriptions = [(record['fields'].get('Nom', f"Entreprise {i+1}"), record['fields']['Description entreprises'], record['fields'].get('ID_Offre2')) for i, record in enumerate(data['records'])]
149
- return descriptions
 
 
 
 
 
 
 
150
  else:
151
  logger.error(f"Erreur lors de la récupération des descriptions d'entreprises : {response.status_code} - {response.text}")
152
  return []
@@ -154,7 +163,7 @@ def get_enterprise_descriptions():
154
  def compare_skills_ai(student_skills, enterprise_skills):
155
  messages = [
156
  {"role": "system", "content": "Vous êtes un expert en recrutement chargé d'évaluer la correspondance entre les compétences d'un étudiant et celles requises par une entreprise. Votre tâche est d'analyser ces compétences et de fournir une valeur de correspondance entre l'étudiant et les différentes entreprise, je veux simplement la note global pour chaque entreprise. Tenez compte des compétences similaires ou complémentaires, pas seulement des correspondances exactes."},
157
- {"role": "user", "content": f"Compétences de l'étudiant :\n{student_skills}\n\nCompétences requises par l'entreprise :\n{enterprise_skills}\n\nVeuillez analyser ces compétences et fournir un chiffre entre 0 et 100 pour la correspondance entre l'etudiant et l'entreprise afin de voir le taux de compatibilité entre l'etudiants et les différentes entreprises. en détaille rien, juste la note global sans le détail. Ecrit que et uniquement le score, par exemple : 100 et pas : Score : 100, juste 100"}
158
  ]
159
 
160
  try:
@@ -188,7 +197,7 @@ def compare_skills_ai(student_skills, enterprise_skills):
188
  logger.error(f"Erreur lors de l'appel API: {str(e)}")
189
  return f"Erreur lors de l'analyse des compétences : {str(e)}"
190
 
191
- def upload_to_airtable(skill_assessment):
192
  url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}"
193
  headers = {
194
  "Authorization": f"Bearer {AIRTABLE_API_KEY}",
@@ -196,6 +205,7 @@ def upload_to_airtable(skill_assessment):
196
  }
197
  data = {
198
  "fields": {
 
199
  "Description Compétences Etudiants": skill_assessment
200
  }
201
  }
@@ -213,7 +223,7 @@ def upload_to_airtable(skill_assessment):
213
  logger.error(f"Erreur lors de l'envoi : {str(e)}")
214
  return f"Erreur lors de l'enregistrement : {str(e)}"
215
 
216
- def add_to_compatibility_table(student_id, skill_assessment, enterprise_skills, offer_id, compatibility_rate):
217
  url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/TauxCompatibilité"
218
  headers = {
219
  "Authorization": f"Bearer {AIRTABLE_API_KEY}",
@@ -226,7 +236,9 @@ def add_to_compatibility_table(student_id, skill_assessment, enterprise_skills,
226
  "DescriptionEtu": skill_assessment,
227
  "ID_Offre": offer_id,
228
  "DescriptionOffre": enterprise_skills,
229
- "Taux de compatibilité" : compatibility_rate
 
 
230
  }
231
  }
232
 
@@ -326,16 +338,16 @@ def manage_conversation_flow(question, response, history):
326
  return f"Désolé, nous avons rencontré un problème. Voici votre bilan basé sur les informations fournies :\n\n{skill_assessment}", skill_assessment
327
 
328
  def submit_and_compare(skill_assessment_output):
329
- airtable_response = upload_to_airtable(skill_assessment_output)
 
330
 
331
  enterprise_descriptions = get_enterprise_descriptions()
332
- student_id = get_last_user_id()
333
  results = []
334
 
335
  for enterprise_name, enterprise_desc, offer_id in enterprise_descriptions:
336
  analysis = compare_skills_ai(skill_assessment_output, enterprise_desc)
337
 
338
- add_response = add_to_compatibility_table(student_id, skill_assessment_output, enterprise_desc, offer_id, analysis)
339
 
340
  results.append(f"Entreprise : {enterprise_name}\n{add_response}")
341
 
@@ -411,7 +423,7 @@ with gr.Blocks(theme=custom_theme) as demo:
411
  lines=5
412
  )
413
  gr.Markdown(
414
- """<a href="https://votre-url-externe.com" target="_blank">
415
  <button style="width: 100%; padding: 10px; background-color: #C4DAFB; color: #3662E3; border: none; border-radius: 5px; font-family: 'Helvetica', sans-serif; font-weight: bold;">
416
  🔮 Voir offres 🔮
417
  </button>
@@ -430,4 +442,4 @@ with gr.Blocks(theme=custom_theme) as demo:
430
  submit_button.click(submit_and_compare, skill_assessment_output, comparison_output)
431
 
432
  if __name__ == "__main__":
433
- demo.launch()
 
44
  if len(data['records']) > 0:
45
  last_record = data['records'][0]
46
  last_user_id = last_record['fields'].get('ID_Etu', 'Aucun ID trouvé')
47
+ last_user_name = last_record['fields'].get('Nom', 'Aucun nom trouvé')
48
+ last_user_email = last_record['fields'].get('Email', 'Aucun email trouvé')
49
+ return last_user_id, last_user_name, last_user_email
50
  else:
51
+ return None, None, None
52
  else:
53
+ logger.error(f"Erreur lors de la récupération des ID, nom et email : {response.status_code} - {response.text}")
54
+ return None, None, None
55
 
56
  except Exception as e:
57
+ logger.error(f"Erreur lors de la récupération des informations : {str(e)}")
58
+ return None, None, None
59
 
60
  def call_api_for_response_analysis(question, response):
61
  messages = [
 
137
  return f"Erreur: {str(e)}"
138
 
139
  def get_enterprise_descriptions():
140
+ url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/Formulaire firm"
141
  headers = {
142
  "Authorization": f"Bearer {AIRTABLE_API_KEY}",
143
  "Content-Type": "application/json"
 
147
 
148
  if response.status_code == 200:
149
  data = response.json()
150
+ firm_data = [
151
+ (
152
+ record['fields'].get('ID_Offre'),
153
+ record['fields'].get('Compétences requises'),
154
+ record['fields'].get('Recruteur / Entreprise')
155
+ )
156
+ for record in data['records']
157
+ ]
158
+ return firm_data
159
  else:
160
  logger.error(f"Erreur lors de la récupération des descriptions d'entreprises : {response.status_code} - {response.text}")
161
  return []
 
163
  def compare_skills_ai(student_skills, enterprise_skills):
164
  messages = [
165
  {"role": "system", "content": "Vous êtes un expert en recrutement chargé d'évaluer la correspondance entre les compétences d'un étudiant et celles requises par une entreprise. Votre tâche est d'analyser ces compétences et de fournir une valeur de correspondance entre l'étudiant et les différentes entreprise, je veux simplement la note global pour chaque entreprise. Tenez compte des compétences similaires ou complémentaires, pas seulement des correspondances exactes."},
166
+ {"role": "user", "content": f"Compétences de l'étudiant :\n{student_skills}\n\nCompétences requises par l'entreprise :\n{enterprise_skills}\n\nVeuillez analyser ces compétences et fournir un chiffre entre 0 et 100 pour la correspondance entre l'etudiant et l'entreprise afin de voir le taux de compatibilité entre l'etudiants et les différentes entreprises. ne détaille rien, juste la note global sans le détail. Ecrit que et uniquement le score, par exemple : 100 et pas : Score : 100, juste 100"}
167
  ]
168
 
169
  try:
 
197
  logger.error(f"Erreur lors de l'appel API: {str(e)}")
198
  return f"Erreur lors de l'analyse des compétences : {str(e)}"
199
 
200
+ def upload_to_airtable(skill_assessment, student_id):
201
  url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}"
202
  headers = {
203
  "Authorization": f"Bearer {AIRTABLE_API_KEY}",
 
205
  }
206
  data = {
207
  "fields": {
208
+ "ID_Etudiant": student_id,
209
  "Description Compétences Etudiants": skill_assessment
210
  }
211
  }
 
223
  logger.error(f"Erreur lors de l'envoi : {str(e)}")
224
  return f"Erreur lors de l'enregistrement : {str(e)}"
225
 
226
+ def add_to_compatibility_table(student_id, skill_assessment, enterprise_skills, offer_id, compatibility_rate, student_name, student_mail):
227
  url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/TauxCompatibilité"
228
  headers = {
229
  "Authorization": f"Bearer {AIRTABLE_API_KEY}",
 
236
  "DescriptionEtu": skill_assessment,
237
  "ID_Offre": offer_id,
238
  "DescriptionOffre": enterprise_skills,
239
+ "Taux de compatibilité" : compatibility_rate,
240
+ "Nom": student_name,
241
+ "EmailEtudiant": student_mail
242
  }
243
  }
244
 
 
338
  return f"Désolé, nous avons rencontré un problème. Voici votre bilan basé sur les informations fournies :\n\n{skill_assessment}", skill_assessment
339
 
340
  def submit_and_compare(skill_assessment_output):
341
+ student_id, student_name, student_mail = get_last_user_id()
342
+ airtable_response = upload_to_airtable(skill_assessment_output, student_id)
343
 
344
  enterprise_descriptions = get_enterprise_descriptions()
 
345
  results = []
346
 
347
  for enterprise_name, enterprise_desc, offer_id in enterprise_descriptions:
348
  analysis = compare_skills_ai(skill_assessment_output, enterprise_desc)
349
 
350
+ add_response = add_to_compatibility_table(student_id, skill_assessment_output, enterprise_desc, offer_id, analysis, student_name, student_mail)
351
 
352
  results.append(f"Entreprise : {enterprise_name}\n{add_response}")
353
 
 
423
  lines=5
424
  )
425
  gr.Markdown(
426
+ """<a href="https://felice1519.softr.app" target="_blank">
427
  <button style="width: 100%; padding: 10px; background-color: #C4DAFB; color: #3662E3; border: none; border-radius: 5px; font-family: 'Helvetica', sans-serif; font-weight: bold;">
428
  🔮 Voir offres 🔮
429
  </button>
 
442
  submit_button.click(submit_and_compare, skill_assessment_output, comparison_output)
443
 
444
  if __name__ == "__main__":
445
+ demo.launch()