Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
|
|
|
|
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
|
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}/
|
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 |
-
|
149 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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 |
-
|
|
|
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://
|
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()
|