QABot / app.py
Shripad7's picture
Upload 3 files
f91ec2f verified
Raw
History Blame Contribute Delete
1.67 kB
import os
import gradio as gr
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma
from langchain_groq import ChatGroq
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
embeddings=HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
llm=ChatGroq(model="llama-3.3-70b-versatile",temperature=0)
prompt=ChatPromptTemplate.from_template("""
Answer only from the supplied context.
Context:
{context}
Question:
{question}
""")
chain=prompt|llm|StrOutputParser()
def ask(files,question,chunk_size,overlap,k):
docs=[]
for f in files:
docs.extend(PyPDFLoader(f.name).load())
splitter=RecursiveCharacterTextSplitter(chunk_size=int(chunk_size),chunk_overlap=int(overlap))
chunks=splitter.split_documents(docs)
db=Chroma.from_documents(chunks,embeddings)
retrieved=db.as_retriever(search_kwargs={"k":int(k)}).invoke(question)
context="\n\n".join(d.page_content for d in retrieved)
answer=chain.invoke({"context":context,"question":question})
sources="\n".join(f"{d.metadata.get('source')} | Page {d.metadata.get('page')}" for d in retrieved)
return answer,sources
gr.Interface(
fn=ask,
inputs=[
gr.File(file_count="multiple",file_types=[".pdf"]),
gr.Textbox(label="Question"),
gr.Slider(300,1500,value=800),
gr.Slider(0,300,value=150),
gr.Slider(1,10,value=4,step=1)
],
outputs=[gr.Textbox(label="Answer"),gr.Textbox(label="Sources")],
title="Document QA using Groq").launch()