Update src/streamlit_app.py
Browse files- src/streamlit_app.py +4 -68
src/streamlit_app.py
CHANGED
@@ -1,40 +1,3 @@
|
|
1 |
-
Absolument ! Voici une version améliorée du code.
|
2 |
-
|
3 |
-
Cette nouvelle version intègre plusieurs améliorations clés :
|
4 |
-
|
5 |
-
Design et Interface Utilisateur (UI) : Utilisation de st.sidebar pour les options et les crédits, et st.container pour une meilleure organisation visuelle du chat.
|
6 |
-
|
7 |
-
Gestion des Modèles : Le code est maintenant plus flexible. Il vous permet de choisir entre le modèle original (Apertus-8B) et le modèle plus puissant que vous avez suggéré (Apertus-70B), et même d'autres si vous le souhaitez.
|
8 |
-
|
9 |
-
Authentification Hugging Face : Intégration de la connexion via huggingface_hub pour utiliser des modèles qui pourraient être privés ou nécessiter une authentification. Le token est demandé de manière sécurisée via st.text_input de type "password".
|
10 |
-
|
11 |
-
Paramètres de Génération Ajustables : Les paramètres comme la température, le top_p et le nombre maximum de tokens sont maintenant des curseurs dans la barre latérale, permettant à l'utilisateur de les ajuster dynamiquement.
|
12 |
-
|
13 |
-
Optimisation et Clarté : Le code est restructuré en fonctions plus claires pour une meilleure lisibilité et maintenance.
|
14 |
-
|
15 |
-
Aperçu du nouveau design
|
16 |
-
|
17 |
-
L'interface sera divisée en deux parties :
|
18 |
-
|
19 |
-
Une barre latérale (Sidebar) à gauche pour la configuration :
|
20 |
-
|
21 |
-
Connexion à Hugging Face.
|
22 |
-
|
23 |
-
Sélection du modèle.
|
24 |
-
|
25 |
-
Réglage des paramètres de génération.
|
26 |
-
|
27 |
-
Un bouton pour effacer l'historique.
|
28 |
-
|
29 |
-
La fenêtre de chat principale à droite pour la conversation.
|
30 |
-
|
31 |
-
Le Code Amélioré
|
32 |
-
code
|
33 |
-
Python
|
34 |
-
download
|
35 |
-
content_copy
|
36 |
-
expand_less
|
37 |
-
|
38 |
import streamlit as st
|
39 |
import torch
|
40 |
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
|
@@ -160,8 +123,8 @@ if prompt := st.chat_input("Posez votre question à Apertus..."):
|
|
160 |
response_placeholder = st.empty()
|
161 |
with st.spinner("Réflexion en cours... 🤔"):
|
162 |
# Préparation des entrées pour le modèle
|
163 |
-
|
164 |
-
input_ids = tokenizer(
|
165 |
|
166 |
# Génération de la réponse
|
167 |
outputs = model.generate(
|
@@ -176,36 +139,9 @@ if prompt := st.chat_input("Posez votre question à Apertus..."):
|
|
176 |
# Décodage et nettoyage de la réponse
|
177 |
response_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
178 |
# Nettoyage pour retirer la question initiale de la réponse
|
179 |
-
cleaned_response = response_text.replace(
|
180 |
|
181 |
response_placeholder.markdown(cleaned_response)
|
182 |
|
183 |
# Ajout de la réponse de l'assistant à l'historique
|
184 |
-
st.session_state.messages.append({"role": "assistant", "content": cleaned_response})
|
185 |
-
Comment exécuter ce code
|
186 |
-
|
187 |
-
Sauvegardez le code dans un fichier Python, par exemple app_v2.py.
|
188 |
-
|
189 |
-
Installez les bibliothèques nécessaires si ce n'est pas déjà fait :
|
190 |
-
|
191 |
-
code
|
192 |
-
Bash
|
193 |
-
download
|
194 |
-
content_copy
|
195 |
-
expand_less
|
196 |
-
IGNORE_WHEN_COPYING_START
|
197 |
-
IGNORE_WHEN_COPYING_END
|
198 |
-
pip install streamlit torch transformers bitsandbytes accelerate huggingface_hub
|
199 |
-
|
200 |
-
Lancez l'application depuis votre terminal :
|
201 |
-
|
202 |
-
code
|
203 |
-
Bash
|
204 |
-
download
|
205 |
-
content_copy
|
206 |
-
expand_less
|
207 |
-
IGNORE_WHEN_COPYING_START
|
208 |
-
IGNORE_WHEN_COPYING_END
|
209 |
-
streamlit run app_v2.py
|
210 |
-
|
211 |
-
Votre navigateur s'ouvrira avec cette nouvelle interface, prête à l'emploi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import streamlit as st
|
2 |
import torch
|
3 |
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
|
|
|
123 |
response_placeholder = st.empty()
|
124 |
with st.spinner("Réflexion en cours... 🤔"):
|
125 |
# Préparation des entrées pour le modèle
|
126 |
+
# Nous ne formaterons plus le prompt, le modèle instruct est déjà finetuné pour ça.
|
127 |
+
input_ids = tokenizer(prompt, return_tensors="pt").to(model.device)
|
128 |
|
129 |
# Génération de la réponse
|
130 |
outputs = model.generate(
|
|
|
139 |
# Décodage et nettoyage de la réponse
|
140 |
response_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
141 |
# Nettoyage pour retirer la question initiale de la réponse
|
142 |
+
cleaned_response = response_text.replace(prompt, "").strip()
|
143 |
|
144 |
response_placeholder.markdown(cleaned_response)
|
145 |
|
146 |
# Ajout de la réponse de l'assistant à l'historique
|
147 |
+
st.session_state.messages.append({"role": "assistant", "content": cleaned_response})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|