Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| 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 | |
| async def root(): | |
| return { | |
| "status": "ok", | |
| } | |
| async def encode_texts( | |
| request: TextRequest, | |
| token: str = Depends(verify_token), | |
| ) -> Response: | |
| embeddings = encoder.encode_text(request.texts) | |
| response = Response(embeddings=embeddings) | |
| return response | |
| 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() | |