Spaces:
Runtime error
Runtime error
File size: 4,805 Bytes
2eafbc4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
from abc import abstractmethod
from time import perf_counter
from typing import Any, List, Tuple, Union
import numpy as np
from inference.core.cache.model_artifacts import clear_cache, initialise_cache
from inference.core.entities.requests.inference import InferenceRequest
from inference.core.entities.responses.inference import InferenceResponse, StubResponse
from inference.core.models.base import Model
from inference.core.models.types import PreprocessReturnMetadata
from inference.core.utils.image_utils import np_image_to_base64
class ModelStub(Model):
def __init__(self, model_id: str, api_key: str):
super().__init__()
self.model_id = model_id
self.api_key = api_key
self.dataset_id, self.version_id = model_id.split("/")
self.metrics = {"num_inferences": 0, "avg_inference_time": 0.0}
initialise_cache(model_id=model_id)
def infer_from_request(
self, request: InferenceRequest
) -> Union[InferenceResponse, List[InferenceResponse]]:
t1 = perf_counter()
stub_prediction = self.infer(**request.dict())
response = self.make_response(request=request, prediction=stub_prediction)
response.time = perf_counter() - t1
return response
def infer(self, *args, **kwargs) -> Any:
_ = self.preprocess()
dummy_prediction = self.predict()
return self.postprocess(dummy_prediction)
def preprocess(
self, *args, **kwargs
) -> Tuple[np.ndarray, PreprocessReturnMetadata]:
return np.zeros((128, 128, 3), dtype=np.uint8), {} # type: ignore
def predict(self, *args, **kwargs) -> Tuple[np.ndarray, ...]:
return (np.zeros((1, 8)),)
def postprocess(self, predictions: Tuple[np.ndarray, ...], *args, **kwargs) -> Any:
return {
"is_stub": True,
"model_id": self.model_id,
}
def clear_cache(self) -> None:
clear_cache(model_id=self.model_id)
@abstractmethod
def make_response(
self, request: InferenceRequest, prediction: dict, **kwargs
) -> Union[InferenceResponse, List[InferenceResponse]]:
pass
class ClassificationModelStub(ModelStub):
task_type = "classification"
def make_response(
self, request: InferenceRequest, prediction: dict, **kwargs
) -> Union[InferenceResponse, List[InferenceResponse]]:
stub_visualisation = None
if getattr(request, "visualize_predictions", False):
stub_visualisation = np_image_to_base64(
np.zeros((128, 128, 3), dtype=np.uint8)
)
return StubResponse(
is_stub=prediction["is_stub"],
model_id=prediction["model_id"],
task_type=self.task_type,
visualization=stub_visualisation,
)
class ObjectDetectionModelStub(ModelStub):
task_type = "object-detection"
def make_response(
self, request: InferenceRequest, prediction: dict, **kwargs
) -> Union[InferenceResponse, List[InferenceResponse]]:
stub_visualisation = None
if getattr(request, "visualize_predictions", False):
stub_visualisation = np_image_to_base64(
np.zeros((128, 128, 3), dtype=np.uint8)
)
return StubResponse(
is_stub=prediction["is_stub"],
model_id=prediction["model_id"],
task_type=self.task_type,
visualization=stub_visualisation,
)
class InstanceSegmentationModelStub(ModelStub):
task_type = "instance-segmentation"
def make_response(
self, request: InferenceRequest, prediction: dict, **kwargs
) -> Union[InferenceResponse, List[InferenceResponse]]:
stub_visualisation = None
if getattr(request, "visualize_predictions", False):
stub_visualisation = np_image_to_base64(
np.zeros((128, 128, 3), dtype=np.uint8)
)
return StubResponse(
is_stub=prediction["is_stub"],
model_id=prediction["model_id"],
task_type=self.task_type,
visualization=stub_visualisation,
)
class KeypointsDetectionModelStub(ModelStub):
task_type = "keypoint-detection"
def make_response(
self, request: InferenceRequest, prediction: dict, **kwargs
) -> Union[InferenceResponse, List[InferenceResponse]]:
stub_visualisation = None
if getattr(request, "visualize_predictions", False):
stub_visualisation = np_image_to_base64(
np.zeros((128, 128, 3), dtype=np.uint8)
)
return StubResponse(
is_stub=prediction["is_stub"],
model_id=prediction["model_id"],
task_type=self.task_type,
visualization=stub_visualisation,
)
|