File size: 1,696 Bytes
018ef1a
258de43
d9b292a
ddceb29
3a4c3b4
c4e4630
9a45ada
e362ba9
c4e4630
ddceb29
 
 
d383b03
ddceb29
 
c4e4630
258de43
 
 
 
ddceb29
258de43
 
c4e4630
 
 
 
 
 
 
018ef1a
c4e4630
 
 
 
9a45ada
ddceb29
 
c4e4630
ddceb29
 
c4e4630
 
ddceb29
d383b03
c4e4630
 
 
 
 
 
d0f41e0
018ef1a
c4e4630
 
018ef1a
c4e4630
 
 
018ef1a
d9b292a
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
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

MODEL = "prithivMLmods/Llama-SmolTalk-3.2-1B-Instruct"

# Charger le tokenizer
tokenizer = AutoTokenizer.from_pretrained(MODEL)

# Charger le modèle en 8 bits
model = AutoModelForCausalLM.from_pretrained(
    MODEL,
    device_map="auto",
    load_in_8bit=True
)

# Pipeline
chatbot = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    device_map="auto"
)

# Prompt système
system_prompt = (
    "Tu es Aria, une IA gentille, claire et polie. "
    "Réponds toujours en phrases complètes. "
    "Ne te lances pas dans un jeu de rôle, ne répète pas les messages précédents, "
    "et donne uniquement ta réponse."
)

def chat(message, history):
    history = history or []
    context = "\n".join([f"{user}\n{bot}" for user, bot in history[-3:]])
    prompt = f"{system_prompt}\n{context}\n{message}\nRéponse:"

    resp = chatbot(
        prompt,
        max_new_tokens=250,   # plus long pour éviter les coupures
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.1
    )[0]["generated_text"]

    # Couper dès qu'il repart sur un nouveau tour
    reply = resp.split("Réponse:")[-1].strip()
    reply = reply.split("Utilisateur:")[0].strip()

    history.append((message, reply))
    return history, history

with gr.Blocks() as demo:
    chatbot_ui = gr.Chatbot()
    state = gr.State([])  # sauvegarde de l'historique
    msg = gr.Textbox(placeholder="Écris un message...")

    msg.submit(chat, [msg, state], [chatbot_ui, state])
    msg.submit(lambda: "", None, msg)  # reset input après envoi

demo.launch()