Moibe commited on
Commit
b453f44
·
1 Parent(s): ec1a890

Disponibilidad de Espacios se maneja desde Firebase

Browse files
Files changed (2) hide show
  1. cloudfunction.py +64 -0
  2. 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
- selected_space_config = random.choice(espacios.espacio)
22
 
23
- client = gradio_client.Client(selected_space_config['id'], hf_token=globales.llave)
 
 
 
24
 
25
- # kwargs = {
26
- # "prompt": prompt,
27
- # "api_name": "/infer"
28
- # }
 
29
 
30
- kwargs = selected_space_config['static_kwargs']
 
31
 
32
- result = client.predict(**kwargs,
 
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
- # api_name="/infer"
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