File size: 2,932 Bytes
95da284
 
 
d90d6a6
5b38336
bddc6a2
5b38336
 
 
bddc6a2
 
 
 
 
 
 
 
 
 
 
 
95da284
5b3c963
95da284
 
5b38336
 
 
 
 
 
d90d6a6
 
 
afb0579
e8b930e
c0cf358
95da284
12cb4be
95da284
d90d6a6
4a900cc
 
 
 
d90d6a6
6f1f886
95da284
d90d6a6
4a900cc
 
2b6d34d
4a900cc
ac6309b
 
 
 
 
afb0579
 
 
ac6309b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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(...)):

    seconds_available = herramientas.obtenSegundosDisponibles()

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