File size: 7,668 Bytes
ddbe067
5a47dee
0cc407f
0e270d1
219c926
9de3c9a
716a958
0e270d1
 
 
5a47dee
0e270d1
 
5a47dee
2011e87
12cb4be
 
 
 
dc99960
0a726da
c0cf358
f7095e2
12cb4be
 
 
5a47dee
12cb4be
f7095e2
12cb4be
f7095e2
0e270d1
111f19a
 
 
8fd0fe8
 
 
111f19a
 
8fd0fe8
 
12cb4be
95da284
 
 
9de3c9a
f7095e2
12cb4be
 
 
9de3c9a
 
5a47dee
12cb4be
00d1318
12cb4be
dc99960
12cb4be
 
 
 
219c926
12cb4be
 
00d1318
0a726da
0e270d1
12cb4be
111f19a
 
 
 
 
 
 
0a726da
dc99960
111f19a
 
414779e
dc99960
111f19a
2b6d34d
 
 
 
 
 
f7095e2
 
 
2b6d34d
 
f7095e2
 
 
 
2b6d34d
c0cf358
219c926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ddbe067
9de3c9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6f1f886
ddbe067
 
 
 
 
 
 
 
 
 
 
 
00d1318
2690756
c0cf358
9de3c9a
c0cf358
 
5a47dee
2690756
c0cf358
 
 
 
 
 
 
 
5a47dee
ddbe067
c0cf358
 
 
 
5a47dee
c0cf358
ddbe067
2690756
716a958
c0cf358
716a958
 
 
 
 
 
 
c0cf358
716a958
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
from datetime import datetime
from datetime import datetime
import conexion_firebase
import globales
import pytz
import time
import random

if globales.servidor == "moibe":
    segundos = "segundos_dev"
    last_timestamp = "last_timestamp_dev"
else: 
    segundos = "segundos_prod"
    last_timestamp = "last_timestamp_prod"

def obtenUltimoTimestamp():
    """
    Obtiene el último timestamp de renovación guardado.
    """
    resultado = conexion_firebase.obtenDato('nowme', 'huggingface', last_timestamp)
    print("Obten último timestamp obtenido: ", resultado)    
    
    return resultado
    
def obtenSegundosDisponibles(): 

    if esDiaSiguiente() == True:
        renuevaSegundosDisponibles()
        renuevaModeloPrincipal()

    #Finalmente obten los segundos disponibles después de las operaciones.
    return conexion_firebase.obtenDato('nowme', 'huggingface', segundos)

def obtenSegundosDisponiblesInference(): 

    # if esDiaSiguiente() == True:
    #     renuevaSegundosDisponibles()
    #     renuevaModeloPrincipal()

    #Finalmente obten los segundos disponibles después de las operaciones.
    return conexion_firebase.obtenDato('nowme', 'huggingface', 'hfInference')
    
    
def renuevaSegundosDisponibles():

    #Segundos de cuota total gratuita disponibles al momento.
    conexion_firebase.editaDato('nowme', 'huggingface', segundos, globales.quota)
    renuevaTimestampActual()

def renuevaTimestampActual(): 

    timestamp_actual = imprimeTimeNowFixed16h()
    print("Ésto es el timestamp now de la renovación...: ", timestamp_actual)
    conexion_firebase.editaDato('nowme', 'huggingface', last_timestamp, timestamp_actual)    

def restaSegundosGPU(cuantos_segundos):
    """
    Lee el número de segundos disponibles,
    resta los segundos dados como parámetro y guarda el nuevo valor en el archivo.
    """

    segundos_disponibles = obtenSegundosDisponibles()    
    print("Segundos disponibles: ", segundos_disponibles)

    # Restar los segundos
    nuevos_segundos_disponibles = segundos_disponibles - cuantos_segundos
    print("Segundos disponibles ahora: ", nuevos_segundos_disponibles)
    conexion_firebase.editaDato('nowme', 'huggingface', segundos, nuevos_segundos_disponibles)

def restaSegundosInference(cuantos_segundos):
    """
    Lee el número de segundos disponibles desde seconds_available.txt,
    resta los segundos dados como parámetro y guarda el nuevo valor en el archivo.
    """

    segundos_disponibles = obtenSegundosDisponiblesInference()    
    print("Segundos disponibles Inference: ", segundos_disponibles)
    
    # Restar los segundos
    nuevos_segundos_disponibles = segundos_disponibles - cuantos_segundos
    print("Segundos disponibles ahora en restaSegundosInference: ", nuevos_segundos_disponibles)
    conexion_firebase.editaDato('nowme', 'huggingface', 'hfInference', nuevos_segundos_disponibles)    

def modificaModeloActual(nuevo_modelo):
    """
    Actualiza el archivo archivos/modelo_actual.txt con el modelo funcional en caso de
    problemas con el actual.
    """

    modelo_actual = conexion_firebase.obtenDato('nowme', 'huggingface', 'modelo_actual')
    conexion_firebase.editaDato('nowme', 'huggingface', 'modelo_actual', nuevo_modelo)
    print(f"Se actualizó el modelo actual: {modelo_actual} por {nuevo_modelo}.")

def renuevaModeloPrincipal():
    #Obten el modelo principal (default).   
    modelo_principal = conexion_firebase.obtenDato('nowme', 'huggingface', 'modelo_principal')
    #Asignalo como modelo actual.
    conexion_firebase.editaDato('nowme', 'huggingface', 'modelo_actual', modelo_principal)

def imprimeTimeNow(): 
    """
    Devuelve la fecha y hora actual en la zona horaria de la Ciudad de México (GMT-6).
    """
    # 1. Definir la zona horaria de la Ciudad de México
    # Puedes usar 'America/Mexico_City' para que pytz maneje el horario de verano automáticamente.
    mexico_city_tz = pytz.timezone('America/Mexico_City')

    # 2. Obtener la hora actual en UTC
    utc_now = datetime.now(pytz.utc)

    # 3. Convertir la hora UTC a la zona horaria deseada
    mexico_city_now = utc_now.astimezone(mexico_city_tz)

    # 4. Formatear la fecha y hora
    # El formato que deseas es "YYYY-MM-DD HH:MM:SS"
    formatted_time = mexico_city_now.strftime("%Y-%m-%d %H:%M:%S")

    return formatted_time

def imprimeTimeNowFixed16h():
    """
    Devuelve la fecha actual con la hora fijada a las 16:00:00 (4 PM)
    en la zona horaria de la Ciudad de México (GMT-6).
    """
    # 1. Definir la zona horaria de la Ciudad de México
    mexico_city_tz = pytz.timezone('America/Mexico_City')

    # 2. Obtener la fecha y hora actual en UTC
    utc_now = datetime.now(pytz.utc)

    # 3. Convertir la hora UTC a la zona horaria de la Ciudad de México
    #    Esto nos da la fecha correcta (año, mes, día) para esa zona.
    mexico_city_aware_dt = utc_now.astimezone(mexico_city_tz)

    # 4. Crear un nuevo objeto datetime con la fecha obtenida
    #    pero con la hora fijada a las 16:00:00
    fixed_time_dt = mexico_city_tz.localize(
        datetime(
            mexico_city_aware_dt.year,
            mexico_city_aware_dt.month,
            mexico_city_aware_dt.day,
            16,  # Hora fijada a las 16 (4 PM)
            0,   # Minutos fijados a 0
            0    # Segundos fijados a 0
        )
    )
    
    # Nota sobre .localize() vs .astimezone():
    # .localize() se usa para tomar un datetime "naive" (sin zona horaria)
    # y asignarle una zona horaria.
    # .astimezone() se usa para convertir un datetime "timezone-aware"
    # de una zona horaria a otra.
    # Aquí creamos un datetime "naive" con la fecha correcta y la hora 16:00:00
    # y luego lo "localizamos" en la zona horaria de México.


    # 5. Formatear la fecha y hora
    formatted_time = fixed_time_dt.strftime("%Y-%m-%d %H:%M:%S")

    return formatted_time

def esDiaSiguiente(): 
    """
    Compara dos timestamps Unix y devuelve True si el día de timestamp_actual
    es diferente al día de timestamp_registro.

    Args:
        timestamp_registro (int): Timestamp Unix del registro original (en segundos).
        timestamp_actual (int): Timestamp Unix actual (en segundos).

    Returns:
        bool: True si el día de timestamp_actual es diferente al día de
              timestamp_registro, False si es el mismo día.
    """

    #Obtiene el último registro de fecha de la base de firestore.
    fecha_registro_dt = obtenUltimoTimestamp()   
    
    print("Primero, el último timestamp obtenido de base es: ", fecha_registro_dt)
    print("Y su tipo es: ", type(fecha_registro_dt))
   
    #Timestamp actual
    fecha_actual_dt = imprimeTimeNow()
    print("Segundo, la fecha_actual_dt quedó como: ", fecha_actual_dt)
    print("Y su tipo es: ", type(fecha_actual_dt))
    

    formato = "%Y-%m-%d %H:%M:%S"
    datetime_obj_1 = datetime.strptime(fecha_registro_dt, formato)
    datetime_obj_2 = datetime.strptime(fecha_actual_dt, formato)   
        
    # Extraer solo la fecha de los objetos datetime
    fecha_registro = datetime_obj_1.date()
    #print("Primera extracción: ", fecha_registro)
    fecha_actual = datetime_obj_2.date()
    #print("Segunda extracción: ", fecha_actual)    
    

    # Verificar si las fechas son diferentes
    resultado = fecha_actual > fecha_registro
    print("Resultado de resta de fechas: ", resultado)    
    
    return resultado

def getFluxServer(): 
    print("In getFluxServer...")
    server_keys = list(globales.SERVER_NAMES.values())
    random_value = random.choice(server_keys)
    print("Random key: ", random_value)
    
    return random_value