Spaces:
Sleeping
Sleeping
Disponibilidad de Espacios se maneja desde Firebase
Browse files- cloudfunction.py +64 -0
- funciones.py +17 -14
cloudfunction.py
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# main.py o donde definas tus funciones
|
2 |
+
|
3 |
+
import firebase_admin
|
4 |
+
from firebase_functions import pubsub_fn, options
|
5 |
+
from firebase_admin import firestore, exceptions # Import exceptions for better error handling
|
6 |
+
|
7 |
+
# Inicializa Firebase Admin si no lo has hecho ya en tu proyecto
|
8 |
+
# Esto generalmente se hace una vez en el punto de entrada de tus funciones (ej. en __init__.py o al inicio de tu main.py)
|
9 |
+
# Puedes usar un bloque try/except para evitar reinicializar si ya está inicializado.
|
10 |
+
# try:
|
11 |
+
# firebase_admin.get_app()
|
12 |
+
# except ValueError:
|
13 |
+
# firebase_admin.initialize_app()
|
14 |
+
|
15 |
+
# Obtén una referencia a la base de datos de Firestore con el nombre 'nowme'
|
16 |
+
# Asegúrate de que firebase_admin.initializeApp() se haya ejecutado antes de obtener esta referencia.
|
17 |
+
# firestore.client() obtiene el cliente para la app por defecto,
|
18 |
+
# y luego .instance('nowme') especifica la base de datos con nombre.
|
19 |
+
db = firestore.client().instance('nowme')
|
20 |
+
|
21 |
+
@pubsub_fn.on_message_published(
|
22 |
+
# Puedes dar un nombre lógico al trabajo programado (Cloud Scheduler job) si quieres
|
23 |
+
# topic="increment-segundos-job", # Este parámetro no es necesario para schedule, Firebase lo gestiona
|
24 |
+
schedule="every 24 hours at 16:00",
|
25 |
+
timezone="America/Mexico_City", # Establece la zona horaria a Ciudad de México
|
26 |
+
# Opcional: puedes añadir opciones de runtime aquí si lo necesitas
|
27 |
+
# memory=options.MemoryOption.GB_1, # Ejemplo: 1 GB de memoria
|
28 |
+
# timeout_sec=300, # Ejemplo: 5 minutos de timeout
|
29 |
+
)
|
30 |
+
def incrementar_segundos_python(event: pubsub_fn.CloudEvent) -> None:
|
31 |
+
"""
|
32 |
+
Cloud Function en Python activada por un programador
|
33 |
+
para incrementar el campo 'segundos' en un documento de Firestore.
|
34 |
+
"""
|
35 |
+
print(f"Function incrementar_segundos_python activada a las {event.time} por mensaje ID: {event.id}")
|
36 |
+
# Para este caso, no necesitamos los datos específicos del evento Pub/Sub
|
37 |
+
|
38 |
+
# Referencia al documento específico: colección 'nowme', documento 'sosa'
|
39 |
+
doc_ref = db.collection('nowme').document('sosa')
|
40 |
+
|
41 |
+
try:
|
42 |
+
# Usa update con FieldValue.increment para una actualización atómica segura
|
43 |
+
# Esto es especialmente bueno para valores numéricos que pueden ser
|
44 |
+
# modificados por múltiples fuentes al mismo tiempo.
|
45 |
+
doc_ref.update({
|
46 |
+
"segundos": firestore.FieldValue.increment(1500)
|
47 |
+
})
|
48 |
+
print("Campo 'segundos' actualizado con éxito (+1500) en el documento 'nowme/sosa'.")
|
49 |
+
|
50 |
+
except exceptions.NotFound:
|
51 |
+
print("Error: Documento nowme/sosa no encontrado. No se pudo actualizar.")
|
52 |
+
# Puedes decidir si quieres crear el documento si no existe,
|
53 |
+
# pero update() solo funciona si el documento ya existe.
|
54 |
+
# Si quieres crearlo si no existe, usarías set(..., merge=True).
|
55 |
+
# doc_ref.set({"segundos": 1500}, merge=True) # Ejemplo de cómo crear/actualizar
|
56 |
+
|
57 |
+
except Exception as e:
|
58 |
+
print(f"Error al actualizar el documento nowme/sosa: {e}")
|
59 |
+
# Puedes lanzar la excepción si quieres que Cloud Functions lo reporte como un fallo.
|
60 |
+
# raise e
|
61 |
+
pass # O simplemente pasar para que la Function no se marque como fallo en este caso
|
62 |
+
|
63 |
+
print("Fin de la ejecución de la Function.")
|
64 |
+
|
funciones.py
CHANGED
@@ -18,18 +18,24 @@ def genera_platillo_gpu(platillo):
|
|
18 |
|
19 |
try:
|
20 |
|
21 |
-
|
22 |
|
23 |
-
|
|
|
|
|
|
|
24 |
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
29 |
|
30 |
-
|
|
|
31 |
|
32 |
-
result = client.predict(
|
|
|
33 |
prompt=prompt,
|
34 |
#negative_prompt="live animals",
|
35 |
# seed=42,
|
@@ -38,11 +44,9 @@ def genera_platillo_gpu(platillo):
|
|
38 |
height=568,
|
39 |
# guidance_scale=3.5,
|
40 |
# num_inference_steps=28,
|
41 |
-
|
42 |
)
|
43 |
|
44 |
-
#print("Result inmediato es: ", result)
|
45 |
-
|
46 |
#Cuando es GPU, debe de restar segundos disponibles de HF
|
47 |
herramientas.restaSegundosGPU(globales.work_cost)
|
48 |
|
@@ -58,7 +62,6 @@ def genera_platillo_gpu(platillo):
|
|
58 |
detail=e
|
59 |
)
|
60 |
|
61 |
-
|
62 |
def genera_platillo_inference(platillo):
|
63 |
|
64 |
|
@@ -90,8 +93,8 @@ def genera_platillo_inference(platillo):
|
|
90 |
prompt,
|
91 |
#negative_prompt="live animals",
|
92 |
model=modelo,
|
93 |
-
width=786
|
94 |
-
height=568
|
95 |
num_inference_steps=16
|
96 |
)
|
97 |
|
|
|
18 |
|
19 |
try:
|
20 |
|
21 |
+
dict_espacios = conexion_firebase.obtenDato('nowme', servidor, 'espacios')
|
22 |
|
23 |
+
espacios_habilitados = [
|
24 |
+
nombre for nombre, config in dict_espacios.items()
|
25 |
+
if config.get("habilitado", False) # Usamos .get() para evitar KeyError si 'habilitado' no existe
|
26 |
+
]
|
27 |
|
28 |
+
print(f"Diccionarios habilitados: {espacios_habilitados}")
|
29 |
+
|
30 |
+
espacio_aleatorio_elegido = random.choice(espacios_habilitados)
|
31 |
+
configuracion_espacio = dict_espacios[espacio_aleatorio_elegido]
|
32 |
+
print(f"La configuración completa para '{espacio_aleatorio_elegido}' es: {configuracion_espacio}")
|
33 |
|
34 |
+
client = gradio_client.Client(configuracion_espacio['ruta'], hf_token=globales.llave)
|
35 |
+
#kwargs = selected_space_config['static_kwargs']
|
36 |
|
37 |
+
result = client.predict(
|
38 |
+
#**kwargs,
|
39 |
prompt=prompt,
|
40 |
#negative_prompt="live animals",
|
41 |
# seed=42,
|
|
|
44 |
height=568,
|
45 |
# guidance_scale=3.5,
|
46 |
# num_inference_steps=28,
|
47 |
+
api_name=configuracion_espacio['api_name']
|
48 |
)
|
49 |
|
|
|
|
|
50 |
#Cuando es GPU, debe de restar segundos disponibles de HF
|
51 |
herramientas.restaSegundosGPU(globales.work_cost)
|
52 |
|
|
|
62 |
detail=e
|
63 |
)
|
64 |
|
|
|
65 |
def genera_platillo_inference(platillo):
|
66 |
|
67 |
|
|
|
93 |
prompt,
|
94 |
#negative_prompt="live animals",
|
95 |
model=modelo,
|
96 |
+
width=784, #786
|
97 |
+
height=560, #568
|
98 |
num_inference_steps=16
|
99 |
)
|
100 |
|