Spaces:
Build error
Build error
File size: 3,306 Bytes
48e7216 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import streamlit as st
import uuid
from datetime import datetime
from utils.session_state import reset_state
from utils.process_files import process_uploaded_files
from utils.document_display import display_based_on_card
from llm.document_analyzer import analyze_files
import json
from utils.logger import setup_logger
logger = setup_logger(__name__)
def upload_documents():
uploaded_files = st.file_uploader(
"Upload Images, PDFs, or ZIP files",
type=["png", "jpg", "jpeg", "pdf", "zip"],
accept_multiple_files=True,
key="file_uploader"
)
if uploaded_files and st.session_state.get('current_upload') is None:
# if uploaded_files:
new_upload_id = str(uuid.uuid4())[:8] # Shorter UUID for readability
new_upload_id = "_".join([str(datetime.now()), new_upload_id])
reset_state(upload_id=new_upload_id)
st.session_state['analyze_clicked'] = False
# Process files
file_paths, file_groups, temp_dir, application_form, memo = process_uploaded_files(
uploaded_files)
st.session_state['uploads'][new_upload_id]['file_groups'] = file_groups
st.session_state['uploads'][new_upload_id]['temp_dir'] = temp_dir
st.session_state['uploads'][new_upload_id]['application_form'] = application_form
st.session_state['uploads'][new_upload_id]['memo'] = memo
# Get current upload
current_upload = st.session_state.get('current_upload')
if current_upload:
current_data = st.session_state['uploads'][current_upload]
file_groups = current_data['file_groups']
temp_dir = current_data['temp_dir']
if file_groups:
analyze_clicked = st.button("π Analyze")
if analyze_clicked:
st.session_state['analyze_clicked'] = True
reset_state() # Reset raw & display results only
# Analysis step: only when user has clicked Analyze
if st.session_state.get('analyze_clicked', False):
if current_data['values_raw'] is None:
with st.spinner("Analyzing documents..."):
analysis_results_groups, json_output_path = analyze_files(
file_groups=file_groups,
temp_dir=temp_dir,
current_upload=current_upload
)
current_data['values_raw'] = analysis_results_groups
if current_data['values_display'] is None:
current_data['values_display'] = {}
for original_file, extracted_files in file_groups.items():
display_based_on_card(
original_file=original_file,
analysis_results_for_original_file=current_data['values_raw'][original_file],
extracted_files=extracted_files,
current_upload=current_upload
)
st.download_button(
label="Download Analysis JSON",
data=json.dumps(
# current_data['values_raw'],
current_data['results_transformed'],
indent=4),
file_name="analysis_results.json",
mime="application/json"
)
|