Spaces:
Sleeping
Sleeping
| 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) | |