LilRg's picture
Rename testalbatross.py to app.py
fc4ded3 verified
raw
history blame
6.49 kB
import requests
import json
import gradio as gr
import logging
logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)
OPENROUTER_API_KEY = "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"
YOUR_SITE_URL = "votre-site.com"
YOUR_APP_NAME = "MonChatbot"
AIRTABLE_API_KEY = "patUUQ6NE9zUOqooM.ec8d096169d754852305c88c7966ad1f8a151f3bf015d39f80bb895bdad0e2f5"
AIRTABLE_BASE_ID = "appht9RdYAQVd32Py"
AIRTABLE_TABLE_NAME = "DescriptionsEtudiants"
competence_questions = [
"Quelles sont vos compétences techniques ?",
"Quelles sont vos compétences en communication ?",
"Pouvez-vous me parler de vos expériences professionnelles ?",
"Quelles sont vos compétences en gestion de projet ?"
]
competence_responses = []
current_question_index = 0
def call_api_for_summary(responses):
messages = [{"role": "system", "content": "Vous êtes un assistant IA qui génère un résumé des compétences."}]
for i, response in enumerate(responses):
messages.append({"role": "user", "content": f"{competence_questions[i]} : {response}"})
try:
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"HTTP-Referer": f"{YOUR_SITE_URL}",
"X-Title": f"{YOUR_APP_NAME}",
"Content-Type": "application/json"
},
data=json.dumps({
"model": "mistralai/pixtral-12b:free",
"messages": messages
})
)
if response.status_code == 200:
data = response.json()
return data['choices'][0]['message']['content']
else:
return f"Erreur lors de l'appel à l'API : {response.status_code} - {response.text}"
except Exception as e:
logger.error(f"Erreur lors de l'appel API: {str(e)}")
return f"Erreur: {str(e)}"
def call_api_for_skill_assessment(responses):
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."}]
for i, response in enumerate(responses):
messages.append({"role": "user", "content": f"{competence_questions[i]} : {response}"})
try:
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"HTTP-Referer": f"{YOUR_SITE_URL}",
"X-Title": f"{YOUR_APP_NAME}",
"Content-Type": "application/json"
},
data=json.dumps({
"model": "mistralai/pixtral-12b:free",
"messages": messages
})
)
if response.status_code == 200:
data = response.json()
return data['choices'][0]['message']['content']
else:
return f"Erreur lors de l'appel à l'API : {response.status_code} - {response.text}"
except Exception as e:
logger.error(f"Erreur lors de l'appel API: {str(e)}")
return f"Erreur: {str(e)}"
def upload_to_airtable(skill_assessment):
url = f"https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}"
headers = {
"Authorization": f"Bearer {AIRTABLE_API_KEY}",
"Content-Type": "application/json"
}
data = {
"fields": {
"Description Compétences Etudiants": skill_assessment
}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
return "Résumé ajouté à Airtable avec succès."
else:
return f"Erreur lors de l'ajout à Airtable : {response.status_code} - {response.text}"
def chatbot_response(message, history):
global competence_responses, current_question_index
competence_responses.append(message)
current_question_index += 1
if current_question_index < len(competence_questions):
return competence_questions[current_question_index], None
else:
summary = call_api_for_summary(competence_responses)
skill_assessment = call_api_for_skill_assessment(competence_responses)
return f"Merci pour vos réponses ! Voici votre bilan de compétences :\n\n{summary}", skill_assessment
def start_conversation():
global current_question_index, competence_responses
current_question_index = 0
competence_responses = []
return [[None, competence_questions[0]]], None
def user(user_message, history):
return "", history + [[user_message, None]]
def bot(history):
if history:
bot_message, skill_assessment = chatbot_response(history[-1][0], history[:-1])
history[-1][1] = bot_message
return history, skill_assessment
return [], None
def clear_chat():
global competence_responses, current_question_index
competence_responses = []
current_question_index = 0
return [], None, None
with gr.Blocks(theme=gr.themes.Soft()) as demo:
chatbot = gr.Chatbot(label="Historique de la conversation")
msg = gr.Textbox(label="Votre message", placeholder="Tapez votre message ici...")
clear = gr.Button("Effacer la conversation")
summary_output = gr.Textbox(label="Résumé des compétences", interactive=False)
skill_assessment_output = gr.Textbox(label="Bilan des compétences", interactive=False)
submit_button = gr.Button("Soumettre")
demo.load(start_conversation, inputs=None, outputs=[chatbot, skill_assessment_output])
msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
bot, [chatbot], [chatbot, skill_assessment_output]
)
clear.click(clear_chat, None, [chatbot, skill_assessment_output, summary_output], queue=False)
def submit_summary(skill_assessment_output):
airtable_response = upload_to_airtable(skill_assessment_output)
return f"Résumé soumis : {skill_assessment_output}\n{airtable_response}"
submit_button.click(submit_summary, skill_assessment_output, summary_output)
demo.launch(share=True)