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

Alertas
""").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