File size: 4,629 Bytes
8824f88 749d210 8824f88 b723c84 8824f88 7cb6017 8824f88 749d210 8824f88 73e29aa a18bfe3 73e29aa 8824f88 73e29aa 0737a9d 73e29aa 0737a9d 34353a1 0737a9d 8824f88 5af899b 8824f88 73e29aa 749d210 8824f88 73e29aa a18bfe3 8824f88 749d210 8824f88 13de298 |
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 |
#!/usr/bin/env python
import os
from collections.abc import Iterator
from threading import Thread
import gradio as gr
import spaces
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
DESCRIPTION = " "
if not torch.cuda.is_available():
DESCRIPTION += "\n<p>Running on CPU 🥶 This demo does not work on CPU.</p>"
MAX_INPUT_TOKEN_LENGTH = int(os.getenv("MAX_INPUT_TOKEN_LENGTH", "4096"))
if torch.cuda.is_available():
model_id = "mistralai/Mistral-7B-Instruct-v0.3"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
@spaces.GPU
def generate(message: str, chat_history: list[dict]) -> Iterator[str]:
"""Fonction de génération sans sliders : les paramètres
de génération (max_new_tokens, température, etc.) sont
fixés en dur.
"""
# Vérifier si la question correspond exactement à celle pour laquelle on souhaite une réponse fixe
if message.strip().lower() == "c’est quoi le consentement ? comment savoir si ma copine a envie de moi ?":
fixed_response = """Le consentement, pour exister, doit passer par :
Le questionnement de soi-même : il semble nécessaire de s'intéresser à ce que l’on veut précisément et ce que l’on ne veut pas. Savoir clairement ce que l’on veut faire permet d’être en capacité de le dire à l’autre à haute voix.
Le questionnement de l’autre sur ses envies (clique sur le nuage comment demander le consentement de l’autre si tu veux plus de détails).
Le respect de son corps et du corps de l’autre, ainsi que de ses envies : faire quelque chose qui n’est pas expressément désiré par l’autre, tu ne feras point.
⚠️ Attention : Le consentement se limite à un moment donné. Tu as le droit de ne pas consentir à une pratique spécifique, de ne plus consentir au rapport sexuel même après avoir donné ton consentement. Tu es précieux. Ainsi, il n’existe pas de devoir sexuel : aucun acte n’est dû à l’autre dans toutes les situations. Le consentement se périme. Il n’existe que de manière temporaire et pour une action particulière.
👉 Comment s’assurer de son consentement ?
Retournes sur la page principale et cliques sur le nuage correspondant pour voir toutes les façon de faire. Choisis ce qui te convient et ce qui te rend à l’aise 😌"""
yield fixed_response
return
# Valeurs par défaut fixées
max_new_tokens = 1024
temperature = 0.6
top_p = 0.9
top_k = 50
repetition_penalty = 1.2
# Prépare la conversation
conversation = [*chat_history, {"role": "user", "content": message}]
input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt")
if input_ids.shape[1] > MAX_INPUT_TOKEN_LENGTH:
input_ids = input_ids[:, -MAX_INPUT_TOKEN_LENGTH:]
gr.Warning(f"Trimmed input from conversation as it was longer than {MAX_INPUT_TOKEN_LENGTH} tokens.")
input_ids = input_ids.to(model.device)
streamer = TextIteratorStreamer(tokenizer, timeout=20.0, skip_prompt=True, skip_special_tokens=True)
generate_kwargs = dict(
{"input_ids": input_ids},
streamer=streamer,
max_new_tokens=max_new_tokens,
do_sample=True,
top_p=top_p,
top_k=top_k,
temperature=temperature,
num_beams=1,
repetition_penalty=repetition_penalty,
)
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start()
outputs = []
for text in streamer:
outputs.append(text)
yield "".join(outputs)
# On ne fournit plus 'additional_inputs' ici, donc aucun slider ne sera affiché
demo = gr.ChatInterface(
fn=generate,
stop_btn=None,
examples=[
["C’est quoi le consentement ? Comment savoir si ma copine a envie de moi ?"],
["C’est quoi une agression sexuelle ?"],
["C’est quoi un viol ?"],
["C’est quoi un attouchement ?"],
["C’est quoi un harcèlement sexuel ?"],
["Est-ce illégal de visionner du porno ?"],
["Mon copain me demande un nude, dois-je le faire ?"],
["Mon ancien copain me menace de poster des photos de moi nue sur internet, que faire ?"],
["Que puis-je faire si un membre de ma famille me touche d’une manière bizarre, mais que j’ai peur de parler ou de ne pas être cru ?"],
],
type="messages",
description=DESCRIPTION,
css_paths="style.css",
)
if __name__ == "__main__":
demo.queue(max_size=20).launch(share=True)
|