Bellay / app.py
carlosrosash's picture
Update app.py
bcfb60c
raw history blame
No virus
25.3 kB
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
# Define the device
device = "cuda" if torch.cuda.is_available() else "cpu"
#Define variables
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 to encapsulate the Falcon chatbot
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
# Create the Mistral chatbot instance
mistral_bot = MistralChatBot()
title = """
<h1 style='text-align: center; font-weight: bold; font-size: 50px;'> Bellay, le premier LLM de la littérature française</h1>
"""
description = """
<div style="margin: 15px 10px 25px 25px;"'>
<p style='text-align: justify;'>
<i>
Ainsi puis-je dire de notre langue, qui commence encore à fleurir sans fructifier, ou plutôt, comme une plante et vergette, n’a point encore fleuri, tant s’en faut qu’elle ait apporté tout le fruit qu’elle pourrait bien produire. Cela certainement non pour le défaut de la nature d’elle, aussi apte à engendrer que les autres, mais pour la coulpe de ceux qui l’ont eue en garde, et ne l’ont cultivée à suffisance, mais comme une plante sauvage, en celui même désert où elle avait commencé à naître, sans jamais l’arroser, la tailler, ni défendre des ronces et épines qui lui faisaient ombre, l’ont laissée envieillir et quasi mourir.
</i>
</p>
<p style='text-align: right;'>
- Joachim du Bellay, La Défense et illustration de la langue française (1549)
</p>
</div>
"""
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'
]
# Dictionary of explanations for each artist or style
explanations = {
"Proust": "Marcel Proust est connu pour son style d'écriture riche et élaboré, caractérisé par des phrases longues et complexes, emplies de métaphores et de descriptions minutieuses. Son approche narrative, introspective et analytique, explore profondément les méandres de la mémoire et des émotions humaines.",
"Encyclopédie":"L'Encyclopédie, dirigée par Diderot et d'Alembert, se caractérise par un style clair et didactique, visant à diffuser le savoir de manière accessible. Elle se distingue par ses articles détaillés et objectifs, reflétant les principes des Lumières et l'esprit critique de l'époque.",
"Balzac": "Honoré de Balzac est célèbre pour son style réaliste et détaillé, qui peint avec minutie la société française du XIXe siècle. Ses descriptions exhaustives des lieux, des personnages et des situations, alliées à une analyse psychologique profonde, sont au cœur de son œuvre littéraire.",
"Montaigne": "Michel de Montaigne est reconnu pour son style d'écriture personnel et introspectif, manifeste dans ses Essais. Sa prose, à la fois fluide et réflexive, explore une grande diversité de sujets avec un esprit critique et une curiosité intellectuelle remarquable.",
"Foucault": "Michel Foucault est connu pour son style d'écriture dense et analytique, qui explore les thèmes du pouvoir, de la connaissance et de la discipline sociale. Ses textes, souvent complexes, se caractérisent par un discours critique et une approche philosophique interdisciplinaire.",
"Chansons de gestes": "Les chansons de geste, typiques de la littérature médiévale française, adoptent un style narratif épique et formel, caractérisé par des vers assonancés et des récits héroïques. Ces textes mettent en avant les valeurs de bravoure, de fidélité et d'honneur, à travers des récits de batailles et d'aventures chevaleresques.",
"Constitutions françaises": "Les Constitutions françaises se distinguent par un style juridique et formel, axé sur la clarté et la concision. Elles articulent les principes fondamentaux de la République et de l'organisation de l'État avec un langage précis et structuré.",
"La Fontaine": "Jean de La Fontaine, dans ses fables, adopte un style simple et élégant, mêlant l'ironie et la morale avec une grande habileté poétique. Ses vers fluides et rythmés, souvent teintés d'humour, rendent ses récits accessibles tout en offrant une profonde réflexion sur la nature humaine.",
"Madame de Sévigné": "Madame de Sévigné se distingue par un style épistolaire naturel et vivant, marqué par sa finesse d'observation et son esprit. Ses lettres, célèbres pour leur ton intimiste et leur élégance, reflètent avec justesse et humour la société de son époque.",
"Molière": "Molière, dans ses pièces de théâtre, se caractérise par un style satirique et une maîtrise exceptionnelle du dialogue, alliant comique, critique sociale et profondeur psychologique. Son écriture, à la fois accessible et riche en jeux de mots, révèle les travers humains avec finesse et humour.",
"Racine": "Jean Racine est célèbre pour son style dramatique élégant et épuré, caractérisé par la musicalité de ses alexandrins et la rigueur classique de sa structure. Ses tragédies, empreintes d'une intense émotion et d'une profondeur psychologique, explorent les passions humaines avec un langage raffiné et poignant.",
"Romans classiques": "Les romans classiques français se caractérisent par un style soigné et structuré, mettant l'accent sur une narration linéaire et une exploration approfondie des caractères. Ils se distinguent par des descriptions détaillées, une langue élégante et un souci de réalisme dans la représentation des mœurs et des sentiments.",
"Romans romantiques": "Les romans romantiques français se caractérisent par un style expressif et passionné, privilégiant l'exploration des émotions intenses et des idéaux individualistes. Leur écriture, souvent ornée et lyrique, se focalise sur les thèmes de l'amour, du désir, de la nature, et de la quête de l'absolu.",
"Théâtre absurde": "Le théâtre de l'absurde se caractérise par un style déroutant et non conventionnel, brisant les structures narratives traditionnelles pour explorer l'absurdité de l'existence humaine. Son langage, souvent marqué par l'ironie, le non-sens et une logique déroutante, reflète une profonde remise en question des conventions sociales et philosophiques.",
"Romans belle époque": "Les romans de la Belle Époque se distinguent par un style riche et orné, reflétant l'opulence et le dynamisme de cette période. Leur écriture, souvent caractérisée par des descriptions luxuriantes et une attention particulière aux détails sociaux et culturels, capture l'essence d'une société en pleine transformation.",
"Bible Segond": "La traduction de la Bible par Louis Segond est reconnue pour son style clair et accessible, tout en restant fidèle aux textes originaux. Elle se caractérise par une prose fluide et une structure narrative qui facilite la compréhension des textes sacrés pour les lecteurs francophones.",
"Zola": "Émile Zola est célèbre pour son style naturaliste, mettant en avant une observation précise et souvent crue de la société, avec une attention particulière aux détails réalistes. Ses romans, imprégnés d'une critique sociale et d'une analyse approfondie des conditions humaines, sont écrits dans une langue directe et puissante.",
"Pagnol": "Marcel Pagnol se distingue par un style narratif chaleureux et vivant, empreint de la lumière et de l'esprit du Midi de la France. Son écriture, à la fois simple et poétique, est marquée par un grand sens du dialogue et une affection profonde pour ses personnages et les paysages provençaux.",
"Philosophie": "Le style d'écriture en philosophie est généralement analytique et rigoureux, caractérisé par une argumentation logique et une exploration approfondie des concepts. Il varie cependant considérablement selon les auteurs et les écoles de pensée, allant du style dense et technique au style plus narratif et accessible.",
"Poésies": "La poésie se caractérise par un style expressif et rythmique, faisant un usage intensif de figures de style telles que la métaphore, la rime et l'allitération. Elle varie grandement en forme et en thème, allant de la poésie classique structurée à des formes plus libres et contemporaines, reflétant souvent l'émotion et l'imagination de l'auteur.",
"De Gaulle": "Charles de Gaulle, dans ses écrits, adopte un style direct et assertif, caractérisé par une prose claire et une rhétorique puissante. Son langage, à la fois formel et engagé, reflète sa vision politique et son engagement envers la France et ses valeurs.",
"Série noire": "La Série Noire, célèbre collection de romans policiers et de thrillers, est reconnue pour son style sombre et incisif, qui plonge le lecteur dans des atmosphères tendues et mystérieuses. Les récits, souvent marqués par des dialogues tranchants et une narration rapide, explorent les aspects les plus sombres de la psychologie humaine et de la société.",
"San Antonio": "San Antonio, pseudonyme de Frédéric Dard, est connu pour son style unique mêlant humour, argot et jeux de mots. Ses romans policiers se distinguent par une narration dynamique et une ironie mordante, reflétant un regard à la fois critique et amusé sur la société.",
"Duras": "Marguerite Duras se distingue par un style épuré et poétique, où les silences et les non-dits occupent une place aussi importante que les mots. Son écriture, à la fois intense et minimaliste, explore les thèmes de l'amour, de la mémoire et de l'aliénation avec une profondeur émotionnelle subtile.",
"Presse années 1970": "La presse des années 1970 en France se caractérise par un style souvent engagé et incisif, reflétant les mouvements sociaux et politiques de l'époque. Elle privilégie une approche critique et analytique des événements, tout en explorant de nouvelles formes de journalisme, y compris le reportage de terrain et l'investigation approfondie.",
"Braudel": "Fernand Braudel se distingue par un style d'écriture historique dense et détaillé, mettant l'accent sur la longue durée et les structures économiques, sociales et géographiques. Son approche, à la fois globale et minutieuse, révolutionne la narration historique en intégrant une analyse multidimensionnelle et temporelle des phénomènes.",
"Bourdieu": "Pierre Bourdieu est réputé pour son style d'écriture académique et complexe, caractérisé par un langage précis et une approche théorique rigoureuse. Ses textes, souvent denses et exigeants, utilisent un vocabulaire spécialisé pour explorer les dynamiques de pouvoir et les structures sociales.",
"Derrida": "Jacques Derrida est connu pour son style philosophique dense et hermétique, caractérisé par une écriture complexe et une approche de déconstruction. Son langage, souvent difficile d'accès, remet en question les structures traditionnelles de pensée et de langage, en privilégiant une analyse critique et profonde des concepts.",
"Baudrillard": "Jean Baudrillard se caractérise par un style d'écriture provocateur et souvent paradoxal, explorant les thèmes de la société de consommation, des médias et de la simulation. Sa prose, à la fois critique et ironique, utilise des concepts abstraits pour questionner la réalité et l'illusion dans le monde contemporain.",
"Romans contemporains": "Les romans contemporains se distinguent par une grande diversité de styles, allant du réalisme au fantastique, et abordent souvent des thèmes actuels avec une écriture innovante. Ils se caractérisent par une exploration approfondie des émotions et des expériences humaines, souvent à travers des narrations non linéaires et des techniques littéraires variées."
}
image_urls = {
'Proust': 'https://upload.wikimedia.org/wikipedia/commons/b/b8/Marcel_Proust_1895.jpg',
'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://upload.wikimedia.org/wikipedia/commons/e/e6/Honoré_de_Balzac_%281842%29_Detail.jpg',
'Montaigne': 'https://upload.wikimedia.org/wikipedia/commons/a/ac/Montaigne-Dumonstier.jpg',
'Foucault': 'https://upload.wikimedia.org/wikipedia/commons/7/76/Michel_Foucault_1974_Brasil.jpg',
'Chansons de gestes': 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Mort_de_Roland.jpg/440px-Mort_de_Roland.jpg',
'Constitutions françaises': 'https://pictures.abebooks.com/inventory/31018618758.jpg',
'La Fontaine':'https://upload.wikimedia.org/wikipedia/commons/e/e1/La_Fontaine_par_Rigaud.jpg',
'Madame de Sévigné': 'https://upload.wikimedia.org/wikipedia/commons/1/1e/Madame_de_Sevigne_Lefebvre.jpg',
'Molière':'https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Molière_-_Nicolas_Mignard_%281658%29.jpg/640px-Molière_-_Nicolas_Mignard_%281658%29.jpg',
'Racine': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Portrait_de_Jean_Racine_d%27après_Jean-Baptiste_Santerre.jpg/440px-Portrait_de_Jean_Racine_d%27après_Jean-Baptiste_Santerre.jpg',
'Romans classiques': 'https://cdn.shopify.com/s/files/1/0517/5915/3314/files/classiques.png?v=1626357130',
'Romans romantiques':'https://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Chateaubriand%2C_Stendhal%2C_Balzac%2C_Hugo%2C_quatre_portraits.jpg/400px-Chateaubriand%2C_Stendhal%2C_Balzac%2C_Hugo%2C_quatre_portraits.jpg',
'Théâtre absurde': 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/En_attendant_Godot%2C_Festival_d%27Avignon%2C_1978.jpeg/1920px-En_attendant_Godot%2C_Festival_d%27Avignon%2C_1978.jpeg',
'Romans belle époque': 'https://centoparole.it/wp-content/uploads/2015/10/1-belle-epoque-1880-1914.net_.jpg',
'Bible Segond': 'https://www.messagerchretien.com/upload/produits/3591/02.jpg',
'Zola': 'https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Emile_Zola_1902.jpg/440px-Emile_Zola_1902.jpg',
'Pagnol': 'https://upload.wikimedia.org/wikipedia/commons/7/79/Pagnol_Harcourt_1948.jpg',
'Philosophie': 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Hortus_Deliciarum%2C_Philosophy_and_the_seven_liberal_arts_%28cropped%29.jpg/1920px-Hortus_Deliciarum%2C_Philosophy_and_the_seven_liberal_arts_%28cropped%29.jpg',
'Poésies': 'https://image.spreadshirtmedia.net/image-server/v1/mp/products/T127A1PA5161PT21X6Y7D153825068W2047H2047/views/1,width=1200,height=630,appearanceId=1,backgroundColor=F2F2F2,modelId=2834,crop=design/cadeau-decriture-lyrique-poesie-plume-poesie-grands-badges.jpg',
'De Gaulle': 'https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Charles_de_Gaulle-1963.jpg/463px-Charles_de_Gaulle-1963.jpg',
'San Antonio': 'https://upload.wikimedia.org/wikipedia/commons/0/03/Frédéric_Dard_%281992%29_by_Erling_Mandelmann.jpg',
'Duras': 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Identite-Duras-1960-Sacem.png/600px-Identite-Duras-1960-Sacem.png',
'Braudel': 'https://upload.wikimedia.org/wikipedia/commons/8/89/Fernand_Braudel_%281902-1985%29.jpg',
'Bourdieu': 'https://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Pierre_Bourdieu_%281%29.jpg/1024px-Pierre_Bourdieu_%281%29.jpg',
'Derrida': 'https://upload.wikimedia.org/wikipedia/commons/9/90/Chinmoy_Guha_with_Derrida_%28cropped%29.jpg',
'Baudrillard': 'https://upload.wikimedia.org/wikipedia/commons/b/be/Jean_Baudrillard.png'
}
# Function to return the explanation and the image based on the selected artist or style
def update_explanation(choice):
if choice is None or choice == "":
explanation_text = "Choisissez un style d'écriture pour commencer"
image_html = "<p style='text-align: center;'>Une image apparaîtra une fois un choix effectué</p>"
else:
explanation_text = explanations.get(choice, "Aucune explication disponible")
image_url = image_urls.get(choice, "")
if image_url:
image_html = f"<img src='{image_url}' style='max-height: 200px; max-width: 200px; display: block; margin-left: auto; margin-right: auto;'/>"
else:
image_html = "<p style='text-align: center;'>Aucune image disponible.</p>"
return explanation_text, image_html
# Define the Gradio interface using Blocks
with gr.Blocks(theme = 'carlosrosash/bellay_test') as demo:
gr.Markdown(title)
with gr.Column(variant = 'panel'):
gr.Markdown(description)
# Define the column for dropdown, explanation, and image
with gr.Row(variant = 'panel'):
dropdown = gr.Dropdown(list_dropdown, label="Choisissez un artiste ou un style d'écriture")
explanation_box = gr.Textbox(label="Explication", type="text", lines=5, interactive=False)
explanation_image = gr.HTML(label="Image")
dropdown.change(update_explanation, inputs=dropdown, outputs=[explanation_box, explanation_image])
# Define the columns for input and output
with gr.Row():
with gr.Column(variant = 'panel'):
user_input = gr.Textbox(label="Choisissez un artiste ou un style d'écriture", type="text", lines=5, placeholder="Commencez à taper ici")
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("Effacer", variant = "primary")
with gr.Column():
submit_button = gr.Button("Envoyer 🖋️", variant = "secondary")
with gr.Column(variant = 'panel'):
output_text = gr.Textbox(label="Réponse", type="text", lines=10)
# Function to handle the button click for submit
def on_submit(user_message, style, temperature):
if style == "":
return "Veuillez sélectionner un style d'écriture avant de soumettre."
style_prompt = styles_prompts_dict.get(style, "")
return mistral_bot.predict(user_message, style, temperature)
# Function to handle the button click for clear
def clear_all():
return ["", list_dropdown[0], 0.7, ""]
# Link the submit button to the on_submit function
submit_button.click(on_submit, inputs=[user_input, dropdown, temperature_slider], outputs=output_text)
# Link the clear button to the clear_all function
clear_button.click(clear_all, outputs=[user_input, dropdown, temperature_slider, output_text])
# Examples section
gr.Examples(
examples=[
["Comment faire une bonne madeleine ? Donne-moi une recette détaillée avec les ingrédients.", "Proust", 0.7]
],
inputs=[user_input, dropdown, temperature_slider],
outputs=output_text,
fn=on_submit,
cache_examples=True,
label = 'Exemples'
)
demo.launch()