import streamlit as st import os import json import base64 from langchain.memory import ConversationBufferWindowMemory from langchain_community.chat_message_histories import StreamlitChatMessageHistory from utils.ingestion import DocumentProcessor from utils.llm import LLMProcessor from utils.qa import QAEngine # Configure Streamlit page st.set_page_config(page_title="AI-Powered Document QA", layout="wide") # # Background Image # def add_bg_from_local(image_file): # with open(image_file, "rb") as image_file: # encoded_string = base64.b64encode(image_file.read()) # st.markdown( # f""" # # """, # unsafe_allow_html=True, # ) # # Path to background image # image_bg = "./image/background.jpeg" # Change this path accordingly # add_bg_from_local(image_bg) # Initialize document processing & AI components document_processor = DocumentProcessor() llm_processor = LLMProcessor() qa_engine = QAEngine() # Ensure temp directory exists os.makedirs("temp", exist_ok=True) # Sidebar for file upload st.sidebar.header("Upload a PDF") uploaded_file = st.sidebar.file_uploader("Choose a PDF file", type=["pdf"]) # Initialize chat memory memory_storage = StreamlitChatMessageHistory(key="chat_messages") memory = ConversationBufferWindowMemory( memory_key="chat_history", human_prefix="User", chat_memory=memory_storage, k=5 ) # Document upload & processing if uploaded_file and "document_uploaded" not in st.session_state: pdf_path = os.path.join("temp", uploaded_file.name) with open(pdf_path, "wb") as f: f.write(uploaded_file.read()) st.sidebar.success("File uploaded successfully!") with st.spinner("Processing document..."): document_processor.process_document(pdf_path) st.sidebar.success("Document processed successfully!") st.session_state["document_uploaded"] = True # Chat interface layout st.markdown("