LilRg commited on
Commit
a62a9f5
1 Parent(s): 9d198bd

Upload testalbatross.py

Browse files
Files changed (1) hide show
  1. testalbatross.py +160 -0
testalbatross.py ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import json
3
+ import gradio as gr
4
+ import logging
5
+
6
+ logging.basicConfig(level=logging.ERROR)
7
+ logger = logging.getLogger(__name__)
8
+
9
+ OPENROUTER_API_KEY = "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"
10
+ YOUR_SITE_URL = "votre-site.com"
11
+ YOUR_APP_NAME = "MonChatbot"
12
+
13
+ AIRTABLE_API_KEY = "patUUQ6NE9zUOqooM.ec8d096169d754852305c88c7966ad1f8a151f3bf015d39f80bb895bdad0e2f5"
14
+ AIRTABLE_BASE_ID = "appht9RdYAQVd32Py"
15
+ AIRTABLE_TABLE_NAME = "DescriptionsEtudiants"
16
+
17
+ competence_questions = [
18
+ "Quelles sont vos compétences techniques ?",
19
+ "Quelles sont vos compétences en communication ?",
20
+ "Pouvez-vous me parler de vos expériences professionnelles ?",
21
+ "Quelles sont vos compétences en gestion de projet ?"
22
+ ]
23
+
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
+
32
+ try:
33
+ response = requests.post(
34
+ url="https://openrouter.ai/api/v1/chat/completions",
35
+ headers={
36
+ "Authorization": f"Bearer {OPENROUTER_API_KEY}",
37
+ "HTTP-Referer": f"{YOUR_SITE_URL}",
38
+ "X-Title": f"{YOUR_APP_NAME}",
39
+ "Content-Type": "application/json"
40
+ },
41
+ data=json.dumps({
42
+ "model": "mistralai/pixtral-12b:free",
43
+ "messages": messages
44
+ })
45
+ )
46
+
47
+ if response.status_code == 200:
48
+ data = response.json()
49
+ return data['choices'][0]['message']['content']
50
+ else:
51
+ return f"Erreur lors de l'appel à l'API : {response.status_code} - {response.text}"
52
+ except Exception as e:
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",
65
+ headers={
66
+ "Authorization": f"Bearer {OPENROUTER_API_KEY}",
67
+ "HTTP-Referer": f"{YOUR_SITE_URL}",
68
+ "X-Title": f"{YOUR_APP_NAME}",
69
+ "Content-Type": "application/json"
70
+ },
71
+ data=json.dumps({
72
+ "model": "mistralai/pixtral-12b:free",
73
+ "messages": messages
74
+ })
75
+ )
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
107
+
108
+ competence_responses.append(message)
109
+ current_question_index += 1
110
+
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
120
+ current_question_index = 0
121
+ competence_responses = []
122
+ return [[None, competence_questions[0]]], None
123
+
124
+ def user(user_message, history):
125
+ return "", history + [[user_message, None]]
126
+
127
+ def bot(history):
128
+ if history:
129
+ bot_message, skill_assessment = chatbot_response(history[-1][0], history[:-1])
130
+ history[-1][1] = bot_message
131
+ return history, skill_assessment
132
+ return [], None
133
+
134
+ def clear_chat():
135
+ global competence_responses, current_question_index
136
+ competence_responses = []
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(share=True)