Spaces:
Build error
Build error
| 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" | |
| ) | |