File size: 6,333 Bytes
12cb4be
ddbe067
 
0cc407f
2011e87
12cb4be
 
 
 
 
0cc407f
f7095e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12cb4be
2b6d34d
12cb4be
 
 
 
 
 
0cc407f
12cb4be
 
 
 
 
 
 
 
 
 
 
ddbe067
12cb4be
f7095e2
12cb4be
f7095e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12cb4be
95da284
 
 
 
f7095e2
 
12cb4be
 
f7095e2
 
 
 
 
 
 
12cb4be
 
 
 
f7095e2
12cb4be
 
 
 
 
 
 
 
 
 
 
 
f7095e2
12cb4be
f7095e2
 
 
 
 
 
 
 
2b6d34d
 
 
 
 
 
 
f7095e2
 
 
 
2b6d34d
 
f7095e2
 
 
 
 
 
2b6d34d
 
f7095e2
 
 
 
2b6d34d
ddbe067
 
 
 
 
 
6f1f886
ddbe067
 
 
 
 
 
 
 
 
 
 
 
 
6f1f886
ddbe067
 
 
 
 
 
 
 
 
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
import time
from datetime import datetime
from datetime import datetime, date, timedelta
import conexion_firebase

def obtenUltimoTimestamp():
    """
    Obtiene el último timestamp de renovación guardado.
    """

    resultado = conexion_firebase.obtenDato('nowme', 'huggingface', 'last_timestamp')
    return resultado

    #Antes se hacía con archivos estáticos.
    # try:
    #     archivo_ruta = "archivos/last_timestamp.txt"
    #     with open(archivo_ruta, 'r') as archivo:
    #         contenido = archivo.readline().strip()
    #         ultimo_timestamp = int(contenido)
    #         return ultimo_timestamp
    # except FileNotFoundError:
    #     print(f"Error: El archivo '{archivo_ruta}' no fue encontrado.")
    #     return 
    # except ValueError:
    #     print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.")
    #     return

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')

    # try:
    #     archivo_ruta = "archivos/seconds_available.txt"
    #     # Leer el número actual de segundos disponibles
    #     with open(archivo_ruta, 'r') as archivo:
    #         contenido = archivo.readline().strip()
    #         segundos_disponibles = int(contenido)
    #         return segundos_disponibles
    # except FileNotFoundError:
    #     print(f"Error: El archivo '{archivo_ruta}' no fue encontrado.")
    #     return
    # except ValueError:
    #     print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.")
    #     return
    
def renuevaSegundosDisponibles():

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

    # Guardar el nuevo número en el archivo
    # try:
    #     archivo_ruta = "archivos/seconds_available.txt"
    #     with open(archivo_ruta, 'w') as archivo:
    #         archivo.write(str(quota_total))
    #     print(f"Se renovaron los {quota_total} segundos disponibles.")
    # except Exception as e:
    #     print(f"Error al escribir en el archivo '{archivo_ruta}': {e}") 

def renuevaTimestampActual(): 

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

def restaSegundosGPU(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.
    """

    print("Estoy en resta segundos...")
    segundos_disponibles = obtenSegundosDisponibles()    

    # Restar los segundos
    nuevos_segundos_disponibles = segundos_disponibles - segundos
    conexion_firebase.editaDato('nowme', 'huggingface', 'segundos', nuevos_segundos_disponibles)

    # # Guardar el nuevo número en el archivo
    # try:
    #     archivo_ruta = "archivos/seconds_available.txt"
    #     with open(archivo_ruta, 'w') as archivo:
    #         archivo.write(str(nuevos_segundos_disponibles))
    #     print(f"Se restaron {segundos} segundos. Ahora quedan {nuevos_segundos_disponibles} segundos disponibles.")
    # except Exception as e:
    #     print(f"Error al escribir en el archivo '{archivo_ruta}': {e}") 

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

    print("Estoy en actualiza modelo 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}.")

    # Guardar el nuevo número en el archivo
    # try:
    #     archivo_ruta = "archivos/modelo_actual.txt"
    #     with open(archivo_ruta, 'w') as archivo:
    #         archivo.write(nuevo_modelo)        
    # except Exception as e:
    #     print(f"Error al escribir en el archivo '{archivo_ruta}': {e}") 

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(): 
    timestamp_actual = int(time.time())    
    fecha_hora = datetime.fromtimestamp(timestamp_actual)
    fecha_hora_legible = fecha_hora.strftime('%Y-%m-%d %H:%M:%S')
    return fecha_hora_legible

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.

    # 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