|
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 |
|
import gradio as gr |
|
from gradio.components import Button, ClearButton |
|
from gradio.layouts import Column, Row |
|
from gradio.data_classes import InterfaceTypes |
|
import inspect |
|
import pandas as pd |
|
|
|
|
|
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 = """ |
|
<h1 style='text-align: center; font-weight: bold;'> Bellay, le premier LLM de la littérature française</h1> |
|
""" |
|
description = """ |
|
<p style='text-align: justify;'> |
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus elementum leo a |
|
tortor fringilla elementum. Nullam eget sodales lacus. Nullam non aliquet elit. |
|
Etiam enim arcu, vehicula nec enim id, laoreet sodales justo. Nulla feugiat non |
|
leo in interdum. Quisque id leo ligula. Etiam id quam urna. Morbi tincidunt eros |
|
in eros vulputate, a congue enim feugiat. Ut laoreet ex in dui ultrices elementum. |
|
Vivamus eget venenatis dui. Vestibulum dictum ipsum eu mauris convallis, sit amet |
|
sollicitudin orci lacinia. Nunc pellentesque hendrerit felis eleifend interdum. |
|
Ut ac volutpat nisi. |
|
</p> |
|
""" |
|
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' |
|
] |
|
|
|
explanations = { |
|
'Proust': "Marcel Proust, known for his introspective and lengthy novel 'In Search of Lost Time', which explores themes of memory and time.", |
|
'Encyclopédie': "A groundbreaking Enlightenment-era work, edited by Diderot and d'Alembert, aiming to compile and disseminate human knowledge.", |
|
'Balzac': "Honoré de Balzac, a French novelist and playwright, famous for his detailed depiction of society in 'La Comédie Humaine'.", |
|
'Montaigne': "Michel de Montaigne, a Renaissance philosopher known for popularizing the essay as a literary genre, exploring human nature.", |
|
'Foucault': "Michel Foucault, a 20th-century philosopher and social theorist, known for his analysis of power and societal institutions.", |
|
'Chansons de gestes': "Medieval epic poems celebrating heroic deeds, exemplified by 'The Song of Roland', key to French literary history.", |
|
'Constitutions françaises': "Refers to the various constitutions that France has had throughout its history, each shaping its political landscape.", |
|
'La Fontaine': "Jean de La Fontaine, famed for his Fables, which are moralistic stories often featuring animals and conveying ethical lessons.", |
|
'Madame de Sévigné': "Marie de Rabutin-Chantal, Marquise de Sévigné, known for her detailed and insightful letters depicting French aristocratic life.", |
|
'Molière': "Jean-Baptiste Poquelin, known as Molière, a playwright and actor, acclaimed for his comedies like 'Tartuffe' and 'The Misanthrope'.", |
|
'Racine': "Jean Racine, a playwright of the French classical era, renowned for his tragedies like 'Phèdre' and 'Andromaque'.", |
|
'Romans classiques': "Refers to classic French novels, characterized by their adherence to traditional literary standards and themes.", |
|
'Romans romantiques': "Romantic-era French novels, emphasizing emotion, nature, and individualism, contrasting with the rationality of Enlightenment.", |
|
'Théâtre absurde': "Absurdist theatre, a post-World War II movement exemplified by playwrights like Samuel Beckett, emphasizing the absurdity of human existence.", |
|
'Romans belle époque': "Novels from the Belle Époque, a period of French history marked by optimism, cultural innovations, and artistic flourishing.", |
|
'Bible Segond': "A French translation of the Bible by Louis Segond, widely used in French-speaking Protestant communities.", |
|
'Zola': "Émile Zola, a key figure in the literary school of naturalism, known for his series of novels 'Les Rougon-Macquart'.", |
|
'Pagnol': "Marcel Pagnol, a novelist and filmmaker, celebrated for his works depicting life in Provence, including 'Jean de Florette'.", |
|
'Philosophie': "Refers to French philosophy, a rich tradition ranging from existentialism to post-structuralism, featuring thinkers like Sartre and Derrida.", |
|
'Poésies': "French poetry, a diverse field ranging from the troubadours of the Middle Ages to the symbolists and modern poets.", |
|
'De Gaulle': "Charles de Gaulle, a French general and statesman, pivotal in establishing the Fifth Republic and its constitution.", |
|
'Série noire': "A French publishing imprint known for its translations of American hardboiled detective and noir crime fiction.", |
|
'San Antonio': "A series of French detective novels by Frédéric Dard, featuring the character San Antonio, known for their humor and inventiveness.", |
|
'Duras': "Marguerite Duras, a French writer and film director, known for her minimalist style and works like 'The Lover'.", |
|
'Presse années 1970': "Refers to the French press in the 1970s, a period marked by political activism and the rise of new journalistic styles.", |
|
'Braudel': "Fernand Braudel, a French historian who revolutionized the study of history by focusing on long-term social and geographic structures.", |
|
'Bourdieu': "Pierre Bourdieu, a French sociologist, renowned for his theory of social practices and concepts like cultural capital.", |
|
'Derrida': "Jacques Derrida, a philosopher best known for developing deconstruction, a critical approach that questions the relationship between text and meaning.", |
|
'Baudrillard': "Jean Baudrillard, a cultural theorist known for his analysis of consumerism, simulation, and hyperreality." |
|
} |
|
image_urls = { |
|
'Proust': "http://t1.gstatic.com/licensed-image?q=tbn:ANd9GcS_zFylvV8-QHOVHSO1TClcYm_gt00YW1rC4j8ZHfLr2eCFsrPI3q8Q_BhzTLdIk-n0", |
|
'Encyclopédie': "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Encyclopedie_de_D%27Alembert_et_Diderot_-_Premiere_Page_-_ENC_1-NA5.jpg/1024px-Encyclopedie_de_D%27Alembert_et_Diderot_-_Premiere_Page_-_ENC_1-NA5.jpg", |
|
'Balzac': "https://t3.gstatic.com/licensed-image?q=tbn:ANd9GcTlbvVdT2S3WB3ddx7cAl3PyMVTzuInIy-JnZPz5Pfay-xmqZbubnOIH4zzDvhYzmBV", |
|
'Montaigne':"https://upload.wikimedia.org/wikipedia/commons/a/ac/Montaigne-Dumonstier.jpg", |
|
'Foucault':"https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Michel_Foucault_1974_Brasil.jpg/260px-Michel_Foucault_1974_Brasil.jpg", |
|
'Chansons de gestes':"https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/QuatrefilsAymonmanuscritXVe.jpg/220px-QuatrefilsAymonmanuscritXVe.jpg", |
|
'Constitutions françaises':"https://www.le-livre.fr/photos/RO4/RO40203585.jpg", |
|
'La Fontaine':"https://upload.wikimedia.org/wikipedia/commons/d/dd/Jean_de_La_Fontaine.PNG", |
|
'Madame de Sévigné':"https://upload.wikimedia.org/wikipedia/commons/1/1e/Madame_de_Sevigne_Lefebvre.jpg", |
|
'Molière':"https://theatre-contemporain.net/images/upload/persons/a/6/normal-normal-428x640-373.jpg", |
|
'Racine':"https://magny-les-hameaux.fr/sites/magny-les-hameaux/files/image/2020-09/Jean%20Racine.jpg", |
|
'Théâtre absurde':"https://upload.wikimedia.org/wikipedia/commons/d/d6/En_attendant_Godot%2C_Festival_d%27Avignon%2C_1978.jpeg", |
|
'Romans belle époque':"https://www.geo.fr/imgre/fit/~1~geo~2022~09~07~5a10df00-dc69-4e4c-8ee4-81ebef1c1717.jpeg/1200x630/cr/wqkgR2V0dHkgSW1hZ2VzIC8gR0VP/la-belle-epoque-etait-elle-si-belle.jpg", |
|
'Bible Segond':"https://upload.wikimedia.org/wikipedia/commons/8/8b/Bible_Segong_21_-_1.jpg", |
|
'Zola':"https://upload.wikimedia.org/wikipedia/commons/5/5a/Emile_Zola_1902.jpg", |
|
'Pagnol':"https://upload.wikimedia.org/wikipedia/commons/7/79/Pagnol_Harcourt_1948.jpg", |
|
'Poésies':"https://www.ville-castres.fr/sites/default/files/thumbnails/image/poesie-1.png", |
|
'De Gaulle':"https://www.elysee.fr/cdn-cgi/image/width=720%2Cheight=1080/images/default/0001/02/2b14cc268d0be2c7c7605bca866fea0c24d55d09.jpeg", |
|
'Duras':"https://upload.wikimedia.org/wikipedia/commons/1/12/Identite-Duras-1960-Sacem.png", |
|
'Braudel':"https://www.radiofrance.fr/s3/cruiser-production/2017/12/1ec62d38-1e2b-4410-8763-f956716f7010/250x250_043_aur_braudel_01.jpg", |
|
'Bourdieu':"https://www.scienceshumaines.com/images/p.bourdieu_.jpg", |
|
'Derrida':"https://www.philomag.com/sites/default/files/images/derrida_leemage.prt385js_042-copie.jpg", |
|
'Baudrillard':"https://www.philomag.com/sites/default/files/styles/sidebar_full_image/public/images/baudrillard_leemage.eff2022.jpg" |
|
} |
|
|
|
|
|
def update_explanation(choice): |
|
explanation_text = explanations.get(choice, "No explanation available.") |
|
image_url = image_urls.get(choice, "default_image_url_if_not_found") |
|
image_html = f"<img src='{image_url}' style='max-height: 200px; max-width: 200px; display: block; margin-left: auto; margin-right: auto; order: 2'/>" |
|
return explanation_text, image_html |
|
|
|
|
|
with gr.Blocks(theme = 'carlosrosash/bellay_test') as demo: |
|
gr.Markdown(title) |
|
gr.Markdown(description) |
|
|
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
dropdown = gr.Dropdown(list_dropdown, label="Choose an Artist or Style") |
|
explanation_box = gr.Textbox(label="Explanation", type="text", lines=5, interactive=False) |
|
dropdown.change(update_explanation, inputs=dropdown, outputs=[explanation_box, explanation_image]) |
|
with gr.Column(scale=2): |
|
explanation_image = gr.HTML(label="Image") |
|
|
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
user_input = gr.Textbox(label="Question or your instruction", type="text", lines=5, placeholder="Start typing here") |
|
temperature_slider = gr.Slider(label="Temperature", value=0.7, minimum=0.05, maximum=1.0, step=0.05, interactive=True) |
|
with gr.Row(): |
|
with gr.Column(): |
|
clear_button = gr.Button("Clear", variant = "primary") |
|
with gr.Column(): |
|
submit_button = gr.Button("Submit", variant = "secondary") |
|
with gr.Column(): |
|
output_text = gr.Textbox(label="Response", type="text", lines=10) |
|
|
|
|
|
def on_submit(user_message, style, temperature): |
|
return mistral_bot.predict(user_message, style, temperature) |
|
|
|
|
|
def clear_all(): |
|
return ["", list_dropdown[0], 0.7, ""] |
|
|
|
submit_button.click(on_submit, inputs=[user_input, dropdown, temperature_slider], outputs=output_text) |
|
|
|
clear_button.click(clear_all, outputs=[user_input, dropdown, temperature_slider, output_text]) |
|
|
|
|
|
gr.Markdown("<h2>Examples</h2>") |
|
gr.Examples( |
|
examples=[ |
|
["Comment faire une bonne madeleine ? Donne-moi une recette détaillée avec les ingrédients.", "Proust", 0.7], |
|
["Que t'evoque le goût d'une madeleinee", "Proust", 0.5], |
|
["Quelles sont les valeurs de la République française", "Constitutions françaises", 1.0] |
|
], |
|
inputs=[user_input, dropdown, temperature_slider], |
|
outputs=output_text, |
|
fn=on_submit, |
|
cache_examples=True, |
|
) |
|
|
|
demo.launch() |
|
|