|
|
from fastapi import FastAPI, Request, Form
|
|
|
from fastapi.responses import HTMLResponse
|
|
|
from fastapi.templating import Jinja2Templates
|
|
|
from pydantic import BaseModel
|
|
|
from typing import List
|
|
|
import uvicorn
|
|
|
|
|
|
from pipeline.inference_pipeline import load_model, predict_batch
|
|
|
|
|
|
app = FastAPI()
|
|
|
templates = Jinja2Templates(directory="serving/templates")
|
|
|
model = load_model()
|
|
|
|
|
|
class TimeSeriesBatch(BaseModel):
|
|
|
data: List[List[float]]
|
|
|
|
|
|
@app.get("/", response_class=HTMLResponse)
|
|
|
async def form_get(request: Request):
|
|
|
return templates.TemplateResponse("index.html", {"request": request, "result": None})
|
|
|
|
|
|
@app.post("/", response_class=HTMLResponse)
|
|
|
async def form_post(request: Request, series: str = Form(...)):
|
|
|
try:
|
|
|
batch = eval(series)
|
|
|
result = predict_batch(batch, model)
|
|
|
return templates.TemplateResponse("index.html", {"request": request, "result": result})
|
|
|
except Exception as e:
|
|
|
return templates.TemplateResponse("index.html", {"request": request, "result": f"Error: {str(e)}"})
|
|
|
|
|
|
@app.post("/predict")
|
|
|
async def predict_api(input: TimeSeriesBatch):
|
|
|
return {"prediction": predict_batch(input.data, model)}
|
|
|
|