CoolFace
Apppublic

Harishkhawaja/Lexicon_Chatbot

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
streamlit_app.py71 linesDownload Raw Back to src
1import streamlit as st2import fitz  # PyMuPDF3import os4from sentence_transformers import SentenceTransformer5import faiss6from langchain.embeddings import HuggingFaceEmbeddings7from langchain.vectorstores import FAISS8from langchain.docstore.document import Document9from langchain.chains import RetrievalQA10from langchain.llms import Groq11from dotenv import load_dotenv12 13load_dotenv()14 15# CONFIG16EMBEDDING_MODEL_NAME = "all-MiniLM-L6-v2"17GROQ_API_KEY = os.getenv("GROQ_API_KEY")18GROQ_MODEL_NAME = "mixtral-8x7b-32768"19 20st.set_page_config(page_title="Lexicon - Policy Explainer", layout="centered")21 22st.markdown("<h1 style='text-align: center;'>📜 Lexicon: Policy Explainer Bot</h1>", unsafe_allow_html=True)23st.markdown("This app explains, summarizes, and highlights risks in large policy or T&C documents.")24 25uploaded_file = st.file_uploader("Upload PDF", type=["pdf"])26clipboard_input = st.text_area("Or paste policy text here", height=200)27 28if uploaded_file or clipboard_input:29    with st.spinner("Processing document..."):30 31        # Step 1: Extract Text32        def extract_text_from_pdf(file):33            doc = fitz.open(stream=file.read(), filetype="pdf")34            return " ".join(page.get_text() for page in doc)35 36        raw_text = extract_text_from_pdf(uploaded_file) if uploaded_file else clipboard_input37 38        # Step 2: Split and Embed39        sentences = raw_text.split(". ")40        model = SentenceTransformer(EMBEDDING_MODEL_NAME)41        embeddings = model.encode(sentences)42 43        # Step 3: Create Vector Store44        dimension = embeddings.shape[1]45        index = faiss.IndexFlatL2(dimension)46        index.add(embeddings)47 48        retriever = FAISS(embedding_function=lambda x: model.encode(x), index=index)49        documents = [Document(page_content=s) for s in sentences]50        retriever = FAISS.from_documents(documents, HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL_NAME)).as_retriever()51 52        # Step 4: LLM RAG53        llm = Groq(api_key=GROQ_API_KEY, model=GROQ_MODEL_NAME)54        qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)55 56        st.success("Document processed! You can now ask questions.")57        query = st.text_input("Ask a question about the document:")58 59        if query:60            with st.spinner("Generating answer..."):61                result = qa_chain.run(query)62                st.markdown("### 🧠 Answer:")63                st.markdown(result)64 65            if st.button("Suggest key risks"):66                risk_prompt = "List any risks or obligations a user should be aware of from this document."67                with st.spinner("Identifying risks..."):68                    risk_result = qa_chain.run(risk_prompt)69                    st.markdown("### ⚠️ Risks & Concerns:")70                    st.markdown(risk_result)71