Spaces:
Sleeping
Sleeping
Upload 8 files
Browse files- app.py +253 -0
- img/image1.jpg +0 -0
- img/image2.jpg +0 -0
- img/image3.jpg +0 -0
- img/image4.jpg +0 -0
- img/image5.jpg +0 -0
- img/logo2.png +0 -0
- requirements.txt +4 -0
app.py
ADDED
@@ -0,0 +1,253 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import requests
|
3 |
+
import time
|
4 |
+
from streamlit_option_menu import option_menu
|
5 |
+
import streamlit.components.v1 as components
|
6 |
+
import os
|
7 |
+
|
8 |
+
|
9 |
+
#TOKEN_API = os.environ.get("API_TOKEN")
|
10 |
+
TOKEN_API = "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
11 |
+
|
12 |
+
#changement du logo et du titre de mon application en anglais
|
13 |
+
st.set_page_config(page_title="NLP Outro", page_icon=":brain:", layout="centered", menu_items=None)
|
14 |
+
|
15 |
+
|
16 |
+
|
17 |
+
# Créer trois colonnes de largeur égale
|
18 |
+
col1, col2, col3 = st.columns(3)
|
19 |
+
|
20 |
+
# Laisser la première et la troisième colonne vides
|
21 |
+
with col1:
|
22 |
+
st.write("")
|
23 |
+
|
24 |
+
# Afficher le logo dans la deuxième colonne
|
25 |
+
with col2:
|
26 |
+
st.sidebar.image("img/logo2.png", use_column_width=None)
|
27 |
+
|
28 |
+
with col3:
|
29 |
+
st.write("")
|
30 |
+
with st.sidebar:
|
31 |
+
selected = option_menu(
|
32 |
+
menu_title="Application NLP", # required
|
33 |
+
options=["Accueil", "Chatbot", "Traduction", "Résumer"], # required
|
34 |
+
icons=["house", "chat-dots", "translate","journal-text"], # optional
|
35 |
+
menu_icon="cast", # optional
|
36 |
+
default_index=0 # optional
|
37 |
+
|
38 |
+
)
|
39 |
+
|
40 |
+
if selected == "Accueil":
|
41 |
+
st.title(f"{selected}")
|
42 |
+
|
43 |
+
# Display home page with app description and logo
|
44 |
+
st.header('Bienvenue sur mon application de nlp qui présente trois principales fonctionalités : le chatbot, la traduction et le résumé de texte.')
|
45 |
+
st.image('img/image4.jpg', )
|
46 |
+
#st.title('Bienvenue sur l\'application de classification d\'images de radiographies pulmonaires')
|
47 |
+
#st.markdown("<h1 style='text-align: center;'>Bienvenue sur l'application de classification d'images de radiographies pulmonaires</h1>", unsafe_allow_html=True)
|
48 |
+
#st.markdown("<h5 style='text-align: justify;'><b>La traduction</b> permet de convertir du texte entre six langues : l’anglais, l’espagnole, le français, le chinois et l’itqlien et le russe. Elle utilise les modèles de Helsinki-NLP, qui sont des modèles de traduction automatique neuronale basés sur le Transformer. Ces modèles sont rapides, précis et capables de gérer des langues morphologiquement riches.</h5>", unsafe_allow_html=True)
|
49 |
+
# st.markdown("<h5 style='text-align: justify;'><b>Le résumé</b> permet de condenser un texte long en un texte court qui en conserve les informations essentielles. Il utilise le modèle facebook/bart-large-cnn , qui est une variante du modèle T56 adaptée et affinée pour la tâche de résumé de texte. Ce modèle est entraîné sur un ensemble diversifié de documents et de résumés humains, ce qui lui permet de générer des résumés concis et cohérents.</h5>", unsafe_allow_html=True)
|
50 |
+
# st.markdown("<h5 style='text-align: justify;'><b>Le chatbot</b> permet de dialoguer avec l’application en utilisant un langage naturel. Il utilise le modèle /tiiuae/falcon-7b-instruct, qui est un modèle de génération de texte causal basé sur Falcon-7B et affiné sur un mélange de données de chat et d’instruction. Ce modèle est capable de répondre à des requêtes variées, de suivre des instructions et de créer du contenu imaginatif.</h5>", unsafe_allow_html=True)
|
51 |
+
st.markdown("<h5 style='text-align: justify;'>Mon application utilise l’Inference API de Hugging Face pour accéder aux modèles et les exécuter via des requêtes HTTP simples. L’Inference API est un service gratuit et rapide qui permet de tester et d’évaluer plus de 150 000 modèles de machine learning accessibles au public, ou vos propres modèles privés, sur l’infrastructure partagée de Hugging Face.</h5>", unsafe_allow_html=True)
|
52 |
+
st.markdown("<h5 style='text-align: justify;'>Mon application est donc un outil puissant et innovant qui exploite les dernières avancées de l’intelligence artificielle pour offrir des services de traduction, de résumé et de chatbot de haute qualité.</h5>", unsafe_allow_html=True)
|
53 |
+
|
54 |
+
|
55 |
+
# components.html(
|
56 |
+
# """
|
57 |
+
# <div style="position: fixed; bottom: 0; left: 0; right: 0; text-align: center; font-size: 15px; color: gray;">
|
58 |
+
# Tous droits réservés © Janvier 2024
|
59 |
+
# </div>
|
60 |
+
# """,
|
61 |
+
# height=50
|
62 |
+
# )
|
63 |
+
|
64 |
+
if selected == "Traduction":
|
65 |
+
# CODE TRANSLATE
|
66 |
+
st.title(f"{selected}")
|
67 |
+
st.image('img/image1.jpg',)
|
68 |
+
st.markdown("veillez saisir vos **textes pour la traduction en selectionant une langue.** ")
|
69 |
+
|
70 |
+
headers = {"Authorization": TOKEN_API}
|
71 |
+
|
72 |
+
# Choose the translation language from Hugging Face
|
73 |
+
translation_languages = {
|
74 |
+
"French to English": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-fr-en",
|
75 |
+
"English to French": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-en-fr",
|
76 |
+
"French to Spanish": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-fr-es",
|
77 |
+
"Spanish to French": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-es-fr",
|
78 |
+
"French to Italian": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-fr-it",
|
79 |
+
"Italian to French": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-it-fr",
|
80 |
+
"French to Russian": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-fr-ru",
|
81 |
+
"Russian to French": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-ru-fr",
|
82 |
+
"English to Chinese": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-en-zh",
|
83 |
+
"Chinese to English": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-zh-en",
|
84 |
+
# Add more language pairs as needed
|
85 |
+
}
|
86 |
+
|
87 |
+
selected_translation = st.selectbox("", list(translation_languages.keys()))
|
88 |
+
|
89 |
+
|
90 |
+
# Load the translation pipeline
|
91 |
+
API_TRANSLATE=translation_languages[selected_translation]
|
92 |
+
|
93 |
+
# User input for translation
|
94 |
+
col4, col5 = st.columns(2)
|
95 |
+
translate_input = col4.text_area("", height=200, placeholder='Entrer le texte à traduire:')
|
96 |
+
#translate_input = st.text_area("Entrer le texte à traduire:", "")
|
97 |
+
|
98 |
+
# Display loading indicator
|
99 |
+
col6, col7 = st.columns(2)
|
100 |
+
if col6.button("Traduire"):
|
101 |
+
with st.spinner("traduction..."):
|
102 |
+
# Simulate translation delay for demonstration
|
103 |
+
time.sleep(2)
|
104 |
+
if translate_input:
|
105 |
+
# Perform translation
|
106 |
+
def main_translate(payload):
|
107 |
+
response = requests.post(API_TRANSLATE, headers=headers, json=payload)
|
108 |
+
return response.json()
|
109 |
+
|
110 |
+
output_translate = main_translate({
|
111 |
+
"inputs": translate_input
|
112 |
+
})
|
113 |
+
|
114 |
+
if not output_translate[0]["translation_text"]:
|
115 |
+
error_message = output_translate[0]["error"]
|
116 |
+
st.error(f"Le texte n'a pas pu être traduit: {error_message}")
|
117 |
+
else:
|
118 |
+
translated_text = output_translate[0]["translation_text"]
|
119 |
+
col5.markdown('''<br/> <p style='text-align:left;font-size:16px;'>'''+ translated_text +'''</p>''', unsafe_allow_html=True)
|
120 |
+
#st.success(f"Le texte tratuit: {translated_text}")
|
121 |
+
|
122 |
+
#st.write("**TRADUCTION** is : {}".format(output[0]["translation_text"]))
|
123 |
+
|
124 |
+
|
125 |
+
else:
|
126 |
+
st.warning("Veuillez saisir le texte à traduire.")
|
127 |
+
|
128 |
+
|
129 |
+
# Clear button to reset input and result
|
130 |
+
if col7.button("Nettoyer"):
|
131 |
+
translate_input = ""
|
132 |
+
col5.success("Le champ est nettoyé.")
|
133 |
+
st.empty() # Clear previous results if any
|
134 |
+
|
135 |
+
#END FOR TRANSLATE CODE
|
136 |
+
if selected == "Résumer":
|
137 |
+
#CODE SUMMARIZE
|
138 |
+
st.title(f"{selected}")
|
139 |
+
st.image('img/image3.jpg',)
|
140 |
+
|
141 |
+
st.markdown("ici vous faites le **Résumer** de vos **texte**.")
|
142 |
+
|
143 |
+
headers = {"Authorization": TOKEN_API}
|
144 |
+
|
145 |
+
# Load the
|
146 |
+
API_SUMMARY = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn"
|
147 |
+
|
148 |
+
# User input for translation
|
149 |
+
summary_input = st.text_area("Entrer le texte à Résumer:", "")
|
150 |
+
if st.button("Résumer"):
|
151 |
+
with st.spinner("Résume..."):
|
152 |
+
# Simulate translation delay for demonstration
|
153 |
+
time.sleep(2)
|
154 |
+
if summary_input:
|
155 |
+
def main1(payload):
|
156 |
+
response = requests.post(API_SUMMARY, headers=headers, json=payload)
|
157 |
+
return response.json()
|
158 |
+
|
159 |
+
output_summary = main1({"inputs": summary_input})
|
160 |
+
summary_text = output_summary[0]["summary_text"]
|
161 |
+
st.success(f"Résumé: {summary_text}")
|
162 |
+
else:
|
163 |
+
st.warning("Veuillez saisir le texte à résumer.")
|
164 |
+
# Clear button to reset input and result
|
165 |
+
if st.button("Nettoyer"):
|
166 |
+
summary_input = ""
|
167 |
+
st.success("Le champ est nettoyé.")
|
168 |
+
st.empty() # Clear previous results if any
|
169 |
+
|
170 |
+
|
171 |
+
#END CODE SUMMARIZE
|
172 |
+
if selected == "Chatbot":
|
173 |
+
# CODE TRANSLATE
|
174 |
+
st.title(f"{selected}")
|
175 |
+
st.image('img/image3.jpg', caption='Veillez chatter ici en me posant vos questions')
|
176 |
+
#st.markdown("Cette partie vous offre la possibilité de me poser vos **questions**.")
|
177 |
+
|
178 |
+
headers = {"Authorization": TOKEN_API}
|
179 |
+
|
180 |
+
# Choose the translation language from Hugging Face
|
181 |
+
translation_models = {
|
182 |
+
"English": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-en-fr",
|
183 |
+
"French": "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-fr-en",
|
184 |
+
}
|
185 |
+
selected_translation = st.selectbox("Sélectionner une langue", list(translation_models.keys()))
|
186 |
+
# Load the
|
187 |
+
API_URL = "https://api-inference.huggingface.co/models/tiiuae/falcon-7b-instruct"
|
188 |
+
|
189 |
+
# User input for translation
|
190 |
+
user_input = st.text_area("veillez saisir une question :", "")
|
191 |
+
|
192 |
+
if (selected_translation=="French"):
|
193 |
+
API_URL_1 = "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-fr-en"
|
194 |
+
API_URL_2 = "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-en-fr"
|
195 |
+
# Display loading indicator
|
196 |
+
if st.button("Recherche"):
|
197 |
+
with st.spinner("Rechercher..."):
|
198 |
+
# Simulate translation delay for demonstration
|
199 |
+
time.sleep(2)
|
200 |
+
if user_input:
|
201 |
+
def main(payload):
|
202 |
+
response = requests.post(API_URL_1, headers=headers, json=payload)
|
203 |
+
return response.json()
|
204 |
+
|
205 |
+
output = main({"inputs": user_input})
|
206 |
+
text2 = output[0]["translation_text"]
|
207 |
+
|
208 |
+
if text2:
|
209 |
+
def main1(payload):
|
210 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
211 |
+
return response.json()
|
212 |
+
|
213 |
+
output = main1({"inputs": text2})
|
214 |
+
text3 = output[0]["generated_text"]
|
215 |
+
|
216 |
+
if text3:
|
217 |
+
def main(payload):
|
218 |
+
response = requests.post(API_URL_2, headers=headers, json=payload)
|
219 |
+
return response.json()
|
220 |
+
|
221 |
+
output = main({"inputs": text3})
|
222 |
+
generated_text = output[0]["translation_text"]
|
223 |
+
st.success(f"Réponse: {generated_text}")
|
224 |
+
else:
|
225 |
+
st.warning("Veuillez saisir une question.")
|
226 |
+
|
227 |
+
else :
|
228 |
+
# Display loading indicator
|
229 |
+
if st.button("Research"):
|
230 |
+
with st.spinner("Researching..."):
|
231 |
+
# Simulate translation delay for demonstration
|
232 |
+
time.sleep(2)
|
233 |
+
if user_input:
|
234 |
+
# Perform translation
|
235 |
+
def main(payload):
|
236 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
237 |
+
return response.json()
|
238 |
+
|
239 |
+
output = main({
|
240 |
+
"inputs": user_input
|
241 |
+
})
|
242 |
+
generated_text = output[0]["generated_text"]
|
243 |
+
st.success(f"Response: {generated_text}")
|
244 |
+
else:
|
245 |
+
st.warning("Please enter a question.")
|
246 |
+
|
247 |
+
# Clear button to reset input and result
|
248 |
+
if st.button("Nettoyer"):
|
249 |
+
user_input = ""
|
250 |
+
st.success("Le champ est nettoyé.")
|
251 |
+
st.empty() # Clear previous results if any
|
252 |
+
|
253 |
+
# END CODE TRANSLATE
|
img/image1.jpg
ADDED
img/image2.jpg
ADDED
img/image3.jpg
ADDED
img/image4.jpg
ADDED
img/image5.jpg
ADDED
img/logo2.png
ADDED
requirements.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
requests
|
2 |
+
streamlit
|
3 |
+
streamlit_elements
|
4 |
+
streamlit_option_menu
|