import streamlit as st from pipeline.ingestion_pipeline import run_pipeline from utils.sql_utils import list_tables def render_sidebar(): with st.sidebar: st.title("📂 Dataset") uploaded_file = st.file_uploader( "Upload Dataset", type=["csv", "xlsx", "xls"], ) # --------------------------------- # Process uploaded file # --------------------------------- if uploaded_file is not None: # Prevent processing the same file repeatedly if ( not st.session_state.dataset_loaded or st.session_state.dataset_name != uploaded_file.name ): with st.spinner("Processing dataset..."): result = run_pipeline(uploaded_file) st.session_state.dataset = result.tables st.session_state.database_path = result.database_path st.session_state.tables = list(result.tables.keys()) st.session_state.dataset_name = result.dataset_name st.session_state.ddl = result.ddl st.session_state.profiles = result.profiles st.session_state.dataset_loaded = True st.session_state.status = "Database Profiled ✅" # --------------------------------- # Dataset Preview # --------------------------------- if st.session_state.dataset_loaded: st.divider() st.subheader("Preview") first_table = next( iter(st.session_state.dataset) ) df = st.session_state.dataset[first_table] st.dataframe( df.head(), use_container_width=True, height=220, ) # --------------------------------- # SQLite Tables # --------------------------------- if ( st.session_state.dataset_loaded and "database_path" in st.session_state ): sqlite_tables = list_tables( st.session_state.database_path ) st.divider() st.subheader("SQLite Tables") for table in sqlite_tables: st.success(table) # --------------------------------- # Semantic Layer # --------------------------------- st.divider() st.subheader("Semantic Layer") st.button( "Generate Semantic Layer", use_container_width=True, type="primary", ) # --------------------------------- # Status # --------------------------------- st.divider() st.subheader("Status") st.info(st.session_state.status) # --------------------------------- # Dataset Tables # --------------------------------- st.divider() st.subheader("Loaded Tables") if len(st.session_state.tables) == 0: st.caption("No tables loaded.") else: for table in st.session_state.tables: st.success(table)