File size: 4,833 Bytes
12cb4be
ddbe067
5a47dee
0cc407f
0e270d1
219c926
0e270d1
 
 
5a47dee
0e270d1
 
5a47dee
2011e87
12cb4be
 
 
 
5a47dee
5430e13
f7095e2
 
2b6d34d
12cb4be
 
 
 
 
 
0cc407f
12cb4be
 
 
 
 
 
 
 
 
 
 
5a47dee
12cb4be
f7095e2
12cb4be
f7095e2
0e270d1
12cb4be
95da284
 
 
 
0e270d1
f7095e2
12cb4be
 
 
 
5a47dee
12cb4be
00d1318
12cb4be
 
 
 
 
 
219c926
12cb4be
 
00d1318
b818e7a
0e270d1
12cb4be
2b6d34d
 
 
 
 
 
f7095e2
 
 
2b6d34d
 
f7095e2
 
 
 
2b6d34d
ddbe067
219c926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ddbe067
6f1f886
ddbe067
 
 
 
 
 
 
 
 
 
 
 
00d1318
ddbe067
6f1f886
5a47dee
 
 
 
 
ddbe067
 
 
5a47dee
ddbe067
219c926
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
import time
from datetime import datetime
from datetime import datetime
import conexion_firebase
import globales
import pytz

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)

    return resultado

def esNuevoDia():
    """
    Compara dos timestamps (en formato string ISO) y devuelve True si han
    pasado más de 24 horas entre ellos, False en caso contrario.
    """

    timestamp_original = obtenUltimoTimestamp()
    timestamp_actual = int(time.time())

    try:
        segundos_en_24_horas = 24 * 60 * 60
        diferencia_en_segundos = abs(timestamp_actual - timestamp_original)
        return diferencia_en_segundos > segundos_en_24_horas
    except ValueError:
        print("Error: Formato de timestamp incorrecto.")
        return False
    
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 renuevaSegundosDisponibles():

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

def renuevaTimestampActual(): 

    timestamp_actual = int(time.time())
    conexion_firebase.editaDato('nowme', 'huggingface', last_timestamp, timestamp_actual)    

def restaSegundosGPU(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 = 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 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 imprimeTime(): 
    """
    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 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.
    """

    # Convertir los timestamps Unix a objetos datetime (zona horaria local)
    fecha_registro_dt = datetime.fromtimestamp(obtenUltimoTimestamp())
    
   
    #fecha_actual_dt = datetime.fromtimestamp(int(time.time())) #Timestamp actual.
    fecha_actual_dt = datetime.fromtimestamp(int(time.time()))
        
    # Extraer solo la fecha de los objetos datetime
    fecha_registro = fecha_registro_dt.date()
    fecha_actual = fecha_actual_dt.date()
    
    # Verificar si las fechas son diferentes
    return fecha_actual > fecha_registro