From fd5e3e18f4ac948a047cd6d3eb7df3444611c36f Mon Sep 17 00:00:00 2001 From: movchan74 Date: Thu, 2 Nov 2023 14:37:29 +0000 Subject: [PATCH 01/10] Added BLIP2, ImageInput model, Image object and BatchProcessor --- .vscode/settings.json | 7 +- aana/api/api_generation.py | 4 +- aana/configs/deployments.py | 14 + aana/configs/endpoints.py | 8 + aana/configs/pipeline.py | 47 ++- aana/deployments/hf_blip2_deployment.py | 146 ++++++++ aana/exceptions/general.py | 55 ++- aana/models/core/dtype.py | 49 +++ aana/models/core/image.py | 387 +++++++++++++++++++++ aana/models/pydantic/base.py | 27 ++ aana/models/pydantic/exception_response.py | 4 +- aana/models/pydantic/image_input.py | 170 +++++++++ aana/tests/test_batch_processor.py | 103 ++++++ aana/utils/batch_processor.py | 146 ++++++++ aana/utils/general.py | 24 ++ pyproject.toml | 2 + 16 files changed, 1185 insertions(+), 8 deletions(-) create mode 100644 aana/deployments/hf_blip2_deployment.py create mode 100644 aana/models/core/dtype.py create mode 100644 aana/models/core/image.py create mode 100644 aana/models/pydantic/base.py create mode 100644 aana/models/pydantic/image_input.py create mode 100644 aana/tests/test_batch_processor.py create mode 100644 aana/utils/batch_processor.py diff --git a/.vscode/settings.json b/.vscode/settings.json index d99f2f30..c603b8d2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,10 @@ "[python]": { "editor.defaultFormatter": "ms-python.black-formatter" }, - "python.formatting.provider": "none" + "python.formatting.provider": "none", + "python.testing.pytestArgs": [ + "aana" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true } \ No newline at end of file diff --git a/aana/api/api_generation.py b/aana/api/api_generation.py index 2744a7f1..cc154487 100644 --- a/aana/api/api_generation.py +++ b/aana/api/api_generation.py @@ -257,8 +257,8 @@ async def route_func_body(body: str, files: Optional[List[UploadFile]] = None): field_value = getattr(data, field_name) # check if it has a method convert_to_entities # if it does, call it to convert the model to an entity - if hasattr(field_value, "convert_to_entity"): - field_value = field_value.convert_to_entity() + if hasattr(field_value, "convert_input_to_object"): + field_value = field_value.convert_input_to_object() data_dict[field_name] = field_value if self.output_filter: diff --git a/aana/configs/deployments.py b/aana/configs/deployments.py index 7c66724e..45f32f0e 100644 --- a/aana/configs/deployments.py +++ b/aana/configs/deployments.py @@ -1,6 +1,9 @@ +from aana.deployments.hf_blip2_deployment import HFBlip2Config, HFBlip2Deployment from aana.deployments.vllm_deployment import VLLMConfig, VLLMDeployment +from aana.models.core.dtype import Dtype from aana.models.pydantic.sampling_params import SamplingParams + deployments = { "vllm_deployment_llama2_7b_chat": VLLMDeployment.options( num_replicas=1, @@ -31,4 +34,15 @@ ), ).dict(), ), + "hf_blip2_deployment_opt_2_7b": HFBlip2Deployment.options( + num_replicas=1, + max_concurrent_queries=1000, + ray_actor_options={"num_gpus": 0.5}, + user_config=HFBlip2Config( + model="Salesforce/blip2-opt-2.7b", + dtype=Dtype.FLOAT16, + batch_size=2, + num_processing_threads=2, + ).dict(), + ), } diff --git a/aana/configs/endpoints.py b/aana/configs/endpoints.py index 147544ec..16577728 100644 --- a/aana/configs/endpoints.py +++ b/aana/configs/endpoints.py @@ -18,4 +18,12 @@ outputs=["vllm_zephyr_7b_beta_output"], ) ], + "blip2": [ + Endpoint( + name="blip2_generate", + path="/blip2/generate_captions", + summary="Generate captions using BLIP2 OPT-2.7B", + outputs=["captions_hf_blip2_opt_2_7b"], + ) + ], } diff --git a/aana/configs/pipeline.py b/aana/configs/pipeline.py index 57bc31ae..a8e39454 100644 --- a/aana/configs/pipeline.py +++ b/aana/configs/pipeline.py @@ -3,6 +3,7 @@ It is used to generate the pipeline and the API endpoints. """ +from aana.models.pydantic.image_input import ImageListInput from aana.models.pydantic.prompt import Prompt from aana.models.pydantic.sampling_params import SamplingParams @@ -15,6 +16,16 @@ # vllm_llama2_7b_chat_output: str # vllm_zephyr_7b_beta_output_stream: str # vllm_zephyr_7b_beta_output: str +# image_batch: ImageBatch +# +# class ImageBatch: +# images: list[Image] +# +# class Image: +# image: ImageInput +# caption_hf_blip2_opt_2_7b: str + +# pipeline configuration nodes = [ @@ -83,7 +94,7 @@ } ], }, - { + { "name": "vllm_stream_zephyr_7b_beta", "type": "ray_deployment", "deployment_name": "vllm_deployment_zephyr_7b_beta", @@ -127,4 +138,38 @@ } ], }, + { + "name": "images", + "type": "input", + "inputs": [], + "outputs": [ + { + "name": "images", + "key": "images", + "path": "image_batch.images.[*].image", + "data_model": ImageListInput, + } + ], + }, + { + "name": "hf_blip2_opt_2_7b", + "type": "ray_deployment", + "deployment_name": "hf_blip2_deployment_opt_2_7b", + "method": "generate_captions", + "inputs": [ + { + "name": "images", + "key": "images", + "path": "image_batch.images.[*].image", + "data_model": ImageListInput, + } + ], + "outputs": [ + { + "name": "captions_hf_blip2_opt_2_7b", + "key": "captions", + "path": "image_batch.images.[*].caption_hf_blip2_opt_2_7b", + } + ], + }, ] diff --git a/aana/deployments/hf_blip2_deployment.py b/aana/deployments/hf_blip2_deployment.py new file mode 100644 index 00000000..667553b7 --- /dev/null +++ b/aana/deployments/hf_blip2_deployment.py @@ -0,0 +1,146 @@ +from typing import Any, Dict, List +from pydantic import BaseModel, Field, validator +from ray import serve +import torch +from transformers import Blip2Processor, Blip2ForConditionalGeneration +from aana.deployments.base_deployment import BaseDeployment + +from aana.exceptions.general import InferenceException +from aana.models.core.dtype import Dtype +from aana.models.core.image import Image +from aana.utils.batch_processor import BatchProcessor + + +class HFBlip2Config(BaseModel): + """ + The configuration for the BLIP2 deployment with HuggingFace models. + + Attributes: + model (str): the model ID on HuggingFace + dtype (str): the data type (optional, default: "auto"), one of "auto", "float32", "float16" + batch_size (int): the batch size (optional, default: 1) + num_processing_threads (int): the number of processing threads (optional, default: 1) + """ + + model: str + dtype: Dtype = Field(default=Dtype.AUTO) + batch_size: int = Field(default=1) + num_processing_threads: int = Field(default=1) + + @validator("dtype", pre=True, always=True) + def validate_dtype(cls, value: Dtype) -> Dtype: + """ + Validate the data type. For BLIP2 only "float32" and "float16" are supported. + + Args: + value (Dtype): the data type + + Returns: + Dtype: the validated data type + + Raises: + ValueError: if the data type is not supported + """ + if value not in {Dtype.AUTO, Dtype.FLOAT32, Dtype.FLOAT16}: + raise ValueError( + f"Invalid dtype: {value}. BLIP2 only supports 'auto', 'float32', and 'float16'." + ) + return value + + +@serve.deployment +class HFBlip2Deployment(BaseDeployment): + """ + Deployment to serve BLIP2 models using HuggingFace. + """ + + async def apply_config(self, config: Dict[str, Any]): + """ + Apply the configuration. + + The method is called when the deployment is created or updated. + + It loads the model and processor from HuggingFace. + + The configuration should conform to the HFBlip2Config schema. + """ + + config_obj = HFBlip2Config(**config) + + # Create the batch processor to split the requests into batches + # and process them in parallel + self.batch_size = config_obj.batch_size + self.num_processing_threads = config_obj.num_processing_threads + # The actual inference is done in _generate_captions() + # We use lambda because BatchProcessor expects dict as input + # and we use **kwargs to unpack the dict into named arguments for _generate_captions() + self.batch_processor = BatchProcessor( + process_batch=lambda request: self._generate_captions(**request), + batch_size=self.batch_size, + num_threads=self.num_processing_threads, + ) + + # Load the model and processor for BLIP2 from HuggingFace + self.model_id = config_obj.model + self.dtype = config_obj.dtype + self.torch_dtype = Dtype.to_torch(self.dtype) + self.model = Blip2ForConditionalGeneration.from_pretrained( + self.model_id, torch_dtype=self.torch_dtype + ) + self.processor = Blip2Processor.from_pretrained(self.model_id) + + self.device = "cuda" if torch.cuda.is_available() else "cpu" + self.model.to(self.device) + + async def generate_captions(self, **kwargs) -> Dict[str, Any]: + """ + Generate captions for the given images. + + Args: + images (List[ImageInput]): the images + + Returns: + Dict[str, Any]: the dictionary with one key "captions" + and the list of captions for the images as value + + Raises: + InferenceException: if the inference fails + """ + # Call the batch processor to process the requests + # The actual inference is done in _generate_captions() + return await self.batch_processor.process(kwargs) + + def _generate_captions(self, images: List[Image]) -> Dict[str, Any]: + """ + Generate captions for the given images. + + This method is called by the batch processor. + + Args: + images (List[ImageInput]): the images + + Returns: + Dict[str, Any]: the dictionary with one key "captions" + and the list of captions for the images as value + + Raises: + InferenceException: if the inference fails + """ + numpy_images = [] + for image in images: + numpy_images.append(image.get_numpy()) # loading images + inputs = self.processor(numpy_images, return_tensors="pt").to( + self.device, self.torch_dtype + ) + + try: + generated_ids = self.model.generate(**inputs) + generated_texts = self.processor.batch_decode( + generated_ids, skip_special_tokens=True + ) + generated_texts = [ + generated_text.strip() for generated_text in generated_texts + ] + return {"captions": generated_texts} + except Exception as e: + raise InferenceException(self.model_id) from e diff --git a/aana/exceptions/general.py b/aana/exceptions/general.py index ba0e4a3a..5a51aea8 100644 --- a/aana/exceptions/general.py +++ b/aana/exceptions/general.py @@ -1,5 +1,9 @@ -from typing import Any, Dict +from typing import Any, Dict, Type from mobius_pipeline.exceptions import BaseException +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from aana.models.core.image import Image class InferenceException(BaseException): @@ -43,8 +47,55 @@ def __init__(self, input_name: str): Args: input_name (str): name of the input that caused the exception """ - self.input_name = input_name super().__init__() + self.input_name = input_name + self.extra["input_name"] = input_name def __reduce__(self): return (self.__class__, (self.input_name,)) + + +class ImageReadingException(BaseException): + """ + Exception raised when there is an error reading an image. + + Attributes: + image (Image): the image that caused the exception + """ + + def __init__(self, image: "Image"): + """ + Initialize the exception. + + Args: + image (Image): the image that caused the exception + """ + super().__init__() + self.image = image + self.extra["image"] = image + + def __reduce__(self): + return (self.__class__, (self.image,)) + + +class DownloadException(BaseException): + """ + Exception raised when there is an error downloading a file. + + Attributes: + url (str): the URL of the file that caused the exception + """ + + def __init__(self, url: str): + """ + Initialize the exception. + + Args: + url (str): the URL of the file that caused the exception + """ + super().__init__() + self.url = url + self.extra["url"] = url + + def __reduce__(self): + return (self.__class__, (self.url,)) diff --git a/aana/models/core/dtype.py b/aana/models/core/dtype.py new file mode 100644 index 00000000..9e044279 --- /dev/null +++ b/aana/models/core/dtype.py @@ -0,0 +1,49 @@ +from enum import Enum +from typing import Union + +import torch + + +class Dtype(str, Enum): + """ + Data types. + + Possible values are "auto", "float32", "float16", and "int8". + + Attributes: + AUTO (str): auto + FLOAT32 (str): float32 + FLOAT16 (str): float16 + INT8 (str): int8 + """ + + AUTO = "auto" + FLOAT32 = "float32" + FLOAT16 = "float16" + INT8 = "int8" + + @classmethod + def to_torch(cls, dtype: "Dtype") -> Union[torch.dtype, str]: + """ + Convert a dtype to a torch dtype. + + Args: + dtype (Dtype): the dtype + + Returns: + Union[torch.dtype, str]: the torch dtype or "auto" + + Raises: + ValueError: if the dtype is unknown + """ + + if dtype == cls.AUTO: + return "auto" + elif dtype == cls.FLOAT32: + return torch.float32 + elif dtype == cls.FLOAT16: + return torch.float16 + elif dtype == cls.INT8: + return torch.int8 + else: + raise ValueError(f"Unknown dtype: {dtype}") diff --git a/aana/models/core/image.py b/aana/models/core/image.py new file mode 100644 index 00000000..2b8b3e14 --- /dev/null +++ b/aana/models/core/image.py @@ -0,0 +1,387 @@ +from dataclasses import dataclass, field +import hashlib +import os +from pathlib import Path +from typing import Optional, Type +import uuid +import cv2 + +import numpy as np + +from aana.exceptions.general import ImageReadingException +from aana.utils.general import download_file + + +TMP_DATA_DIR = Path("/tmp/aana/data") + + +class AbstractImageLibrary: + """ + Abstract class for image libraries. + """ + + @classmethod + def read_file(cls, path: Path) -> np.ndarray: + """ + Read a file using the image library. + + Args: + path (Path): The path of the file to read. + + Returns: + np.ndarray: The file as a numpy array. + """ + raise NotImplementedError + + @classmethod + def read_bytes(cls, content: bytes) -> np.ndarray: + """ + Read bytes using the image library. + + Args: + content (bytes): The content of the file to read. + + Returns: + np.ndarray: The file as a numpy array. + """ + raise NotImplementedError + + @classmethod + def write_file(cls, path: Path, img: np.ndarray): + """ + Write a file using the image library. + + Args: + path (Path): The path of the file to write. + img (np.ndarray): The image to write. + """ + raise NotImplementedError + + +class OpenCVWrapper(AbstractImageLibrary): + """ + Wrapper class for OpenCV functions. + """ + + @classmethod + def read_file(cls, path: Path) -> np.ndarray: + """ + Read a file using OpenCV. + + Args: + path (Path): The path of the file to read. + + Returns: + np.ndarray: The file as a numpy array in RGB format. + """ + img = cv2.imread(str(path)) + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + return img + + @classmethod + def read_bytes(cls, content: bytes) -> np.ndarray: + """ + Read bytes using OpenCV. + + Args: + content (bytes): The content of the file to read. + + Returns: + np.ndarray: The file as a numpy array in RGB format. + """ + img = cv2.imdecode(np.frombuffer(content, np.uint8), cv2.IMREAD_COLOR) + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + return img + + @classmethod + def write_file(cls, path: Path, img: np.ndarray): + """ + Write a file using OpenCV. + + Args: + path (Path): The path of the file to write. + img (np.ndarray): The image to write. + """ + img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) + cv2.imwrite(str(path), img) + + +@dataclass +class Image: + path: Optional[Path] = None # The file path of the image. + url: Optional[str] = None # The URL of the image. + content: Optional[ + bytes + ] = None # The content of the image in bytes (image file as bytes). + numpy: Optional[np.ndarray] = None # The image as a numpy array. + image_id: Optional[str] = field( + default_factory=lambda: str(uuid.uuid4()) + ) # The ID of the image, generated automatically + save_on_disc: bool = True # Whether to save the image on disc or not + image_lib: Type[ + AbstractImageLibrary + ] = OpenCVWrapper # The image library to use, TODO: add support for PIL and allow to choose the library + saved: bool = False # Whether the image is saved on disc by the class or not (used for cleanup) + + def __post_init__(self): + """ + Save the image on disc after initialization if save_on_disc is True. + """ + if self.save_image: + self.save_image() + + def save_image(self): + """ + Save the image on disc. + If the image is already available on disc, do nothing. + If the image represented as a byte string, save it on disc. + If the image is represented as a URL, download it and save it on disc. + If the image is represented as a numpy array, convert it to BMP and save it on disc. + + First check if the image is already available on disc, then content, then url, then numpy + to avoid unnecessary operations (e.g. downloading the image or converting it to BMP). + + Raises: + ValueError: If none of 'path', 'url', 'content' or 'numpy' is provided. + """ + if self.path: + return + + file_dir = TMP_DATA_DIR / "images" + file_dir.mkdir(parents=True, exist_ok=True) + file_path = file_dir / (self.image_id + ".bmp") + + if self.content: + self.save_from_content(file_path) + elif self.numpy is not None: + self.save_from_numpy(file_path) + elif self.url: + self.save_from_url(file_path) + else: + raise ValueError( + "At least one of 'path', 'url', 'content' or 'numpy' must be provided." + ) + self.path = file_path + self.saved = True + + def save_from_content(self, file_path: Path): + """ + Save the image from content on disc. + + Args: + file_path (Path): The path of the file to write. + """ + self.image_lib.write_file(file_path, self.load_numpy_from_content()) + + def save_from_numpy(self, file_path: Path): + """ + Save the image from numpy on disc. + + Args: + file_path (Path): The path of the file to write. + """ + assert self.numpy is not None + self.image_lib.write_file(file_path, self.numpy) + + def save_from_url(self, file_path: Path): + """ + Save the image from URL on disc. + + Args: + file_path (Path): The path of the file to write. + """ + self.image_lib.write_file(file_path, self.load_numpy_from_url()) + + def get_numpy(self) -> np.ndarray: + """ + Load the image as a numpy array. + + Returns: + np.ndarray: The image as a numpy array. + + Raises: + ValueError: If none of 'path', 'url', 'content' or 'numpy' is provided. + ImageReadingException: If there is an error reading the image. + """ + if self.numpy is not None: + return self.numpy + elif self.path: + self.numpy = self.load_numpy_from_path() + elif self.url: + self.numpy = self.load_numpy_from_url() + elif self.content: + self.numpy = self.load_numpy_from_content() + else: + raise ValueError( + "At least one of 'path', 'url', 'content' or 'numpy' must be provided." + ) + return self.numpy + + def load_numpy_from_path(self) -> np.ndarray: + """ + Load the image as a numpy array from a path. + + Returns: + np.ndarray: The image as a numpy array. + + Raises: + ImageReadingException: If there is an error reading the image. + """ + assert self.path is not None + try: + numpy = self.image_lib.read_file(self.path) + except Exception as e: + raise ImageReadingException(self) from e + return numpy + + def load_numpy_from_image_bytes(self, img_bytes: bytes) -> np.ndarray: + """ + Load the image as a numpy array from image bytes (downloaded from URL or read from file). + + Returns: + np.ndarray: The image as a numpy array. + + Raises: + ImageReadingException: If there is an error reading the image. + """ + try: + numpy = self.image_lib.read_bytes(img_bytes) + except Exception as e: + raise ImageReadingException(self) from e + return numpy + + def load_numpy_from_url(self) -> np.ndarray: + """ + Load the image as a numpy array from a URL. + + Returns: + np.ndarray: The image as a numpy array. + + Raises: + ImageReadingException: If there is an error reading the image. + """ + assert self.url is not None + content: bytes = download_file(self.url) + return self.load_numpy_from_image_bytes(content) + + def load_numpy_from_content(self) -> np.ndarray: + """ + Load the image as a numpy array from content. + + Returns: + np.ndarray: The image as a numpy array. + + Raises: + ImageReadingException: If there is an error reading the image. + """ + assert self.content is not None + return self.load_numpy_from_image_bytes(self.content) + + def get_content(self) -> bytes: + """ + Get the content of the image as bytes. + + Returns: + bytes: The content of the image as bytes. + + Raises: + ValueError: If none of 'path', 'url', 'content' or 'numpy' is provided. + """ + if self.content: + return self.content + elif self.path: + self.content = self.load_content_from_path() + elif self.url: + self.content = self.load_content_from_url() + elif self.numpy is not None: + self.content = self.load_content_from_numpy() + else: + raise ValueError( + "At least one of 'path', 'url', 'content' or 'numpy' must be provided." + ) + return self.content + + def load_content_from_numpy(self) -> bytes: + """ + Load the content of the image from numpy. + + Note: This method is not implemented yet. + + Returns: + bytes: The content of the image as bytes. + """ + raise NotImplementedError + + def load_content_from_path(self) -> bytes: + """ + Load the content of the image from the path. + + Returns: + bytes: The content of the image as bytes. + + Raises: + FileNotFoundError: If the image file does not exist. + """ + assert self.path is not None + with open(self.path, "rb") as f: + content = f.read() + return content + + def load_content_from_url(self) -> bytes: + """ + Load the content of the image from the URL using requests. + + Returns: + bytes: The content of the image as bytes. + + Raises: + DownloadException: If there is an error downloading the image. + """ + assert self.url is not None + content = download_file(self.url) + return content + + def __repr__(self) -> str: + """ + Get the representation of the image. + + Use md5 hash for the content of the image if it is available. + + For numpy array, use the shape of the array with the md5 hash of the array if it is available. + + Returns: + str: The representation of the image. + """ + content_hash = hashlib.md5(self.content).hexdigest() if self.content else None + if self.numpy is not None: + assert self.numpy is not None + numpy_hash = hashlib.md5(self.numpy.tobytes()).hexdigest() + numpy_repr = f"ndarray(shape={self.numpy.shape}, dtype={self.numpy.dtype}, md5={numpy_hash})" + else: + numpy_repr = None + return ( + f"Image(path={self.path}, " + f"url={self.url}, " + f"content={content_hash}, " + f"numpy={numpy_repr}, " + f"image_id={self.image_id})" + ) + + def __str__(self) -> str: + """ + Get the string representation of the image. + + Returns: + str: The string representation of the image. + """ + return self.__repr__() + + def cleanup(self): + """ + Cleanup the image. + + Remove the image from disc if it was saved by the class. + """ + # Remove the image from disc if it was saved by the class + if self.saved and self.path and os.path.exists(self.path): + os.remove(self.path) diff --git a/aana/models/pydantic/base.py b/aana/models/pydantic/base.py new file mode 100644 index 00000000..f2d79910 --- /dev/null +++ b/aana/models/pydantic/base.py @@ -0,0 +1,27 @@ +from pydantic import BaseModel + + +class BaseListModel(BaseModel): + """ + The base model for pydantic models with list as root. + + It makes pydantic models with list as root behave like normal lists. + """ + + def __iter__(self): + return iter(self.__root__) + + def __len__(self): + return len(self.__root__) + + def __getitem__(self, index): + return self.__root__[index] + + def __setitem__(self, index, value): + self.__root__[index] = value + + def __delitem__(self, index): + del self.__root__[index] + + def __contains__(self, item): + return item in self.__root__ diff --git a/aana/models/pydantic/exception_response.py b/aana/models/pydantic/exception_response.py index dadcacd6..6bb9f635 100644 --- a/aana/models/pydantic/exception_response.py +++ b/aana/models/pydantic/exception_response.py @@ -1,4 +1,4 @@ -from typing import Dict, Optional +from typing import Any, Optional from pydantic import BaseModel, Extra @@ -15,7 +15,7 @@ class ExceptionResponseModel(BaseModel): error: str message: str - data: Optional[Dict] = None + data: Optional[Any] = None stacktrace: Optional[str] = None class Config: diff --git a/aana/models/pydantic/image_input.py b/aana/models/pydantic/image_input.py new file mode 100644 index 00000000..bab3e35c --- /dev/null +++ b/aana/models/pydantic/image_input.py @@ -0,0 +1,170 @@ +import io +from pathlib import Path +import numpy as np +from typing import List, Optional +from pydantic import BaseModel, Field, ValidationError, root_validator +from pydantic.error_wrappers import ErrorWrapper + +from aana.models.core.image import Image +from aana.models.pydantic.base import BaseListModel + + +class ImageInput(BaseModel): + """ + An image input. + + Exactly one of 'path', 'url', or 'content' must be provided. + + If 'content' or 'numpy' is set to 'file', + the image will be loaded from the files uploaded to the endpoint. + + + Attributes: + path (str): the file path of the image + url (str): the URL of the image + content (bytes): the content of the image in bytes + numpy (bytes): the image as a numpy array + """ + + path: Optional[str] = Field(None, description="The file path of the image.") + url: Optional[str] = Field(None, description="The URL of the image.") + content: Optional[bytes] = Field( + None, + description=( + "The content of the image in bytes. " + "Set this field to 'file' to upload files to the endpoint." + ), + ) + numpy: Optional[bytes] = Field( + None, + description=( + "The image as a numpy array. " + "Set this field to 'file' to upload files to the endpoint." + ), + ) + + def set_files(self, files): + """ + If 'content' or 'numpy' is set to 'file', + the image will be loaded from the files uploaded to the endpoint. + + set_files() should be called after the files are uploaded to the endpoint. + """ + + if files: + if isinstance(files, list): + files = files[0] + if self.content == b"file": + self.content = files + elif self.numpy == b"file": + self.numpy = files + else: + raise ValueError( + "The content or numpy of the image must be 'file' to set files." + ) + + @root_validator + def check_only_one_field(cls, values): + """ + Check that exactly one of 'path', 'url', 'content' or 'numpy' is provided. + """ + count = sum( + value is not None + for key, value in values.items() + if key in ["path", "url", "content", "numpy"] + ) + if count != 1: + raise ValueError( + "Exactly one of 'path', 'url', 'content' or 'numpy' must be provided." + ) + return values + + def convert_input_to_object(self) -> Image: + """ + Convert the image input to an image object. + + Returns: + Image: the image object corresponding to the image input + + Raises: + ValueError: if the numpy file isn't set + """ + if self.numpy and self.numpy != b"file": + numpy = np.load(io.BytesIO(self.numpy), allow_pickle=False) + elif self.numpy == b"file": + raise ValueError("The numpy file isn't set. Call set_files() to set it.") + else: + numpy = None + + return Image( + path=Path(self.path) if self.path else None, + url=self.url, + content=self.content, + numpy=numpy, + ) + + class Config: + schema_extra = { + "description": ( + "An image. \n" + "Exactly one of 'path', 'url', or 'content' must be provided. \n" + "If 'path' is provided, the image will be loaded from the path. \n" + "If 'url' is provided, the image will be downloaded from the url. \n" + "The 'content' will be loaded automatically " + "if files are uploaded to the endpoint (should be set to 'file' for that)." + ) + } + validate_assignment = True + file_upload = True + file_upload_description = "Upload image file." + + +class ImageListInput(BaseListModel): + """ + A pydantic model for a list of images to be used as input. + + Only used for the requests, DO NOT use it for anything else. + Convert it to a list of image objects with convert_input_to_object(). + """ + + __root__: List[ImageInput] + + def set_files(self, files): + """ + Set the files for the images. + + Args: + files (List[bytes]): the files uploaded to the endpoint + + Raises: + ValidationError: if the number of images and files aren't the same + """ + + if len(self.__root__) != len(files): + error = ErrorWrapper( + ValueError("The number of images and files must be the same."), + loc=("images",), + ) + raise ValidationError([error], self.__class__) + for image, file in zip(self.__root__, files): + image.set_files(file) + + def convert_input_to_object(self): + """ + Convert the list of image inputs to a list of image objects. + """ + return [image.convert_input_to_object() for image in self.__root__] + + class Config: + schema_extra = { + "description": ( + "A list of images. \n" + "Exactly one of 'path', 'url', or 'content' must be provided for each image. \n" + "If 'path' is provided, the image will be loaded from the path. \n" + "If 'url' is provided, the image will be downloaded from the url. \n" + "The 'content' will be loaded automatically " + "if files are uploaded to the endpoint (should be set to 'file' for that)." + ) + } + file_upload = True + file_upload_description = "Upload image files." diff --git a/aana/tests/test_batch_processor.py b/aana/tests/test_batch_processor.py new file mode 100644 index 00000000..d6a888be --- /dev/null +++ b/aana/tests/test_batch_processor.py @@ -0,0 +1,103 @@ +import pytest +import numpy as np + +from aana.utils.batch_processor import BatchProcessor + + +@pytest.fixture +def images(): + return np.array([np.random.rand(100, 100) for _ in range(5)]) # 5 images + + +@pytest.fixture +def texts(): + return ["text1", "text2", "text3", "text4", "text5"] + + +@pytest.fixture +def features(): + return np.random.rand(5, 10) # 5 features of size 10 + + +@pytest.fixture +def request_batch(images, texts, features): + return {"images": images, "texts": texts, "features": features} + + +@pytest.fixture +def process_batch(): + # Dummy processing function that just returns the batch + return lambda batch: batch + + +def test_batch_iterator(request_batch, process_batch): + """ + Test batch iterator. + """ + batch_size = 2 + processor = BatchProcessor( + process_batch=process_batch, batch_size=batch_size, num_threads=2 + ) + + batches = list(processor.batch_iterator(request_batch)) + assert len(batches) == 3 # We expect 3 batches with a batch_size of 2 for 5 items + assert all( + len(batch["texts"]) == batch_size for batch in batches[:-1] + ) # All but the last should have batch_size items + assert len(batches[-1]["texts"]) == 1 # Last batch should have the remaining item + + +@pytest.mark.asyncio +async def test_process_batches(request_batch, process_batch): + """ + Test processing of batches. + """ + batch_size = 2 + processor = BatchProcessor( + process_batch=process_batch, batch_size=batch_size, num_threads=2 + ) + + result = await processor.process(request_batch) + # Ensure all texts are processed + assert len(result["texts"]) == 5 + # Check if images are concatenated properly + assert result["images"].shape == (5, 100, 100) + # Check if features are concatenated properly + assert result["features"].shape == (5, 10) + + +def test_merge_outputs(request_batch, process_batch): + """ + Test merging of outputs from multiple batches. + + images and features should be concatenated into numpy arrays because they are numpy arrays. + texts should be concatenated because they are lists. + """ + batch_size = 2 + processor = BatchProcessor( + process_batch=process_batch, batch_size=batch_size, num_threads=2 + ) + + # Assume the processor has already batched and processed the data + processed_batches = [ + { + "images": request_batch["images"][:2], + "texts": request_batch["texts"][:2], + "features": request_batch["features"][:2], + }, + { + "images": request_batch["images"][2:4], + "texts": request_batch["texts"][2:4], + "features": request_batch["features"][2:4], + }, + { + "images": request_batch["images"][4:], + "texts": request_batch["texts"][4:], + "features": request_batch["features"][4:], + }, + ] + + merged_output = processor.merge_outputs(processed_batches) + assert merged_output["texts"] == request_batch["texts"] + assert np.array_equal(merged_output["images"], request_batch["images"]) + assert np.array_equal(merged_output["features"], request_batch["features"]) diff --git a/aana/utils/batch_processor.py b/aana/utils/batch_processor.py new file mode 100644 index 00000000..385526ba --- /dev/null +++ b/aana/utils/batch_processor.py @@ -0,0 +1,146 @@ +from concurrent.futures import ThreadPoolExecutor +from typing import Callable, Dict, List, Any, Iterator +import asyncio +import numpy as np + + +class BatchProcessor: + """ + The BatchProcessor class encapsulates the logic required to take a large collection of data, + split it into manageable batches, process these batches in parallel, and then combine the results + into a single cohesive output. + + Batching works by iterating through the input request, which is a dictionary where each key maps + to a list-like collection of data. The class splits each collection into sublists of length up + to `batch_size`, ensuring that corresponding elements across the collections remain grouped + together in their respective batches. + + Merging takes the output from each processed batch, which is also a dictionary structure, and + combines these into a single dictionary. Lists are extended, numpy arrays are concatenated, and + dictionaries are updated. If a new data type is encountered, an error is raised prompting the + implementer to specify how these types should be merged. + + This class is particularly useful for batching of requests to a machine learning model. + + The thread pool for parallel processing is managed internally and is shut down automatically when + the BatchProcessor instance is garbage collected. + + Attributes: + process_batch (Callable): A function to process each batch. + batch_size (int): The size of each batch to be processed. + num_threads (int): The number of threads in the thread pool for parallel processing. + """ + + def __init__(self, process_batch: Callable, batch_size: int, num_threads: int): + """ + Args: + process_batch (Callable): Function that processes each batch. + batch_size (int): Size of the batches. + num_threads (int): Number of threads in the pool. + """ + self.process_batch = process_batch + self.batch_size = batch_size + self.pool = ThreadPoolExecutor(num_threads) + + def __del__(self): + """ + Destructor that shuts down the thread pool when the instance is destroyed. + """ + self.pool.shutdown() + + def batch_iterator(self, request: Dict[str, Any]) -> Iterator[Dict[str, List[Any]]]: + """ + Iterates over the input request, breaking it into smaller batches for processing. + Each batch is a dictionary with the same keys as the input request, but the values + are sublists containing only the elements for that batch. + + Example: + request = { + 'images': [img1, img2, img3, img4, img5], + 'texts': ['text1', 'text2', 'text3', 'text4', 'text5'] + } + # Assuming a batch size of 2, this iterator would yield: + # 1st iteration: {'images': [img1, img2], 'texts': ['text1', 'text2']} + # 2nd iteration: {'images': [img3, img4], 'texts': ['text3', 'text4']} + # 3rd iteration: {'images': [img5], 'texts': ['text5']} + + Args: + request (Dict[str, List[Any]]): The request data to split into batches. + + Yields: + Iterator[Dict[str, List[Any]]]: An iterator over the batched requests. + """ + lengths = [len(value) for value in request.values()] + if len(set(lengths)) > 1: + raise ValueError("All inputs must have the same length") + + total_batches = (max(lengths) + self.batch_size - 1) // self.batch_size + for i in range(total_batches): + start = i * self.batch_size + end = start + self.batch_size + yield {key: value[start:end] for key, value in request.items()} + + async def process(self, request: Dict[str, Any]) -> Dict[str, Any]: + """ + Splits the input request into batches, processes each batch in parallel, and then merges + the results into a single dictionary. + + Args: + request (Dict[str, Any]): The request data to process. + + Returns: + Dict[str, Any]: The merged results from processing all batches. + """ + loop = asyncio.get_running_loop() + futures = [ + loop.run_in_executor(self.pool, self.process_batch, batch) + for batch in self.batch_iterator(request) + ] + outputs = await asyncio.gather(*futures) + return self.merge_outputs(outputs) + + def merge_outputs(self, outputs: List[Dict[str, Any]]) -> Dict[str, Any]: + """ + Merges processed batch outputs into a single dictionary. It handles various data types + by extending lists, updating dictionaries, and concatenating numpy arrays. + + Example: + outputs = [ + {'images': [processed_img1, processed_img2], 'labels': ['cat', 'dog']}, + {'images': [processed_img3, processed_img4], 'labels': ['bird', 'mouse']}, + {'images': [processed_img5], 'labels': ['fish']} + ] + # The merged result would be: + # { + # 'images': [processed_img1, processed_img2, processed_img3, processed_img4, processed_img5], + # 'labels': ['cat', 'dog', 'bird', 'mouse', 'fish'] + # } + + Args: + outputs (List[Dict[str, Any]]): List of outputs from the processed batches. + + Returns: + Dict[str, Any]: The merged result. + """ + merged_output = {} + for output in outputs: + for key, value in output.items(): + if key not in merged_output: + merged_output[key] = value + else: + if isinstance(value, list): + merged_output[key].extend(value) + elif isinstance(value, dict): + merged_output[key].update(value) + elif isinstance(value, np.ndarray): + if key in merged_output: + merged_output[key] = np.concatenate( + (merged_output[key], value) + ) + else: + merged_output[key] = value + else: + raise NotImplementedError( + "Merging of this data type is not implemented" + ) + return merged_output diff --git a/aana/utils/general.py b/aana/utils/general.py index 7b0c4d28..14f5730e 100644 --- a/aana/utils/general.py +++ b/aana/utils/general.py @@ -1,6 +1,9 @@ from typing import TypeVar from pydantic import BaseModel +import requests + +from aana.exceptions.general import DownloadException OptionType = TypeVar("OptionType", bound=BaseModel) @@ -27,3 +30,24 @@ def merged_options(default_options: OptionType, options: OptionType) -> OptionTy if v is not None: default_options_dict[k] = v return options.__class__.parse_obj(default_options_dict) + + +def download_file(url: str) -> bytes: + """ + Download a file from a URL. + + Args: + url (str): the URL of the file to download + + Returns: + bytes: the file content + + Raises: + + """ + # TODO: add retries, check status code, etc. + try: + response = requests.get(url) + except Exception as e: + raise DownloadException(url) from e + return response.content diff --git a/pyproject.toml b/pyproject.toml index b4d6a4a3..379db912 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,8 @@ torchvision = { url = "https://download.pytorch.org/whl/cu118/torchvision-0.15.2 vllm = "^0.2.1.post1" scipy = "^1.11.3" rapidfuzz = "^3.4.0" +transformers = "^4.34.1" +opencv-python = "^4.8.1.78" [tool.poetry.group.dev.dependencies] ipykernel = "^6.25.2" From 09783d5f7cc039bb303ab4ef50fbc65bfa3e2cec Mon Sep 17 00:00:00 2001 From: movchan74 Date: Fri, 3 Nov 2023 13:59:44 +0000 Subject: [PATCH 02/10] Tests and bug fixes for Image and ImageInput. --- aana/models/core/image.py | 54 ++++- aana/models/pydantic/image_input.py | 75 +++++-- aana/tests/files/images/Starry_Night.jpeg | Bin 0 -> 314155 bytes aana/tests/test_image.py | 170 ++++++++++++++++ aana/tests/test_image_input.py | 232 ++++++++++++++++++++++ 5 files changed, 508 insertions(+), 23 deletions(-) create mode 100644 aana/tests/files/images/Starry_Night.jpeg create mode 100644 aana/tests/test_image.py create mode 100644 aana/tests/test_image_input.py diff --git a/aana/models/core/image.py b/aana/models/core/image.py index 2b8b3e14..eabefd9f 100644 --- a/aana/models/core/image.py +++ b/aana/models/core/image.py @@ -57,6 +57,19 @@ def write_file(cls, path: Path, img: np.ndarray): """ raise NotImplementedError + @classmethod + def write_bytes(cls, img: np.ndarray) -> bytes: + """ + Write bytes using the image library. + + Args: + img (np.ndarray): The image to write. + + Returns: + bytes: The image as bytes. + """ + raise NotImplementedError + class OpenCVWrapper(AbstractImageLibrary): """ @@ -105,6 +118,21 @@ def write_file(cls, path: Path, img: np.ndarray): img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) cv2.imwrite(str(path), img) + @classmethod + def write_bytes(cls, img: np.ndarray) -> bytes: + """ + Write bytes using OpenCV. + + Args: + img (np.ndarray): The image to write. + + Returns: + bytes: The image as bytes. + """ + img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) + _, buffer = cv2.imencode(".bmp", img) + return buffer.tobytes() + @dataclass class Image: @@ -127,7 +155,24 @@ def __post_init__(self): """ Save the image on disc after initialization if save_on_disc is True. """ - if self.save_image: + # check that at least one of 'path', 'url', 'content' or 'numpy' is provided + if not any( + [ + self.path is not None, + self.url is not None, + self.content is not None, + self.numpy is not None, + ] + ): + raise ValueError( + "At least one of 'path', 'url', 'content' or 'numpy' must be provided." + ) + + # check if path exists if provided + if self.path and not self.path.exists(): + raise FileNotFoundError(f"Image file not found: {self.path}") + + if self.save_on_disc: self.save_image() def save_image(self): @@ -171,7 +216,9 @@ def save_from_content(self, file_path: Path): Args: file_path (Path): The path of the file to write. """ - self.image_lib.write_file(file_path, self.load_numpy_from_content()) + assert self.content is not None + with open(file_path, "wb") as f: + f.write(self.content) def save_from_numpy(self, file_path: Path): """ @@ -310,7 +357,8 @@ def load_content_from_numpy(self) -> bytes: Returns: bytes: The content of the image as bytes. """ - raise NotImplementedError + assert self.numpy is not None + return self.image_lib.write_bytes(self.numpy) def load_content_from_path(self) -> bytes: """ diff --git a/aana/models/pydantic/image_input.py b/aana/models/pydantic/image_input.py index bab3e35c..1af8474a 100644 --- a/aana/models/pydantic/image_input.py +++ b/aana/models/pydantic/image_input.py @@ -1,7 +1,7 @@ import io from pathlib import Path import numpy as np -from typing import List, Optional +from typing import Dict, List, Optional from pydantic import BaseModel, Field, ValidationError, root_validator from pydantic.error_wrappers import ErrorWrapper @@ -43,30 +43,59 @@ class ImageInput(BaseModel): ), ) - def set_files(self, files): + def set_file(self, file: bytes): """ If 'content' or 'numpy' is set to 'file', - the image will be loaded from the files uploaded to the endpoint. + the image will be loaded from the file uploaded to the endpoint. - set_files() should be called after the files are uploaded to the endpoint. + set_file() should be called after the files are uploaded to the endpoint. + + Args: + file (bytes): the file uploaded to the endpoint + + Raises: + ValueError: if the content or numpy isn't set to 'file' """ + if self.content == b"file": + self.content = file + elif self.numpy == b"file": + self.numpy = file + else: + raise ValueError( + "The content or numpy of the image must be 'file' to set files." + ) - if files: - if isinstance(files, list): - files = files[0] - if self.content == b"file": - self.content = files - elif self.numpy == b"file": - self.numpy = files - else: - raise ValueError( - "The content or numpy of the image must be 'file' to set files." - ) + def set_files(self, files: List[bytes]): + """ + Set the files for the image. + + Args: + files (List[bytes]): the files uploaded to the endpoint + + Raises: + ValidationError: if the number of images and files aren't the same + """ + if len(files) != 1: + error = ErrorWrapper( + ValueError("The number of images and files must be the same."), + loc=("images",), + ) + raise ValidationError([error], self.__class__) + self.set_file(files[0]) @root_validator - def check_only_one_field(cls, values): + def check_only_one_field(cls, values: Dict) -> Dict: """ Check that exactly one of 'path', 'url', 'content' or 'numpy' is provided. + + Args: + values (Dict): the values of the fields + + Returns: + Dict: the values of the fields + + Raises: + ValueError: if not exactly one of 'path', 'url', 'content' or 'numpy' is provided """ count = sum( value is not None @@ -90,7 +119,10 @@ def convert_input_to_object(self) -> Image: ValueError: if the numpy file isn't set """ if self.numpy and self.numpy != b"file": - numpy = np.load(io.BytesIO(self.numpy), allow_pickle=False) + try: + numpy = np.load(io.BytesIO(self.numpy), allow_pickle=False) + except ValueError: + raise ValueError("The numpy file isn't valid.") elif self.numpy == b"file": raise ValueError("The numpy file isn't set. Call set_files() to set it.") else: @@ -129,7 +161,7 @@ class ImageListInput(BaseListModel): __root__: List[ImageInput] - def set_files(self, files): + def set_files(self, files: List[bytes]): """ Set the files for the images. @@ -147,11 +179,14 @@ def set_files(self, files): ) raise ValidationError([error], self.__class__) for image, file in zip(self.__root__, files): - image.set_files(file) + image.set_file(file) - def convert_input_to_object(self): + def convert_input_to_object(self) -> List[Image]: """ Convert the list of image inputs to a list of image objects. + + Returns: + List[Image]: the list of image objects corresponding to the image inputs """ return [image.convert_input_to_object() for image in self.__root__] diff --git a/aana/tests/files/images/Starry_Night.jpeg b/aana/tests/files/images/Starry_Night.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5e7487160f0d5baf66c0702a98a7bed737cbc691 GIT binary patch literal 314155 zcmb4p^;cA1`1Qb0(kTor4AMw5bVv3}bl9q*yg^`Vck%{qtHo?Ke$0xuiASEOu zWu&5@V*LNcLmz;O2zLsY3dG?6;8NiLsc;?!0L%aYE)eG*0RIbo0w5kCE)Ia`->NPp z02c@N54d>vxc~SAXmD`<9fAr#{e(b7nTErV){amV9!v_!f zDG`^rF_PY)q)CE7^~+Pg%$c))+cDw%zheJe3IG7&;o#x}2nhczDpCP(fVe<>LOk66 zsfqWG)jyiRCwSB%%7%9EUo;%i8O4p$_@e#Ww5OaZMq>891TjcD@bi){Gygq)SOJg% z|L+S_07bxUhM7r)TM{GK3~4GGi@KSV`+FCl!v8i062lmkxZNIh+6{#7ga8TqCz7=F zNi$7oE`>NUi8$do(sDSzg8Q+Pgd-%n;jPPKH9)#3>T$cJ8nf@{+nx-^eE#Eb z^Z-i9$zW-?Z@LRr-!y28{OU%*Ild>7!=*VOEvt3*NY3X|_>KFAH=wU;&lYx{8}#F7 zOf7bWy@BN(Wtm*~XPt__Wds|`YAP|kaMm4X*ulj9IS#P@`B}mNor7R~lXsxymZMRX zO{#`Do>rxi)!-&WYA^@STZDc`OKRwWiTpB{LY2;ZgvtG)&#^G<17JX*tUjydMWW|` z+SAt$fNDf!TMO@Yu4w4xZTXFc&m&(uwS5i^yKL=azB<~J!?GLrgq}!Ruk`FoHKm-5 zipIIc)fGlpo-)BbqnhS!^)I5zYsx|$oWK+Z&_tJU+NIGTUt!2&;-T)!`zsB3i=qq&R9Y6PA^(b$0AoO&{SDD7}T{#$)~O z&dKISVV$S2>Fk7O%Y}#gla}gqImFPFdke-#A@8)H!(L=tY9>I2E9EuI_2xC~*)y@n zdOj=HL6y4+mQ^{YJ}L1bPvas5ocokGjijZ=gs8G)(f@|A)*>(L`=;VmYc4K=YJGNLg_2x^Xe6Ht8ye1 z-ZB7-tu5R6@Dy*CK7rq=rbkwgT+VN1NvC?T`w{l`t6XVY!n zEV!+0dApvrl0#r>vVmJlz~(j0y}t}9IW$tQBs*UBHFt3CbAk*aPO@&WqsZuQMWBw! zVBW`P<-zOTvZyw`#wa4+;Yg}$DfEdH&p~CXoB6jM1o6|0qHEu9HS^qtAV3&ZVP>@q zVX6ByLfWGM3iWN#Wx@OI+Ig><-R?!DHI{+ewTXgk#Q+wzwatDm4V@-S_q>@8J}Z^Q z{iQdh43zFWiPC47*E~Ekd>5wrYn3~ZmU7_<5>+anm?1yyh{E_5UZglSYf!Ef#W*;g zvYz&vXM)UrOmyGM@4v`Rs;P0N%PIO#8cf!?NAX$*jRV9B>-$Qso@uvF@(ssMIiN1l znQ3qTmGxFSMdVG$;=X&Tw#{|Yb=b$F-u{wK%NLvG3oHFbDJeHw1wq-k$M&? zbZYF|Q~U|GwqN1Tt952N{9I3yIDd$jtJ4}F=NKh^u<+X|AYj6kUnpT?qpM$F^XyI- z{N(+h#^=6?z(0L=0Xg7QJ%evA@nw{?KN z?_b_sd^yw819?RL2ER%Y7R<|m(fiR%Ji?^cs8uX>~da>+m?bC3x%s7Da1 zYoVk{BDjw=ovu-Tdn@roRRzFgruZI{IRx;1ZCuiBFb6)e5%>jp0A#lrnB<=k^+E0) z0NygGu60zQ_O2UGCwo2OJWht>FzsnF&zz}fm?La?#)S%a6>0cgc}gqWIgJHOzHo8G zgN;@LL!+b__&#JSLH;nGSMV$TcW|B60Cj3tW|7%ynoV45_EC}48^7@dKp21)*&Px$dn2b(-p58wMeLw<*JFuy41x0nx+I%HCgCZEN?jt2y{RZw8Q zGm&Xt5zv}?+PZrD5*B_CO9Dp5Yk>=-JeFI1;V6+SA98&Kf`kur9fR|NWZjhuFFlO( zb|)0^urtuO)vA+}To}GN7*KA-%RBa| zHN}m0JMcMSNmFw^B@upjCm=s|*n^pjxK7jac||?t9d#KmWrfRE2kNIJj$&STTj#%s$ax%YbWAej zZPmV+sRAjP=VO-E_{pXFArrAH@4CCZyF9moe#I$akOZGTFObk1TXWKhFNXR1jW8W% zShDGp$_c*^t1kIil9M=TJR3hhVv@(Ml1>4MOxI*!lf#Tme&Zvm`*T%Z?^5$ysw7){ zdOW3AT_rQ0Qmh}pM^yZyE?0>~iQ8no+f$&ExCB`zdH6E7EcE2hjq6GP8w)lhJrQUP z#``wg*0EnNxwz*>l5fU?4u?@ms>o~sJMT(6eyLMP&$}bvc4Qo{D+@Y)gmDhXe{Fbe zJFF5_3IULwZ#gs+Za;oUEk0|?usm6r30jiFedHAxZeH2Ex(zoL?30&ab5m?7?6&BRGe_^vxaPWG z=y1g*HSn3sG^I3W| zN3(x?q60Lj1hB>JoMz&^r;~%o@y9to*(P?N`2?smrF~%1{qq+wnAx&RCTmtX&hZ zN3K5r)@0t=m{c=%&*($-iZMfA4}-ofnjKaj^`xQjnht@+DfR!j6hA!W8hU*ezF7&H z>N=3I-Y==i>9Gv^CbU_ZyKJDYpX~^^0(fyFB(QLy5Yjrs{vwdb2K_efP&o6*-8MZ${NZBz)9S>YPttB1LRR}YW8f*#n_Beu?~~Y3F&4+P8PGP} z3>XJe180Js6M!U8Dcqm*U3dJvu%Hjq2zg}1C70Y3YNAfKQI@)ftkpEq=Y$OZ1@j5E zxo4YrviP@V%!$4k>QNKWoY)>_Pm`mRJ9zbOj%Pb^DB0_kTB56r3l1a8Y_l8igW*Kp zD+xH z+VFj&Kvaa?QZPHtW~Wwtejd?M%a~88&}nUh>Yzb#t@+VTYB7{^c!tkfNM6t>eR>lu>w|#}sOF=X0i^g9@Kb}gO@~kly()ej`ewkr< z{X1?|hW)9;hj$~ymXFz^WSy+=oF@{w|C2aWxBXarx#Rb#u(HCL566H6{>yI_xjes` zI@ljr+4*?^VP&&X^vDibFcKrJ`~wE?>bw0W68rn4Xud_vG`*c)AS-hwQ{a47{XdY2 zPxF6I6!|s*z5H zN&W5vV6=~Ny>WAB0x=oXV*HJHQO3=}R&z{4`x7O7bA+wZRwn8?!N5r->$ht+@9ViMoaoYiTPd6&%)yeLClV=0K?YUd+f@2kKEFfw~dFNoE z0fd-D+|H&$e!@2bXBIfKQS{ORzuGM@o97v&UUw7(A7)|b6Y1R(kP{#{TV4^5Pp3*f z%*mmeoSMfu*+10HaFh;T3lx%P`s);mZp-_?ThTJLaP$C39QRSz%1l^|8Hg<$Rc7Ff ztxcY5829q}xn=bLxQ^X177TZGRd7w-5nNdDmqHX*iH=a$51UGgqKM=A$b%eHq8<&c zxvDGFmnZLRWEb-hwlcb6%<|LCg$)MC)kC~CJ>@K9{3=7Wwi1>NxlIC$Mw@0n!8H$b z4p1hzekn-vom-qu3lS)xU4VLW5aDLA@MpHjrJ-X)#!VsOHp8Bvv3u;JRONj6gsR;kvsC7y)10X-}_b>g30Jl+o zH1A9(T|!q6?=AA4nnK)6AoK?3AQ*&WDO;;_b4j-$v?6#;3^mXQ{fQY zB%E}b^dX=uVjeWOu$6VrklsmVj1v&nJN48Jx9-{es{h3n84Rl{vKV&0ZlyG%lZ8& z*=NE>wE9cTC#=kD#kf2NPMMhaFmUZ#9Q^5;4!dH@>-@o=TNl+SO+%DP+3mdM>BB={ zvQom~oxcCC(lm75=%ie=+l-)x^cEev!{D)Y*2-6j^%?0eiU&ISzGrNwZf2Tt`cZ zeg*_a>E(q6pZ!u|DPNi~6S<@dfH`KjG(C4JF7G#?o!0+}|A+b%iNnqLq+{2F^k>k$ zP<3^O9CA@{Mweq)qbRGf@xHc%!sS@FS9<3sw0VZAY1vqtk922HN*H|JO(@`tv)g@t z%@kJIVP(k|%IHe=d{@^nv6=+oi;Y*bTOFE+;<4j-C;y#X#FhXh0?wKWTN91R^`;kd zZvDzNk%!#0fU$dPsan3td#q#xV`?gGhfnw_h<}96`Pm#emaglt!!B8R-V3~mg79M? z|9YN;SOoLh7d5NM>f{8}>rih)Nmjq;)W($2jhWAV4CjM&s~eLuo-(Vh-$#pXbpD!8 z1F)QdR+$fgifEN=tvKmAJl!q5O}3B?D(0? zn3?-KPkhI$?Jz2Z|049g#ODOwMbuYWAlGT(G1{8c5E>9jke@U&t@BO-Z~EdyNABXk z$eIqdxPm7Y5GbwPJHM*YV?r|20Q_u&FH-|v=W#|jBR^U$#iGTc_V>e_sMMJkP3Kq9 zYoEboZ`9g-o`~A~pKhzl`L%y7Z8mJ!w0&?QwVlBR<3b3Icq8ZH7l3w5bp4U;LvUR} z4?O(j79VLeXAOv*Dv4&e_x#S;czX4oT=ArK(UwQGGwK(BBFoOQ?D*7l{{cW5njBh* z0;zQ_m|VNL@i9bUz|9@IdhjL6kRyacIQXlQbHePvQZ1S_#Vh7jw`Peu<(_g_uCD{Wurt47sn6RoJ@UE4jf%in?{ zhHhMR`wd(r*;xvv{~E7!9R1PY3H?yTg$^wZ`^<^EYgAT2*@(pnwoCCfamXj5&a6F& zk%+HHexs&ViPIAmj;xf!++ww}KFbGGBXW&E*1BoXvBaSf*(8?cyT6O-Gn`Jast-i6 zqA3r6d~AWDO2Xq0qRG14iFh|px=Kg#zll%`yls^n{}iBxpxHOJB_f9UQ`__3vVs_}9Fe>5FZD`S z4pBJZ|6cqy!u`M~AnE;!zMX<=ZVV+RZB%{Gjnw9twtiJ<#?GTY!p#82LHWS3owI^9 z_4U&ht}X+V*HgR*RB`*G#{vM#5=tgK$Hx;2;*DTW&_z)c*u8~59d8Xj#_TH^vLYKe z$tdga^FynhMeogEo{Dl#>2gPSW)3&zex>7U!$uKdTv!cbx`3Ven`&>7(T!}+muM`v z!?AC~-y`&&u!8<6{ebExv;q$PdyhD!``N?0(*wM^HuYz-v-#z%_0p@J7Wd`^QcX}& zhuxQ*mhp}5ql&93zv@kt#U!o?TmKr5tW>-c4$x4@e)ObNatz<}N5tyW758`+f6;yo zU5!?Xp4wdLp^F5?_va(P0@@ZUbPZu0=|^3i{d#Vf#(iF9QAfv=kiQD*vHsuClGzI~ z%7MXVSB=FuEX`4Mn|$P=y>Jv(#zsZwsh`1@g2X-nAWke|nfdSewJTcUk@pqR?#E9> z^FoB(KjPGYR`yO3tN1q8AQBdC)f8NBW(6B`vYO@{wIrgi}2^$&o#pk;22`Yw@-vl%XJ zuv;aNfhmX$0%ZPKv*zwn@v(hw)0tk&oczhFS42Z8vX8$29)X<$2>?@<0R?K{NJC}y zsvr%bRk=cvjDI(r@R8f42LN=Qq*cc;5y^u|f(p-6XkqVkQP4@Q_sGbJyhHPToFek) zv-O%Br6|YDA0-cfK^qOvF5b{9ArtS>(A|VfU>jlntwXAA;H^pTH>x;m22Cr`EUm-4XzjYuSAxf*58@!O~G#V(7y5s}|E`89kmo-g^AUX#3c?^w>Tl zX)N}JLgv4{>9_7J({tARZjN3022bkW%#dAlDD&gQ<~SOazwzk6i!CrPsQAzN+BPCW zGXC3f!?v4g6pqPgB_#_ilMpvKDlZ@$O)pK&+GE53izR!!oYHZB9boU~$ zGwcr(CXN)3!o@{b%3X0IZucI0Rl4w23%0r7ek0!IjPM=mrUoz!Z&A!O9-+_s&CHAI zCGZo+sEFg4;YiJsn~3Y!_>z4k6Z#D$6tno%JV{#>8~duS7rMLOFM;LE*cx2rkkA0&hIt3V-|iMJ>LHjQ?aoqv&fpM%!rq&H=Q6r0RW}|^fcgQ2aL-+dk*N1 zF&YC61J2y>x4qz@zx<_ln;c0w;1Z zFgyUN+F33XdSa_}TNW<8&8+rDz4M4I85vw%udF>`U!3#vx3ELpCW8Myd6!iMqN%3~ z1^SN&FkoB7>}BLz6MdyFyOVNSVtOCdVxaZ3w%{11E-WuvqMR<9au(^Ua4jZGYwibv zWBwM%QQ9Q=D+x;hn)5<-|4EX;J)hL~hbYYfDEQxC2dDxE0;nbr>KNzeVAREQY|6Uo zE&DYGV_)@%HiDROqo`0&`~=OTVjFLG+XG-LAau7nAX%_dT0ww8ultO%a zHXwK?cr|;%E7urw?`FjALyJ0vtNmLso6Ee5cm*rc7TRn-?BiV)AN@B zu4;zvoihUll&xl>1S1kW8t3DRu8Awqgs1bpbDMeP}IWTCa4AUKzvIl*Bc|!WsDAk9 zCfM34KA$sObDskigz3tBtg@i%G$IG!pHE)=lAgi;aTob1fKCD?M`Ph${p7oJn!i!v zrt2S8sTx2hj*o_qx?Z=e+anKN7xZkT|ElMHb*OXMQC(O}TMq_|ZlnG`X*oqw}i$wBnUSr?0S9PM_Ce6j0UwtpyKi4#K1FT1RpXa9OR;J~hTNk&Jw;C`b zGWBg%wPJ^#EXyi2--Bm}m`DbLgh9iK4%aRPY`WTT&z!jA7EL;iWC4*^;50nShSo!c`@U?Ri3O@xJQ`hh>|{r9iM?Sn(CL5Qnhyc@|oKU zR}1J$E?IIazyWD138KoJ+`WpGSBu}_pFhB#k={7pTwc7$NpLoDmHBe}#AolCI55v; z1ueOpPxJVPZ1Z-LI6+BrGVK73mU1Ep@9lCFGk{^onG+iou_C6ZXU>tGf&PIo6?h-| zx#u+h0iek+x!Dhz5B4aKEPkuc^+Kcls@{ZZh${s9Qs0w5CAxIr^)m^SL?PF1&bk}2 zJg-UfRb{I3>p?401G*={c=--2JpsNwUYTVXcb1HmG)rE1;lYeE==!dmzxzBr2% zc(mQRPK@G*hBhaX4%YLC&sT#TvlBGmQ&#%3?UT|vgAwD)3f3-@oWK~}af`^@6kAH^ zoqvOhz)w%5VQTeeZ`VRPcKS!is-b{}+_;>#I>;=AK}3FA|3p|iMT9iNbZ1wBW#S4& zWpZAQuf3p|fQkiu+C3vuV-MxGnQD}?>{vk^`5(y|ym^qzyo93?9HAN>7sq`Y(Z%bX z{AC`opjB2wJdGS7srUl*9$%7=-oceGi!C)0Ur`c58M8JYC!D&*Yy2$_2UA1oG}?M3 zm-&>Kp|rlzqx?REHQo6c>0g=Q)rJ?LD_oXLgDX|8&XrXgnyOGIn{yAqKOfnUsV(rM zU8(>HTeUue_3*a-`v4gHq|cZJn{{?B)Sq4bOkc#O{&R%wq9^`@_cT zLVo!|RxX?!gdmyUIS@WxUKC}aF04?svQrBswmAtd%#nFhVJAtfy$(UUU?qc)MA;oG zFcVu=DX)-6^1n0=N}5(te6ry-@=D3;&&5p!@eTKz(E=$EV{eqNv8a{)Z;T5DIqdCI!f=2c2yUJAL+ct zWS-X05_yHI!MKz&SB=KIlNb~P{BsRm63K8#29ys1ppdzGEVWN}Dg+N3 z#+@Q{t(Nr)^!T&+b$f}C9o%sZ6FdTEHIAucVvHR4eDuKtoW0Vk*Jl!3bZ|{f#Yb~K zUL%!WgP!G*?L_;ruYkUkEmn2qlM+cpY0Q?ToK*D_L7b)idV)h+OmDk_qA&&)nv+AD zAYE+m#aBBe!g)LUpO2wVv95gP-@`;_lMTwN7R+dKaOx;o{MsV^$F`ooj_RAi)2afe zgw_?4)SY4SD&-6U0C`bt^au#UzF)@$<_FK{fhv4Vi=N>i;OT@2oc^QC38MMyM4Fj) z4GRObtAW{9K2CtKJAqA)Ic2FL;cxzS^vG64LJ9KySA8{FZ@GvMWMduhZeWa9%4>(0 zhSz=@M3n|Vgno4(Ib-7}em;{mAOc&;T=1yegQj4YWTT<|vbqA}!mYZ;q@%tft01R7 zOjPhhQ~k$Ky~0oHKZ`448iouRIVTb{h;f^$*HI$*=lS^&g{5_uE#F@wK+AZOYT_A^ z@-xr;9nv;IM=`Pothd&cl@+}UibZiFcw)kRUr%Gm^;Z?^KbwLEOKqeW)1--P`&qSl zKlR(d%QB9Bhw?e*mQ@958hGO%d`tjz&@VA^n7)}PWQC-NUJMsVI$Mh(pIlne(`Bx8 zAZ140FqTr zvVtAh_K6}#`sbbnm~XwhPK5nVPf-1h{bL}0;8RyIBJmWGmNr`Km(&28(`Eon+oC8c zZvLe|3KSxkjK3TEpdCq+a;_zF!TAJ4J4a?7h*79qVE@cI$}KNV7mcgqBSo}p9?Sd} zBInT4YN^T7Wk1NT#td7iX+p2=@3TG?8TBO-FN^w+6{9?Q!qU)}D)^$vWmIh<&-1oe zQH2hXy|w8C7GE5mlS0Mc zUdgKXp20zm=16fa?7SrK<_I6`A6QjKC%J;=L77H72&Qa3HZ|pn?&I$9Ap)mbqg!X6 zoo_>3_LsK{gWtXO^GLN{vgib*kPAx_%KbTe09e+gl*ffzviUroT8RYiibd1DOeU@S zU6__VkE+ljHjQzX@bMg))%s8KOr794a8QHu1Wg|%6X5;)#Zd)P#^>-z7q^<1M74O< zl@m4I383(EF!rd{H$;juN)RXU5)&PZZV*5xQjBAvs=QNmss}iiAZ6moc0!;WLgWwQ z>E^ZBzWEv~Xtvf*{846=++FmoU|OA>&tEssa1rth&$|Hh;4`+t%wIq95N+#ESy2pI z`5GO8_?o^$cvT<<>sxpkUr%0LMLX02R9;OYGyC2_U>0c>_^X@10Sn^pO_N#arHpGS z5a2N^%4s7>(cOay|*gV}cW z+CcH2ZECzO8Ugw08KcC#gD@*OzrOQL+#CwZaMeSODqXx5-+CB60O(sk>pY2r&r=e|$%!^s=n;{O z3=+qlm&t^Luu?=uJrAiA7Xckl?un8p6p@->5FP5{1p$Y=K!GEOIyRug4_7?9lPXAgpc%<%g1I(eal3DGu&XM&qwN! zp9}){1f*oYk4REa9=9 zD8(dV0Aqb|X{7J_oQrYR#Ee2KMc^67$eNcyDKpLpJ3{uf^1xv9t1*H8!}M~etu3<|2Ua3Q;x33w zeTyWwKZSRvzMj9JxZ-IObIM%?CAn)nqW0emHwO0;Iz9m0zUw-H{iNmw8&19!^hoz_ zvC7`PVYwja442}i^Qp0TwBoFbVb4rSV;C8_aey7uCt+(eOMns{UqD(;oT^(v815d( zNlB~rvxRRg|KxPyRSM0-b~^m7A!6vH*81gr$-tcyHIIDp%BxfSVfgZMX9^PP4*>BwKZ6k~PF@j?yr~jidU*eO zKge`s7@M*`_s569nr61*y|y8d^G*ZtaIJ>)*Qc{-eEJ1&QumMqL{67X$3EWHw@#_V zG2XTK;PsY-E$scu#f42x)6(X|%7F{Y*u9L1ec)%;-st{MnQwxZfh)<6(A7U&R`=!A zHuqR2KWoZGg)gxxT(iw?qzamuTE5EM|GBsKwoZI{hwc)xKGYeA(lkZ{pO?}tYLS=9 zv)ipc0FtUJ5`yhvA|HQz{W6kXmu0gSC?JwKn3HB|wePf_uoqTNHj1@TwG}pwa#TU) zD^PTk*2O5!;b7a^ed^2g3gUEp7el6$M9K!|L}zr!kjRq-;+7n@iKLjkDAn>DRJJ)j zpZpStzqPZE3BKe?PF{h^H=W)*nu2|2^fNfq);6TIex^L! zxgUtsd?A(=UFnXRIb@gUJ<0cMQC48k%tJw5%gkTs zrd(&ISM{qG0uTI}8zuMlB*`CvoHMehm6+>&$lo7-2D$DNnL_X-=3<)|lVx@WG~_Vk zN^%IXi7+_Y;GWG2ySz7PP#nvDXX0|xb~Onsyi29|P#*WYqIKCz+?4py1K{Q|=fg8m z@=+U2TgV}i@eYgJip083Yj%0>sUR*P35_S}r%;`yj6L~H?f%tNPMD2Jui1P{hH)uc zo)2hjTK4zefOmBg&$)e~dp7VxxJo$PkNOjR_XJ8)txmSrhe|B@>7@){l;)vq`Wvp^ zvRdhis{NIN@zYX@;>MXoo%e@~-XLuJ$az8d!ks&mEN}KzvpM68%Js#>3$uXdDPbYh zB3oM`D^R?@GcX>Blqb1y`}Uk!S%ICG%u->cv*u(g74>WwC(l$4S;N`uxAesaeA%zS z-UgL|Bkbfus#O98=0c*g)Bbm(bw&5Dg^dTFJmr!TQ6nT?RVMYJ_`3k3Pz?w&f|9A} z#_YmNt#NMkBFhsi{`+PsSA&Dx%%YiOJ}|912p0Mi)ZY4Ai%%;!+2i_>b~I74(8%6m zH@qy0kQ>-0q5R_0MMCK^`W2*?j@6FQ_; zX6DG{d#YCW?I+-pkMu-$N!8~Up}xFFCMI*gz8i|e!nQ9sm$O&f751pip&8dtQCio#`sLd3VPZezQbPUr(Q?l^KMyhfZbsJ&=e2j4R2ta4>JK!#*e*@- z1vo^R>=fGdGhi+My0J$sv`7{F%aIH@!ap6Fga~+DXz_mz7suhR)Y>#PLZ_>Q%eaUt z1H67?QA3bEme#$-^{!D2hbi<{VRi4`py+!G^Kt*^w?a8&Sa^$mg+rbdsRSKfzmeYJ`8jLkr7i- zMZA}@ZAS8}hEDwFlp1P#2M9Q;B`dZ$ zO@H@H=r*b}c!?IQSXZ09m>%cdSIsmm`P83lHb-u?vQ^^@!3i(=BOuPopFLTBoUs^? zHHerx)Fx6Yhx%$C8DeGsjRM2}qTQ7NpH(>#%MM9*7H;w!_2g3|o|jzdj!l`Uds%>< zxcVQ#gsGQ%3+T&$ly9{0oLVjjMl~mc=L*yD$G&tO7~;oa<|2T8KSV$G_ygcYQo^f4 zj2@3ay-dwm*Ua=kl~(!Ik#Cs89tS{KnI7fP2hRV^JYCyq@w5F-*S5~?$lljPQn4)L zF5)_&t0DxJs#!^3>O?uj%9-fJ>Gst3HA>&Fs8wD{O`xLfc*gT$K&$@7%!dJZ!QDHw zX?a}y@|nv|AzAWC_Rw?w)>;C|XZ$j`?m7)Ct}99yhl!&e^(|ZHblE_*RSiKY+C4O% z%{<(AzAS#z9>{Yha@s!##TYCf(i4BrnEFcBBv?wpSZEl1EOynq6w&2T(zqOI3C?M= zJ7`$#QQntL+1ZLv3jW8G-<-E4Zvw@lkL`b+zs?vp3$qsDl{bvha`UY>wM0T+aY{4X zq_K=JpT-bJ#C5%J!Ic9)hgsol1t)iG#c(!Zl5xmr*XDh@E?{1fTAAwFEMZ-j`1LV+N^C4b z&hsV~V=%&9>Vqh$&&k0w_6Iw;vfBocvU&N^QjDcY6V+uQp*pi;ztL0L>rQkFB&{8=-Hj5nbJDLLQYmu z9*fCg^Mj0(bO#TL z6L!w1NxfV>Jua>T1by)KuMeIUc0v9$M87 zB1Bv4+gp^ySk`?Mcv|4VWUvEbKu{{~0(?!F9Z8Kc_3Rf=y>g#3NRp@xuC**l#1q0Y zpT9JDmJ0Y`Qbo--+`2+@9T752PG68Ru9-`G%TmmPxUqY@IA)nh zS>UGb+yj8b{{1`Fk7E}xB-Y2jqdB#`a!v(Wrc2Ex$xZF_lc*wY-T=89A(N?q&S_nZ zCv67mNYa?cSBYK-_K$opcT z!1xl=`}{2*QGcNlX}%x32C0AXoB`*@Bd3U^3H^f_g4QU8d4qS5b;H-gLD{kmQeqDP zCGM2F$tdwx$Q4WE<4*0p!6vV0@N1$q+ns0EJ-3)NxjoYdKmao7Q3>$@h%ag<*O72d ze~1(Be3(6OzGgkBl9YC^tY<&iDMK`Jd;Q(Ud&nQJ(UiX+`NryTF&xYyoivnaSJ#75 zgZZ&Wa!*CkR>SM-7rtZHh1~s9W34F6g`mobPqa;GVsnKQ$ zD?g_WS8aTgu|x^;8|!5_8W{{;Arvh2fzl!4l1G1xHfy4TSH8E{;*5ZC`sKnC0=Oo^ zio0ovY`aQr_ZXRQ!#%G`^IGf>XQVz2*p=4}n03t1MAap1^`K3I!7(kK*bgZiML05f zuxdQBfj?NzcR>0hhganbn)1Y&QWKB4{aOzKW+5+cn%@vo-<`Aj>1i;GLgRzt<-9X~ zS1WSfVq(dwR@853TgwOaste1nZH}Dx2eQs=SVU_(GI%l?RFlKR%UB7WwhCiI{|Gvv z@=&X40>4K?o)6KUsyewQ9F0po0E{1l8%MzT?GQ$r%u`l|JC`osLi=Ko8F^PZp`+1n zw8(LF`OX~_0GRgVvKYbp5jhF-$;Iu`#4Hi$&8FbJh~$VO2stSxM!>&QqJOAYz_ea! zrPAydY*%IsTM(_y2oI{%tB0Lq+Vnkxp6S^+6$NJd2$tkU824(4}eZEb|QD*h1VUu>&oX)RZ?l{w$fzsl>jiV zoxP&9g{!XeyI&4RexL*Tj)f5W+k-ssWu6jEr$b;w9=etTy~{QaRroJs*pK0b1|W)v z&942Z;_3kq?O)KQbzB?F_rpX`U%3N^7kKtBgvfk47#~2}&No#3v2o0N4sn2!=S(#H z?1`Ct7R@jW%QER}mWm?5D>M!Wc~!?3&NHA^?w7KSvlDa-0CviF7WBISKhj+7RP9Bs z)dfgdZ(Og*_kd9`i$<&A!jF)_H$*c}?zl%hj<6;Jl4bz#;nXQF{i z&@ZGxTh49%q9r%*?t!^Kh%%9xVYqkQUC!wwZ-*^3&0d@73@h0Lq&5weYL`*H7`q1N>`KD8Jv*$Cvtg6|!?D}dr zgRS1FG&4w*|GNJu)4St__6cEr@X?6OMy!Rar;@qnBV|*fXZZ5m)$#lje})(^Kt(w+ ziWF;i;TFSKO5;{x95%fCEsFNN31lgv1V_lW~2Rh-$(^q4N+ zwUba0zdDh^?cnp>u-`j>hh*p$&LjkbX1MUq!6to-i50;mJ|>T!03iJkIqc5Ci?YUf z0kwJ>K5ANfj&3Mhgys=e<_Xy+6CH|0`A4yWG#dPNzN-y%0DyDHQ6HmG?|j4gI_PsR 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 z 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%0Dd)AEWLCw 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 hqmiXK`1`F5XNb36qx>R_hm12y$ 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%0DB} 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 VaK^~paR-i*<0;%VH#Ve||JmS$OmF}I literal 0 HcmV?d00001 diff --git a/aana/tests/test_image.py b/aana/tests/test_image.py new file mode 100644 index 00000000..d415a037 --- /dev/null +++ b/aana/tests/test_image.py @@ -0,0 +1,170 @@ +from importlib import resources +from pathlib import Path +import numpy as np +import pytest +from aana.models.core.image import Image + + +def load_numpy_from_image_bytes(content: bytes) -> np.ndarray: + """ + Load a numpy array from image bytes. + """ + image = Image(content=content, save_on_disc=False) + return image.get_numpy() + + +def test_image(): + """ + Test that the image can be created from path, url, content, or numpy. + """ + + try: + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + image = Image(path=path, save_on_disc=False) + assert image.path == path + assert image.content is None + assert image.numpy is None + assert image.url is None + + numpy = image.get_numpy() + assert numpy.shape == (720, 909, 3) + + content = image.get_content() + numpy = load_numpy_from_image_bytes(content) + assert numpy.shape == (720, 909, 3) + finally: + image.cleanup() + + try: + url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/909px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + image = Image(url=url, save_on_disc=False) + assert image.path is None + assert image.content is None + assert image.numpy is None + assert image.url == url + + numpy = image.get_numpy() + assert numpy.shape == (720, 909, 3) + + content = image.get_content() + numpy = load_numpy_from_image_bytes(content) + assert numpy.shape == (720, 909, 3) + finally: + image.cleanup() + + try: + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + content = path.read_bytes() + image = Image(content=content, save_on_disc=False) + assert image.path is None + assert image.content == content + assert image.numpy is None + assert image.url is None + + numpy = image.get_numpy() + assert numpy.shape == (720, 909, 3) + + content = image.get_content() + numpy = load_numpy_from_image_bytes(content) + assert numpy.shape == (720, 909, 3) + finally: + image.cleanup() + + try: + numpy = np.random.rand(100, 100, 3).astype(np.uint8) + image = Image(numpy=numpy, save_on_disc=False) + assert image.path is None + assert image.content is None + assert np.array_equal(image.numpy, numpy) + assert image.url is None + + numpy = image.get_numpy() + assert np.array_equal(numpy, numpy) + + content = image.get_content() + numpy = load_numpy_from_image_bytes(content) + assert np.array_equal(numpy, numpy) + finally: + image.cleanup() + + +def test_image_path_not_exist(): + """ + Test that the image can't be created from path if the path doesn't exist. + """ + path = Path("path/to/image_that_does_not_exist.jpeg") + with pytest.raises(FileNotFoundError): + Image(path=path) + + +def test_save_image(): + """ + Test that save_on_disc works. + """ + + try: + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + image = Image(path=path, save_on_disc=True) + assert image.path == path + assert image.content is None + assert image.numpy is None + assert image.url is None + assert image.path.exists() + finally: + image.cleanup() + + try: + url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/1024px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + image = Image(url=url, save_on_disc=True) + assert image.content is None + assert image.numpy is None + assert image.url == url + assert image.path.exists() + finally: + image.cleanup() + + try: + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + content = path.read_bytes() + image = Image(content=content, save_on_disc=True) + assert image.content == content + assert image.numpy is None + assert image.url is None + assert image.path.exists() + finally: + image.cleanup() + + try: + numpy = np.random.rand(100, 100, 3).astype(np.uint8) + image = Image(numpy=numpy, save_on_disc=True) + assert image.content is None + assert np.array_equal(image.numpy, numpy) + assert image.url is None + assert image.path.exists() + finally: + image.cleanup() + + +def test_cleanup(): + """ + Test that cleanup works. + """ + + try: + url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/1024px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + image = Image(url=url, save_on_disc=True) + assert image.path.exists() + finally: + image.cleanup() + assert not image.path.exists() + + +def test_at_least_one_input(): + """ + Test that at least one input is provided. + """ + with pytest.raises(ValueError): + Image(save_on_disc=False) + + with pytest.raises(ValueError): + Image(save_on_disc=True) diff --git a/aana/tests/test_image_input.py b/aana/tests/test_image_input.py new file mode 100644 index 00000000..901aa948 --- /dev/null +++ b/aana/tests/test_image_input.py @@ -0,0 +1,232 @@ +from importlib import resources +import io +from pathlib import Path +import pytest +import numpy as np +from pydantic import ValidationError +from aana.models.pydantic.image_input import ImageInput, ImageListInput + + +def test_new_imageinput_success(): + """ + Test that ImageInput can be created successfully. + """ + image_input = ImageInput(path="image.png") + assert image_input.path == "image.png" + + image_input = ImageInput(url="http://image.png") + assert image_input.url == "http://image.png" + + image_input = ImageInput(content=b"file") + assert image_input.content == b"file" + + image_input = ImageInput(numpy=b"file") + assert image_input.numpy == b"file" + + +def test_imageinput_check_only_one_field(): + """ + Test that exactly one of 'path', 'url', 'content', or 'numpy' is provided. + """ + fields = { + "path": "image.png", + "url": "http://image.png", + "content": b"file", + "numpy": b"file", + } + + # check all combinations of two fields + for field1 in fields: + for field2 in fields: + if field1 != field2: + with pytest.raises(ValidationError): + ImageInput(**{field1: fields[field1], field2: fields[field2]}) + + # check all combinations of three fields + for field1 in fields: + for field2 in fields: + for field3 in fields: + if field1 != field2 and field1 != field3 and field2 != field3: + with pytest.raises(ValidationError): + ImageInput( + **{ + field1: fields[field1], + field2: fields[field2], + field3: fields[field3], + } + ) + + # check all combinations of four fields + with pytest.raises(ValidationError): + ImageInput(**fields) + + # check that no fields is also invalid + with pytest.raises(ValidationError): + ImageInput() + + +def test_imageinput_set_file(): + """ + Test that the file can be set for the image. + """ + file_content = b"image data" + + # If 'content' is set to 'file', + # the image can be set from the file uploaded to the endpoint. + image_input = ImageInput(content=b"file") + image_input.set_file(file_content) + assert image_input.content == file_content + + # If 'numpy' is set to 'file', + # the image can be set from the file uploaded to the endpoint. + image_input = ImageInput(numpy=b"file") + image_input.set_file(file_content) + assert image_input.numpy == file_content + + # If neither 'content' nor 'numpy' is set to 'file', + # an error should be raised. + image_input = ImageInput(path="image.png") + with pytest.raises(ValueError): + image_input.set_file(file_content) + + +def test_imageinput_set_files(): + """ + Test that the files can be set for the image. + """ + files = [b"image data"] + + # If 'content' is set to 'file', + # the image can be set from the file uploaded to the endpoint. + image_input = ImageInput(content=b"file") + image_input.set_files(files) + assert image_input.content == files[0] + + # If 'numpy' is set to 'file', + # the image can be set from the file uploaded to the endpoint. + image_input = ImageInput(numpy=b"file") + image_input.set_files(files) + assert image_input.numpy == files[0] + + # If neither 'content' nor 'numpy' is set to 'file', + # an error should be raised. + image_input = ImageInput(path="image.png") + with pytest.raises(ValueError): + image_input.set_files(files) + + # If the number of images and files aren't the same, + # an error should be raised. + files = [b"image data", b"another image data"] + image_input = ImageInput(content=b"file") + with pytest.raises(ValidationError): + image_input.set_files(files) + + files = [] + image_input = ImageInput(content=b"file") + with pytest.raises(ValidationError): + image_input.set_files(files) + + +def test_imageinput_convert_input_to_object(): + """ + Test that ImageInput can be converted to Image. + """ + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + image_input = ImageInput(path=str(path)) + try: + image_object = image_input.convert_input_to_object() + assert image_object.path == path + finally: + image_object.cleanup() + + url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/1024px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + image_input = ImageInput(url=url) + try: + image_object = image_input.convert_input_to_object() + assert image_object.url == url + finally: + image_object.cleanup() + + content = Path(path).read_bytes() + image_input = ImageInput(content=content) + try: + image_object = image_input.convert_input_to_object() + assert image_object.content == content + finally: + image_object.cleanup() + + numpy = np.random.rand(100, 100, 3).astype(np.uint8) + # convert numpy array to bytes + buffer = io.BytesIO() + np.save(buffer, numpy) + numpy_bytes = buffer.getvalue() + image_input = ImageInput(numpy=numpy_bytes) + try: + image_object = image_input.convert_input_to_object() + assert np.array_equal(image_object.numpy, numpy) + finally: + image_object.cleanup() + + +def test_imageinput_convert_input_to_object_invalid_numpy(): + """ + Test that ImageInput can't be converted to Image if numpy is invalid. + """ + numpy = np.random.rand(100, 100, 3).astype(np.uint8) + # convert numpy array to bytes + buffer = io.BytesIO() + np.save(buffer, numpy) + numpy_bytes = buffer.getvalue() + # remove the last byte + numpy_bytes = numpy_bytes[:-1] + image_input = ImageInput(numpy=numpy_bytes) + with pytest.raises(ValueError): + image_input.convert_input_to_object() + + +def test_imageinput_convert_input_to_object_numpy_not_set(): + """ + Test that ImageInput can't be converted to Image if numpy file isn't set with set_file(). + """ + image_input = ImageInput(numpy=b"file") + with pytest.raises(ValueError): + image_input.convert_input_to_object() + + +def test_imagelistinput(): + """ + Test that ImageListInput can be created successfully. + """ + + images = [ + ImageInput(path="image.png"), + ImageInput(url="http://image.png"), + ImageInput(content=b"file"), + ImageInput(numpy=b"file"), + ] + + image_list_input = ImageListInput(__root__=images) + assert image_list_input.__root__ == images + assert len(image_list_input) == len(images) + assert image_list_input[0] == images[0] + assert image_list_input[1] == images[1] + assert image_list_input[2] == images[2] + assert image_list_input[3] == images[3] + + +def test_imagelistinput_set_files(): + """ + Test that the files can be set for the images. + """ + files = [b"image data 1", b"image data 2"] + + images = [ + ImageInput(content=b"file"), + ImageInput(numpy=b"file"), + ] + + image_list_input = ImageListInput(__root__=images) + image_list_input.set_files(files) + + assert image_list_input[0].content == files[0] + assert image_list_input[1].numpy == files[1] From 4619d9e6fbc0769d5c1ffd4b0313f15be19cb852 Mon Sep 17 00:00:00 2001 From: movchan74 Date: Fri, 3 Nov 2023 15:03:39 +0000 Subject: [PATCH 03/10] Mock for dowload_file --- aana/tests/test_image.py | 20 ++++++++++++++++---- pyproject.toml | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/aana/tests/test_image.py b/aana/tests/test_image.py index d415a037..04082fe8 100644 --- a/aana/tests/test_image.py +++ b/aana/tests/test_image.py @@ -13,7 +13,19 @@ def load_numpy_from_image_bytes(content: bytes) -> np.ndarray: return image.get_numpy() -def test_image(): +@pytest.fixture +def mock_download_file(mocker): + """ + Mock download_file. + """ + mock = mocker.patch("aana.models.core.image.download_file", autospec=True) + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + content = path.read_bytes() + mock.return_value = content + return mock + + +def test_image(mock_download_file): """ Test that the image can be created from path, url, content, or numpy. """ @@ -36,7 +48,7 @@ def test_image(): image.cleanup() try: - url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/909px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + url = "http://example.com/Starry_Night.jpeg" image = Image(url=url, save_on_disc=False) assert image.path is None assert image.content is None @@ -97,7 +109,7 @@ def test_image_path_not_exist(): Image(path=path) -def test_save_image(): +def test_save_image(mock_download_file): """ Test that save_on_disc works. """ @@ -114,7 +126,7 @@ def test_save_image(): image.cleanup() try: - url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/1024px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + url = "http://example.com/Starry_Night.jpeg" image = Image(url=url, save_on_disc=True) assert image.content is None assert image.numpy is None diff --git a/pyproject.toml b/pyproject.toml index 379db912..610f0437 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ scipy = "^1.11.3" rapidfuzz = "^3.4.0" transformers = "^4.34.1" opencv-python = "^4.8.1.78" +pytest-mock = "^3.12.0" [tool.poetry.group.dev.dependencies] ipykernel = "^6.25.2" From 700937ed00ceb1da15ff257bd8db766fd5c4c539 Mon Sep 17 00:00:00 2001 From: movchan74 Date: Fri, 3 Nov 2023 16:14:45 +0000 Subject: [PATCH 04/10] Added test for HF BLIP2 deployment --- aana/deployments/hf_blip2_deployment.py | 4 +- aana/tests/const.py | 1 + .../deployments/test_hf_blip2_deployment.py | 42 +++++++++++++++++++ .../tests/deployments/test_vllm_deployment.py | 28 +++---------- aana/tests/test_image.py | 4 +- aana/tests/utils.py | 22 ++++++++++ 6 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 aana/tests/const.py create mode 100644 aana/tests/deployments/test_hf_blip2_deployment.py diff --git a/aana/deployments/hf_blip2_deployment.py b/aana/deployments/hf_blip2_deployment.py index 667553b7..21596a55 100644 --- a/aana/deployments/hf_blip2_deployment.py +++ b/aana/deployments/hf_blip2_deployment.py @@ -97,7 +97,7 @@ async def generate_captions(self, **kwargs) -> Dict[str, Any]: Generate captions for the given images. Args: - images (List[ImageInput]): the images + images (List[Image]): the images Returns: Dict[str, Any]: the dictionary with one key "captions" @@ -117,7 +117,7 @@ def _generate_captions(self, images: List[Image]) -> Dict[str, Any]: This method is called by the batch processor. Args: - images (List[ImageInput]): the images + images (List[Image]): the images Returns: Dict[str, Any]: the dictionary with one key "captions" diff --git a/aana/tests/const.py b/aana/tests/const.py new file mode 100644 index 00000000..37f66b3a --- /dev/null +++ b/aana/tests/const.py @@ -0,0 +1 @@ +ALLOWED_LEVENSTEIN_ERROR_RATE = 0.1 diff --git a/aana/tests/deployments/test_hf_blip2_deployment.py b/aana/tests/deployments/test_hf_blip2_deployment.py new file mode 100644 index 00000000..787c87ca --- /dev/null +++ b/aana/tests/deployments/test_hf_blip2_deployment.py @@ -0,0 +1,42 @@ +from importlib import resources +import random +import pytest +import ray +from ray import serve + +from aana.configs.deployments import deployments +from aana.models.core.image import Image +from aana.tests.utils import compare_texts, is_gpu_available + + +def ray_setup(deployment): + # Setup ray environment and serve + ray.init(ignore_reinit_error=True) + app = deployment.bind() + # random port from 30000 to 40000 + port = random.randint(30000, 40000) + handle = serve.run(app, port=port) + return handle + + +@pytest.mark.skipif(not is_gpu_available(), reason="GPU is not available") +@pytest.mark.asyncio +async def test_hf_blip2_deployments(): + for name, deployment in deployments.items(): + # skip if not a VLLM deployment + if deployment.name != "HFBlip2Deployment": + continue + + handle = ray_setup(deployment) + + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + image = Image(path=path, save_on_disc=False) + + images = [image] * 8 + + output = await handle.generate_captions.remote(images=images) + captions = output["captions"] + + assert len(captions) == 8 + for caption in captions: + compare_texts("the starry night by vincent van gogh", caption) diff --git a/aana/tests/deployments/test_vllm_deployment.py b/aana/tests/deployments/test_vllm_deployment.py index 231de644..8601c969 100644 --- a/aana/tests/deployments/test_vllm_deployment.py +++ b/aana/tests/deployments/test_vllm_deployment.py @@ -1,14 +1,11 @@ import random import pytest -import rapidfuzz import ray from ray import serve from aana.configs.deployments import deployments from aana.models.pydantic.sampling_params import SamplingParams -from aana.tests.utils import is_gpu_available - -ALLOWED_LEVENSTEIN_ERROR_RATE = 0.1 +from aana.tests.utils import compare_texts, is_gpu_available def expected_output(name): @@ -36,29 +33,14 @@ def ray_setup(deployment): return handle -def compare_texts(expected_text: str, text: str): - """ - Compare two texts using Levenshtein distance. - The error rate is allowed to be less than ALLOWED_LEVENSTEIN_ERROR_RATE. - - Args: - expected_text (str): the expected text - text (str): the actual text - - Raises: - AssertionError: if the error rate is too high - """ - dist = rapidfuzz.distance.Levenshtein.distance(text, expected_text) - assert dist < len(expected_text) * ALLOWED_LEVENSTEIN_ERROR_RATE, ( - expected_text, - text, - ) - - @pytest.mark.skipif(not is_gpu_available(), reason="GPU is not available") @pytest.mark.asyncio async def test_vllm_deployments(): for name, deployment in deployments.items(): + # skip if not a VLLM deployment + if deployment.name != "VLLMDeployment": + continue + handle = ray_setup(deployment) # test generate method diff --git a/aana/tests/test_image.py b/aana/tests/test_image.py index 04082fe8..5a88d0b8 100644 --- a/aana/tests/test_image.py +++ b/aana/tests/test_image.py @@ -157,13 +157,13 @@ def test_save_image(mock_download_file): image.cleanup() -def test_cleanup(): +def test_cleanup(mock_download_file): """ Test that cleanup works. """ try: - url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/1024px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + url = "http://example.com/Starry_Night.jpeg" image = Image(url=url, save_on_disc=True) assert image.path.exists() finally: diff --git a/aana/tests/utils.py b/aana/tests/utils.py index ee82bfd6..26a185cb 100644 --- a/aana/tests/utils.py +++ b/aana/tests/utils.py @@ -1,5 +1,8 @@ +import rapidfuzz import torch +from aana.tests.const import ALLOWED_LEVENSTEIN_ERROR_RATE + def is_gpu_available() -> bool: """ @@ -10,3 +13,22 @@ def is_gpu_available() -> bool: """ return torch.cuda.is_available() + + +def compare_texts(expected_text: str, text: str): + """ + Compare two texts using Levenshtein distance. + The error rate is allowed to be less than ALLOWED_LEVENSTEIN_ERROR_RATE. + + Args: + expected_text (str): the expected text + text (str): the actual text + + Raises: + AssertionError: if the error rate is too high + """ + dist = rapidfuzz.distance.Levenshtein.distance(text, expected_text) + assert dist < len(expected_text) * ALLOWED_LEVENSTEIN_ERROR_RATE, ( + expected_text, + text, + ) From 5ceec95b29e3ec378f32bc0afebbb93f82a2c294 Mon Sep 17 00:00:00 2001 From: movchan74 Date: Mon, 6 Nov 2023 13:58:23 +0000 Subject: [PATCH 05/10] Updated exceptions --- aana/exceptions/general.py | 13 ++++--------- mobius-pipeline | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/aana/exceptions/general.py b/aana/exceptions/general.py index 5a51aea8..fa19ea51 100644 --- a/aana/exceptions/general.py +++ b/aana/exceptions/general.py @@ -1,4 +1,3 @@ -from typing import Any, Dict, Type from mobius_pipeline.exceptions import BaseException from typing import TYPE_CHECKING @@ -20,9 +19,8 @@ def __init__(self, model_name): Args: model_name (str): name of the model that caused the exception """ - super().__init__() + super().__init__(model_name=model_name) self.model_name = model_name - self.extra["model_name"] = model_name def __reduce__(self): # This method is called when the exception is pickled @@ -47,9 +45,8 @@ def __init__(self, input_name: str): Args: input_name (str): name of the input that caused the exception """ - super().__init__() + super().__init__(input_name=input_name) self.input_name = input_name - self.extra["input_name"] = input_name def __reduce__(self): return (self.__class__, (self.input_name,)) @@ -70,9 +67,8 @@ def __init__(self, image: "Image"): Args: image (Image): the image that caused the exception """ - super().__init__() + super().__init__(image=image) self.image = image - self.extra["image"] = image def __reduce__(self): return (self.__class__, (self.image,)) @@ -93,9 +89,8 @@ def __init__(self, url: str): Args: url (str): the URL of the file that caused the exception """ - super().__init__() + super().__init__(url=url) self.url = url - self.extra["url"] = url def __reduce__(self): return (self.__class__, (self.url,)) diff --git a/mobius-pipeline b/mobius-pipeline index 8bdf633a..f455c656 160000 --- a/mobius-pipeline +++ b/mobius-pipeline @@ -1 +1 @@ -Subproject commit 8bdf633aaa9227b732b56a096ae04c6ebe4e8060 +Subproject commit f455c656da566866f031d74d8676bef0f558b4f3 From 4d55ca6ff0f987b2e98e8d206d97e22a88a67e29 Mon Sep 17 00:00:00 2001 From: movchan74 Date: Mon, 6 Nov 2023 16:30:47 +0000 Subject: [PATCH 06/10] Added setting for the app --- aana/configs/settings.py | 14 ++++++++++++++ aana/models/core/image.py | 6 ++---- aana/tests/test_settings.py | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 aana/configs/settings.py create mode 100644 aana/tests/test_settings.py diff --git a/aana/configs/settings.py b/aana/configs/settings.py new file mode 100644 index 00000000..36716463 --- /dev/null +++ b/aana/configs/settings.py @@ -0,0 +1,14 @@ +from pathlib import Path +from pydantic import BaseSettings + + +class Settings(BaseSettings): + """ + A pydantic model for SDK settings. + + """ + + tmp_data_dir: Path = Path("/tmp/aana/data") + + +settings = Settings() diff --git a/aana/models/core/image.py b/aana/models/core/image.py index eabefd9f..4c8bf474 100644 --- a/aana/models/core/image.py +++ b/aana/models/core/image.py @@ -7,14 +7,12 @@ import cv2 import numpy as np +from aana.configs.settings import settings from aana.exceptions.general import ImageReadingException from aana.utils.general import download_file -TMP_DATA_DIR = Path("/tmp/aana/data") - - class AbstractImageLibrary: """ Abstract class for image libraries. @@ -192,7 +190,7 @@ def save_image(self): if self.path: return - file_dir = TMP_DATA_DIR / "images" + file_dir = settings.tmp_data_dir / "images" file_dir.mkdir(parents=True, exist_ok=True) file_path = file_dir / (self.image_id + ".bmp") diff --git a/aana/tests/test_settings.py b/aana/tests/test_settings.py new file mode 100644 index 00000000..d69a457a --- /dev/null +++ b/aana/tests/test_settings.py @@ -0,0 +1,16 @@ +from pathlib import Path +from aana.configs.settings import Settings + + +def test_default_tmp_data_dir(): + """Test that the default temporary data directory is set correctly.""" + settings = Settings() + assert settings.tmp_data_dir == Path("/tmp/aana/data") + + +def test_custom_tmp_data_dir(monkeypatch): + """Test that the custom temporary data directory with environment variable is set correctly.""" + test_path = "/tmp/override/path" + monkeypatch.setenv("TMP_DATA_DIR", test_path) + settings = Settings() + assert settings.tmp_data_dir == Path(test_path) From 82758a7d109bd5e8abc47e13c71a830ddf72ef31 Mon Sep 17 00:00:00 2001 From: movchan74 Date: Mon, 6 Nov 2023 17:11:56 +0000 Subject: [PATCH 07/10] Fixed the ImageInput test --- aana/tests/test_image_input.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/aana/tests/test_image_input.py b/aana/tests/test_image_input.py index 901aa948..3a1cced8 100644 --- a/aana/tests/test_image_input.py +++ b/aana/tests/test_image_input.py @@ -7,6 +7,18 @@ from aana.models.pydantic.image_input import ImageInput, ImageListInput +@pytest.fixture +def mock_download_file(mocker): + """ + Mock download_file. + """ + mock = mocker.patch("aana.models.core.image.download_file", autospec=True) + path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + content = path.read_bytes() + mock.return_value = content + return mock + + def test_new_imageinput_success(): """ Test that ImageInput can be created successfully. @@ -127,7 +139,7 @@ def test_imageinput_set_files(): image_input.set_files(files) -def test_imageinput_convert_input_to_object(): +def test_imageinput_convert_input_to_object(mock_download_file): """ Test that ImageInput can be converted to Image. """ @@ -139,7 +151,7 @@ def test_imageinput_convert_input_to_object(): finally: image_object.cleanup() - url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/1024px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg" + url = "http://example.com/Starry_Night.jpeg" image_input = ImageInput(url=url) try: image_object = image_input.convert_input_to_object() From 077eae79f33c8d6367419077895e9cc5f8eda84f Mon Sep 17 00:00:00 2001 From: movchan74 Date: Wed, 8 Nov 2023 10:53:17 +0000 Subject: [PATCH 08/10] Implemented suggestions from PR review --- aana/deployments/hf_blip2_deployment.py | 2 +- aana/models/core/dtype.py | 19 ++--- aana/models/core/image.py | 93 ++++++++++------------ aana/models/pydantic/exception_response.py | 2 +- aana/models/pydantic/image_input.py | 24 +++++- aana/tests/test_image_input.py | 8 ++ 6 files changed, 79 insertions(+), 69 deletions(-) diff --git a/aana/deployments/hf_blip2_deployment.py b/aana/deployments/hf_blip2_deployment.py index 21596a55..249f8eb4 100644 --- a/aana/deployments/hf_blip2_deployment.py +++ b/aana/deployments/hf_blip2_deployment.py @@ -83,7 +83,7 @@ async def apply_config(self, config: Dict[str, Any]): # Load the model and processor for BLIP2 from HuggingFace self.model_id = config_obj.model self.dtype = config_obj.dtype - self.torch_dtype = Dtype.to_torch(self.dtype) + self.torch_dtype = self.dtype.to_torch() self.model = Blip2ForConditionalGeneration.from_pretrained( self.model_id, torch_dtype=self.torch_dtype ) diff --git a/aana/models/core/dtype.py b/aana/models/core/dtype.py index 9e044279..65d152de 100644 --- a/aana/models/core/dtype.py +++ b/aana/models/core/dtype.py @@ -22,13 +22,9 @@ class Dtype(str, Enum): FLOAT16 = "float16" INT8 = "int8" - @classmethod - def to_torch(cls, dtype: "Dtype") -> Union[torch.dtype, str]: + def to_torch(self) -> Union[torch.dtype, str]: """ - Convert a dtype to a torch dtype. - - Args: - dtype (Dtype): the dtype + Convert the instance's dtype to a torch dtype. Returns: Union[torch.dtype, str]: the torch dtype or "auto" @@ -36,14 +32,13 @@ def to_torch(cls, dtype: "Dtype") -> Union[torch.dtype, str]: Raises: ValueError: if the dtype is unknown """ - - if dtype == cls.AUTO: + if self.value == self.AUTO: return "auto" - elif dtype == cls.FLOAT32: + elif self.value == self.FLOAT32: return torch.float32 - elif dtype == cls.FLOAT16: + elif self.value == self.FLOAT16: return torch.float16 - elif dtype == cls.INT8: + elif self.value == self.INT8: return torch.int8 else: - raise ValueError(f"Unknown dtype: {dtype}") + raise ValueError(f"Unknown dtype: {self}") diff --git a/aana/models/core/image.py b/aana/models/core/image.py index 4c8bf474..f353d273 100644 --- a/aana/models/core/image.py +++ b/aana/models/core/image.py @@ -147,12 +147,22 @@ class Image: image_lib: Type[ AbstractImageLibrary ] = OpenCVWrapper # The image library to use, TODO: add support for PIL and allow to choose the library - saved: bool = False # Whether the image is saved on disc by the class or not (used for cleanup) + is_saved: bool = False # Whether the image is saved on disc by the class or not (used for cleanup) def __post_init__(self): """ - Save the image on disc after initialization if save_on_disc is True. + Post-initialization method. + + Performs checks: + - Checks that path is a Path object. + - Checks that at least one of 'path', 'url', 'content' or 'numpy' is provided. + - Checks if path exists if provided. + + Saves the image on disk if needed. """ + # check that path is a Path object + if self.path: + assert isinstance(self.path, Path) # check that at least one of 'path', 'url', 'content' or 'numpy' is provided if not any( [ @@ -205,7 +215,7 @@ def save_image(self): "At least one of 'path', 'url', 'content' or 'numpy' must be provided." ) self.path = file_path - self.saved = True + self.is_saved = True def save_from_content(self, file_path: Path): """ @@ -235,7 +245,9 @@ def save_from_url(self, file_path: Path): Args: file_path (Path): The path of the file to write. """ - self.image_lib.write_file(file_path, self.load_numpy_from_url()) + assert self.url is not None + content = download_file(self.url) + file_path.write_bytes(content) def get_numpy(self) -> np.ndarray: """ @@ -251,76 +263,63 @@ def get_numpy(self) -> np.ndarray: if self.numpy is not None: return self.numpy elif self.path: - self.numpy = self.load_numpy_from_path() + self.load_numpy_from_path() elif self.url: - self.numpy = self.load_numpy_from_url() + self.load_numpy_from_url() elif self.content: - self.numpy = self.load_numpy_from_content() + self.load_numpy_from_content() else: raise ValueError( "At least one of 'path', 'url', 'content' or 'numpy' must be provided." ) + assert self.numpy is not None return self.numpy - def load_numpy_from_path(self) -> np.ndarray: + def load_numpy_from_path(self): """ Load the image as a numpy array from a path. - Returns: - np.ndarray: The image as a numpy array. - Raises: ImageReadingException: If there is an error reading the image. """ assert self.path is not None try: - numpy = self.image_lib.read_file(self.path) + self.numpy = self.image_lib.read_file(self.path) except Exception as e: raise ImageReadingException(self) from e - return numpy - def load_numpy_from_image_bytes(self, img_bytes: bytes) -> np.ndarray: + def load_numpy_from_image_bytes(self, img_bytes: bytes): """ Load the image as a numpy array from image bytes (downloaded from URL or read from file). - Returns: - np.ndarray: The image as a numpy array. - Raises: ImageReadingException: If there is an error reading the image. """ try: - numpy = self.image_lib.read_bytes(img_bytes) + self.numpy = self.image_lib.read_bytes(img_bytes) except Exception as e: raise ImageReadingException(self) from e - return numpy - def load_numpy_from_url(self) -> np.ndarray: + def load_numpy_from_url(self): """ Load the image as a numpy array from a URL. - Returns: - np.ndarray: The image as a numpy array. - Raises: ImageReadingException: If there is an error reading the image. """ assert self.url is not None content: bytes = download_file(self.url) - return self.load_numpy_from_image_bytes(content) + self.load_numpy_from_image_bytes(content) - def load_numpy_from_content(self) -> np.ndarray: + def load_numpy_from_content(self): """ Load the image as a numpy array from content. - Returns: - np.ndarray: The image as a numpy array. - Raises: ImageReadingException: If there is an error reading the image. """ assert self.content is not None - return self.load_numpy_from_image_bytes(self.content) + self.load_numpy_from_image_bytes(self.content) def get_content(self) -> bytes: """ @@ -335,57 +334,45 @@ def get_content(self) -> bytes: if self.content: return self.content elif self.path: - self.content = self.load_content_from_path() + self.load_content_from_path() elif self.url: - self.content = self.load_content_from_url() + self.load_content_from_url() elif self.numpy is not None: - self.content = self.load_content_from_numpy() + self.load_content_from_numpy() else: raise ValueError( "At least one of 'path', 'url', 'content' or 'numpy' must be provided." ) + assert self.content is not None return self.content - def load_content_from_numpy(self) -> bytes: + def load_content_from_numpy(self): """ Load the content of the image from numpy. - - Note: This method is not implemented yet. - - Returns: - bytes: The content of the image as bytes. """ assert self.numpy is not None - return self.image_lib.write_bytes(self.numpy) + self.content = self.image_lib.write_bytes(self.numpy) - def load_content_from_path(self) -> bytes: + def load_content_from_path(self): """ Load the content of the image from the path. - Returns: - bytes: The content of the image as bytes. - Raises: FileNotFoundError: If the image file does not exist. """ assert self.path is not None with open(self.path, "rb") as f: - content = f.read() - return content + self.content = f.read() - def load_content_from_url(self) -> bytes: + def load_content_from_url(self): """ Load the content of the image from the URL using requests. - Returns: - bytes: The content of the image as bytes. - Raises: DownloadException: If there is an error downloading the image. """ assert self.url is not None - content = download_file(self.url) - return content + self.content = download_file(self.url) def __repr__(self) -> str: """ @@ -429,5 +416,5 @@ def cleanup(self): Remove the image from disc if it was saved by the class. """ # Remove the image from disc if it was saved by the class - if self.saved and self.path and os.path.exists(self.path): - os.remove(self.path) + if self.is_saved and self.path: + self.path.unlink(missing_ok=True) diff --git a/aana/models/pydantic/exception_response.py b/aana/models/pydantic/exception_response.py index 6bb9f635..0ced696b 100644 --- a/aana/models/pydantic/exception_response.py +++ b/aana/models/pydantic/exception_response.py @@ -9,7 +9,7 @@ class ExceptionResponseModel(BaseModel): Attributes: error (str): The error that occurred. message (str): The message of the error. - data (Optional[Dict]): The extra data that helps to debug the error. + data (Optional[Any]): The extra data that helps to debug the error. stacktrace (Optional[str]): The stacktrace of the error. """ diff --git a/aana/models/pydantic/image_input.py b/aana/models/pydantic/image_input.py index 1af8474a..9019abd3 100644 --- a/aana/models/pydantic/image_input.py +++ b/aana/models/pydantic/image_input.py @@ -2,7 +2,7 @@ from pathlib import Path import numpy as np from typing import Dict, List, Optional -from pydantic import BaseModel, Field, ValidationError, root_validator +from pydantic import BaseModel, Field, ValidationError, root_validator, validator from pydantic.error_wrappers import ErrorWrapper from aana.models.core.image import Image @@ -27,7 +27,9 @@ class ImageInput(BaseModel): """ path: Optional[str] = Field(None, description="The file path of the image.") - url: Optional[str] = Field(None, description="The URL of the image.") + url: Optional[str] = Field( + None, description="The URL of the image." + ) # TODO: validate url content: Optional[bytes] = Field( None, description=( @@ -161,6 +163,24 @@ class ImageListInput(BaseListModel): __root__: List[ImageInput] + @validator("__root__", pre=True) + def check_non_empty(cls, v: List[ImageInput]) -> List[ImageInput]: + """ + Check that the list of images isn't empty. + + Args: + v (List[ImageInput]): the list of images + + Returns: + List[ImageInput]: the list of images + + Raises: + ValueError: if the list of images is empty + """ + if len(v) == 0: + raise ValueError("The list of images must not be empty.") + return v + def set_files(self, files: List[bytes]): """ Set the files for the images. diff --git a/aana/tests/test_image_input.py b/aana/tests/test_image_input.py index 3a1cced8..1591c187 100644 --- a/aana/tests/test_image_input.py +++ b/aana/tests/test_image_input.py @@ -242,3 +242,11 @@ def test_imagelistinput_set_files(): assert image_list_input[0].content == files[0] assert image_list_input[1].numpy == files[1] + + +def test_imagelistinput_non_empty(): + """ + Test that ImageListInput must not be empty. + """ + with pytest.raises(ValidationError): + ImageListInput(__root__=[]) From bc1c60971da1674672e9f043d3b6d140e4f57cd8 Mon Sep 17 00:00:00 2001 From: Aleksandr Movchan Date: Thu, 9 Nov 2023 16:11:54 +0000 Subject: [PATCH 09/10] Applied requested changes from PR --- aana/configs/settings.py | 2 +- aana/deployments/hf_blip2_deployment.py | 23 ++++++--- aana/deployments/vllm_deployment.py | 47 ++++++++++++++---- aana/models/core/dtype.py | 21 ++++---- aana/models/core/image.py | 48 ++++++++++--------- .../deployments/test_hf_blip2_deployment.py | 2 +- aana/tests/test_batch_processor.py | 19 +++++--- aana/tests/test_image.py | 26 +++++----- aana/tests/test_settings.py | 2 +- 9 files changed, 118 insertions(+), 72 deletions(-) diff --git a/aana/configs/settings.py b/aana/configs/settings.py index 36716463..44a661dd 100644 --- a/aana/configs/settings.py +++ b/aana/configs/settings.py @@ -8,7 +8,7 @@ class Settings(BaseSettings): """ - tmp_data_dir: Path = Path("/tmp/aana/data") + tmp_data_dir: Path = Path("/tmp/aana_data") settings = Settings() diff --git a/aana/deployments/hf_blip2_deployment.py b/aana/deployments/hf_blip2_deployment.py index 249f8eb4..800bfe14 100644 --- a/aana/deployments/hf_blip2_deployment.py +++ b/aana/deployments/hf_blip2_deployment.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List +from typing import Any, Dict, List, TypedDict from pydantic import BaseModel, Field, validator from ray import serve import torch @@ -48,6 +48,17 @@ def validate_dtype(cls, value: Dtype) -> Dtype: return value +class CaptioningOutput(TypedDict): + """ + The output of the captioning model. + + Attributes: + captions (List[str]): the list of captions + """ + + captions: List[str] + + @serve.deployment class HFBlip2Deployment(BaseDeployment): """ @@ -92,7 +103,7 @@ async def apply_config(self, config: Dict[str, Any]): self.device = "cuda" if torch.cuda.is_available() else "cpu" self.model.to(self.device) - async def generate_captions(self, **kwargs) -> Dict[str, Any]: + async def generate_captions(self, **kwargs) -> CaptioningOutput: """ Generate captions for the given images. @@ -100,7 +111,7 @@ async def generate_captions(self, **kwargs) -> Dict[str, Any]: images (List[Image]): the images Returns: - Dict[str, Any]: the dictionary with one key "captions" + CaptioningOutput: the dictionary with one key "captions" and the list of captions for the images as value Raises: @@ -110,7 +121,7 @@ async def generate_captions(self, **kwargs) -> Dict[str, Any]: # The actual inference is done in _generate_captions() return await self.batch_processor.process(kwargs) - def _generate_captions(self, images: List[Image]) -> Dict[str, Any]: + def _generate_captions(self, images: List[Image]) -> CaptioningOutput: """ Generate captions for the given images. @@ -120,7 +131,7 @@ def _generate_captions(self, images: List[Image]) -> Dict[str, Any]: images (List[Image]): the images Returns: - Dict[str, Any]: the dictionary with one key "captions" + CaptioningOutput: the dictionary with one key "captions" and the list of captions for the images as value Raises: @@ -141,6 +152,6 @@ def _generate_captions(self, images: List[Image]) -> Dict[str, Any]: generated_texts = [ generated_text.strip() for generated_text in generated_texts ] - return {"captions": generated_texts} + return CaptioningOutput(captions=generated_texts) except Exception as e: raise InferenceException(self.model_id) from e diff --git a/aana/deployments/vllm_deployment.py b/aana/deployments/vllm_deployment.py index 1175c783..a58a9d69 100644 --- a/aana/deployments/vllm_deployment.py +++ b/aana/deployments/vllm_deployment.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List, Optional +from typing import Any, AsyncGenerator, Dict, List, Optional, TypedDict from pydantic import BaseModel, Field from ray import serve from vllm.engine.arg_utils import AsyncEngineArgs @@ -34,6 +34,28 @@ class VLLMConfig(BaseModel): max_model_len: Optional[int] = Field(default=None) +class LLMOutput(TypedDict): + """ + The output of the LLM model. + + Attributes: + text (str): the generated text + """ + + text: str + + +class LLMBatchOutput(TypedDict): + """ + The output of the LLM model for a batch of inputs. + + Attributes: + texts (List[str]): the list of generated texts + """ + + texts: List[str] + + @serve.deployment class VLLMDeployment(BaseDeployment): """ @@ -78,7 +100,9 @@ async def apply_config(self, config: Dict[str, Any]): # create the engine self.engine = AsyncLLMEngine.from_engine_args(args) - async def generate_stream(self, prompt: str, sampling_params: SamplingParams): + async def generate_stream( + self, prompt: str, sampling_params: SamplingParams + ) -> AsyncGenerator[LLMOutput, None]: """ Generate completion for the given prompt and stream the results. @@ -87,7 +111,7 @@ async def generate_stream(self, prompt: str, sampling_params: SamplingParams): sampling_params (SamplingParams): the sampling parameters Yields: - dict: the generated text + LLMOutput: the dictionary with the key "text" and the generated text as the value """ prompt = str(prompt) sampling_params = merged_options(self.default_sampling_params, sampling_params) @@ -108,7 +132,7 @@ async def generate_stream(self, prompt: str, sampling_params: SamplingParams): num_returned = 0 async for request_output in results_generator: text_output = request_output.outputs[0].text[num_returned:] - yield {"text": text_output} + yield LLMOutput(text=text_output) num_returned += len(text_output) except GeneratorExit as e: # If the generator is cancelled, we need to cancel the request @@ -118,7 +142,7 @@ async def generate_stream(self, prompt: str, sampling_params: SamplingParams): except Exception as e: raise InferenceException(model_name=self.model) from e - async def generate(self, prompt: str, sampling_params: SamplingParams): + async def generate(self, prompt: str, sampling_params: SamplingParams) -> LLMOutput: """ Generate completion for the given prompt. @@ -127,14 +151,16 @@ async def generate(self, prompt: str, sampling_params: SamplingParams): sampling_params (SamplingParams): the sampling parameters Returns: - dict: the generated text + LLMOutput: the dictionary with the key "text" and the generated text as the value """ generated_text = "" async for chunk in self.generate_stream(prompt, sampling_params): generated_text += chunk["text"] - return {"text": generated_text} + return LLMOutput(text=generated_text) - async def generate_batch(self, prompts: List[str], sampling_params: SamplingParams): + async def generate_batch( + self, prompts: List[str], sampling_params: SamplingParams + ) -> LLMBatchOutput: """ Generate completion for the batch of prompts. @@ -143,11 +169,12 @@ async def generate_batch(self, prompts: List[str], sampling_params: SamplingPara sampling_params (SamplingParams): the sampling parameters Returns: - dict: the generated texts + LLMBatchOutput: the dictionary with the key "texts" + and the list of generated texts as the value """ texts = [] for prompt in prompts: text = await self.generate(prompt, sampling_params) texts.append(text["text"]) - return {"texts": texts} + return LLMBatchOutput(texts=texts) diff --git a/aana/models/core/dtype.py b/aana/models/core/dtype.py index 65d152de..c656c6c1 100644 --- a/aana/models/core/dtype.py +++ b/aana/models/core/dtype.py @@ -32,13 +32,14 @@ def to_torch(self) -> Union[torch.dtype, str]: Raises: ValueError: if the dtype is unknown """ - if self.value == self.AUTO: - return "auto" - elif self.value == self.FLOAT32: - return torch.float32 - elif self.value == self.FLOAT16: - return torch.float16 - elif self.value == self.INT8: - return torch.int8 - else: - raise ValueError(f"Unknown dtype: {self}") + match self.value: + case self.AUTO: + return "auto" + case self.FLOAT32: + return torch.float32 + case self.FLOAT16: + return torch.float16 + case self.INT8: + return torch.int8 + case _: + raise ValueError(f"Unknown dtype: {self}") diff --git a/aana/models/core/image.py b/aana/models/core/image.py index f353d273..22ae8dbe 100644 --- a/aana/models/core/image.py +++ b/aana/models/core/image.py @@ -32,7 +32,7 @@ def read_file(cls, path: Path) -> np.ndarray: raise NotImplementedError @classmethod - def read_bytes(cls, content: bytes) -> np.ndarray: + def read_from_bytes(cls, content: bytes) -> np.ndarray: """ Read bytes using the image library. @@ -56,7 +56,7 @@ def write_file(cls, path: Path, img: np.ndarray): raise NotImplementedError @classmethod - def write_bytes(cls, img: np.ndarray) -> bytes: + def write_to_bytes(cls, img: np.ndarray) -> bytes: """ Write bytes using the image library. @@ -90,7 +90,7 @@ def read_file(cls, path: Path) -> np.ndarray: return img @classmethod - def read_bytes(cls, content: bytes) -> np.ndarray: + def read_from_bytes(cls, content: bytes) -> np.ndarray: """ Read bytes using OpenCV. @@ -117,7 +117,7 @@ def write_file(cls, path: Path, img: np.ndarray): cv2.imwrite(str(path), img) @classmethod - def write_bytes(cls, img: np.ndarray) -> bytes: + def write_to_bytes(cls, img: np.ndarray) -> bytes: """ Write bytes using OpenCV. @@ -143,11 +143,11 @@ class Image: image_id: Optional[str] = field( default_factory=lambda: str(uuid.uuid4()) ) # The ID of the image, generated automatically - save_on_disc: bool = True # Whether to save the image on disc or not + save_on_disk: bool = True # Whether to save the image on disk or not image_lib: Type[ AbstractImageLibrary ] = OpenCVWrapper # The image library to use, TODO: add support for PIL and allow to choose the library - is_saved: bool = False # Whether the image is saved on disc by the class or not (used for cleanup) + is_saved: bool = False # Whether the image is saved on disk by the class or not (used for cleanup) def __post_init__(self): """ @@ -162,7 +162,9 @@ def __post_init__(self): """ # check that path is a Path object if self.path: - assert isinstance(self.path, Path) + if not isinstance(self.path, Path): + raise ValueError("Path must be a Path object.") + # check that at least one of 'path', 'url', 'content' or 'numpy' is provided if not any( [ @@ -180,18 +182,18 @@ def __post_init__(self): if self.path and not self.path.exists(): raise FileNotFoundError(f"Image file not found: {self.path}") - if self.save_on_disc: - self.save_image() + if self.save_on_disk: + self.save() - def save_image(self): + def save(self): """ - Save the image on disc. - If the image is already available on disc, do nothing. - If the image represented as a byte string, save it on disc. - If the image is represented as a URL, download it and save it on disc. - If the image is represented as a numpy array, convert it to BMP and save it on disc. + Save the image on disk. + If the image is already available on disk, do nothing. + If the image represented as a byte string, save it on disk. + If the image is represented as a URL, download it and save it on disk. + If the image is represented as a numpy array, convert it to BMP and save it on disk. - First check if the image is already available on disc, then content, then url, then numpy + First check if the image is already available on disk, then content, then url, then numpy to avoid unnecessary operations (e.g. downloading the image or converting it to BMP). Raises: @@ -219,7 +221,7 @@ def save_image(self): def save_from_content(self, file_path: Path): """ - Save the image from content on disc. + Save the image from content on disk. Args: file_path (Path): The path of the file to write. @@ -230,7 +232,7 @@ def save_from_content(self, file_path: Path): def save_from_numpy(self, file_path: Path): """ - Save the image from numpy on disc. + Save the image from numpy on disk. Args: file_path (Path): The path of the file to write. @@ -240,7 +242,7 @@ def save_from_numpy(self, file_path: Path): def save_from_url(self, file_path: Path): """ - Save the image from URL on disc. + Save the image from URL on disk. Args: file_path (Path): The path of the file to write. @@ -296,7 +298,7 @@ def load_numpy_from_image_bytes(self, img_bytes: bytes): ImageReadingException: If there is an error reading the image. """ try: - self.numpy = self.image_lib.read_bytes(img_bytes) + self.numpy = self.image_lib.read_from_bytes(img_bytes) except Exception as e: raise ImageReadingException(self) from e @@ -351,7 +353,7 @@ def load_content_from_numpy(self): Load the content of the image from numpy. """ assert self.numpy is not None - self.content = self.image_lib.write_bytes(self.numpy) + self.content = self.image_lib.write_to_bytes(self.numpy) def load_content_from_path(self): """ @@ -413,8 +415,8 @@ def cleanup(self): """ Cleanup the image. - Remove the image from disc if it was saved by the class. + Remove the image from disk if it was saved by the class. """ - # Remove the image from disc if it was saved by the class + # Remove the image from disk if it was saved by the class if self.is_saved and self.path: self.path.unlink(missing_ok=True) diff --git a/aana/tests/deployments/test_hf_blip2_deployment.py b/aana/tests/deployments/test_hf_blip2_deployment.py index 787c87ca..3c501967 100644 --- a/aana/tests/deployments/test_hf_blip2_deployment.py +++ b/aana/tests/deployments/test_hf_blip2_deployment.py @@ -30,7 +30,7 @@ async def test_hf_blip2_deployments(): handle = ray_setup(deployment) path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") - image = Image(path=path, save_on_disc=False) + image = Image(path=path, save_on_disk=False) images = [image] * 8 diff --git a/aana/tests/test_batch_processor.py b/aana/tests/test_batch_processor.py index d6a888be..c2ff6923 100644 --- a/aana/tests/test_batch_processor.py +++ b/aana/tests/test_batch_processor.py @@ -3,20 +3,24 @@ from aana.utils.batch_processor import BatchProcessor +NUM_IMAGES = 5 +IMAGE_SIZE = 100 +FEATURE_SIZE = 10 + @pytest.fixture def images(): - return np.array([np.random.rand(100, 100) for _ in range(5)]) # 5 images + return np.array([np.random.rand(IMAGE_SIZE, IMAGE_SIZE) for _ in range(NUM_IMAGES)]) @pytest.fixture def texts(): - return ["text1", "text2", "text3", "text4", "text5"] + return [f"text{i}" for i in range(NUM_IMAGES)] @pytest.fixture def features(): - return np.random.rand(5, 10) # 5 features of size 10 + return np.random.rand(NUM_IMAGES, FEATURE_SIZE) @pytest.fixture @@ -40,7 +44,8 @@ def test_batch_iterator(request_batch, process_batch): ) batches = list(processor.batch_iterator(request_batch)) - assert len(batches) == 3 # We expect 3 batches with a batch_size of 2 for 5 items + # We expect 3 batches with a batch_size of 2 for 5 items + assert len(batches) == NUM_IMAGES // batch_size + 1 assert all( len(batch["texts"]) == batch_size for batch in batches[:-1] ) # All but the last should have batch_size items @@ -59,11 +64,11 @@ async def test_process_batches(request_batch, process_batch): result = await processor.process(request_batch) # Ensure all texts are processed - assert len(result["texts"]) == 5 + assert len(result["texts"]) == NUM_IMAGES # Check if images are concatenated properly - assert result["images"].shape == (5, 100, 100) + assert result["images"].shape == (NUM_IMAGES, IMAGE_SIZE, IMAGE_SIZE) # Check if features are concatenated properly - assert result["features"].shape == (5, 10) + assert result["features"].shape == (NUM_IMAGES, FEATURE_SIZE) def test_merge_outputs(request_batch, process_batch): diff --git a/aana/tests/test_image.py b/aana/tests/test_image.py index 5a88d0b8..e1cfc767 100644 --- a/aana/tests/test_image.py +++ b/aana/tests/test_image.py @@ -9,7 +9,7 @@ def load_numpy_from_image_bytes(content: bytes) -> np.ndarray: """ Load a numpy array from image bytes. """ - image = Image(content=content, save_on_disc=False) + image = Image(content=content, save_on_disk=False) return image.get_numpy() @@ -32,7 +32,7 @@ def test_image(mock_download_file): try: path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") - image = Image(path=path, save_on_disc=False) + image = Image(path=path, save_on_disk=False) assert image.path == path assert image.content is None assert image.numpy is None @@ -49,7 +49,7 @@ def test_image(mock_download_file): try: url = "http://example.com/Starry_Night.jpeg" - image = Image(url=url, save_on_disc=False) + image = Image(url=url, save_on_disk=False) assert image.path is None assert image.content is None assert image.numpy is None @@ -67,7 +67,7 @@ def test_image(mock_download_file): try: path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") content = path.read_bytes() - image = Image(content=content, save_on_disc=False) + image = Image(content=content, save_on_disk=False) assert image.path is None assert image.content == content assert image.numpy is None @@ -84,7 +84,7 @@ def test_image(mock_download_file): try: numpy = np.random.rand(100, 100, 3).astype(np.uint8) - image = Image(numpy=numpy, save_on_disc=False) + image = Image(numpy=numpy, save_on_disk=False) assert image.path is None assert image.content is None assert np.array_equal(image.numpy, numpy) @@ -111,12 +111,12 @@ def test_image_path_not_exist(): def test_save_image(mock_download_file): """ - Test that save_on_disc works. + Test that save_on_disk works. """ try: path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") - image = Image(path=path, save_on_disc=True) + image = Image(path=path, save_on_disk=True) assert image.path == path assert image.content is None assert image.numpy is None @@ -127,7 +127,7 @@ def test_save_image(mock_download_file): try: url = "http://example.com/Starry_Night.jpeg" - image = Image(url=url, save_on_disc=True) + image = Image(url=url, save_on_disk=True) assert image.content is None assert image.numpy is None assert image.url == url @@ -138,7 +138,7 @@ def test_save_image(mock_download_file): try: path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") content = path.read_bytes() - image = Image(content=content, save_on_disc=True) + image = Image(content=content, save_on_disk=True) assert image.content == content assert image.numpy is None assert image.url is None @@ -148,7 +148,7 @@ def test_save_image(mock_download_file): try: numpy = np.random.rand(100, 100, 3).astype(np.uint8) - image = Image(numpy=numpy, save_on_disc=True) + image = Image(numpy=numpy, save_on_disk=True) assert image.content is None assert np.array_equal(image.numpy, numpy) assert image.url is None @@ -164,7 +164,7 @@ def test_cleanup(mock_download_file): try: url = "http://example.com/Starry_Night.jpeg" - image = Image(url=url, save_on_disc=True) + image = Image(url=url, save_on_disk=True) assert image.path.exists() finally: image.cleanup() @@ -176,7 +176,7 @@ def test_at_least_one_input(): Test that at least one input is provided. """ with pytest.raises(ValueError): - Image(save_on_disc=False) + Image(save_on_disk=False) with pytest.raises(ValueError): - Image(save_on_disc=True) + Image(save_on_disk=True) diff --git a/aana/tests/test_settings.py b/aana/tests/test_settings.py index d69a457a..cbd16f3c 100644 --- a/aana/tests/test_settings.py +++ b/aana/tests/test_settings.py @@ -5,7 +5,7 @@ def test_default_tmp_data_dir(): """Test that the default temporary data directory is set correctly.""" settings = Settings() - assert settings.tmp_data_dir == Path("/tmp/aana/data") + assert settings.tmp_data_dir == Path("/tmp/aana_data") def test_custom_tmp_data_dir(monkeypatch): From 8e93fded437ced09cf12260852c84a4cac632c94 Mon Sep 17 00:00:00 2001 From: Aleksandr Movchan Date: Fri, 10 Nov 2023 14:10:52 +0000 Subject: [PATCH 10/10] Changed methods of BLIP2 deployment to be consistent with VLLM deployment --- aana/configs/pipeline.py | 2 +- aana/deployments/hf_blip2_deployment.py | 48 +++++++++++++++---- .../deployments/test_hf_blip2_deployment.py | 16 +++++-- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/aana/configs/pipeline.py b/aana/configs/pipeline.py index a8e39454..81ca9857 100644 --- a/aana/configs/pipeline.py +++ b/aana/configs/pipeline.py @@ -155,7 +155,7 @@ "name": "hf_blip2_opt_2_7b", "type": "ray_deployment", "deployment_name": "hf_blip2_deployment_opt_2_7b", - "method": "generate_captions", + "method": "generate_batch", "inputs": [ { "name": "images", diff --git a/aana/deployments/hf_blip2_deployment.py b/aana/deployments/hf_blip2_deployment.py index 800bfe14..f5b5c677 100644 --- a/aana/deployments/hf_blip2_deployment.py +++ b/aana/deployments/hf_blip2_deployment.py @@ -52,6 +52,17 @@ class CaptioningOutput(TypedDict): """ The output of the captioning model. + Attributes: + caption (str): the caption + """ + + caption: str + + +class CaptioningBatchOutput(TypedDict): + """ + The output of the captioning model. + Attributes: captions (List[str]): the list of captions """ @@ -82,11 +93,11 @@ async def apply_config(self, config: Dict[str, Any]): # and process them in parallel self.batch_size = config_obj.batch_size self.num_processing_threads = config_obj.num_processing_threads - # The actual inference is done in _generate_captions() + # The actual inference is done in _generate() # We use lambda because BatchProcessor expects dict as input - # and we use **kwargs to unpack the dict into named arguments for _generate_captions() + # and we use **kwargs to unpack the dict into named arguments for _generate() self.batch_processor = BatchProcessor( - process_batch=lambda request: self._generate_captions(**request), + process_batch=lambda request: self._generate(**request), batch_size=self.batch_size, num_threads=self.num_processing_threads, ) @@ -103,7 +114,26 @@ async def apply_config(self, config: Dict[str, Any]): self.device = "cuda" if torch.cuda.is_available() else "cpu" self.model.to(self.device) - async def generate_captions(self, **kwargs) -> CaptioningOutput: + async def generate(self, image: Image) -> CaptioningOutput: + """ + Generate captions for the given image. + + Args: + image (Image): the image + + Returns: + CaptioningOutput: the dictionary with one key "captions" + and the list of captions for the image as value + + Raises: + InferenceException: if the inference fails + """ + captions: CaptioningBatchOutput = await self.batch_processor.process( + {"images": [image]} + ) + return CaptioningOutput(caption=captions["captions"][0]) + + async def generate_batch(self, **kwargs) -> CaptioningBatchOutput: """ Generate captions for the given images. @@ -111,17 +141,17 @@ async def generate_captions(self, **kwargs) -> CaptioningOutput: images (List[Image]): the images Returns: - CaptioningOutput: the dictionary with one key "captions" + CaptioningBatchOutput: the dictionary with one key "captions" and the list of captions for the images as value Raises: InferenceException: if the inference fails """ # Call the batch processor to process the requests - # The actual inference is done in _generate_captions() + # The actual inference is done in _generate() return await self.batch_processor.process(kwargs) - def _generate_captions(self, images: List[Image]) -> CaptioningOutput: + def _generate(self, images: List[Image]) -> CaptioningBatchOutput: """ Generate captions for the given images. @@ -131,7 +161,7 @@ def _generate_captions(self, images: List[Image]) -> CaptioningOutput: images (List[Image]): the images Returns: - CaptioningOutput: the dictionary with one key "captions" + CaptioningBatchOutput: the dictionary with one key "captions" and the list of captions for the images as value Raises: @@ -152,6 +182,6 @@ def _generate_captions(self, images: List[Image]) -> CaptioningOutput: generated_texts = [ generated_text.strip() for generated_text in generated_texts ] - return CaptioningOutput(captions=generated_texts) + return CaptioningBatchOutput(captions=generated_texts) except Exception as e: raise InferenceException(self.model_id) from e diff --git a/aana/tests/deployments/test_hf_blip2_deployment.py b/aana/tests/deployments/test_hf_blip2_deployment.py index 3c501967..5fc94d11 100644 --- a/aana/tests/deployments/test_hf_blip2_deployment.py +++ b/aana/tests/deployments/test_hf_blip2_deployment.py @@ -21,7 +21,11 @@ def ray_setup(deployment): @pytest.mark.skipif(not is_gpu_available(), reason="GPU is not available") @pytest.mark.asyncio -async def test_hf_blip2_deployments(): +@pytest.mark.parametrize( + "image_name, expected_text", + [("Starry_Night.jpeg", "the starry night by vincent van gogh")], +) +async def test_hf_blip2_deployments(image_name, expected_text): for name, deployment in deployments.items(): # skip if not a VLLM deployment if deployment.name != "HFBlip2Deployment": @@ -29,14 +33,18 @@ async def test_hf_blip2_deployments(): handle = ray_setup(deployment) - path = resources.path("aana.tests.files.images", "Starry_Night.jpeg") + path = resources.path("aana.tests.files.images", image_name) image = Image(path=path, save_on_disk=False) + output = await handle.generate.remote(image=image) + caption = output["caption"] + compare_texts(expected_text, caption) + images = [image] * 8 - output = await handle.generate_captions.remote(images=images) + output = await handle.generate_batch.remote(images=images) captions = output["captions"] assert len(captions) == 8 for caption in captions: - compare_texts("the starry night by vincent van gogh", caption) + compare_texts(expected_text, caption)