Moibe commited on
Commit
2b6d34d
·
1 Parent(s): 0af8e0a

Model backup

Browse files
app.py CHANGED
@@ -38,6 +38,6 @@ async def genera_imagen(platillo: str = Form(...)):
38
  resultado = funciones.genera_platillo_inference(platillo)
39
  print("El resultado de inference es: ", resultado)
40
  if type(resultado) is str:
41
- return '{"Error":"500"}'
42
  else:
43
  return StreamingResponse(content=resultado, media_type="image/png")
 
38
  resultado = funciones.genera_platillo_inference(platillo)
39
  print("El resultado de inference es: ", resultado)
40
  if type(resultado) is str:
41
+ return resultado
42
  else:
43
  return StreamingResponse(content=resultado, media_type="image/png")
archivos/last_timestamp.txt CHANGED
@@ -1 +1 @@
1
- 1745452456
 
1
+ 1745539537
archivos/modelo_actual.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ black-forest-labs/FLUX.1-dev
archivos/modelo_principal.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ black-forest-labs/FLUX.1-dev
archivos/seconds_available.txt CHANGED
@@ -1 +1 @@
1
- 288
 
1
+ 294
funciones.py CHANGED
@@ -7,7 +7,8 @@ from huggingface_hub import InferenceClient
7
  def genera_platillo_gpu(platillo):
8
 
9
  prompt = globales.previo + platillo
10
- print("Platillo generado:", platillo)
 
11
 
12
  kwargs = {
13
  "prompt": prompt,
@@ -32,6 +33,7 @@ def genera_platillo_gpu(platillo):
32
  #Cuando es GPU, debe de restar segundos disponibles de HF
33
  herramientas.restaSegundosGPU(globales.work_cost)
34
 
 
35
  print("Resultado regresado en result[0] es: ", result[0])
36
  return result[0]
37
 
@@ -44,9 +46,19 @@ def genera_platillo_gpu(platillo):
44
 
45
  def genera_platillo_inference(platillo):
46
 
 
 
 
 
 
 
 
 
 
 
47
  prompt = globales.previo + platillo
48
- print("Platillo generado:", platillo)
49
-
50
  client = InferenceClient(
51
  provider= globales.proveedor,
52
  api_key=globales.llave
@@ -55,24 +67,22 @@ def genera_platillo_inference(platillo):
55
  try:
56
  image = client.text_to_image(
57
  prompt,
58
- model=globales.inferencia,
59
- #seed=42,
60
- #guidance_scale=7.5,
61
- #num_inference_steps=50,
62
- #width=1024, #El default es 1024 x 1024 y quizá 1024*768, el max es 1536.
63
- #height=1024 #El límite de replicate es 1024.
64
- )
65
-
66
- img_io = io.BytesIO()
67
- image.save(img_io, "PNG")
68
- img_io.seek(0)
69
- return img_io
70
 
71
  except Exception as e:
72
  print("Excepción es: ", e)
73
- # Opción de envío de imagen genérica.
74
- # with open("default.png", "rb") as default_image_file:
75
- # img_io_default = io.BytesIO(default_image_file.read())
76
- # img_io_default.seek(0)
77
- # return img_io_default
78
- return '{"Error":"500"}'
 
 
 
 
 
 
 
 
 
7
  def genera_platillo_gpu(platillo):
8
 
9
  prompt = globales.previo + platillo
10
+ print("Platillo enviado:", platillo)
11
+
12
 
13
  kwargs = {
14
  "prompt": prompt,
 
33
  #Cuando es GPU, debe de restar segundos disponibles de HF
34
  herramientas.restaSegundosGPU(globales.work_cost)
35
 
36
+ print("Platillo generado:", platillo)
37
  print("Resultado regresado en result[0] es: ", result[0])
38
  return result[0]
39
 
 
46
 
47
  def genera_platillo_inference(platillo):
48
 
49
+ print("Proveedor:", globales.proveedor)
50
+ modelo_actual = herramientas.obtenModeloActual()
51
+
52
+ #modelo = globales.inferencia
53
+
54
+ modelo = modelo_actual
55
+
56
+
57
+ print("Modelo:", modelo)
58
+
59
  prompt = globales.previo + platillo
60
+ print("Platillo enviado:", platillo)
61
+
62
  client = InferenceClient(
63
  provider= globales.proveedor,
64
  api_key=globales.llave
 
67
  try:
68
  image = client.text_to_image(
69
  prompt,
70
+ model=modelo
71
+ )
 
 
 
 
 
 
 
 
 
 
72
 
73
  except Exception as e:
74
  print("Excepción es: ", e)
75
+ if "Gateway Time-out" in str(e):
76
+ print("GATEWAY TIME-OUT 💀")
77
+ modelo=globales.inferencia_backup
78
+ #Escribe en txt el nuevo modelo.
79
+ herramientas.modificaModeloActual(modelo)
80
+
81
+ return f"Error: {e}"
82
+
83
+ img_io = io.BytesIO()
84
+ image.save(img_io, "PNG")
85
+ img_io.seek(0)
86
+ print("Platillo generado:", platillo)
87
+ return img_io
88
+
globales.py CHANGED
@@ -6,9 +6,10 @@ llave = herramientas.obtenAccesoHF()
6
  espacio = "black-forest-labs/FLUX.1-schnell"
7
  #espacio = "black-forest-labs/FLUX.1-dev"
8
  inferencia = "black-forest-labs/FLUX.1-dev"
 
9
 
10
  proveedor = "hf-inference"
11
 
12
- work_cost = 12
13
 
14
  quota = 300
 
6
  espacio = "black-forest-labs/FLUX.1-schnell"
7
  #espacio = "black-forest-labs/FLUX.1-dev"
8
  inferencia = "black-forest-labs/FLUX.1-dev"
9
+ inferencia_backup = "black-forest-labs/FLUX.1-schnell"
10
 
11
  proveedor = "hf-inference"
12
 
13
+ work_cost = 6
14
 
15
  quota = 300
herramientas.py CHANGED
@@ -47,7 +47,7 @@ def obtenUltimoTimestamp():
47
  print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.")
48
  return
49
 
50
- def nuevoDia():
51
  """
52
  Compara dos timestamps (en formato string ISO) y devuelve True si han
53
  pasado más de 24 horas entre ellos, False en caso contrario.
@@ -68,7 +68,7 @@ def obtenSegundosDisponibles():
68
 
69
  print("Estoy en obten segundos disponibles...")
70
 
71
- if nuevoDia() == True:
72
  renuevaSegundosDisponibles()
73
 
74
  archivo_ruta = "archivos/seconds_available.txt"
@@ -101,6 +101,7 @@ def renuevaSegundosDisponibles():
101
  archivo.write(str(quota_total))
102
  print(f"Se renovaron los {quota_total} segundos disponibles.")
103
  renuevaTimestampActual()
 
104
  except Exception as e:
105
  print(f"Error al escribir en el archivo '{archivo_ruta}': {e}")
106
 
@@ -138,4 +139,78 @@ def restaSegundosGPU(segundos):
138
  archivo.write(str(nuevos_segundos_disponibles))
139
  print(f"Se restaron {segundos} segundos. Ahora quedan {nuevos_segundos_disponibles} segundos disponibles.")
140
  except Exception as e:
141
- print(f"Error al escribir en el archivo '{archivo_ruta}': {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.")
48
  return
49
 
50
+ def esNuevoDia():
51
  """
52
  Compara dos timestamps (en formato string ISO) y devuelve True si han
53
  pasado más de 24 horas entre ellos, False en caso contrario.
 
68
 
69
  print("Estoy en obten segundos disponibles...")
70
 
71
+ if esNuevoDia() == True:
72
  renuevaSegundosDisponibles()
73
 
74
  archivo_ruta = "archivos/seconds_available.txt"
 
101
  archivo.write(str(quota_total))
102
  print(f"Se renovaron los {quota_total} segundos disponibles.")
103
  renuevaTimestampActual()
104
+ renuevaModeloPrincipal()
105
  except Exception as e:
106
  print(f"Error al escribir en el archivo '{archivo_ruta}': {e}")
107
 
 
139
  archivo.write(str(nuevos_segundos_disponibles))
140
  print(f"Se restaron {segundos} segundos. Ahora quedan {nuevos_segundos_disponibles} segundos disponibles.")
141
  except Exception as e:
142
+ print(f"Error al escribir en el archivo '{archivo_ruta}': {e}")
143
+
144
+
145
+ def modificaModeloActual(nuevo_modelo):
146
+ """
147
+ Actualiza el archivo archivos/modelo_actual.txt con el modelo funcional en caso de
148
+ problemas con el actual.
149
+ """
150
+
151
+ print("Estoy en actualiza modelo actual...")
152
+ archivo_ruta = "archivos/modelo_actual.txt"
153
+ modelo_actual = obtenModeloActual()
154
+
155
+
156
+ # Guardar el nuevo número en el archivo
157
+ try:
158
+ with open(archivo_ruta, 'w') as archivo:
159
+ archivo.write(nuevo_modelo)
160
+ print(f"Se actualizó el modelo actual: {modelo_actual} por {nuevo_modelo}.")
161
+ except Exception as e:
162
+ print(f"Error al escribir en el archivo '{archivo_ruta}': {e}")
163
+
164
+ def obtenModeloActual():
165
+ """
166
+ Obtiene el último timestamp de renovación guardado.
167
+ """
168
+
169
+ archivo_ruta = "archivos/modelo_actual.txt"
170
+
171
+ try:
172
+ with open(archivo_ruta, 'r') as archivo:
173
+ contenido = archivo.readline().strip()
174
+ modelo_actual = str(contenido)
175
+ return modelo_actual
176
+ except FileNotFoundError:
177
+ print(f"Error: El archivo '{archivo_ruta}' no fue encontrado.")
178
+ return
179
+ except ValueError:
180
+ print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.")
181
+ return
182
+
183
+ def obtenModeloPrincipal():
184
+ """
185
+ Obtiene el modelo principal (default).
186
+ """
187
+
188
+ archivo_ruta = "archivos/modelo_principal.txt"
189
+
190
+ try:
191
+ with open(archivo_ruta, 'r') as archivo:
192
+ contenido = archivo.readline().strip()
193
+ modelo_principal = str(contenido)
194
+ return modelo_principal
195
+ except FileNotFoundError:
196
+ print(f"Error: El archivo '{archivo_ruta}' no fue encontrado.")
197
+ return
198
+ except ValueError:
199
+ print(f"Error: El contenido del archivo '{archivo_ruta}' no es un número entero válido.")
200
+ return
201
+
202
+
203
+ def renuevaModeloPrincipal():
204
+
205
+ archivo_ruta = "archivos/modelo_actual.txt"
206
+ modelo_actual = obtenModeloActual()
207
+ modelo_principal = obtenModeloPrincipal()
208
+
209
+ # Guardar el nuevo número en el archivo
210
+ try:
211
+ with open(archivo_ruta, 'w') as archivo:
212
+ archivo.write(modelo_principal)
213
+ print(f"Se actualizó el modelo principal: {modelo_actual} por {modelo_principal}.")
214
+ except Exception as e:
215
+ print(f"Error al escribir en el archivo '{archivo_ruta}': {e}")
216
+