underwriting-workflow / utils /tabs /document_upload_tab.py
vamsidharmuthireddy's picture
Upload 90 files
52c1998 verified
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"
)