import streamlit as st import pandas as pd from modal import Function import os def init_modal(): """Initialize Modal with token from environment""" try: # Check if token exists in environment token = os.environ.get('MODAL_TOKEN') if not token: st.error("MODAL_TOKEN not found in environment variables") st.info("Please add MODAL_TOKEN to Hugging Face Space secrets") return False # Create token file token_dir = os.path.expanduser("~/.modal") os.makedirs(token_dir, exist_ok=True) with open(os.path.join(token_dir, "token"), "w") as f: f.write(token) st.success("Modal token configured successfully") return True except Exception as e: st.error(f"Failed to initialize Modal: {str(e)}") return False def main(): st.title("Financial Statement Analyzer") # Show environment info (for debugging) if st.checkbox("Show Debug Info"): st.write("Environment Variables:") st.write({k: "***" if k == "MODAL_TOKEN" else v for k, v in os.environ.items()}) # 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(f"Error during processing: {str(e)}") progress_bar.empty() if __name__ == "__main__": main()