mdl-mlops / src /inference_api.py
lm-jim
Añadidos test de API REST
c5fba9a
Raw
History Blame Contribute Delete
1.35 kB
import io
from PIL import Image
from fastapi.responses import RedirectResponse
import torch
from pydantic import BaseModel, Field
from contextlib import asynccontextmanager
from fastapi import FastAPI, Response
from src import utils
class GenerateRequest(BaseModel):
number: int = Field(ge=0, le=9, description="El número a generar (0-9)")
@asynccontextmanager
async def lifespan(app: FastAPI):
print("\n\n\n====================\n\n. INICIO API REST \n")
app.state.model = utils.load_best_model()
yield # <- aquí la API queda disponible
# Empieza el teardown
print("\n\n\n====================\n\n. FIN API REST \n")
app = FastAPI(
title="Generador de Imágenes MNIST",
lifespan=lifespan,
swagger_ui_parameters={"defaultModelsExpandDepth": -1}
)
@app.post("/generateNumber", tags=["Generación"])
def generateNumber(body: GenerateRequest):
generated_tensor = app.state.model.generate_number(body.number)
img_array = (generated_tensor * 255).astype("uint8")
img = Image.fromarray(img_array).resize((280, 280))
buf = io.BytesIO()
img.save(buf, format="PNG")
byte_im = buf.getvalue()
return Response(content=byte_im, media_type="image/png")
@app.get("/", include_in_schema=False)
async def root():
return RedirectResponse(url="/docs")