LilRg commited on
Commit
32e1d74
·
verified ·
1 Parent(s): 3519d1d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +82 -36
app.py CHANGED
@@ -24,8 +24,11 @@ competence_questions = [
24
  competence_responses = []
25
  current_question_index = 0
26
 
27
- def call_api_for_summary(responses):
28
- messages = [{"role": "system", "content": "Vous êtes un assistant IA qui génère un résumé des compétences."}]
 
 
 
29
  for i, response in enumerate(responses):
30
  messages.append({"role": "user", "content": f"{competence_questions[i]} : {response}"})
31
 
@@ -53,12 +56,29 @@ def call_api_for_summary(responses):
53
  logger.error(f"Erreur lors de l'appel API: {str(e)}")
54
  return f"Erreur: {str(e)}"
55
 
56
- def call_api_for_skill_assessment(responses):
57
- messages = [{"role": "system", "content": "Vous êtes un assistant IA qui évalue les compétences. Faites un bilan des compétences avec toutes les compétences, appliquez ceci à toutes les compétences de l'utilisateur. Évaluez ceci en fonction de l'expérience de l'utilisateur, sans aucun autre commentaire, ni style sur le texte (pas de gras, pas de souligné, pas d'italique), fait une liste sans titre ni style de texte."}]
 
 
 
 
58
 
59
- for i, response in enumerate(responses):
60
- messages.append({"role": "user", "content": f"{competence_questions[i]} : {response}"})
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  try:
63
  response = requests.post(
64
  url="https://openrouter.ai/api/v1/chat/completions",
@@ -76,31 +96,29 @@ def call_api_for_skill_assessment(responses):
76
 
77
  if response.status_code == 200:
78
  data = response.json()
79
- return data['choices'][0]['message']['content']
 
80
  else:
81
- return f"Erreur lors de l'appel à l'API : {response.status_code} - {response.text}"
 
82
  except Exception as e:
83
  logger.error(f"Erreur lors de l'appel API: {str(e)}")
84
- return f"Erreur: {str(e)}"
85
 
86
- def upload_to_airtable(skill_assessment):
87
- url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}"
88
- headers = {
89
- "Authorization": f"Bearer {AIRTABLE_API_KEY}",
90
- "Content-Type": "application/json"
91
- }
92
- data = {
93
- "fields": {
94
- "Description Compétences Etudiants": skill_assessment
95
- }
96
- }
97
 
98
- response = requests.post(url, headers=headers, json=data)
 
 
99
 
100
- if response.status_code == 200:
101
- return "Résumé ajouté à Airtable avec succès."
102
- else:
103
- return f"Erreur lors de l'ajout à Airtable : {response.status_code} - {response.text}"
 
 
104
 
105
  def chatbot_response(message, history):
106
  global competence_responses, current_question_index
@@ -111,9 +129,8 @@ def chatbot_response(message, history):
111
  if current_question_index < len(competence_questions):
112
  return competence_questions[current_question_index], None
113
  else:
114
- summary = call_api_for_summary(competence_responses)
115
  skill_assessment = call_api_for_skill_assessment(competence_responses)
116
- return f"Merci pour vos réponses ! Voici votre bilan de compétences :\n\n{summary}", skill_assessment
117
 
118
  def start_conversation():
119
  global current_question_index, competence_responses
@@ -137,24 +154,53 @@ def clear_chat():
137
  current_question_index = 0
138
  return [], None, None
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
141
  chatbot = gr.Chatbot(label="Historique de la conversation")
142
  msg = gr.Textbox(label="Votre message", placeholder="Tapez votre message ici...")
143
  clear = gr.Button("Effacer la conversation")
144
- summary_output = gr.Textbox(label="Résumé des compétences", interactive=False)
145
  skill_assessment_output = gr.Textbox(label="Bilan des compétences", interactive=False)
146
- submit_button = gr.Button("Soumettre")
 
147
 
148
  demo.load(start_conversation, inputs=None, outputs=[chatbot, skill_assessment_output])
149
  msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
150
  bot, [chatbot], [chatbot, skill_assessment_output]
151
  )
152
- clear.click(clear_chat, None, [chatbot, skill_assessment_output, summary_output], queue=False)
153
-
154
- def submit_summary(skill_assessment_output):
155
- airtable_response = upload_to_airtable(skill_assessment_output)
156
- return f"Résumé soumis : {skill_assessment_output}\n{airtable_response}"
157
-
158
- submit_button.click(submit_summary, skill_assessment_output, summary_output)
159
 
160
  demo.launch()
 
24
  competence_responses = []
25
  current_question_index = 0
26
 
27
+ def call_api_for_skill_assessment(responses):
28
+ messages = [
29
+ {"role": "system", "content": "Vous êtes un assistant IA qui évalue les compétences. Faites un bilan des compétences avec toutes les compétences, appliquez ceci à toutes les compétences de l'utilisateur. Évaluez-les en fonction de l'expérience de l'utilisateur, sans aucun autre commentaire, ni style dans le texte (pas de gras, pas de souligné, pas d'italique). Sous cette forme :\n- Compétence 1\n- Compétence 2\n- Compétence 3\n..."}
30
+ ]
31
+
32
  for i, response in enumerate(responses):
33
  messages.append({"role": "user", "content": f"{competence_questions[i]} : {response}"})
34
 
 
56
  logger.error(f"Erreur lors de l'appel API: {str(e)}")
57
  return f"Erreur: {str(e)}"
58
 
59
+ def get_enterprise_descriptions():
60
+ url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/DescriptionsEntreprises"
61
+ headers = {
62
+ "Authorization": f"Bearer {AIRTABLE_API_KEY}",
63
+ "Content-Type": "application/json"
64
+ }
65
 
66
+ response = requests.get(url, headers=headers)
 
67
 
68
+ if response.status_code == 200:
69
+ data = response.json()
70
+ descriptions = [(record['fields'].get('Nom', f"Entreprise {i+1}"), record['fields']['Description entreprises']) for i, record in enumerate(data['records'])]
71
+ return descriptions
72
+ else:
73
+ logger.error(f"Erreur lors de la récupération des descriptions d'entreprises : {response.status_code} - {response.text}")
74
+ return []
75
+
76
+ def compare_skills_ai(student_skills, enterprise_skills):
77
+ messages = [
78
+ {"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."},
79
+ {"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 juste le nom de l'entreprise puis le score"}
80
+ ]
81
+
82
  try:
83
  response = requests.post(
84
  url="https://openrouter.ai/api/v1/chat/completions",
 
96
 
97
  if response.status_code == 200:
98
  data = response.json()
99
+ ai_analysis = data['choices'][0]['message']['content']
100
+ return ai_analysis
101
  else:
102
+ logger.error(f"Erreur lors de l'appel à l'API : {response.status_code} - {response.text}")
103
+ return "Erreur lors de l'analyse des compétences."
104
  except Exception as e:
105
  logger.error(f"Erreur lors de l'appel API: {str(e)}")
106
+ return f"Erreur lors de l'analyse des compétences : {str(e)}"
107
 
108
+ def compare_with_enterprises(skill_assessment):
109
+ enterprise_descriptions = get_enterprise_descriptions()
110
+ results = []
 
 
 
 
 
 
 
 
111
 
112
+ for enterprise_name, enterprise_desc in enterprise_descriptions:
113
+ analysis = compare_skills_ai(skill_assessment, enterprise_desc)
114
+ results.append((enterprise_name, analysis))
115
 
116
+ output = ""
117
+ for enterprise_name, analysis in results:
118
+ output += f"Analyse pour {enterprise_name}:\n{analysis}\n\n"
119
+
120
+ print(output)
121
+ return output
122
 
123
  def chatbot_response(message, history):
124
  global competence_responses, current_question_index
 
129
  if current_question_index < len(competence_questions):
130
  return competence_questions[current_question_index], None
131
  else:
 
132
  skill_assessment = call_api_for_skill_assessment(competence_responses)
133
+ return f"Merci pour vos réponses ! Voici votre bilan de compétences :\n\n{skill_assessment}", skill_assessment
134
 
135
  def start_conversation():
136
  global current_question_index, competence_responses
 
154
  current_question_index = 0
155
  return [], None, None
156
 
157
+ def upload_to_airtable(skill_assessment):
158
+ url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}"
159
+ headers = {
160
+ "Authorization": f"Bearer {AIRTABLE_API_KEY}",
161
+ "Content-Type": "application/json"
162
+ }
163
+ data = {
164
+ "fields": {
165
+ "Description Compétences Etudiants": skill_assessment
166
+ }
167
+ }
168
+
169
+ try:
170
+ response = requests.post(url, headers=headers, json=data)
171
+
172
+ if response.status_code == 200:
173
+ return "Données envoyées avec succès à Airtable."
174
+ else:
175
+ logger.error(f"Erreur lors de l'envoi à Airtable : {response.status_code} - {response.text}")
176
+ return f"Erreur lors de l'enregistrement dans Airtable : {response.status_code}"
177
+
178
+ except Exception as e:
179
+ logger.error(f"Erreur lors de l'envoi à Airtable : {str(e)}")
180
+ return f"Erreur lors de l'enregistrement dans Airtable : {str(e)}"
181
+
182
+ def submit_and_compare(skill_assessment_output):
183
+ # Remplissage de la BDD Airtable avec le bilan des compétences
184
+ airtable_response = upload_to_airtable(skill_assessment_output)
185
+
186
+ # Comparaison avec les entreprises
187
+ comparison_result = compare_with_enterprises(skill_assessment_output)
188
+
189
+ return f"Résultat de l'enregistrement dans Airtable: {airtable_response}\n\n{comparison_result}"
190
+
191
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
192
  chatbot = gr.Chatbot(label="Historique de la conversation")
193
  msg = gr.Textbox(label="Votre message", placeholder="Tapez votre message ici...")
194
  clear = gr.Button("Effacer la conversation")
 
195
  skill_assessment_output = gr.Textbox(label="Bilan des compétences", interactive=False)
196
+ submit_button = gr.Button("Soumettre et comparer")
197
+ comparison_output = gr.Textbox(label="Résultat de la comparaison", interactive=False)
198
 
199
  demo.load(start_conversation, inputs=None, outputs=[chatbot, skill_assessment_output])
200
  msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
201
  bot, [chatbot], [chatbot, skill_assessment_output]
202
  )
203
+ clear.click(clear_chat, None, [chatbot, skill_assessment_output, comparison_output], queue=False)
204
+ submit_button.click(submit_and_compare, skill_assessment_output, comparison_output)
 
 
 
 
 
205
 
206
  demo.launch()