Spaces:
Running
Running
File size: 3,971 Bytes
6a671c6 500f371 4bde338 5ef5e82 63666ab bc54a0a 5ef5e82 aef709e 5ef5e82 aef709e 5ef5e82 c99083d 5ef5e82 0f5b4d0 5ef5e82 c99083d 5ef5e82 bc54a0a 5ef5e82 da9245b f9815f3 5ef5e82 c99083d f9815f3 5b5c307 f9815f3 c99083d 83e8f4c c99083d 83e8f4c c99083d f9815f3 c99083d f9815f3 c99083d acaff10 c99083d acaff10 c99083d 5ef5e82 834a27f 5ef5e82 c99083d 5ef5e82 c99083d ffed54c 5ef5e82 c99083d 5ef5e82 c99083d 5ef5e82 bc54a0a 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 |
TITLE = """<h1 align="center">Gemini Playground ✨</h1>"""
SUBTITLE = """<h2 align="center">Play with Gemini Pro and Gemini Pro Vision</h2>"""
import os
import time
from typing import List, Tuple, Optional, Union
import google.generativeai as genai
import gradio as gr
from dotenv import load_dotenv
# Cargar las variables de entorno desde el archivo .env
load_dotenv()
# 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.")
# Configurar la API
genai.configure(api_key=GOOGLE_API_KEY)
# Constantes
IMAGE_WIDTH = 512
CHAT_HISTORY = List[Tuple[Optional[Union[Tuple[str], str]], Optional[str]]]
def user(text_prompt: str, chatbot: CHAT_HISTORY):
"""
Maneja las entradas del usuario en el chatbot.
"""
if text_prompt:
chatbot.append((text_prompt, None))
return "", chatbot
def bot(
model_choice: str,
system_instruction: Optional[str],
chatbot: CHAT_HISTORY
):
"""
Maneja las respuestas del modelo generativo.
"""
generation_config = genai.types.GenerationConfig(
temperature=0.7,
max_output_tokens=8192,
top_k=10,
top_p=0.9
)
# Usar un valor predeterminado si system_instruction está vacío
if not system_instruction:
system_instruction = "You are a helpful assistant."
# Obtener el prompt más reciente del usuario
text_prompt = [chatbot[-1][0]] if chatbot and chatbot[-1][0] else []
# Crear y configurar el modelo generativo
model = genai.GenerativeModel(
model_name=model_choice,
generation_config=generation_config,
system_instruction=system_instruction,
)
# Generar contenido usando streaming
response = model.generate_content(text_prompt, stream=True)
# Preparar la respuesta para el chatbot
chatbot[-1] = (chatbot[-1][0], "")
for chunk in response:
chatbot[-1] = (chatbot[-1][0], chatbot[-1][1] + chunk.text)
yield chatbot
# Componentes de la interfaz de usuario
system_instruction_component = gr.Textbox(
placeholder="Enter system instruction...",
label="System Instruction",
lines=2
)
chatbot_component = gr.Chatbot(label='Gemini', bubble_full_width=False, height=300)
text_prompt_component = gr.Textbox(placeholder="Message...", show_label=False, autofocus=True)
run_button_component = gr.Button(value="Run", variant="primary")
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"
)
user_inputs = [text_prompt_component, chatbot_component]
bot_inputs = [model_choice_component, system_instruction_component, chatbot_component]
# Definir la interfaz de usuario
with gr.Blocks() as demo:
gr.HTML(TITLE)
gr.HTML(SUBTITLE)
with gr.Column():
# Campo de selección de modelo arriba
model_choice_component.render()
chatbot_component.render()
with gr.Row():
text_prompt_component.render()
run_button_component.render()
# Crear el acordeón para la instrucción del sistema al final
with gr.Accordion("System Instruction", open=False):
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],
)
# Lanzar la aplicación
demo.queue(max_size=99).launch(debug=False, show_error=True)
|