Rahatara's picture
Update app.py
1740146 verified
raw
history blame
3.07 kB
import os
import time
from typing import List, Tuple, Optional
import google.generativeai as genai
import gradio as gr
from PIL import Image
print("google-generativeai:", genai.__version__)
GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
TITLE = """<h1 align="center">πŸ‘— Gemini Personal Stylist Chatbot πŸ›οΈ</h1>"""
#SUBTITLE = """<h2 align="center">Chat with Your Personal Stylist using Gemini Vision Pro πŸ–ΌοΈ</h2>"""
IMAGE_WIDTH = 512
def preprocess_image(image: Image.Image) -> Image.Image:
image_height = int(image.height * IMAGE_WIDTH / image.width)
return image.resize((IMAGE_WIDTH, image_height))
def user(text_prompt: str, chatbot: List[Tuple[str, str]]):
return "", chatbot + [[text_prompt, None]]
def bot(
google_key: str,
image_prompt: Optional[Image.Image],
text_prompt: str,
chatbot: List[Tuple[str, str]]
):
google_key = google_key or GOOGLE_API_KEY
if not google_key:
raise ValueError("GOOGLE_API_KEY is not set. Please set it up.")
genai.configure(api_key=google_key)
instructions = "You are an expert stylist. You can assist anyone regardless gender, race or any other demographic diversity, look stylish and confident. "
images_with_prompt = [text_prompt, instructions] + [preprocess_image(image_prompt)]
model = genai.GenerativeModel('gemini-pro-vision')
response = model.generate_content(images_with_prompt, stream=True)
response.resolve()
chatbot[-1][1] = ""
for chunk in response:
for i in range(0, len(chunk.text), 10):
chatbot[-1][1] += chunk.text[i:i + 10]
time.sleep(0.01)
yield chatbot
google_key_component = gr.Textbox(
label="GOOGLE API KEY",
type="password",
placeholder="Enter your Google API Key",
visible=GOOGLE_API_KEY is None
)
image_prompt_component = gr.Image(type="pil", label="Upload Image")
chatbot_component = gr.Chatbot(label='Gemini Personal Stylist')
text_prompt_component = gr.Textbox(
placeholder="Describe your style needs",
label="Enter your prompt and press Enter"
)
run_button_component = gr.Button("Ask Stylist")
user_inputs = [text_prompt_component, chatbot_component]
bot_inputs = [google_key_component, image_prompt_component, text_prompt_component, chatbot_component]
with gr.Blocks() as demo:
gr.HTML(TITLE)
gr.HTML(SUBTITLE)
with gr.Column():
google_key_component.render()
image_prompt_component.render()
chatbot_component.render()
text_prompt_component.render()
run_button_component.render()
run_button_component.click(
fn=user,
inputs=user_inputs,
outputs=[text_prompt_component, chatbot_component],
queue=False
).then(
fn=bot, inputs=bot_inputs, outputs=[chatbot_component]
)
text_prompt_component.submit(
fn=user,
inputs=user_inputs,
outputs=[text_prompt_component, chatbot_component],
queue=False
).then(
fn=bot, inputs=bot_inputs, outputs=[chatbot_component]
)
demo.launch()