File size: 3,310 Bytes
49674c0
9a04ccb
af1cf71
fe41d32
af1cf71
 
 
 
e8be70a
9a04ccb
 
 
af1cf71
49674c0
d1aaee5
 
 
 
 
 
 
9a04ccb
fe41d32
3e18916
 
 
 
 
 
 
 
af1cf71
3e18916
af1cf71
6d2ab11
3e18916
af1cf71
9a04ccb
49674c0
6d2ab11
 
 
 
9a04ccb
 
 
af1cf71
3e18916
6d2ab11
d1aaee5
 
 
1398468
6d2ab11
 
d1aaee5
1398468
 
 
 
 
 
af1cf71
 
9a04ccb
3e18916
d1aaee5
49674c0
 
6d2ab11
 
 
af1cf71
9a04ccb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
@spaces.GPU(duration=120)
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()