test / app.py
sadak's picture
Update app.py
2d8959a verified
import streamlit as st
from PIL import Image
from PyPDF2 import PdfReader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_google_genai import GoogleGenerativeAIEmbeddings, ChatGoogleGenerativeAI
from langchain.vectorstores import FAISS
import os
import google.generativeai as genai
from dotenv import load_dotenv
load_dotenv() # Load all env variables
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
def get_pdf_text(pdf_docs):
text=""
for pdf in pdf_docs:
pdf_reader= PdfReader(pdf)
for page in pdf_reader.pages:
text+= page.extract_text()
return text
def get_text_chunks(text):
text_splitter = RecursiveCharacterTextSplitter(chunk_size=10000, chunk_overlap=1000)
chunks = text_splitter.split_text(text)
return chunks
def get_vector_store(text_chunks):
embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001")
vector_store = FAISS.from_texts(text_chunks, embedding=embeddings)
vector_store.save_local("faiss_index")
## function to load Gemini Pro model and get responses
model = genai.GenerativeModel("gemini-pro-vision")
def get_gemini_response(input, image=None):
if image is not None and model.is_image_model:
response = model.generate_content([input, image])
else:
response = model.generate_content(input)
return response.text
## Initialize our Streamlit app
st.set_page_config(page_title='Combined Streamlit Application')
st.header("Streamlit Application")
# Define the different applications
applications = {
"PDF Chat": "pdf_chat",
"Image Chat": "image_chat",
}
# Render the dropdown menu
selected_app = st.sidebar.selectbox("Select Application", list(applications.keys()))
# Function to display PDF Chat application
def pdf_chat():
st.header("PDF Chat Application")
user_question = st.text_input("Ask a Question from the PDF Files")
if user_question:
user_input(user_question)
pdf_docs = st.file_uploader("Upload your PDF Files and Click on the Submit & Process Button", accept_multiple_files=True)
if st.button("Submit & Process"):
with st.spinner("Processing..."):
raw_text = get_pdf_text(pdf_docs)
text_chunks = get_text_chunks(raw_text)
get_vector_store(text_chunks)
st.success("Done")
# Function to display Image Chat application
def image_chat():
st.header("Image Chat Application")
input_text = st.text_input("Input for Gemini Pro:", key="input_gemini")
uploaded_file = st.file_uploader("Choose an image...", type="jpg")
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
submit_gemini = st.button("Ask Gemini Pro")
if submit_gemini:
response_gemini = get_gemini_response(input_text, image)
st.subheader("Gemini Pro Response:")
st.write(response_gemini)
# Map selected application to corresponding function
selected_app_func = {
"PDF Chat": pdf_chat,
"Image Chat": image_chat,
}
# Run the selected application function
selected_app_func[selected_app]()