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