import gc from fastapi import FastAPI, Depends from src.encoder import FashionCLIPEncoder from src.models import TextRequest, ImageRequest, Response from src.auth import verify_token from src.utils import delete_images encoder = FashionCLIPEncoder(normalize=True) app = FastAPI() app.state.req_count = 0 COLLECT_GC_EVERY = 20 @app.get("/") async def root(): return { "status": "ok", } @app.post("/encode_texts") async def encode_texts( request: TextRequest, token: str = Depends(verify_token), ) -> Response: embeddings = encoder.encode_text(request.texts) response = Response(embeddings=embeddings) return response @app.post("/encode_images") async def encode_images( request: ImageRequest, token: str = Depends(verify_token), ) -> Response: try: images = request.download() embeddings = encoder.encode_images(images) return Response(embeddings=embeddings) finally: success = delete_images(images) if not success: print("Failed to delete images") app.state.req_count += 1 if app.state.req_count % COLLECT_GC_EVERY == 0: gc.collect()