File size: 1,500 Bytes
5c61354
 
 
475d366
 
b53ee19
5c61354
b53ee19
5c61354
 
 
 
 
 
 
 
475d366
 
 
5c61354
 
 
 
 
 
 
 
b53ee19
 
 
5c61354
 
 
475d366
b53ee19
5c61354
 
 
 
 
 
 
 
 
 
 
475d366
 
5c61354
 
 
 
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
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from app.routers import health, predict, train, ui, monitoring
from mlpipeline.exception import MLPipelineException
from app.utils.metrics import MetricsMiddleware
import uvicorn

app = FastAPI(
    title="AutoML MLOps API",
    description="AutoML pipeline API for heart disease prediction",
    version="1.0.0"
)

app.mount("/static", StaticFiles(directory="app/static"), name="static")
templates = Jinja2Templates(directory="app/templates")

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Add metrics middleware
app.middleware("http")(MetricsMiddleware())

app.include_router(health.router)
app.include_router(predict.router)
app.include_router(train.router)
app.include_router(ui.router)
app.include_router(monitoring.router)


@app.exception_handler(MLPipelineException)
async def mlpipeline_exception_handler(request: Request, exc: MLPipelineException):
    return JSONResponse(
        status_code=500,
        content={"error": str(exc)}
    )


@app.get("/")
async def root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})


if __name__ == "__main__":
    uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)