nowme-images / app.py
Moibe's picture
Firebaseless
e8b930e
raw
history blame
3.36 kB
import herramientas
from io import BytesIO
import funciones, globales
from fastapi import FastAPI, Form
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import StreamingResponse, FileResponse, JSONResponse
app = FastAPI()
# Nuevo endpoint para Health Check
@app.get("/health",
tags=["Health Check"],
description="Verifica el estado de salud de la API.",
summary="Health Check"
)
async def health_check():
"""
Este endpoint devuelve una respuesta 200 OK para indicar que la API está funcionando.
"""
return JSONResponse(content={"status": "ok"}, status_code=200)
@app.post("/echo-image/",
description="Test endpoint que recibe y regresa la misma imagen, para probar envío, recepción y problemas con api o red.",
summary="Summary"
)
async def echo_image(image: UploadFile = File(...)):
if not image.content_type.startswith("image/"):
return {"error": "El archivo no es una imagen"}
contents = await image.read()
return StreamingResponse(BytesIO(contents), media_type=image.content_type)
@app.post("/genera-imagen/")
async def genera_imagen(platillo: str = Form(...)):
#Obtengo los segundos disponibles de procesamiento para saber si tengo GPU disponible de la capa gratuita o me voy a método cobrado.
#Detenido momentaneamente ante el cambio de firebase.
#seconds_available = herramientas.obtenSegundosDisponibles()
seconds_available = 0
print(herramientas.imprimeTimeNow())
if seconds_available > globales.work_cost:
print("Usando GPU (capa gratuita)...")
resultado = funciones.genera_platillo_gpu(platillo)
if "Error" in resultado:
return resultado
else:
return FileResponse(resultado, media_type="image/png", filename="imagen.png")
else:
print("Usando Inference...")
resultado = funciones.genera_platillo_inference(platillo)
print("El resultado de inference es: ", resultado)
if type(resultado) is str:
return resultado
else:
return StreamingResponse(content=resultado, media_type="image/png")
@app.post("/procesador-lotes/")
async def procesa_lote(platillo: str = Form(...)):
print("Servicio Secundario de Procesamiento de Lotes")
#Se quita momentaneamente para migración de firebase.
#Obtengo los segundos disponibles de procesamiento para saber si tengo GPU disponible de la capa gratuita o me voy a método cobrado.
#seconds_available = herramientas.obtenSegundosDisponibles()
seconds_available = 0
print(herramientas.imprimeTimeNow())
if seconds_available > globales.work_cost:
print("Usando GPU (capa gratuita)...")
resultado = funciones.genera_platillo_gpu(platillo)
if "Error" in resultado:
return resultado
else:
return FileResponse(resultado, media_type="image/png", filename="imagen.png")
else:
print("Usando Inference...")
resultado = funciones.genera_platillo_inference(platillo)
print("El resultado de inference es: ", resultado)
if type(resultado) is str:
return resultado
else:
return StreamingResponse(content=resultado, media_type="image/png")