build_with_gemini / workingapp.py
Rahatara's picture
Rename app.py to workingapp.py
8b0345e verified
raw
history blame
3.58 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">πŸ’… Get ready with your personal stylist</h2>"""
DUPLICATE = """
<div style="text-align: center; display: flex; justify-content: center; align-items: center;">
<a href="https://huggingface.co/spaces/Rahatara/build_with_gemini/blob/main/allgemapp.py?duplicate=true">
<img src="https://bit.ly/3gLdBN6" alt="Duplicate Space" style="margin-right: 10px;">
</a>
<span>Duplicate the Space and run securely with your
<a href="https://makersuite.google.com/app/apikey">GOOGLE API KEY</a>.
</span>
</div>
"""
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 suggest and evaluate any style related question. To make anyone regardless gender, race or any other demographic diversity, look stylish. "
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)
gr.HTML(DUPLICATE)
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()