File size: 1,704 Bytes
d560e73 27a9d18 d560e73 8e7f60d f3d6745 d560e73 27a9d18 f3d6745 27a9d18 8fb5e72 27a9d18 8fb5e72 27a9d18 8e7f60d edd79f1 8fb5e72 edd79f1 8fb5e72 edd79f1 8fb5e72 27a9d18 8fb5e72 27a9d18 8fb5e72 27a9d18 8fb5e72 8e7f60d 27a9d18 8fb5e72 27a9d18 d560e73 f3d6745 8fb5e72 d560e73 8fb5e72 d560e73 27a9d18 f3d6745 27a9d18 8fb5e72 edd79f1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import gradio as gr
import os
import io
from PIL import Image
from google import genai
from google.genai import types
# ==============================
# 1. Gemini Client
# ==============================
client = genai.Client(
api_key=os.environ.get("GEMINI_API_KEY")
)
# ==============================
# 2. Multimodal Function (SAFE)
# ==============================
def analyze_image(image, prompt):
try:
# ---- Checks ----
if image is None:
return "❌ No image uploaded"
if not prompt or prompt.strip() == "":
return "❌ Prompt is empty"
# Convert image to bytes
buffer = io.BytesIO()
image.save(buffer, format="PNG")
image_bytes = buffer.getvalue()
image_part = types.Part.from_bytes(
data=image_bytes,
mime_type="image/png"
)
# ✅ USE FLASH MODEL (IMPORTANT)
response = client.models.generate_content(
model="gemini-1.5-flash",
contents=[
prompt,
image_part
]
)
return response.text
except Exception as e:
# 🔍 Show real Gemini error
return f"❌ Gemini Error:\n{str(e)}"
# ==============================
# 3. Gradio UI
# ==============================
interface = gr.Interface(
fn=analyze_image,
inputs=[
gr.Image(type="pil", label="Upload Image"),
gr.Textbox(label="Prompt", value="Describe the image")
],
outputs=gr.Textbox(label="Response"),
title="Gemini Multimodal Test App",
)
# ==============================
# 4. Launch
# ==============================
interface.launch(ssr_mode=False)
|