Spaces:
Sleeping
Sleeping
import gradio as gr | |
import google.generativeai as genai | |
from PIL import Image | |
import os | |
import io | |
# Configure the Gemini API | |
genai.configure(api_key=os.environ.get("AIzaSyCFdxcKVO6VSxEBaNE2W3LIvRLPEPpyMGw")) | |
# Set up the model | |
generation_config = { | |
"temperature": 1, | |
"top_p": 0.95, | |
"top_k": 64, | |
"max_output_tokens": 8192, | |
"response_mime_type": "text/plain", | |
} | |
model = genai.GenerativeModel( | |
model_name="gemini-1.5-flash", | |
generation_config=generation_config, | |
) | |
def image_to_byte_array(image: Image) -> bytes: | |
imgByteArr = io.BytesIO() | |
image.save(imgByteArr, format=image.format) | |
imgByteArr = imgByteArr.getvalue() | |
return imgByteArr | |
def chat_with_gemini(history, user_message, image): | |
history = history or [] | |
try: | |
if image is not None: | |
# Convert image to byte array | |
image_bytes = image_to_byte_array(image) | |
# Create a Content object for the image | |
image_parts = [{"mime_type": "image/jpeg", "data": image_bytes}] | |
prompt_parts = [user_message] + image_parts | |
else: | |
prompt_parts = [user_message] | |
# Generate content | |
response = model.generate_content(prompt_parts) | |
response_text = response.text | |
history.append((user_message, response_text)) | |
except Exception as e: | |
error_message = f"An error occurred: {str(e)}" | |
history.append((user_message, error_message)) | |
return history, history | |
def clear_conversation(): | |
return None | |
# Define the Gradio interface | |
with gr.Blocks() as demo: | |
chatbot = gr.Chatbot(label="Chat with Gemini 1.5 Flash") | |
msg = gr.Textbox(label="Type your message here") | |
clear = gr.Button("Clear") | |
image_upload = gr.Image(type="pil", label="Upload an image (optional)") | |
msg.submit(chat_with_gemini, [chatbot, msg, image_upload], [chatbot, chatbot]) | |
clear.click(clear_conversation, outputs=[chatbot]) | |
# Launch the app | |
if __name__ == "__main__": | |
demo.launch() |