MatteoScript commited on
Commit
0174b5d
·
verified ·
1 Parent(s): 514baa9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -13
app.py CHANGED
@@ -4,6 +4,7 @@ from google_function import leggi_gmail
4
  from google_function import scrivi_bozza_gmail
5
  from google_function import leggi_calendario_google
6
  from google_function import connetti_google
 
7
  import time
8
  import os
9
  from dotenv import load_dotenv
@@ -22,13 +23,15 @@ from PIL import Image
22
  from youtube_transcript_api import YouTubeTranscriptApi
23
  import webbrowser
24
  from streamlit_javascript import st_javascript
 
25
 
26
  load_dotenv()
27
  URL_APP_SCRIPT = os.getenv('URL_APP_SCRIPT')
28
  URL_PROMPT = URL_APP_SCRIPT + '?IdFoglio=1cLw9q70BsPmxMBj9PIzgXtq6sm3X-GVBVnOB5wE8jr8'
29
  URL_DOCUMENTI = URL_APP_SCRIPT + '?IdSecondoFoglio=1cLw9q70BsPmxMBj9PIzgXtq6sm3X-GVBVnOB5wE8jr8'
30
  SYSTEM_PROMPT = ["Sei BonsiAI e mi aiuterai nelle mie richieste (Parla in ITALIANO)", "Esatto, sono BonsiAI. Di cosa hai bisogno?"]
31
- CHAT_BOTS = {"Mixtral 8x7B v0.1" :"mistralai/Mixtral-8x7B-Instruct-v0.1"}
 
32
  option_personalizzata = {'Personalizzata': {'systemRole': 'Tu sei BONSI AI, il mio assistente personale della scuola superiore del Bonsignori. Aiutami in base alle mie esigenze',
33
  'systemStyle': 'Firmati sempre come BONSI AI. (scrivi in italiano)',
34
  'instruction': '',
@@ -48,11 +51,6 @@ option_leggicalendar = {'Leggi Calendar': {'systemRole': 'Tu sei BONSI AI, il mi
48
  'RAG': False}
49
  }
50
 
51
- def local_storage_get(key):
52
- return st_javascript(f"localStorage.getItem('{key}');")
53
-
54
- def local_storage_set(key, value):
55
- return st_javascript(f"localStorage.setItem('{key}', '{value}');")
56
  # ----------------------------------------------------------- Interfaccia --------------------------------------------------------------------
57
  st.set_page_config(page_title="Bonsi A.I.", page_icon="🏫")
58
 
@@ -97,8 +95,14 @@ def init_state() :
97
  st.session_state.numero_generazioni = 1
98
 
99
  if "numero_elementi" not in st.session_state:
100
- st.session_state.numero_elementi = 10
 
 
 
101
 
 
 
 
102
  if "testo_documenti" not in st.session_state:
103
  st.session_state.testo_documenti = ''
104
 
@@ -113,6 +117,12 @@ def init_state() :
113
 
114
  if "login_effettuato" not in st.session_state:
115
  st.session_state.login_effettuato = False
 
 
 
 
 
 
116
 
117
  if "tbs_options" not in st.session_state:
118
  st.session_state.tbs_options = {
@@ -131,9 +141,14 @@ def init_state() :
131
  st.write("Inizializzazione Ambiente")
132
  time.sleep(1)
133
  st.write("Inizializzazione Prompt")
134
- options = requests.get(URL_PROMPT).json()
 
 
 
135
  st.write("Inizializzazione Documenti")
136
- documenti = requests.get(URL_DOCUMENTI).json()
 
 
137
  st.session_state.options = {**option_personalizzata, **option_leggiemail, **option_leggicalendar, **options}
138
  st.session_state.documenti = documenti
139
  st.session_state.loaded_data = True
@@ -157,6 +172,24 @@ def read_text_from_file(file):
157
  st.write(f"Non è possibile leggere il testo dal file '{file.name}'.")
158
  return text
159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  def sidebar():
161
  def retrieval_settings() :
162
  st.markdown("# Impostazioni Prompt")
@@ -170,15 +203,18 @@ def sidebar():
170
  st.session_state.split = st.slider(label="Pagine Suddivisione", min_value=1, max_value=30, value=30, help='Se il documento ha 100 pagine e suddivido per 20 pagine elaborerà la risposta 5 volte. Più alto è il numero e meno volte elaborerà ma la risposta sarà più imprecisa')
171
  else:
172
  st.session_state.instruction = st.session_state.selected_option.get('instruction', '')
173
-
174
  st.session_state.systemRole = st.session_state.selected_option.get('systemRole', '')
175
  st.session_state.systemRole = st.text_area("Descrizione", st.session_state.systemRole, help='Ruolo del chatbot e descrizione dell\'azione che deve svolgere')
176
  st.session_state.systemStyle = st.session_state.selected_option.get('systemStyle', '')
177
  st.session_state.systemStyle = st.text_area("Stile", st.session_state.systemStyle, help='Descrizione dello stile utilizzato per generare il testo')
178
  if st.session_state.selected_option["tipo"]=='EMAIL':
179
  st.session_state.numero_elementi = st.slider(label="Numero Email", min_value=1, max_value=100, value=10)
 
 
180
  if st.session_state.selected_option["tipo"]=='CALENDAR':
181
  st.session_state.numero_elementi = st.slider(label="Numero Eventi Calendario", min_value=1, max_value=100, value=10)
 
 
182
  st.session_state.rag_enabled = st.session_state.selected_option.get('tipo', '')=='RAG'
183
  if st.session_state.selected_option_key == 'Decreti':
184
  st.session_state.top_k = st.slider(label="Documenti da ricercare", min_value=1, max_value=20, value=4, disabled=not st.session_state.rag_enabled)
@@ -206,16 +242,26 @@ def sidebar():
206
  st.markdown("---")
207
 
208
  def model_settings():
209
- st.markdown("# Impostazioni Modello")
210
  st.session_state.chat_bot = st.sidebar.radio('Modello:', [key for key, value in CHAT_BOTS.items() ])
211
  st.session_state.numero_generazioni = st.slider(label="Generazioni", min_value = 1, max_value=10, value=1)
212
  st.session_state.enable_history = st.toggle("Storico Messaggi", value=True)
213
  st.session_state.temp = st.slider(label="Creatività", min_value=0.0, max_value=1.0, step=0.1, value=0.9)
214
  st.session_state.max_tokens = st.slider(label="Lunghezza Output", min_value = 2, max_value=2048, step= 32, value=1024)
 
 
 
 
 
 
 
 
 
215
 
216
  with st.sidebar:
217
  retrieval_settings()
218
  model_settings()
 
219
  st.markdown("""> **Creato da Matteo Bergamelli **""")
220
 
221
  def audioRec():
@@ -362,11 +408,11 @@ def inserisci_istruzioni(prompt_originale):
362
  if st.session_state.selected_option["tipo"]=='EMAIL':
363
  with st.spinner("Ricerca nelle Email...."):
364
  time.sleep(1)
365
- st.session_state.instruction, links = leggi_gmail(max_results=st.session_state.numero_elementi)
366
  if st.session_state.selected_option["tipo"]=='CALENDAR':
367
  with st.spinner("Ricerca nel Calendario...."):
368
  time.sleep(1)
369
- st.session_state.instruction, links = leggi_calendario_google(max_results=st.session_state.numero_elementi)
370
  with st.spinner("Generazione in corso...") :
371
  time.sleep(1)
372
  #st.session_state.instruction = instruction_originale + '\n----------------------------------------------\n' + st.session_state.instruction
@@ -441,6 +487,8 @@ if st.session_state.login_effettuato == True:
441
  st.session_state.messages.append({"role": "assistant", "content": full_response})
442
  risposta_completa = risposta_completa + '\n' + full_response
443
 
 
 
444
  if st.session_state.enable_history:
445
  st.session_state.history.append([prompt_originale, full_response])
446
  else:
 
4
  from google_function import scrivi_bozza_gmail
5
  from google_function import leggi_calendario_google
6
  from google_function import connetti_google
7
+ from google_function import crea_documento_google
8
  import time
9
  import os
10
  from dotenv import load_dotenv
 
23
  from youtube_transcript_api import YouTubeTranscriptApi
24
  import webbrowser
25
  from streamlit_javascript import st_javascript
26
+ import datetime
27
 
28
  load_dotenv()
29
  URL_APP_SCRIPT = os.getenv('URL_APP_SCRIPT')
30
  URL_PROMPT = URL_APP_SCRIPT + '?IdFoglio=1cLw9q70BsPmxMBj9PIzgXtq6sm3X-GVBVnOB5wE8jr8'
31
  URL_DOCUMENTI = URL_APP_SCRIPT + '?IdSecondoFoglio=1cLw9q70BsPmxMBj9PIzgXtq6sm3X-GVBVnOB5wE8jr8'
32
  SYSTEM_PROMPT = ["Sei BonsiAI e mi aiuterai nelle mie richieste (Parla in ITALIANO)", "Esatto, sono BonsiAI. Di cosa hai bisogno?"]
33
+ CHAT_BOTS = {"Mixtral 8x7B v0.1" :"mistralai/Mixtral-8x7B-Instruct-v0.1",
34
+ "Mistral 7B v0.2" :"mistralai/Mistral-7B-Instruct-v0.2"}
35
  option_personalizzata = {'Personalizzata': {'systemRole': 'Tu sei BONSI AI, il mio assistente personale della scuola superiore del Bonsignori. Aiutami in base alle mie esigenze',
36
  'systemStyle': 'Firmati sempre come BONSI AI. (scrivi in italiano)',
37
  'instruction': '',
 
51
  'RAG': False}
52
  }
53
 
 
 
 
 
 
54
  # ----------------------------------------------------------- Interfaccia --------------------------------------------------------------------
55
  st.set_page_config(page_title="Bonsi A.I.", page_icon="🏫")
56
 
 
95
  st.session_state.numero_generazioni = 1
96
 
97
  if "numero_elementi" not in st.session_state:
98
+ st.session_state.numero_elementi = 5
99
+
100
+ if "data_inizio" not in st.session_state:
101
+ st.session_state.data_inizio = None
102
 
103
+ if "data_inizio" not in st.session_state:
104
+ st.session_state.data_inizio = None
105
+
106
  if "testo_documenti" not in st.session_state:
107
  st.session_state.testo_documenti = ''
108
 
 
117
 
118
  if "login_effettuato" not in st.session_state:
119
  st.session_state.login_effettuato = False
120
+
121
+ if "ultimo_messaggio" not in st.session_state:
122
+ st.session_state.ultimo_messaggio = ""
123
+
124
+ if "tutti_messaggi" not in st.session_state:
125
+ st.session_state.tutti_messaggi = ""
126
 
127
  if "tbs_options" not in st.session_state:
128
  st.session_state.tbs_options = {
 
141
  st.write("Inizializzazione Ambiente")
142
  time.sleep(1)
143
  st.write("Inizializzazione Prompt")
144
+ URL_REDIRECT = os.getenv('URL_REDIRECT')
145
+ options = {}
146
+ if URL_REDIRECT != "http://localhost:8501/":
147
+ options = requests.get(URL_PROMPT).json()
148
  st.write("Inizializzazione Documenti")
149
+ documenti = {}
150
+ if URL_REDIRECT != "http://localhost:8501/":
151
+ documenti = requests.get(URL_DOCUMENTI).json()
152
  st.session_state.options = {**option_personalizzata, **option_leggiemail, **option_leggicalendar, **options}
153
  st.session_state.documenti = documenti
154
  st.session_state.loaded_data = True
 
172
  st.write(f"Non è possibile leggere il testo dal file '{file.name}'.")
173
  return text
174
 
175
+ def open_new_tab(url):
176
+ placeholder = st.empty()
177
+ with placeholder:
178
+ placeholder.empty()
179
+ new_tab_js = f'''<script type="text/javascript">window.open("{url}", "_blank");</script>'''
180
+ st.components.v1.html(new_tab_js, height=1)
181
+ time.sleep(0.3)
182
+ placeholder.empty()
183
+
184
+ def esporta_testo(tipo, ultimo_messaggio):
185
+ testo = st.session_state.ultimo_messaggio if ultimo_messaggio else st.session_state.tutti_messaggi
186
+ if tipo == 'Bozza Email':
187
+ url = scrivi_bozza_gmail(testo)
188
+ open_new_tab(url)
189
+ if tipo == 'Google Documenti':
190
+ url = crea_documento_google(testo)
191
+ open_new_tab(url)
192
+
193
  def sidebar():
194
  def retrieval_settings() :
195
  st.markdown("# Impostazioni Prompt")
 
203
  st.session_state.split = st.slider(label="Pagine Suddivisione", min_value=1, max_value=30, value=30, help='Se il documento ha 100 pagine e suddivido per 20 pagine elaborerà la risposta 5 volte. Più alto è il numero e meno volte elaborerà ma la risposta sarà più imprecisa')
204
  else:
205
  st.session_state.instruction = st.session_state.selected_option.get('instruction', '')
 
206
  st.session_state.systemRole = st.session_state.selected_option.get('systemRole', '')
207
  st.session_state.systemRole = st.text_area("Descrizione", st.session_state.systemRole, help='Ruolo del chatbot e descrizione dell\'azione che deve svolgere')
208
  st.session_state.systemStyle = st.session_state.selected_option.get('systemStyle', '')
209
  st.session_state.systemStyle = st.text_area("Stile", st.session_state.systemStyle, help='Descrizione dello stile utilizzato per generare il testo')
210
  if st.session_state.selected_option["tipo"]=='EMAIL':
211
  st.session_state.numero_elementi = st.slider(label="Numero Email", min_value=1, max_value=100, value=10)
212
+ st.session_state.data_inizio = st.date_input("Email dal", value=datetime.date.today()-datetime.timedelta(days=7), format='DD/MM/YYYY')
213
+ st.session_state.data_fine = st.date_input("Email al", value=datetime.date.today(), format='DD/MM/YYYY')
214
  if st.session_state.selected_option["tipo"]=='CALENDAR':
215
  st.session_state.numero_elementi = st.slider(label="Numero Eventi Calendario", min_value=1, max_value=100, value=10)
216
+ st.session_state.data_inizio = st.date_input("Eventi dal", value=datetime.date.today(), format='DD/MM/YYYY')
217
+ st.session_state.data_fine = st.date_input("Eventi al", value=datetime.date.today()+datetime.timedelta(days=7), format='DD/MM/YYYY')
218
  st.session_state.rag_enabled = st.session_state.selected_option.get('tipo', '')=='RAG'
219
  if st.session_state.selected_option_key == 'Decreti':
220
  st.session_state.top_k = st.slider(label="Documenti da ricercare", min_value=1, max_value=20, value=4, disabled=not st.session_state.rag_enabled)
 
242
  st.markdown("---")
243
 
244
  def model_settings():
245
+ st.markdown("# Modello")
246
  st.session_state.chat_bot = st.sidebar.radio('Modello:', [key for key, value in CHAT_BOTS.items() ])
247
  st.session_state.numero_generazioni = st.slider(label="Generazioni", min_value = 1, max_value=10, value=1)
248
  st.session_state.enable_history = st.toggle("Storico Messaggi", value=True)
249
  st.session_state.temp = st.slider(label="Creatività", min_value=0.0, max_value=1.0, step=0.1, value=0.9)
250
  st.session_state.max_tokens = st.slider(label="Lunghezza Output", min_value = 2, max_value=2048, step= 32, value=1024)
251
+ st.markdown("---")
252
+
253
+ def export_settings():
254
+ st.markdown("# Esportazione")
255
+ st.session_state.export_type = st.selectbox('Tipologia', ('Non Esportare', 'Google Documenti', 'Bozza Email'), help='Seleziona la tipologia di esportazione del testo generato')
256
+ st.session_state.export_all = st.toggle("Considera tutte le chat", value=False)
257
+ if st.button("Esporta", type="primary", use_container_width=True):
258
+ esporta_testo(st.session_state.export_type, st.session_state.export_all)
259
+ st.markdown("---")
260
 
261
  with st.sidebar:
262
  retrieval_settings()
263
  model_settings()
264
+ export_settings()
265
  st.markdown("""> **Creato da Matteo Bergamelli **""")
266
 
267
  def audioRec():
 
408
  if st.session_state.selected_option["tipo"]=='EMAIL':
409
  with st.spinner("Ricerca nelle Email...."):
410
  time.sleep(1)
411
+ st.session_state.instruction, links = leggi_gmail(max_results=st.session_state.numero_elementi, data_inizio = st.session_state.data_inizio, data_fine = st.session_state.data_fine)
412
  if st.session_state.selected_option["tipo"]=='CALENDAR':
413
  with st.spinner("Ricerca nel Calendario...."):
414
  time.sleep(1)
415
+ st.session_state.instruction, links = leggi_calendario_google(max_results=st.session_state.numero_elementi, data_inizio = st.session_state.data_inizio, data_fine = st.session_state.data_fine)
416
  with st.spinner("Generazione in corso...") :
417
  time.sleep(1)
418
  #st.session_state.instruction = instruction_originale + '\n----------------------------------------------\n' + st.session_state.instruction
 
487
  st.session_state.messages.append({"role": "assistant", "content": full_response})
488
  risposta_completa = risposta_completa + '\n' + full_response
489
 
490
+ st.session_state.ultimo_messaggio = full_response
491
+ st.session_state.tutti_messaggi += '\n\n' + full_response
492
  if st.session_state.enable_history:
493
  st.session_state.history.append([prompt_originale, full_response])
494
  else: