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)