fclip / app.py
pediot's picture
first commit
88e0bae
from fastapi import FastAPI, HTTPException, status, Security
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from decouple import config
from src.encoder import FashionCLIPEncoder
from src.models import TextRequest, ImageRequest, Response
security = HTTPBearer()
encoder = FashionCLIPEncoder()
API_TOKEN = config("API_TOKEN")
app = FastAPI()
@app.get("/")
async def root():
return {
"status": "ok",
"message": "FashionCLIP API is running",
"endpoints": {
"encode_texts": "POST /encode_texts - Get embeddings for text inputs",
"encode_images": "POST /encode_images - Get embeddings for image inputs",
},
}
@app.post("/encode_texts")
async def encode_texts(
request: TextRequest, credentials: HTTPAuthorizationCredentials = Security(security)
) -> Response:
if credentials.credentials != API_TOKEN:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication token",
)
embeddings = encoder.encode_text(request.texts)
response = Response(embeddings=embeddings)
return response
@app.post("/encode_images")
async def encode_images(
request: ImageRequest,
credentials: HTTPAuthorizationCredentials = Security(security),
) -> Response:
if credentials.credentials != API_TOKEN:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication token",
)
images = request.download()
embeddings = encoder.encode_images(images)
response = Response(embeddings=embeddings)
return response