from contextlib import asynccontextmanager
from typing import List
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from models import RequestModel, ResponseModel
from similarity import (
check_similarity, get_dashboard_data, get_machine_stats,
start_memory_stats_reporter, start_memory_trimmer,
)
_CACHE_MAX = 500
@asynccontextmanager
async def lifespan(app: FastAPI):
start_memory_stats_reporter()
start_memory_trimmer(interval_seconds=900)
yield
app = FastAPI(title="Prozis Similarity Service", version="1.0.0", lifespan=lifespan)
_PAGE = ("""
Prozis Similarity Service
Prozis Similarity Service
""").replace("__CACHE_MAX__", str(_CACHE_MAX))
@app.get("/stats", include_in_schema=False)
async def stats_endpoint():
data = get_dashboard_data()
data["machine"] = get_machine_stats()
return data
@app.get("/", include_in_schema=False)
async def root():
return HTMLResponse(content=_PAGE)
@app.post("/similarity", summary="Perform images similarity", response_model=List[ResponseModel], tags=["Similarities"])
async def similarity(images: List[RequestModel], quadrant: bool = True):
similarities = check_similarity(images, quadrant=quadrant)
return similarities