# app.py (con verificación después de forzar) import sys from pathlib import Path import os import subprocess import pkg_resources # Para verificar la versión instalada # --- CRÍTICO: LÍNEA PARA FORZAR LA VERSIÓN DE GRADIO Y GRADIO-CLIENT CORRECTA --- print("INFO (app.py): Intentando forzar la instalación de Gradio 4.29.0 y gradio-client 0.16.1...") GRADIO_TARGET_VERSION = "4.29.0" GRADIO_CLIENT_TARGET_VERSION = "0.16.1" try: subprocess.check_call([sys.executable, "-m", "pip", "uninstall", "-y", "gradio", "gradio-client"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) print(f"INFO (app.py): Intentando instalar gradio=={GRADIO_TARGET_VERSION} y gradio-client=={GRADIO_CLIENT_TARGET_VERSION}...") subprocess.check_call([sys.executable, "-m", "pip", "install", f"gradio=={GRADIO_TARGET_VERSION}", f"gradio-client=={GRADIO_CLIENT_TARGET_VERSION}"]) # Verificar la versión instalada installed_gradio_version = pkg_resources.get_distribution("gradio").version installed_client_version = pkg_resources.get_distribution("gradio_client").version print(f"INFO (app.py): Versión de Gradio instalada: {installed_gradio_version}") print(f"INFO (app.py): Versión de Gradio-Client instalada: {installed_client_version}") if installed_gradio_version != GRADIO_TARGET_VERSION or installed_client_version != GRADIO_CLIENT_TARGET_VERSION: print(f"ERROR (app.py): No se pudo forzar la versión correcta de Gradio/Gradio-Client.") print(f"Se esperaba Gradio {GRADIO_TARGET_VERSION}, se obtuvo {installed_gradio_version}") print(f"Se esperaba Gradio-Client {GRADIO_CLIENT_TARGET_VERSION}, se obtuvo {installed_client_version}") # sys.exit(1) # Salir si la versión no es la correcta, opcional else: print(f"INFO (app.py): Gradio {GRADIO_TARGET_VERSION} y Gradio-Client {GRADIO_CLIENT_TARGET_VERSION} instalados y verificados correctamente.") except subprocess.CalledProcessError as e: print(f"ERROR (app.py): Fallo al forzar la instalación de Gradio: {e}") sys.exit(1) except pkg_resources.DistributionNotFound: print("ERROR (app.py): Gradio o Gradio-Client no se encontró después del intento de instalación.") sys.exit(1) # --- FIN DE LÍNEA CRÍTICA --- # ... (resto de tu app.py, importando UI, interface, etc.) ... # Asegúrate de que estas importaciones ocurran DESPUÉS del bloque de instalación. CURRENT_DIR = Path(__file__).parent if str(CURRENT_DIR) not in sys.path: sys.path.insert(0, str(CURRENT_DIR)) try: import decorators from UI import create_interface # Usa la UI simplificada para esta prueba import interface as app_interface_module except ImportError as e: print(f"Error crítico de importación en app.py: {e}.") sys.exit(1) # Comentar la lógica del decorador dummy por ahora, ya que no es el error principal # if decorators.was_real_spaces_gpu_imported(): # print("INFO (app.py): El decorador GPU de 'spaces' parece estar disponible.") # @decorators.gpu_decorator(duration=1) # def _app_py_dummy_gpu_function_for_gradio_startup(): pass # else: # print("INFO (app.py): El decorador GPU real de 'spaces' no fue importado.") def main(): print("INFO (app.py): Creando la interfaz Gradio simplificada...") # Usa la UI simplificada demo_instance = create_interface(process_function_for_button=None) print("INFO (app.py): Lanzando la interfaz Gradio localmente...") try: demo_instance.launch(debug=True) except ValueError as ve: if "shareable link must be created" in str(ve).lower() or "localhost is not accessible" in str(ve).lower(): print("ADVERTENCIA (app.py): Falló el lanzamiento local directo, intentando con share=True...") demo_instance.launch(share=True, debug=True) else: print(f"Error inesperado de ValueError durante launch(): {ve}") raise ve except Exception as e_launch: print(f"Error inesperado durante demo.launch(): {e_launch}") raise e_launch if __name__ == "__main__": main()