Spaces:
Runtime error
Runtime error
from dataclasses import dataclass | |
from enum import Enum | |
from typing import Any, Callable, Dict, List, Optional, Tuple | |
import numpy as np | |
from inference.core.entities.types import DatasetID, WorkspaceID | |
from inference.core.exceptions import ActiveLearningConfigurationDecodingError | |
LocalImageIdentifier = str | |
PredictionType = str | |
Prediction = dict | |
SerialisedPrediction = str | |
PredictionFileType = str | |
class ImageDimensions: | |
height: int | |
width: int | |
def to_hw(self) -> Tuple[int, int]: | |
return self.height, self.width | |
def to_wh(self) -> Tuple[int, int]: | |
return self.width, self.height | |
class SamplingMethod: | |
name: str | |
sample: Callable[[np.ndarray, Prediction, PredictionType], bool] | |
class BatchReCreationInterval(Enum): | |
NEVER = "never" | |
DAILY = "daily" | |
WEEKLY = "weekly" | |
MONTHLY = "monthly" | |
class StrategyLimitType(Enum): | |
MINUTELY = "minutely" | |
HOURLY = "hourly" | |
DAILY = "daily" | |
class StrategyLimit: | |
limit_type: StrategyLimitType | |
value: int | |
def from_dict(cls, specification: dict) -> "StrategyLimit": | |
return cls( | |
limit_type=StrategyLimitType(specification["type"]), | |
value=specification["value"], | |
) | |
class ActiveLearningConfiguration: | |
max_image_size: Optional[ImageDimensions] | |
jpeg_compression_level: int | |
persist_predictions: bool | |
sampling_methods: List[SamplingMethod] | |
batches_name_prefix: str | |
batch_recreation_interval: BatchReCreationInterval | |
max_batch_images: Optional[int] | |
workspace_id: WorkspaceID | |
dataset_id: DatasetID | |
model_id: str | |
strategies_limits: Dict[str, List[StrategyLimit]] | |
tags: List[str] | |
strategies_tags: Dict[str, List[str]] | |
def init( | |
cls, | |
roboflow_api_configuration: Dict[str, Any], | |
sampling_methods: List[SamplingMethod], | |
workspace_id: WorkspaceID, | |
dataset_id: DatasetID, | |
model_id: str, | |
) -> "ActiveLearningConfiguration": | |
try: | |
max_image_size = roboflow_api_configuration.get("max_image_size") | |
if max_image_size is not None: | |
max_image_size = ImageDimensions( | |
height=roboflow_api_configuration["max_image_size"][0], | |
width=roboflow_api_configuration["max_image_size"][1], | |
) | |
strategies_limits = { | |
strategy["name"]: [ | |
StrategyLimit.from_dict(specification=specification) | |
for specification in strategy.get("limits", []) | |
] | |
for strategy in roboflow_api_configuration["sampling_strategies"] | |
} | |
strategies_tags = { | |
strategy["name"]: strategy.get("tags", []) | |
for strategy in roboflow_api_configuration["sampling_strategies"] | |
} | |
return cls( | |
max_image_size=max_image_size, | |
jpeg_compression_level=roboflow_api_configuration.get( | |
"jpeg_compression_level", 95 | |
), | |
persist_predictions=roboflow_api_configuration["persist_predictions"], | |
sampling_methods=sampling_methods, | |
batches_name_prefix=roboflow_api_configuration["batching_strategy"][ | |
"batches_name_prefix" | |
], | |
batch_recreation_interval=BatchReCreationInterval( | |
roboflow_api_configuration["batching_strategy"][ | |
"recreation_interval" | |
] | |
), | |
max_batch_images=roboflow_api_configuration["batching_strategy"].get( | |
"max_batch_images" | |
), | |
workspace_id=workspace_id, | |
dataset_id=dataset_id, | |
model_id=model_id, | |
strategies_limits=strategies_limits, | |
tags=roboflow_api_configuration.get("tags", []), | |
strategies_tags=strategies_tags, | |
) | |
except (KeyError, ValueError) as e: | |
raise ActiveLearningConfigurationDecodingError( | |
f"Failed to initialise Active Learning configuration. Cause: {str(e)}" | |
) from e | |
class RoboflowProjectMetadata: | |
dataset_id: DatasetID | |
version_id: str | |
workspace_id: WorkspaceID | |
dataset_type: str | |
active_learning_configuration: dict | |