File size: 5,859 Bytes
d90d6a6
71f867b
0a39dde
12cb4be
95da284
3e64a10
0a39dde
71f867b
 
effad1b
71f867b
421e233
d90d6a6
 
 
2011e87
02970bf
d90d6a6
b453f44
716a958
b453f44
 
 
 
716a958
effad1b
b453f44
 
 
 
89417a8
b453f44
 
716a958
45042e7
421e233
114b23a
5a47dee
 
d90d6a6
 
b453f44
d90d6a6
12cb4be
 
 
a968dbe
2b6d34d
421e233
0a39dde
 
421e233
 
0a39dde
 
 
 
 
b8bcbae
0a39dde
 
 
 
421e233
d90d6a6
 
51214b8
421e233
71f867b
 
 
 
d90d6a6
 
2c111d1
421e233
effad1b
 
 
 
afb0579
effad1b
 
421e233
effad1b
 
 
0983bee
 
 
 
 
95da284
2b6d34d
 
5b38336
0983bee
b462213
2011e87
89417a8
5b38336
 
 
 
b462213
b453f44
 
114b23a
 
0a39dde
111f19a
dc99960
5b38336
 
2690756
2b6d34d
 
89417a8
ec1a890
 
71f867b
 
 
2b6d34d
 
 
 
 
421e233
0a39dde
421e233
 
0a39dde
 
 
 
 
b8bcbae
0a39dde
 
 
 
 
71f867b
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import io
import random
import globales
import herramientas
import gradio_client
import conexion_firebase
from datetime import datetime
from fastapi import HTTPException, status
from huggingface_hub import InferenceClient

servidor = globales.servidor
servicio = globales.servicio

def genera_platillo_gpu(platillo):

    prompt = globales.previo + platillo
    
    try:
        dict_espacios = conexion_firebase.obtenDato('nowme', servidor, 'espacios')

        espacios_habilitados = [
        nombre for nombre, config in dict_espacios.items()
        if config.get("habilitado", False) # Usamos .get() para evitar KeyError si 'habilitado' no existe
        ]

        print(f"Espacios habilitados: {espacios_habilitados}")
        
        espacio_aleatorio_elegido = random.choice(espacios_habilitados)
        configuracion_espacio = dict_espacios[espacio_aleatorio_elegido]
        client = gradio_client.Client(configuracion_espacio['ruta'], hf_token=globales.llave)
        
        result = client.predict(
        #**kwargs,
        prompt=prompt,
        #negative_prompt="live animals",
        seed=42,
        randomize_seed=False,
        width=786,
        height=568,
        # guidance_scale=3.5,
        # num_inference_steps=28,
        api_name=configuracion_espacio['api_name']       
        )

        #Cuando es GPU, debe de restar segundos disponibles de HF 
        herramientas.restaSegundosGPU(globales.work_cost)

        print("Platillo generado:", platillo)
        conexion_firebase.registraLog(servidor, platillo, espacio_aleatorio_elegido, 42)
        
        #Generales
        conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'imagenes_totales', amount=1)
        conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'endpoint-' + servicio, amount=1)
        conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'gpu-totales', amount=1)
        conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'gpu-' + servicio, amount=1)
        #Día a Día
        now = datetime.now() 
        document_id_fecha_hora = now.strftime("%Y-%m-%d")
        nombre_doc = document_id_fecha_hora + " - " +  servidor 
        conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'imagenes_totales', amount=1)
        conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'endpoint-' + servicio, amount=1)
        conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'gpu-totales', amount=1)
        conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'gpu-' + servicio, amount=1)    

        return result[0]

    except Exception as e:     
        print("Excepción: ", e)
        raise HTTPException(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            detail=e
        )

def genera_platillo_inference(platillo):
    
    dict_modelos = conexion_firebase.obtenDato('nowme', servidor, 'modelos')    
    modelos_habilitados = [
        nombre for nombre, config in dict_modelos.items()
        if config.get("habilitado", False) # Usamos .get() para evitar KeyError si 'habilitado' no existe
        ]
    
    print(f"Modelos habilitados: {modelos_habilitados}")
    modelo_aleatorio_elegido = random.choice(modelos_habilitados)
    configuracion_modelo = dict_modelos[modelo_aleatorio_elegido]   

    creditos_restantes_inference = conexion_firebase.obtenDato('nowme', servidor, 'inferencias')
    
    if creditos_restantes_inference > 0:
        provedor_seleccionado = globales.proveedor
    else:
        provedor_seleccionado = globales.proveedor_back

    prompt = globales.previo + platillo
    print("Platillo enviado:", platillo)
       
    client = InferenceClient(
            provider= provedor_seleccionado,
            model=configuracion_modelo['ruta'],
            api_key=globales.llave
        )

    try: 
        image = client.text_to_image(
        prompt,
        #negative_prompt="live animals",        
        width=784, #786
        height=560, #568
        num_inference_steps=12,
        seed=42
        )

        herramientas.restaSegundosInference(globales.inference_cost)              
        
    except Exception as e:
        print("Excepción: ", e)
        if "Gateway Time-out" in str(e): 
            print("GATEWAY TIME-OUT 💀")
                   
        error_impreso = f"Error: {e}"
        print(error_impreso)
        raise HTTPException(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
        )
    
    img_io = io.BytesIO()
    image.save(img_io, "PNG")
    img_io.seek(0)
    print("Platillo generado:", platillo)
    conexion_firebase.registraLog(servidor, platillo, modelo_aleatorio_elegido, 42)
    #Generales
    conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'imagenes_totales', amount=1)
    conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'endpoint-' + servicio, amount=1)
    conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'inference-totales', amount=1)
    conexion_firebase.incrementar_campo_numerico('estadisticas', 'imagenes', 'inference-' + servicio, amount=1)
    #Día a Día
    now = datetime.now() 
    document_id_fecha_hora = now.strftime("%Y-%m-%d")
    nombre_doc = document_id_fecha_hora + " - " +  servidor   
    conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'imagenes_totales', amount=1)
    conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'endpoint-' + servicio, amount=1)
    conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'inference-totales', amount=1)
    conexion_firebase.incrementar_campo_numerico('estadisticas', nombre_doc, 'inference-' + servicio, amount=1)

    return img_io