copywriter / app.py
JeCabrera's picture
Update app.py
6efed0c verified
raw
history blame
3.94 kB
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()