|
|
""" |
|
|
FastAPI Main Application |
|
|
Neural Network Weight Quantizer API |
|
|
""" |
|
|
|
|
|
from fastapi import FastAPI |
|
|
from fastapi.middleware.cors import CORSMiddleware |
|
|
from fastapi.staticfiles import StaticFiles |
|
|
from fastapi.responses import FileResponse |
|
|
from pathlib import Path |
|
|
import os |
|
|
|
|
|
from .routes import quantization, models, analysis, system |
|
|
|
|
|
|
|
|
app = FastAPI( |
|
|
title="Neural Network Quantizer API", |
|
|
description="API for quantizing neural network weights to lower precision formats", |
|
|
version="1.0.0", |
|
|
docs_url="/api/docs", |
|
|
openapi_url="/api/openapi.json" |
|
|
) |
|
|
|
|
|
|
|
|
app.add_middleware( |
|
|
CORSMiddleware, |
|
|
allow_origins=["*"], |
|
|
allow_credentials=True, |
|
|
allow_methods=["*"], |
|
|
allow_headers=["*"], |
|
|
) |
|
|
|
|
|
|
|
|
app.include_router(system.router, prefix="/api/system", tags=["System"]) |
|
|
app.include_router(models.router, prefix="/api/models", tags=["Models"]) |
|
|
app.include_router(quantization.router, prefix="/api/quantize", tags=["Quantization"]) |
|
|
app.include_router(analysis.router, prefix="/api/analysis", tags=["Analysis"]) |
|
|
|
|
|
|
|
|
@app.get("/api/health") |
|
|
async def health_check(): |
|
|
return {"status": "healthy", "service": "quantizer-api"} |
|
|
|
|
|
|
|
|
FRONTEND_DIR = Path(__file__).parent.parent.parent / "frontend" / "dist" |
|
|
|
|
|
if FRONTEND_DIR.exists(): |
|
|
app.mount("/assets", StaticFiles(directory=FRONTEND_DIR / "assets"), name="assets") |
|
|
|
|
|
@app.get("/{full_path:path}") |
|
|
async def serve_frontend(full_path: str): |
|
|
|
|
|
file_path = FRONTEND_DIR / full_path |
|
|
if file_path.exists() and file_path.is_file(): |
|
|
return FileResponse(file_path) |
|
|
return FileResponse(FRONTEND_DIR / "index.html") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
import uvicorn |
|
|
uvicorn.run(app, host="0.0.0.0", port=8000) |
|
|
|