Spaces:
Running
on
Zero
Running
on
Zero
from transformers import AutoModelForCausalLM, AutoTokenizer | |
import gradio as gr | |
import torch | |
import spaces | |
# Vérifier si CUDA est disponible et configurer le périphérique | |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
print(f"Utilisation du périphérique : {device}") | |
# Charger le modèle | |
model_name = "soynade-research/Oolel-v0.1" | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForCausalLM.from_pretrained(model_name).to(device) | |
# Liste des prompts système prédéfinis | |
system_prompts = { | |
"Conte Wolof traditionnel": "You are a skilled Wolof storyteller (Gewël) with deep knowledge of African folktales and traditions. Write engaging stories in Wolof that reflect African cultural values and wisdom.", | |
"Conseils en développement": "You are a software developer with expertise in building applications. Provide practical advice and solutions for coding challenges in Python and machine learning.", | |
"Conseils en gestion de projet": "You are an expert in project management, capable of offering insights on how to efficiently manage a remote development team and keep them motivated." | |
} | |
# Fonction pour générer une réponse | |
def generate_response(user_input, system_prompt, max_new_tokens=150, temperature=0.7): | |
# Créer la liste des messages avec le prompt système et l'entrée utilisateur | |
messages = [ | |
{"role": "system", "content": system_prompt}, | |
{"role": "user", "content": user_input} | |
] | |
# Tokeniser l'entrée | |
inputs = tokenizer(user_input, return_tensors="pt").to(device) | |
# Générer une réponse | |
outputs = model.generate(inputs.input_ids, max_new_tokens=int(max_new_tokens), temperature=temperature) | |
# Décoder la réponse en texte | |
return tokenizer.decode(outputs[0], skip_special_tokens=True) | |
# Fonction pour mettre à jour le message du prompt système en fonction du choix | |
def update_system_prompt(selected_prompt): | |
return system_prompts.get(selected_prompt, "") | |
# Interface Gradio | |
iface = gr.Interface( | |
fn=generate_response, | |
inputs=[ | |
gr.Textbox(label="Message utilisateur", placeholder="Entrez votre message ici..."), | |
# Dropdown pour choisir un prompt système | |
gr.Dropdown( | |
label="Choisir un prompt système", | |
choices=list(system_prompts.keys()), # Liste des options de prompts | |
value=None, # Pas de sélection par défaut | |
type="value", | |
interactive=True | |
), | |
# Textbox pour afficher et modifier le message du prompt système | |
gr.Textbox( | |
label="Message du prompt système", | |
value="", # Valeur par défaut vide | |
placeholder="Sélectionnez un prompt système pour afficher son contenu ici..." | |
), | |
gr.Slider(50, 500, value=150, label="Nombre max de tokens") | |
], | |
outputs="text", | |
title="Oolel Chatbot", | |
description="Entrez votre message et choisissez un prompt pour générer des réponses adaptées dans divers domaines." | |
) | |
# Lier la mise à jour du prompt avec l'événement du Dropdown | |
iface.input_components[1].change(update_system_prompt, inputs=[iface.input_components[1]], outputs=[iface.input_components[2]]) | |
# Lancer l'interface | |
iface.launch() | |