File size: 7,970 Bytes
ae21274
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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

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

# Define the Gradio interface
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.",  # user_message
        "Proust",
        0.7  # temperature
    ]
]

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,  # Default value
        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"
)

# Launch the Gradio interface for the Mistral model
iface.launch()