Spaces:
Sleeping
Sleeping
File size: 5,723 Bytes
6a671c6 500f371 5ef5e82 63666ab bc54a0a 5ef5e82 0f5b4d0 8cb552a abe77c6 8cb552a abe77c6 8cb552a abe77c6 5ef5e82 abe77c6 5ef5e82 abe77c6 5ef5e82 bc54a0a 8cb552a aca2296 5ef5e82 abe77c6 5ef5e82 bc54a0a abe77c6 5ef5e82 abe77c6 8cb552a 5ef5e82 abe77c6 8cb552a abe77c6 5ef5e82 abe77c6 cdc830d 5ef5e82 8cb552a 5ef5e82 c8fa5c6 68bf7f0 aca2296 5ef5e82 8cb552a 5ef5e82 abe77c6 8cb552a 5ef5e82 abe77c6 5ef5e82 834a27f 5ef5e82 b537ee8 5ef5e82 abe77c6 5ef5e82 bc54a0a 5ef5e82 8607e04 cdc830d d8bd84f |
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
TITLE = """<h1 align="center">Gemini Playground ✨</h1>"""
SUBTITLE = """<h2 align="center">Play with Gemini Pro and Gemini Pro Vision</h2>"""
import os
import uuid
from typing import List, Tuple, Optional, Union
import google.generativeai as genai
import gradio as gr
from PIL import Image
from dotenv import load_dotenv
# Cargar las variables de entorno desde el archivo .env
load_dotenv()
print("google-generativeai:", genai.__version__)
# Obtener la clave de la API de las variables de entorno
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
# Verificar que la clave de la API esté configurada
if not GOOGLE_API_KEY:
raise ValueError("GOOGLE_API_KEY is not set in environment variables.")
IMAGE_CACHE_DIRECTORY = "/tmp"
IMAGE_WIDTH = 512
CHAT_HISTORY = List[Tuple[Optional[Union[Tuple[str], str]], Optional[str]]]
# Configurar la API de Gemini
genai.configure(api_key=GOOGLE_API_KEY)
# Función para transformar el historial del chat
def transform_history(history: CHAT_HISTORY):
"""
Transforma el historial del chat en el formato necesario para el modelo.
"""
transformed = []
for user_input, bot_response in history:
if user_input:
transformed.append({"role": "user", "content": user_input})
if bot_response:
transformed.append({"role": "assistant", "content": bot_response})
return transformed
# Función de generación de respuesta
def response(
message: str, history: CHAT_HISTORY, model_choice: str, system_instruction: str
) -> str:
"""
Genera una respuesta basada en el historial del chat y el mensaje del usuario.
"""
generation_config = genai.types.GenerationConfig(
temperature=0.7,
max_output_tokens=8192,
top_k=10,
top_p=0.9
)
model = genai.GenerativeModel(
model_name=model_choice,
generation_config=generation_config,
system_instruction=system_instruction,
)
transformed_history = transform_history(history)
model_response = model.chat(messages=transformed_history + [{"role": "user", "content": message}])
return model_response.text
# Preprocesamiento de imágenes
def preprocess_image(image: Image.Image) -> Optional[Image.Image]:
if image:
image_height = int(image.height * IMAGE_WIDTH / image.width)
return image.resize((IMAGE_WIDTH, image_height))
# Guardar imágenes en caché
def cache_pil_image(image: Image.Image) -> str:
image_filename = f"{uuid.uuid4()}.jpeg"
os.makedirs(IMAGE_CACHE_DIRECTORY, exist_ok=True)
image_path = os.path.join(IMAGE_CACHE_DIRECTORY, image_filename)
image.save(image_path, "JPEG")
return image_path
# Subir imágenes
def upload(files: Optional[List[str]], chatbot: CHAT_HISTORY) -> CHAT_HISTORY:
for file in files:
image = Image.open(file).convert("RGB")
image_preview = preprocess_image(image)
if image_preview:
gr.Image(image_preview).render()
image_path = cache_pil_image(image)
chatbot.append(((image_path,), None))
return chatbot
# Manejo del usuario
def user(text_prompt: str, chatbot: CHAT_HISTORY):
if text_prompt:
chatbot.append((text_prompt, None))
return "", chatbot
# Manejo del bot con historial
def bot(
files: Optional[List[str]],
model_choice: str,
system_instruction: str,
chatbot: CHAT_HISTORY,
):
text_prompt = chatbot[-1][0] if chatbot and chatbot[-1][0] and isinstance(chatbot[-1][0], str) else ""
bot_reply = response(text_prompt, chatbot, model_choice, system_instruction)
chatbot[-1] = (text_prompt, bot_reply)
return chatbot
# Componentes de la interfaz
system_instruction_component = gr.Textbox(
placeholder="Enter system instruction...", show_label=True, scale=8
)
chatbot_component = gr.Chatbot(
label="Gemini",
bubble_full_width=False,
scale=2,
height=300
)
text_prompt_component = gr.Textbox(
placeholder="Message...", show_label=False, autofocus=True, scale=8
)
upload_button_component = gr.UploadButton(
label="Upload Images", file_count="multiple", file_types=["image"], scale=1
)
run_button_component = gr.Button(value="Run", variant="primary", scale=1)
model_choice_component = gr.Dropdown(
choices=["gemini-1.5-flash", "gemini-2.0-flash-exp", "gemini-1.5-pro"],
value="gemini-1.5-flash",
label="Select Model",
scale=2
)
user_inputs = [
text_prompt_component,
chatbot_component,
]
bot_inputs = [
upload_button_component,
model_choice_component,
system_instruction_component,
chatbot_component,
]
# Interfaz de usuario
with gr.Blocks() as demo:
gr.HTML(TITLE)
gr.HTML(SUBTITLE)
with gr.Column():
model_choice_component.render()
chatbot_component.render()
with gr.Row():
text_prompt_component.render()
upload_button_component.render()
run_button_component.render()
system_instruction_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],
)
upload_button_component.upload(
fn=upload,
inputs=[upload_button_component, chatbot_component],
outputs=[chatbot_component],
queue=False
)
# Lanzar la aplicación
demo.queue(max_size=99).launch(debug=False, show_error=True)
|