Snark_space / app.py
lagas
add model
e016c77
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
import torch
import gradio as gr
import re
# === Dossier contenant le modèle fine-tuné ===
MODEL_DIR = "model"
# === Chargement du modèle GPT-Neo ===
print("🔁 Loading GPT-Neo model...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
model = AutoModelForCausalLM.from_pretrained(MODEL_DIR)
# === Ajouter un token spécial de stop ===
stop_token = "<|stop|>"
tokenizer.add_special_tokens({'additional_special_tokens': [stop_token]})
model.resize_token_embeddings(len(tokenizer))
# === Création de la pipeline ===
device = 0 if torch.cuda.is_available() else -1
generator = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
device=device
)
# === Fonction de réponse sarcastique ===
def respond(prompt):
full_input = f"### Prompt: {prompt}\n### Response (sarcastic):"
output = generator(
full_input,
max_new_tokens=60,
do_sample=True,
temperature=0.9,
top_k=50,
top_p=0.95,
repetition_penalty=1.2,
eos_token_id=tokenizer.convert_tokens_to_ids(stop_token),
)
raw_text = output[0]["generated_text"]
response = raw_text.replace(full_input, "")
response = re.split(re.escape(stop_token), response)[0].strip()
if response.endswith(("and", "or", "but", "because")):
response = response.rsplit(" ", 1)[0] + "..."
return response
# === Interface Gradio ===
demo = gr.Interface(
fn=respond,
inputs=gr.Textbox(lines=2, placeholder="Ask something ridiculous..."),
outputs="text",
title="S.N.A.R.K – Sarcastic Neural Algorithm",
description="A fine-tuned GPT-Neo model that delivers sharp and witty sarcasm on demand. Proceed at your own risk."
)
demo.launch()