CampusGuide / app.py
Waseem7711's picture
Update app.py
e53dcd4 verified
import pdfplumber
import streamlit as st
from groq import Groq
# Replace with your actual API key
API_KEY = "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"
# Initialize the Groq client with the API key
client = Groq(api_key=API_KEY)
# Function to extract text from the PDF
def extract_text_from_pdf(pdf_path):
with pdfplumber.open(pdf_path) as pdf:
full_text = ""
for page in pdf.pages:
full_text += page.extract_text()
return full_text
# Function to search for relevant information based on the query
def search_relevant_info(query, text):
lower_text = text.lower()
lower_query = query.lower()
if lower_query in lower_text:
start = lower_text.find(lower_query)
end = start + 1000 # Extracting a portion of the text (adjustable)
return text[start:end]
else:
return "Sorry, I couldn't find any relevant information."
# Function to generate response from Groq API
def generate_response_with_retrieved_info(query, retrieved_text):
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": f"Query: {query}\nContext: {retrieved_text}",
}
],
model="llama3-8b-8192",
)
return chat_completion.choices[0].message.content
# Main chatbot function
def chatbot(query, pdf_path):
# Step 1: Extract text from the PDF
extracted_text = extract_text_from_pdf(pdf_path)
# Step 2: Search for relevant information based on the query
retrieved_text = search_relevant_info(query, extracted_text)
# Step 3: Generate a response using the Groq API
response = generate_response_with_retrieved_info(query, retrieved_text)
return response
# Streamlit UI
def main():
st.title("University Information Chatbot")
# Upload PDF
pdf_file = st.file_uploader("Upload the University Information PDF", type=["pdf"])
if pdf_file:
# Text input for user query
query = st.text_input("Ask a question about the university:")
if query:
# Process the query
with st.spinner("Searching for relevant information..."):
response = chatbot(query, pdf_file)
st.write("Response:", response)
if __name__ == "__main__":
main()