copywriter / app.py
JeCabrera's picture
Update app.py
5bb866e verified
raw
history blame
2.97 kB
import os
import time
import google.generativeai as genai
from mimetypes import MimeTypes
# Configurar la API de Gemini
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
def upload_and_process_file(path):
"""
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.
"""
# Detectar el tipo MIME del archivo
mime = MimeTypes()
mime_type, _ = mime.guess_type(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 '{path}' con MIME type '{mime_type}'...")
file = genai.upload_file(path, mime_type=mime_type)
print(f"Archivo subido: {file.display_name}, URI: {file.uri}")
# Esperar a que el archivo esté activo
wait_for_files_active([file])
return file
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.")
# 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,
)
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
# Ejemplo de uso
if __name__ == "__main__":
# Ruta del archivo a subir
file_path = "ruta_al_archivo.pdf" # Cambiar por la ruta del archivo
# Subir y procesar el archivo
try:
processed_file = upload_and_process_file(file_path)
except Exception as e:
print(f"Error al procesar el archivo: {e}")
exit(1)
# Interactuar con el modelo usando el archivo procesado
user_input = "Por favor, analiza este documento y dame un resumen."
response = start_chat_with_file(processed_file, user_input)
# Mostrar la respuesta
print("Respuesta del modelo:")
print(response)