stem / app.py
pentarosarium's picture
fixed modal API
e4c8347
raw
history blame
2.53 kB
import streamlit as st
import pandas as pd
from modal import Function
import os
def init_modal():
"""Initialize Modal with token from environment"""
try:
from modal.config import config
config.cli.token = os.environ.get('MODAL_TOKEN')
return True
except Exception as e:
st.error(f"Failed to initialize Modal: {str(e)}")
return False
def main():
st.title("Financial Statement Analyzer")
# Check Modal token
if 'MODAL_TOKEN' not in os.environ:
st.error("Modal token not found. Please add MODAL_TOKEN to Space secrets.")
return
# 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:
status.error(f"Error: {str(e)}")
st.error("Full error message: " + str(e))
progress_bar.empty()
if __name__ == "__main__":
main()