vertexchat / pages /2_Gemino_Pro_Vision.py
airworkx's picture
Upload folder using huggingface_hub
d5ecfa9 verified
from PIL import Image
import google.generativeai as genai
import streamlit as st
import time
import random
from utils import SAFETY_SETTTINGS
st.set_page_config(
page_title="Chat with Gemini-Pro Vision",
page_icon="🔥",
menu_items={
'About': "Forked from https://github.com/hiliuxg/geminichat"
}
)
st.title('Upload Image')
if "app_key" not in st.session_state:
app_key = st.text_input("Your Gemini App Key", type='password')
if app_key:
st.session_state.app_key = app_key
try:
genai.configure(api_key = st.session_state.app_key)
model = genai.GenerativeModel('gemini-pro-vision')
except AttributeError as e:
st.warning("Please Add Your Gemini App Key.")
def show_message(prompt, image, loading_str):
with st.chat_message("assistant"):
message_placeholder = st.empty()
message_placeholder.markdown(loading_str)
full_response = ""
try:
for chunk in model.generate_content([prompt, image], stream = True, safety_settings = SAFETY_SETTTINGS):
word_count = 0
random_int = random.randint(5, 10)
for word in chunk.text:
full_response += word
word_count += 1
if word_count == random_int:
time.sleep(0.05)
message_placeholder.markdown(full_response + "_")
word_count = 0
random_int = random.randint(5, 10)
except genai.types.generation_types.BlockedPromptException as e:
st.exception(e)
except Exception as e:
st.exception(e)
message_placeholder.markdown(full_response)
st.session_state.history_pic.append({"role": "assistant", "text": full_response})
def clear_state():
st.session_state.history_pic = []
if "history_pic" not in st.session_state:
st.session_state.history_pic = []
image = None
if "app_key" in st.session_state:
uploaded_file = st.file_uploader("choose a pic...", type=["jpg", "png", "jpeg", "gif"], label_visibility='collapsed', on_change = clear_state)
if uploaded_file is not None:
image = Image.open(uploaded_file)
width, height = image.size
resized_img = image.resize((128, int(height/(width/128))), Image.LANCZOS)
st.image(image)
if len(st.session_state.history_pic) > 0:
for item in st.session_state.history_pic:
with st.chat_message(item["role"]):
st.markdown(item["text"])
if "app_key" in st.session_state:
if prompt := st.chat_input("desc this picture"):
if image is None:
st.warning("Please upload an image first", icon="⚠️")
else:
prompt = prompt.replace('\n', ' \n')
with st.chat_message("user"):
st.markdown(prompt)
st.session_state.history_pic.append({"role": "user", "text": prompt})
show_message(prompt, resized_img, "Thinking...")