File size: 3,716 Bytes
ac1bcb5
 
c87b9ca
 
 
ac1bcb5
c87b9ca
 
 
e26878b
c87b9ca
 
 
ac1bcb5
c87b9ca
 
 
 
 
 
 
 
 
 
e26878b
c87b9ca
 
 
 
 
 
 
 
 
 
 
 
 
 
e26878b
c87b9ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e26878b
c87b9ca
 
 
e26878b
 
c87b9ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac1bcb5
c87b9ca
ac1bcb5
c87b9ca
 
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
import gradio as gr
import torch
from llama_cpp import Llama
import os
from huggingface_hub import hf_hub_download

# Configuration du modèle
MODEL_NAME = "Dorian2B/Vera-v1.5-Instruct-GGUF"
MODEL_FILE = "vera-v1.5-instruct-q8_0.gguf"

def download_model():
    model_path = hf_hub_download(repo_id=MODEL_NAME, filename=MODEL_FILE)
    return model_path

def load_model():
    model_path = download_model()
    
    # Paramètres pour le modèle
    model = Llama(
        model_path=model_path,
        n_ctx=4096,  # Taille du contexte
        n_gpu_layers=-1  # Utilise tous les layers disponibles sur GPU si possible
    )
    return model

# Format du template pour Vera
def format_prompt(message, history):
    prompt = "<|system|>\nTu es Vera, une assistante IA utile, honnête et inoffensive.\n</s>\n"
    
    # Ajout de l'historique
    for user_msg, assistant_msg in history:
        prompt += f"<|user|>\n{user_msg}\n</s>\n"
        prompt += f"<|assistant|>\n{assistant_msg}\n</s>\n"
    
    # Ajout du message actuel
    prompt += f"<|user|>\n{message}\n</s>\n"
    prompt += "<|assistant|>\n"
    
    return prompt

# Fonction d'inférence
def generate_response(message, history):
    if not hasattr(generate_response, "model"):
        generate_response.model = load_model()
    
    prompt = format_prompt(message, history)
    
    # Génération de la réponse
    response = generate_response.model.create_completion(
        prompt,
        max_tokens=2048,
        temperature=0.7,
        top_p=0.95,
        stop=["</s>", "<|user|>", "<|system|>"],
        echo=False
    )
    
    return response['choices'][0]['text']

# Fonction pour réinitialiser la conversation
def reset_conversation():
    return [], ""

# Interface Gradio
with gr.Blocks(css="footer {visibility: hidden}") as demo:
    gr.Markdown("""
    # 🌟 Assistant Vera-v1.5-Instruct
    
    Cette interface vous permet d'interagir avec le modèle Vera-v1.5-Instruct en français. 
    Posez vos questions et l'assistant vous répondra en tenant compte du contexte de la conversation.
    """)
    
    with gr.Row():
        with gr.Column(scale=4):
            chatbot = gr.Chatbot(
                height=500,
                show_copy_button=True,
                avatar_images=("👤", "🤖"),
                bubble_full_width=False,
            )
    
    with gr.Row():
        with gr.Column(scale=4):
            message = gr.Textbox(
                placeholder="Entrez votre message ici...",
                lines=2,
                container=False,
                scale=4,
            )
        with gr.Column(scale=1):
            with gr.Row():
                submit_btn = gr.Button("Envoyer", variant="primary", scale=2)
                reset_btn = gr.Button("Réinitialiser", variant="secondary", scale=1)
    
    gr.Markdown("""
    ### À propos du modèle
    
    Ce modèle est basé sur **Vera-v1.5-Instruct-GGUF** de [Dorian2B](https://huggingface.co/Dorian2B/Vera-v1.5-Instruct-GGUF).
    Le modèle est optimisé pour les conversations en français.
    """)
    
    # Configuration des événements
    submit_btn.click(
        fn=generate_response,
        inputs=[message, chatbot],
        outputs=[chatbot],
        queue=True
    ).then(
        fn=lambda: "",
        outputs=[message]
    )
    
    message.submit(
        fn=generate_response,
        inputs=[message, chatbot],
        outputs=[chatbot],
        queue=True
    ).then(
        fn=lambda: "",
        outputs=[message]
    )
    
    reset_btn.click(
        fn=reset_conversation,
        outputs=[chatbot, message]
    )

# Lancement de l'interface
if __name__ == "__main__":
    demo.queue()
    demo.launch()