Spaces:
Runtime error
Runtime error
import gradio as gr | |
import torch | |
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline | |
# Définir le modèle et le tokenizer | |
# Utilisation d'un modèle français pour le domaine médical | |
MODEL_NAME = "analist/llama3.1-8B-omnimed-rl" # Vous pouvez utiliser un modèle plus adapté au français comme "camembert" ou un modèle médical spécifique | |
# Fonction pour charger le modèle et le tokenizer | |
def load_model(): | |
print("Chargement du modèle et du tokenizer...") | |
model, tokenizer = FastLanguageModel.from_pretrained( | |
model_name = MODEL_NAME, | |
max_seq_length = 8192, | |
load_in_4bit = True, | |
token = "hf_...", # use one if using gated models like meta-llama/Llama-2-7b-hf | |
) | |
return model, tokenizer | |
# Charger le modèle et le tokenizer | |
model, tokenizer = load_model() | |
# Créer un pipeline de génération de texte | |
generator = pipeline( | |
"text-generation", | |
model=model, | |
tokenizer=tokenizer, | |
max_length=512, | |
do_sample=True, | |
temperature=0.7, | |
top_p=0.9, | |
) | |
# Message initial pour orienter le modèle vers le domaine médical | |
SYSTEM_PROMPT = """Tu es un assistant médical IA nommé MediBot. Tu fournis des informations médicales générales et des conseils de santé basés sur des données scientifiques. | |
Important: Tu n'es pas un médecin et tu dois toujours recommander à l'utilisateur de consulter un professionnel de santé pour un diagnostic ou un traitement spécifique. | |
Réponds aux questions médicales de manière précise et claire, en te basant sur des informations médicales vérifiées.""" | |
# Fonction pour générer une réponse | |
def generate_response(message, chat_history): | |
# Construire le prompt avec l'historique de conversation et le nouveau message | |
prompt = SYSTEM_PROMPT + "\n\n" | |
# Ajouter l'historique du chat | |
for user_msg, bot_msg in chat_history: | |
prompt += f"Utilisateur: {user_msg}\nMediBot: {bot_msg}\n\n" | |
# Ajouter le nouveau message | |
prompt += f"Utilisateur: {message}\nMediBot:" | |
# Générer la réponse | |
response = generator(prompt, max_new_tokens=256)[0]["generated_text"] | |
# Extraire seulement la partie réponse du modèle | |
response_only = response.split("MediBot:")[-1].strip() | |
# Ajouter un rappel de consulter un professionnel | |
if len(response_only) > 0 and not "consulter un professionnel" in response_only.lower(): | |
response_only += "\n\n(N'oubliez pas que ces informations sont générales. Pour des conseils personnalisés, consultez un professionnel de santé.)" | |
return response_only | |
# Fonction pour gérer l'historique du chat Gradio | |
def chatbot_response(message, history): | |
bot_message = generate_response(message, history) | |
history.append((message, bot_message)) | |
return "", history | |
# Interface Gradio | |
with gr.Blocks(title="MediBot - Assistant Médical IA") as demo: | |
gr.Markdown("# MediBot - Votre Assistant Médical basé sur l'IA") | |
gr.Markdown(""" | |
### ⚠️ IMPORTANT - AVERTISSEMENT MÉDICAL ⚠️ | |
Ce chatbot utilise l'intelligence artificielle pour fournir des informations médicales générales. | |
Il ne remplace en aucun cas l'avis d'un professionnel de santé qualifié. | |
Pour toute question médicale sérieuse, veuillez consulter un médecin. | |
""") | |
chatbot = gr.Chatbot(height=500) | |
msg = gr.Textbox(placeholder="Posez votre question médicale ici...", label="Votre question") | |
clear = gr.Button("Effacer la conversation") | |
# Configurer les événements | |
msg.submit(chatbot_response, [msg, chatbot], [msg, chatbot]) | |
clear.click(lambda: None, None, chatbot, queue=False) | |
gr.Markdown(""" | |
### Exemples de questions que vous pouvez poser: | |
- Quels sont les symptômes courants de la grippe? | |
- Comment prévenir l'hypertension artérielle? | |
- Quels aliments sont recommandés pour les diabétiques? | |
- Quelles sont les causes fréquentes des migraines? | |
""") | |
# Lancer l'application | |
if __name__ == "__main__": | |
demo.launch(share=True) # share=True permet de générer un lien public temporaire |