MatteoScript commited on
Commit
a7435d7
·
verified ·
1 Parent(s): 533869e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -12
app.py CHANGED
@@ -31,7 +31,7 @@ if st.session_state.logged == False:
31
  with login_placeholder.container():
32
  container = st.container(border=True)
33
  username = container.text_input('Username')
34
- password = container.text_input('Passowrd')
35
  login = container.button(' Login ', type='primary')
36
  if not login or username != os.getenv("LOGIN_USER") or password != os.getenv("LOGIN_PASSWORD"):
37
  if login:
@@ -46,21 +46,21 @@ with st.expander("Guida completa"):
46
  ## Funzionalità Principali
47
 
48
  - **Caricamento e Gestione dei Documenti**
49
- - Supporta il caricamento di file PDF, JPG, JPEG e PNG tramite un’interfaccia Streamlit.
50
- - Se il file è un PDF con più pagine, viene suddiviso in sezioni (configurabile tramite uno slider) per una gestione più efficace. Più il numero è basso più il risultato è preciso.
51
 
52
  - **Conversione dei Dati**
53
- - **Upload e Inoltro a Gemini**: I file vengono caricati e inviati al rispettivo servizio AI.
54
- - **Estrazione dei Dati**: Il sistema invia il documento a un modello di generazione AI per ottenere una rappresentazione JSON contenente i dati (ad es. numero di documento, data, totale imponibile e articoli).
55
 
56
  - **Validazione e Verifica**
57
- - **Validazione JSON**: Utilizza Pydantic per verificare la correttezza della struttura e dei dati estratti. In caso di errori, il documento viene riprocessato fino a 3 volte per cercare di correggere le anomalie.
58
- - **Verifica Incrociata dei Contenuti**: Per i PDF, viene estratto il testo con PyPDF2 e confrontato con i codici articolo per assicurarsi che i dati siano effettivamente presenti nel documento.
59
- - **Filtraggio Articoli**: Vengono mantenuti solo gli articoli compatibili con i criteri specifici (codici articolo e importi non nulli).
60
 
61
  - **Visualizzazione e Highlighting**
62
- - I dati validati vengono mostrati in formato tabellare e in JSON.
63
- - Se il documento è un PDF, il sistema evidenzia graficamente (con rettangoli rossi) i testi relativi agli articoli compatibili, semplificando il controllo visivo.
64
 
65
  ## Avvertenze per l'Operatore
66
 
@@ -114,7 +114,7 @@ def wait_for_files_active(files):
114
  print("\n...all files ready")
115
 
116
  # Chiamata API Gemini
117
- def send_message_to_gemini(chat_session, message, max_attempts=3):
118
  """Tenta di inviare il messaggio tramite la chat_session, riprovando fino a max_attempts in caso di eccezioni, con un delay di 10 secondi tra i tentativi. """
119
  for attempt in range(max_attempts):
120
  try:
@@ -233,7 +233,14 @@ def process_document_splitted(file_path: str, chunk_label: str, use_azure: bool
233
  files = [upload_to_gemini(file_path, mime_type=mime_type)]
234
  wait_for_files_active(files)
235
  chat_history = [{ "role": "user","parts": [files[0]]}]
236
- chat_session = model.start_chat(history=chat_history)
 
 
 
 
 
 
 
237
  max_validation_attempts = 3
238
  max_number_reprocess = 3
239
  chunk_document = None
 
31
  with login_placeholder.container():
32
  container = st.container(border=True)
33
  username = container.text_input('Username')
34
+ password = container.text_input('Passowrd', type='password')
35
  login = container.button(' Login ', type='primary')
36
  if not login or username != os.getenv("LOGIN_USER") or password != os.getenv("LOGIN_PASSWORD"):
37
  if login:
 
46
  ## Funzionalità Principali
47
 
48
  - **Caricamento e Gestione dei Documenti**
49
+ - Supporta il caricamento di file PDF, JPG, JPEG e PNG tramite un’interfaccia Streamlit.
50
+ - Se il file è un PDF con più pagine, viene suddiviso in sezioni (configurabile tramite uno slider) per una gestione più efficace. Più il numero è basso più il risultato è preciso.
51
 
52
  - **Conversione dei Dati**
53
+ - **Upload e Inoltro a Gemini**: I file vengono caricati e inviati al rispettivo servizio AI.
54
+ - **Estrazione dei Dati**: Il sistema invia il documento a un modello di generazione AI per ottenere una rappresentazione JSON contenente i dati (ad es. numero di documento, data, totale imponibile e articoli).
55
 
56
  - **Validazione e Verifica**
57
+ - **Validazione JSON**: Utilizza Pydantic per verificare la correttezza della struttura e dei dati estratti. In caso di errori, il documento viene riprocessato fino a 3 volte per cercare di correggere le anomalie.
58
+ - **Verifica Incrociata dei Contenuti**: Per i PDF, viene estratto il testo con PyPDF2 e confrontato con i codici articolo per assicurarsi che i dati siano effettivamente presenti nel documento.
59
+ - **Filtraggio Articoli**: Vengono mantenuti solo gli articoli compatibili con i criteri specifici (codici articolo e importi non nulli).
60
 
61
  - **Visualizzazione e Highlighting**
62
+ - I dati validati vengono mostrati in formato tabellare e in JSON.
63
+ - Se il documento è un PDF, il sistema evidenzia graficamente (con rettangoli rossi) i testi relativi agli articoli compatibili, semplificando il controllo visivo.
64
 
65
  ## Avvertenze per l'Operatore
66
 
 
114
  print("\n...all files ready")
115
 
116
  # Chiamata API Gemini
117
+ def send_message_to_gemini(chat_session, message, max_attempts=5):
118
  """Tenta di inviare il messaggio tramite la chat_session, riprovando fino a max_attempts in caso di eccezioni, con un delay di 10 secondi tra i tentativi. """
119
  for attempt in range(max_attempts):
120
  try:
 
233
  files = [upload_to_gemini(file_path, mime_type=mime_type)]
234
  wait_for_files_active(files)
235
  chat_history = [{ "role": "user","parts": [files[0]]}]
236
+ for attempt in range(3):
237
+ try:
238
+ chat_session = model.start_chat(history=chat_history)
239
+ break
240
+ except Exception as e:
241
+ print(f"Errore nello Start chat")
242
+ time.sleep(10)
243
+
244
  max_validation_attempts = 3
245
  max_number_reprocess = 3
246
  chunk_document = None