| 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() |