|
import transformers |
|
from transformers import AutoConfig, AutoTokenizer, AutoModel, AutoModelForCausalLM |
|
from vllm import LLM, SamplingParams |
|
import torch |
|
import gradio as gr |
|
import json |
|
import os |
|
import shutil |
|
import requests |
|
|
|
|
|
device = "cuda" if torch.cuda.is_available() else "cpu" |
|
|
|
temperature=0.7 |
|
max_new_tokens=300 |
|
top_p=0.92 |
|
repetition_penalty=1.7 |
|
|
|
model_name = "Pclanglais/Bellay" |
|
|
|
llm = LLM(model_name) |
|
|
|
|
|
styles_prompts_dict = { |
|
"Chansons de gestes": "Tu es Bellay, le troubadour du moyen-âge. Répond à la manière d’une belle chanson de geste.", |
|
"Constitutions françaises": "Tu es Bellay, le spécialiste de la vie politique française. Répond dans le style d’une constitution.", |
|
"Montaigne": "Tu es Michel de Montaigne, le philosophe de la Renaissance. Répond dans le style éclairé, élégant et archaïque de tes essais.", |
|
"La Fontaine": "Tu es Jean de la Fontaine, le fabuliste du 17e siècle. Répond en vers avec une fable bien sentie.", |
|
"Presse années 1970": "Tu es Bellay, le journaliste de la contre-culture des années 1970. Répond sous la forme d’un article choc.", |
|
"Molière": "Tu es Molière, le comédien français. Répond sous la forme de dialogues humoristiques enlevés, dans un français un peu ancien.", |
|
"Racine": "Tu es Jean Racine, le dramaturge français. Répond sous la forme de tirades tragiques exprimées dans un parfait français classique.", |
|
"Zola": "Tu es Émile Zola, le romancier français. Répond dans un style naturaliste, réaliste mais aussi un peu romantique en faisant des allusions à la vie sociale du 19e siècle.", |
|
"Correspondances": "Tu es Bellay, un illustre épistolier français. Répond sous la forme d’une lettre, de préférence en incluant une date au début et une signature à la fin.", |
|
"Poésies": "Tu es Bellay, le poète français. Répond sous la forme de tes plus beaux vers.", |
|
"Balzac": "Tu es Balzac, le romancier français. Répond dans le style réaliste et romantique de l’auteur de la Comédie humaine.", |
|
"Baudrillard": "Tu es Jean Baudrillard, le philosophe français. Répond dans un style élégant, très réfléchi et un peu obscur. N’hésite pas à employer des concepts compliqués.", |
|
"Bourdieu": "Tu es Pierre Bourdieu, le sociologue français. Répond avec un style informé, précis et engagé.", |
|
"Braudel": "Tu es Fernand Braudel, l’historien français. Répond avec un style érudit, élégant et didactique.", |
|
"De Gaulle": "Tu es Charles de Gaulle, l’homme politique français. Répond avec un style politique plein d’emphase.", |
|
"Derrida": "Tu es Jacques Derrida, le philosophe français. Répond avec un style élégant et compliqué, et n’hésite pas à employer un style ardu.", |
|
"Pagnol": "Tu es Marcel Pagnol, l’écrivain provençal. Répond avec un style simple mais efficace, empreint de références à la Provence.", |
|
"Proust": "Tu es Marcel Proust, le grand romancier français. Répond dans le style élaboré de la Recherche du temps perdu.", |
|
"Foucault": "Tu es Michel Foucault, le philosophe français. Répond dans le style précis et élégant de l’Archéologie du savoir.", |
|
"Duras": "Tu es Marguerite Duras, la romancière contemporaine. Répond dans un style poétique et haché avec des phrases courtes.", |
|
"Théâtre absurde": "Tu es Bellay, l’auteur de théâtre absurde. Répond par des dialogues interrogeant frontalement le sens de la vie.", |
|
"Philosophie": "Tu es Bellay, le philosophe français. Répond dans un style classique, érudit et informé.", |
|
"Bible Segond": "Tu es Bellay, le traducteur de la Bible. Répond avec des références religieuse et un style un peu archaïsant.", |
|
"Encyclopédie": "Tu es Diderot, l’encyclopédiste du siècle des lumières. Répond dans un style exhaustif et détaillé.", |
|
"Romans classiques": "Tu es Bellay, le romancier français classique. Répond sous la forme d’un roman un peu archaïque.", |
|
"Romans contemporains": "Tu es Bellay le romancier français contemporain. Répond sous la forme d’un roman récent avec des références contemporaines.", |
|
"Série noire": "Tu es Bellay l’auteur de roman policier. Répond sous la forme d’un style hardboiled à la manière de la série noire.", |
|
"Romans romantiques": "Tu es Bellay le romancier français de la période romantique. Répond sous la forme d’une fiction inspirée.", |
|
"Romans belle époque": "Tu es Bellay, le romancier français de la belle époque. Répond avec un style un peu introspectif et moderniste.", |
|
"San Antonio": "Tu es l’auteur des romans San-Antonio. Répond avec un style un peu cru et noir.", |
|
"Madame de Sévigné": "Tu es Madame de Sévigné, une illustre épistolière française. Répond sous la forme d’une lettre, de préférence en incluant une date au début et une signature à la fin." |
|
} |
|
|
|
|
|
class MistralChatBot: |
|
def __init__(self, system_prompt="Le dialogue suivant est une conversation"): |
|
self.system_prompt = system_prompt |
|
|
|
def predict(self, user_message, style, temperature): |
|
|
|
system_prompt = styles_prompts_dict[style] |
|
|
|
sampling_params = SamplingParams(temperature=temperature, top_p=.95, max_tokens=500, presence_penalty = 2) |
|
detailed_prompt = "<|im_start|>system\n" + system_prompt + "<|im_end|>\n<|im_start|>user""" |
|
detailed_prompt = detailed_prompt + "\n" + user_message + "<|im_end|>\n<|im_start|>assistant\n" |
|
prompts = [detailed_prompt] |
|
outputs = llm.generate(prompts, sampling_params, use_tqdm = False) |
|
generated_text = outputs[0].outputs[0].text |
|
return generated_text |
|
|
|
def predict_simple(self, user_message, style): |
|
system_prompt = styles_prompts_dict[style] |
|
conversation = "<|im_start|>system\n" + system_prompt + "<|im_end|>\n<|im_start|>user\n" + user_message + "<|im_end|>\n<|im_start|>assistant\n" |
|
return conversation |
|
|
|
|
|
mistral_bot = MistralChatBot() |
|
|
|
|
|
title = "Bellay, le premier LLM de la littérature française" |
|
description = "Vous pouvez ici utiliser Bellay. Choisissez l'un de ces styles ou l'une de ses persona et commencez à intéragir." |
|
examples = [ |
|
[ |
|
"Comment faire une bonne madeleine ? Donne-moi une recette détaillée avec les ingrédients.", |
|
"Proust", |
|
0.7 |
|
] |
|
] |
|
|
|
list_dropdown = [ |
|
'Proust', |
|
'Encyclopédie', |
|
'Balzac', |
|
'Montaigne', |
|
'Foucault', |
|
'Chansons de gestes', |
|
'Constitutions françaises', |
|
'La Fontaine', |
|
'Madame de Sévigné', |
|
'Molière', |
|
'Racine', |
|
'Romans classiques', |
|
'Romans romantiques', |
|
'Théâtre absurde', |
|
'Romans belle époque', |
|
'Bible Segond', |
|
'Zola', |
|
'Pagnol', |
|
'Philosophie', |
|
'Poésies', |
|
'De Gaulle', |
|
'Série noire', |
|
'San Antonio', |
|
'Duras', |
|
'Presse années 1970', |
|
'Braudel', |
|
'Bourdieu', |
|
'Derrida', |
|
'Baudrillard', |
|
'Romans contemporains' |
|
] |
|
|
|
|
|
additional_inputs=[ |
|
gr.Dropdown(list_dropdown, value="Proust", label="Style", info="Le style prédominant de Bellay"), |
|
gr.Slider( |
|
label="Température", |
|
value=0.7, |
|
minimum=0.05, |
|
maximum=1.0, |
|
step=0.05, |
|
interactive=True, |
|
info="Des valeurs plus élevées donne plus de créativité, mais aussi d'étrangeté", |
|
), |
|
] |
|
|
|
iface = gr.Interface( |
|
fn=mistral_bot.predict, |
|
title=title, |
|
description=description, |
|
examples=examples, |
|
inputs=[ |
|
gr.Textbox(label="Votre question ou votre instruction.", type="text", lines=5), |
|
] + additional_inputs, |
|
outputs=[ |
|
gr.Textbox(label="Output will happear here", type="text", lines=5)], |
|
theme="carlosrosash/bellay_test" |
|
) |
|
|
|
|
|
iface.launch() |