hiddenlayer-sdk 1.2.1__py3-none-any.whl → 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hiddenlayer/__init__.py +0 -10
- hiddenlayer/sdk/exceptions.py +1 -1
- hiddenlayer/sdk/models.py +2 -3
- hiddenlayer/sdk/rest/__init__.py +16 -11
- hiddenlayer/sdk/rest/api/__init__.py +0 -1
- hiddenlayer/sdk/rest/api/model_supply_chain_api.py +1706 -571
- hiddenlayer/sdk/rest/api/sensor_api.py +214 -1320
- hiddenlayer/sdk/rest/models/__init__.py +16 -10
- hiddenlayer/sdk/rest/models/{scan_model_request.py → begin_multi_file_upload200_response.py} +9 -9
- hiddenlayer/sdk/rest/models/{get_multipart_upload_response.py → begin_multipart_file_upload200_response.py} +9 -9
- hiddenlayer/sdk/rest/models/{multipart_upload_part.py → begin_multipart_file_upload200_response_parts_inner.py} +11 -10
- hiddenlayer/sdk/rest/models/errors_inner.py +91 -0
- hiddenlayer/sdk/rest/models/file_details_v3.py +8 -2
- hiddenlayer/sdk/rest/models/{scan_results_v2.py → file_result_v3.py} +21 -32
- hiddenlayer/sdk/rest/models/{model_scan_api_v3_scan_query200_response.py → get_condensed_model_scan_reports200_response.py} +4 -4
- hiddenlayer/sdk/rest/models/inventory_v3.py +97 -0
- hiddenlayer/sdk/rest/models/model_inventory_info.py +1 -1
- hiddenlayer/sdk/rest/models/{detections.py → multi_file_upload_request_v3.py} +14 -22
- hiddenlayer/sdk/rest/models/{model_scan_api_v3_scan_model_version_id_patch200_response.py → notify_model_scan_completed200_response.py} +4 -4
- hiddenlayer/sdk/rest/models/pagination_v3.py +95 -0
- hiddenlayer/sdk/rest/models/problem_details.py +103 -0
- hiddenlayer/sdk/rest/models/scan_detection_v31.py +155 -0
- hiddenlayer/sdk/rest/models/scan_model_details_v3.py +1 -1
- hiddenlayer/sdk/rest/models/scan_results_map_v3.py +105 -0
- hiddenlayer/sdk/rest/models/scan_results_v3.py +120 -0
- hiddenlayer/sdk/rest/models/{model.py → sensor.py} +4 -4
- hiddenlayer/sdk/rest/models/{model_query_response.py → sensor_query_response.py} +7 -7
- hiddenlayer/sdk/services/aidr_predictive.py +57 -3
- hiddenlayer/sdk/services/model_scan.py +98 -135
- hiddenlayer/sdk/version.py +1 -1
- {hiddenlayer_sdk-1.2.1.dist-info → hiddenlayer_sdk-2.0.1.dist-info}/METADATA +12 -2
- {hiddenlayer_sdk-1.2.1.dist-info → hiddenlayer_sdk-2.0.1.dist-info}/RECORD +35 -31
- hiddenlayer/sdk/rest/api/model_scan_api.py +0 -591
- hiddenlayer/sdk/rest/models/scan_results.py +0 -118
- hiddenlayer/sdk/services/model.py +0 -149
- {hiddenlayer_sdk-1.2.1.dist-info → hiddenlayer_sdk-2.0.1.dist-info}/LICENSE +0 -0
- {hiddenlayer_sdk-1.2.1.dist-info → hiddenlayer_sdk-2.0.1.dist-info}/WHEEL +0 -0
- {hiddenlayer_sdk-1.2.1.dist-info → hiddenlayer_sdk-2.0.1.dist-info}/top_level.txt +0 -0
@@ -1,149 +0,0 @@
|
|
1
|
-
import json
|
2
|
-
import random
|
3
|
-
import time
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
from hiddenlayer.sdk.constants import ApiErrors
|
7
|
-
from hiddenlayer.sdk.exceptions import (
|
8
|
-
HiddenlayerConflictError,
|
9
|
-
IncompatibleModelError,
|
10
|
-
ModelDoesNotExistError,
|
11
|
-
)
|
12
|
-
from hiddenlayer.sdk.rest.api import SensorApi
|
13
|
-
from hiddenlayer.sdk.rest.api_client import ApiClient
|
14
|
-
from hiddenlayer.sdk.rest.exceptions import ApiException
|
15
|
-
from hiddenlayer.sdk.rest.models import (
|
16
|
-
CreateSensorRequest,
|
17
|
-
Model,
|
18
|
-
SensorSORQueryFilter,
|
19
|
-
SensorSORQueryRequest,
|
20
|
-
)
|
21
|
-
|
22
|
-
|
23
|
-
class ModelAPI:
|
24
|
-
def __init__(self, api_client: ApiClient) -> None:
|
25
|
-
self._sensor_api = SensorApi(api_client=api_client)
|
26
|
-
|
27
|
-
def create(self, *, model_name: str, model_version: Optional[int]) -> Model:
|
28
|
-
"""
|
29
|
-
Creates a model in the HiddenLayer Platform.
|
30
|
-
|
31
|
-
:params model_name: Name of the model
|
32
|
-
:params model_version: Version of the model
|
33
|
-
|
34
|
-
:returns: HiddenLayer ModelID
|
35
|
-
"""
|
36
|
-
return self._sensor_api.create_sensor(
|
37
|
-
CreateSensorRequest(
|
38
|
-
plaintext_name=model_name, version=model_version, adhoc=True
|
39
|
-
)
|
40
|
-
)
|
41
|
-
|
42
|
-
def create_or_get(self, *, model_name: str, model_version: Optional[int]) -> Model:
|
43
|
-
"""
|
44
|
-
Creates a model in the HiddenLayer Platform if it does not exist.
|
45
|
-
If the model and version already exists, returns the existing model.
|
46
|
-
|
47
|
-
:params model_name: Name of the model
|
48
|
-
:params model_version: Version of the model
|
49
|
-
|
50
|
-
:returns: HiddenLayer ModelID
|
51
|
-
"""
|
52
|
-
try:
|
53
|
-
return self.create(model_name=model_name, model_version=model_version)
|
54
|
-
except ApiException as e:
|
55
|
-
if e.status == 400 and str(e.body).find(ApiErrors.SENSOR_EXISTS) != -1:
|
56
|
-
return self.get_with_retry(
|
57
|
-
model_name=model_name, version=model_version, retry=3
|
58
|
-
)
|
59
|
-
else:
|
60
|
-
raise e
|
61
|
-
|
62
|
-
def get_with_retry(
|
63
|
-
self, *, model_name: str, version: Optional[int], retry: int
|
64
|
-
) -> Model:
|
65
|
-
"""
|
66
|
-
Gets a HiddenLayer model object. If not version is supplied, the latest model is returned.
|
67
|
-
Retries if the model is not found.
|
68
|
-
|
69
|
-
:param model_name: Name of the model.
|
70
|
-
:param version: Version of the model to get.
|
71
|
-
:param retry: Number of retries
|
72
|
-
|
73
|
-
:returns: HiddenLayer Model object
|
74
|
-
"""
|
75
|
-
|
76
|
-
base_delay = 0.1 # seconds
|
77
|
-
for retryCount in range(retry):
|
78
|
-
try:
|
79
|
-
return self.get(model_name=model_name, version=version)
|
80
|
-
except ModelDoesNotExistError:
|
81
|
-
time.sleep(base_delay * 2**retryCount + random.uniform(0, 1))
|
82
|
-
pass
|
83
|
-
raise ModelDoesNotExistError(f"Model {model_name} does not exist")
|
84
|
-
|
85
|
-
def get(self, *, model_name: str, version: Optional[int] = None) -> Model:
|
86
|
-
"""
|
87
|
-
Gets a HiddenLayer model object. If not version is supplied, the latest model is returned.
|
88
|
-
|
89
|
-
:param model_name: Name of the model.
|
90
|
-
:param version: Version of the model to get.
|
91
|
-
|
92
|
-
:returns: HiddenLayer Model object
|
93
|
-
"""
|
94
|
-
|
95
|
-
return self._get_model_by_name(model_name=model_name, version=version)
|
96
|
-
|
97
|
-
def delete(self, *, model_name: str) -> None:
|
98
|
-
"""
|
99
|
-
Delete a model.
|
100
|
-
|
101
|
-
:param model_name: Name of the model.
|
102
|
-
"""
|
103
|
-
|
104
|
-
model = self._get_model_by_name(model_name=model_name, version=None)
|
105
|
-
|
106
|
-
try:
|
107
|
-
self._sensor_api.delete_model(sensor_id=model.sensor_id)
|
108
|
-
except ApiException as e:
|
109
|
-
reason = json.loads(str(e.body))["detail"]
|
110
|
-
|
111
|
-
if reason == ApiErrors.NON_ADHOC_SENSOR_DELETE:
|
112
|
-
raise IncompatibleModelError(
|
113
|
-
"This type of model is unable to be deleted."
|
114
|
-
)
|
115
|
-
else:
|
116
|
-
raise HiddenlayerConflictError(reason)
|
117
|
-
except Exception as e:
|
118
|
-
raise e
|
119
|
-
|
120
|
-
def _get_model_by_name(
|
121
|
-
self, *, model_name: str, version: Optional[int] = None
|
122
|
-
) -> Model:
|
123
|
-
"""
|
124
|
-
Gets a model object by name. If version is not supplied, get the latest.
|
125
|
-
|
126
|
-
:param model_name: Name of the model.
|
127
|
-
:param version: Version of the model to get.
|
128
|
-
|
129
|
-
:returns: HiddenLayer Model object
|
130
|
-
"""
|
131
|
-
|
132
|
-
models = self._sensor_api.query_sensor(
|
133
|
-
sensor_sor_query_request=SensorSORQueryRequest(
|
134
|
-
filter=SensorSORQueryFilter(plaintext_name=model_name, version=version)
|
135
|
-
)
|
136
|
-
)
|
137
|
-
|
138
|
-
if not models.results or len(models.results) == 0:
|
139
|
-
msg = f"Model {model_name} does not exist"
|
140
|
-
|
141
|
-
if version:
|
142
|
-
msg = f"{msg} for version {version}."
|
143
|
-
|
144
|
-
raise ModelDoesNotExistError(msg)
|
145
|
-
|
146
|
-
if not version:
|
147
|
-
models.results.sort(key=lambda x: x.version, reverse=True)
|
148
|
-
|
149
|
-
return models.results[0]
|
File without changes
|
File without changes
|
File without changes
|