Spaces:
Running
Running
File size: 3,939 Bytes
500f371 4bde338 6efed0c bc54a0a cb0053e aef709e cb0053e 6efed0c 5ef5e82 6efed0c cb0053e 6efed0c c99083d 6efed0c cb0053e 6efed0c cb0053e 6efed0c cb0053e 6efed0c cb0053e 6efed0c cb0053e c99083d cb0053e c99083d cb0053e 6efed0c cb0053e c99083d cb0053e f9815f3 cb0053e c99083d 6efed0c 83e8f4c 6efed0c f9815f3 6efed0c cb0053e 6efed0c cb0053e 6efed0c acaff10 6efed0c c99083d 6efed0c |
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 |
import os
import time
import gradio as gr
import google.generativeai as genai
from mimetypes import MimeTypes
# Configurar la API de Gemini
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# Ruta personalizada para los archivos subidos
UPLOAD_DIR = os.path.join(os.getcwd(), "uploads") # Crea una carpeta "uploads" en el directorio actual
# Aseg煤rate de que la carpeta de subida exista
if not os.path.exists(UPLOAD_DIR):
os.makedirs(UPLOAD_DIR)
# Funci贸n que sube y procesa archivos
def upload_and_process_file(file):
"""
Sube y procesa un archivo para usarlo con el modelo de Gemini.
Detecta autom谩ticamente el tipo MIME del archivo.
Procesa im谩genes, PDFs y archivos de texto.
"""
# Guardar el archivo en la carpeta 'uploads'
file_path = os.path.join(UPLOAD_DIR, file.name)
with open(file_path, "wb") as f:
f.write(file.read())
# Detectar el tipo MIME del archivo
mime = MimeTypes()
mime_type, _ = mime.guess_type(file_path)
if not mime_type:
raise ValueError("No se pudo determinar el tipo MIME del archivo.")
# Subir el archivo a Gemini
print(f"Subiendo el archivo '{file_path}' con MIME type '{mime_type}'...")
uploaded_file = genai.upload_file(file_path, mime_type=mime_type)
print(f"Archivo subido: {uploaded_file.display_name}, URI: {uploaded_file.uri}")
# Esperar a que el archivo est茅 activo
wait_for_files_active([uploaded_file])
return uploaded_file.uri # Devuelve la URI del archivo subido
# Funci贸n para esperar que los archivos est茅n activos
def wait_for_files_active(files):
"""
Espera a que los archivos subidos a Gemini est茅n activos y listos para su uso.
"""
print("Esperando el procesamiento de los archivos...")
for file in files:
status = genai.get_file(file.name)
while status.state.name == "PROCESSING":
print(".", end="", flush=True)
time.sleep(5) # Intervalo de espera m谩s corto para mejorar la experiencia del usuario
status = genai.get_file(file.name)
if status.state.name != "ACTIVE":
raise Exception(f"El archivo {file.name} no pudo procesarse correctamente.")
print("\nTodos los archivos est谩n listos.")
# Funci贸n para iniciar el chat con el modelo
def start_chat_with_file(file, user_input):
"""
Inicia una conversaci贸n con el modelo utilizando un archivo como entrada.
"""
chat_session = model.start_chat(
history=[
{
"role": "user",
"parts": [file],
},
]
)
# Enviar mensaje al modelo
response = chat_session.send_message(user_input)
return response.text
# Configuraci贸n del modelo generativo
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 40,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
generation_config=generation_config,
)
# Interfaz de Gradio
def interface(user_input, file):
"""
Interfaz de Gradio que procesa el archivo subido y permite interactuar con el modelo.
"""
try:
file_uri = upload_and_process_file(file)
except Exception as e:
return f"Error al procesar el archivo: {e}"
response = start_chat_with_file(file_uri, user_input)
return response
# Crear la interfaz de Gradio
iface = gr.Interface(
fn=interface,
inputs=[
gr.Textbox(label="Tu mensaje al modelo", placeholder="Escribe aqu铆 tu mensaje...", lines=2),
gr.File(label="Sube un archivo (Imagen, PDF o Texto)")
],
outputs="text",
title="Interacci贸n con el Modelo Generativo de Gemini",
description="Sube un archivo y escribe un mensaje para iniciar una conversaci贸n con el modelo.",
)
# Iniciar la interfaz
if __name__ == "__main__":
iface.launch()
|