File size: 3,742 Bytes
3f7e7e6
e43df9f
de3a711
eaf89d5
6613451
3f7e7e6
de3a711
6613451
3f7e7e6
6613451
3f7e7e6
6613451
3f7e7e6
 
6613451
 
 
3f7e7e6
 
6613451
 
3f7e7e6
 
 
6613451
 
e43df9f
 
 
 
de3a711
6613451
3f7e7e6
 
 
6613451
e43df9f
3f7e7e6
 
e43df9f
de3a711
3f7e7e6
 
 
 
 
 
 
 
 
 
 
 
d3d8124
 
3f7e7e6
 
 
29fefec
6613451
30dcf91
1452a4c
30dcf91
9ee4000
30dcf91
eaf89d5
30dcf91
9ee4000
6613451
9ee4000
 
6613451
d3d8124
0a4b91b
 
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
# app.py
import sys
from pathlib import Path
import os
import subprocess
# import pkg_resources # Comentado o eliminado, ya que dio info enga帽osa

# --- 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 su cliente compatible...")
GRADIO_TARGET_VERSION = "4.29.0"
GRADIO_CLIENT_TARGET_VERSION = "0.16.1" # Cliente para Gradio 4.29.0
try:
    # Desinstalar cualquier versi贸n existente de gradio y gradio_client
    # Redirigir stdout/stderr a DEVNULL para una salida m谩s limpia si tienen 茅xito
    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}"])
    print(f"INFO (app.py): Instalaci贸n forzada de Gradio {GRADIO_TARGET_VERSION} y Gradio-Client {GRADIO_CLIENT_TARGET_VERSION} solicitada.")
            
except subprocess.CalledProcessError as e:
    print(f"ERROR (app.py): Fallo al forzar la instalaci贸n de Gradio: {e}")
    print("Por favor, aseg煤rate de que no hay otras dependencias conflictivas y reintenta despu茅s de una limpieza profunda del entorno.")
    # Considera no salir si el error es solo por "ya desinstalado"
    # sys.exit(1) 
# --- FIN DE L脥NEA CR脥TICA ---

CURRENT_DIR = Path(__file__).parent
if str(CURRENT_DIR) not in sys.path:
    sys.path.insert(0, str(CURRENT_DIR))

try:
    import decorators 
    # Usa tu UI.py COMPLEJA ahora si la UI simplificada funcion贸.
    # Si la UI simplificada es la que est谩 en uso, este import es correcto.
    from UI import create_interface 
    import interface as app_interface_module
except ImportError as e:
    print(f"Error cr铆tico de importaci贸n en app.py: {e}. Aseg煤rate de que todos los archivos .py est茅n en el mismo directorio o en PYTHONPATH.")
    print(f"sys.path actual: {sys.path}")
    sys.exit(1)


# La l贸gica del decorador dummy puede permanecer, es inofensiva
if decorators.was_real_spaces_gpu_imported():
    print("INFO (app.py): El decorador GPU de 'spaces' parece estar disponible.")
    print("INFO (app.py): Se definir谩 una funci贸n dummy decorada para satisfacer el chequeo de Gradio si es necesario.")
    
    @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. No se necesita funci贸n dummy para GPU.")


def main():
    print("INFO (app.py): Creando la interfaz Gradio...")
    # Aseg煤rate de que UI.py contiene tu interfaz completa ahora, o la simplificada si a煤n est谩s depurando.
    demo_instance = create_interface(process_function_for_button=app_interface_module.process_and_plot)
    
    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()