| import streamlit as st |
| from pipeline import process_pdf, enrich_metadata, semantic_split, build_vector_db, load_vector_db, get_qa_chain |
| import tempfile, os |
|
|
| st.set_page_config(page_title="Bangladesh Law RAG", layout="wide") |
|
|
| st.title("π Bangladesh Law Assistant") |
| st.markdown("Ask questions about Bangladesh ICT, Labour, Penal Code, and Constitution documents.") |
|
|
| # Upload and process PDF |
| with st.sidebar: |
| st.header("π Upload Legal PDF") |
| uploaded_file = st.file_uploader("Choose a PDF", type="pdf") |
| if uploaded_file: |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp: |
| tmp.write(uploaded_file.read()) |
| path = tmp.name |
| st.success("PDF uploaded. Processing...") |
| pages = process_pdf(path) |
| docs = enrich_metadata(pages) |
| chunks = semantic_split(docs) |
| build_vector_db(chunks) |
| st.success("Vector DB updated successfully.") |
|
|
| # Load vector DB |
| vectorstore = load_vector_db() |
| qa_chain = get_qa_chain(vectorstore) |
|
|
| # Query box |
| query = st.text_input("π Enter your legal query:") |
| if query: |
| result = qa_chain({"query": query}) |
| answer = result["result"] |
| sources = result["source_documents"] |
|
|
| st.markdown("### π§ Answer") |
| st.write(answer) |
|
|
| st.markdown("### π Sources") |
| for doc in sources: |
| meta = doc.metadata |
| st.markdown(f"- `{meta.get('law_name', 'Unknown')} - {meta.get('section_heading', 'Unknown')}` ({meta.get('source')})") |
|
|