File size: 1,976 Bytes
d26e6b0 9abf9ef d26e6b0 782e93a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import streamlit as st
import PyPDF2
from groq import Groq
import os
# Set up Groq API key
os.environ["GROQ_API_KEY"] = "myKey"
# Initialize Groq client
client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
# Function to extract PDF content
def extract_pdf_content(pdf_file):
pdf_text = ""
reader = PyPDF2.PdfReader(pdf_file)
for page in reader.pages:
pdf_text += page.extract_text()
return pdf_text
# Function to chunk text
def chunk_text(text, chunk_size=1000, overlap=200):
chunks = []
start = 0
while start < len(text):
end = start + chunk_size
chunk = text[start:end]
chunks.append(chunk)
start += chunk_size - overlap
return chunks
# Function to find relevant chunks
def find_relevant_chunks(chunks, query, num_chunks=3):
return chunks[:num_chunks] # Simple retrieval
# Chatbot function
def chatbot_response(user_query, chunks):
relevant_chunks = find_relevant_chunks(chunks, user_query)
combined_context = "\n\n".join(relevant_chunks)
context = f"PDF Content:\n{combined_context}\n\nUser Query: {user_query}"
chat_completion = client.chat.completions.create(
messages=[{"role": "user", "content": context}],
model="llama-3.3-70b-versatile",
)
return chat_completion.choices[0].message.content
# Streamlit UI
st.title("PDF Query Chatbot")
st.write("Upload a PDF and ask questions based on its content.")
# File upload
pdf_file = st.file_uploader("Upload a PDF file", type=["pdf"])
if pdf_file:
with st.spinner("Extracting content..."):
pdf_content = extract_pdf_content(pdf_file)
chunks = chunk_text(pdf_content)
st.success("PDF content loaded successfully!")
user_query = st.text_input("Ask a question about the PDF:")
if user_query:
with st.spinner("Fetching response..."):
response = chatbot_response(user_query, chunks)
st.write(f"**Chatbot Response:** {response}")
|