File size: 6,037 Bytes
a8bc5c3
 
 
 
6bd6939
 
 
 
 
a8bc5c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d17f1e
a8bc5c3
 
 
 
d31dc7e
 
 
 
 
a8bc5c3
 
 
 
 
2adc88e
 
 
 
 
 
 
 
 
 
a8bc5c3
 
 
2adc88e
a8bc5c3
 
2adc88e
 
a8bc5c3
2adc88e
 
 
 
 
a8bc5c3
 
 
 
 
 
 
 
3d17f1e
 
6bd6939
a8bc5c3
d31dc7e
 
 
a8bc5c3
 
 
 
 
 
 
 
 
 
d31dc7e
a8bc5c3
3d17f1e
d31dc7e
 
a8bc5c3
3d17f1e
d31dc7e
a8bc5c3
 
3d17f1e
a8bc5c3
 
 
 
 
 
3d17f1e
 
d31dc7e
 
a8bc5c3
3d17f1e
a8bc5c3
 
 
 
 
89497da
a8bc5c3
 
 
 
 
 
 
3d17f1e
a8bc5c3
 
 
 
 
 
 
 
 
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#https://huggingface.co/spaces/MisterAI/Try_Small_Models02
#TSMS_app.py_V09
#Add SystemInfo to complete requirements.txt
#Change Interface
##Necessaire de Restart HFSpace tous les 2 ou 3 modèles pour décharger la RAM -- A Voir 
#def unload_model(model):
#    """Décharge le modèle pour libérer la mémoire"""
#    del model  # Supprime la référence au modèle
#    gc.collect()  # Force la collecte des objets non référencés


import subprocess
import sys, platform
from importlib import metadata as md

#SystemInfo
print("Python:", platform.python_version(), sys.implementation.name)
print("OS:", platform.uname())
print("\n".join(sorted(f"{d.metadata['Name']}=={d.version}" for d in md.distributions())))


# Import des bibliothèques nécessaires
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
import requests
import torch

# Fonction pour charger le modèle et le tokenizer
def load_model(model_name):
    """Charge le modèle et le tokenizer"""
    model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
    return model, tokenizer

# Fonction pour générer du texte en utilisant le modèle
def generate_text(model, tokenizer, input_text, max_length, temperature):
    """Génère du texte en utilisant le modèle"""
    inputs = tokenizer(input_text, return_tensors="pt")
    output = model.generate(**inputs, max_length=max_length, temperature=temperature)
    return tokenizer.decode(output[0], skip_special_tokens=True)

# Fonction principale pour générer le texte
def main(input_text, max_length, temperature, model_name, history):
    """Fonction principale pour générer le texte"""
    global model, tokenizer
    if model is None or tokenizer is None:
        raise Exception("Modèle non chargé. Veuillez charger un modèle avant de générer du texte.")
    generated_text = generate_text(model, tokenizer, input_text, max_length, temperature)    
    # Mettre à jour l'historique
    updated_history = append_history(history, f"Entrée: {input_text}\nSortie: {generated_text}")   
    # Renvoie le texte généré et l'historique mis à jour
    return generated_text, updated_history  

# Variables globales pour stocker le modèle et le tokenizer
model = None
tokenizer = None

# Fonction pour charger le modèle lors du clic sur le bouton "Charger Le Modèle"
#def load_model_button_clicked(model_name):
#    """Charge le modèle et le tokenizer lors du clic sur le bouton"""
#    global model, tokenizer, history
#    try:
#        model, tokenizer = load_model(model_name)
#        return f"Modèle {model_name} chargé avec succès"
#    except Exception as e:
#        return f"Erreur lors du chargement du modèle {model_name}: {e}"

# Fonction pour charger le modèle lors du clic sur le bouton "Charger Le Modèle"
def load_model_button_clicked(model_name):
    """Charge le modèle et le tokenizer lors du clic sur le bouton"""
    global model, tokenizer, history  # Ajoutez history ici pour l'utiliser
    try:
        model, tokenizer = load_model(model_name)
        history = append_history(history, f"Modèle {model_name} chargé avec succès")  # Mettre à jour l'historique
        return history  # Renvoie l'historique mis à jour
    except Exception as e:
        history = append_history(history, f"Erreur lors du chargement du modèle {model_name}: {e}")  # Mettre à jour l'historique en cas d'erreur
        return history  # Renvoie l'historique mis à jour
        
        
        
#Fonction Pour Conserver un Historique
def append_history(history, message):
    return f"{history}\n\n***\n{message}" if history else message
        
# Création de l'interface Gradio
demo = gr.Blocks()

with demo:
    with gr.Row():
        gr.Markdown("# TrySmallModels Quickly!\n"
                    "NB : Be Patient - Models Are Running On HF Free Space - Work Better with Models Under 3B Parameters")

    with gr.Row():
        gr.Markdown("## Sélectionner Un Modèle")
        
    with gr.Row():
        with gr.Column():
            # Textbox pour entrer le nom du modèle
            model_name_textbox = gr.Textbox(label="Nom du modèle", placeholder="Depot/NomModele Exemple kurakurai/Luth-LFM2-1.2B", interactive=True)
        with gr.Column():
            # Bouton pour charger le modèle sélectionné
            LoadModel_button = gr.Button("Charger Le Modèle")            
        with gr.Column():
            # Textbox pour Logs et Historique
            history = gr.Textbox(label="Historique", lines=5)
            
    with gr.Row():
        gr.Markdown("## Entrer Un Prompt")
        
    with gr.Row():
        # Textbox pour entrer le texte d'entrée
        input_text = gr.Textbox(label="Texte d'entrée", lines=5)
        
    with gr.Row():
        # Sliders pour ajuster la longueur maximale et la température
        max_length_slider = gr.Slider(50, 4500, label="Longueur maximale", value=200)
        temperature_slider = gr.Slider(0.1, 1.0, label="Température", value=0.7)

    with gr.Row():
        # Bouton pour soumettre le texte d'entrée
        submit_button = gr.Button("Soumettre")

    with gr.Row():
        gr.Markdown("## Sortie LLM")
    
    with gr.Row():
        # Textbox pour afficher le texte généré
        output_text = gr.Textbox(label="Texte généré", lines=5)

    # Ajout des interactions pour les boutons
    # Lors du clic sur "Charger Le Modèle", appeler la fonction load_model_button_clicked
    LoadModel_button.click(
        load_model_button_clicked,
        inputs=[model_name_textbox],
        outputs=[history]
    )
    
    # Lors du clic sur "Soumettre", appeler la fonction main
    submit_button.click(
        main,
        inputs=[input_text, max_length_slider, temperature_slider, model_name_textbox, history],
        outputs=[output_text, history],
        queue=False
    )

# Lancer l'application Gradio
if __name__ == "__main__":
    demo.launch()