import streamlit as st import pandas as pd import os import modal from modal import Function def init_modal(): """Initialize Modal with direct token""" try: token = os.environ.get('MODAL_TOKEN') if not token: st.error("MODAL_TOKEN not found in environment variables") return False # Set Modal token directly modal.config.token = token st.success("Modal token set successfully") return True except Exception as e: st.error(f"Failed to initialize Modal: {str(e)}") st.exception(e) return False def main(): st.title("Financial Statement Analyzer") # Initialize Modal if not init_modal(): return uploaded_files = st.file_uploader( "Choose PDF files", type="pdf", accept_multiple_files=True, help="Upload Consolidated Financial Statements in Russian" ) if uploaded_files: for file in uploaded_files: with st.expander(f"Processing {file.name}", expanded=True): progress_bar = st.progress(0) status = st.empty() try: status.info("Starting PDF processing...") progress_bar.progress(25) # Process PDF through Modal backend pdf_processor = Function.lookup("stem", "process_pdf") financial_data = pdf_processor.remote(file) progress_bar.progress(75) if financial_data: # Display results in tabs tab1, tab2 = st.tabs(["Financial Ratios", "Raw Data"]) with tab1: st.subheader("Key Financial Ratios") st.dataframe(pd.DataFrame([financial_data])) with tab2: st.subheader("Extracted Financial Data") st.json(financial_data) status.success("Processing complete!") else: status.error("Failed to extract financial data") except Exception as e: st.error("Error during processing") st.exception(e) progress_bar.empty() if __name__ == "__main__": main()