File size: 1,056 Bytes
f6627f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from pydantic import BaseModel, validator
from typing import List
from PIL.Image import Image

from .utils import download_image_as_pil


BATCH_SIZE_TEXT: int = 128
BATCH_SIZE_IMAGE: int = 64


class TextRequest(BaseModel):
    texts: List[str]

    @validator("texts")
    def validate_texts_batch_size(cls, v):
        if len(v) > BATCH_SIZE_TEXT:
            raise ValueError(f"Maximum batch size for texts is {BATCH_SIZE_TEXT}")
        if len(v) == 0:
            raise ValueError("At least one text is required")
        return v


class ImageRequest(BaseModel):
    urls: List[str]

    @validator("urls")
    def validate_images_batch_size(cls, v):
        if len(v) > BATCH_SIZE_IMAGE:
            raise ValueError(f"Maximum batch size for images is {BATCH_SIZE_IMAGE}")
        if len(v) == 0:
            raise ValueError("At least one image URL is required")
        return v

    def download(self) -> List[Image]:
        return [download_image_as_pil(url) for url in self.urls]


class Response(BaseModel):
    embeddings: List[List[float]]