hiddenlayer-sdk 0.1.0__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 +109 -0
- hiddenlayer/sdk/__init__.py +0 -0
- hiddenlayer/sdk/constants.py +14 -0
- hiddenlayer/sdk/enterprise/__init__.py +0 -0
- hiddenlayer/sdk/enterprise/enterprise_model_scan_api.py +55 -0
- hiddenlayer/sdk/exceptions.py +12 -0
- hiddenlayer/sdk/models.py +22 -0
- hiddenlayer/sdk/rest/__init__.py +49 -0
- hiddenlayer/sdk/rest/api/__init__.py +7 -0
- hiddenlayer/sdk/rest/api/aidr_predictive_api.py +308 -0
- hiddenlayer/sdk/rest/api/model_scan_api.py +591 -0
- hiddenlayer/sdk/rest/api/sensor_api.py +1966 -0
- hiddenlayer/sdk/rest/api_client.py +770 -0
- hiddenlayer/sdk/rest/api_response.py +21 -0
- hiddenlayer/sdk/rest/configuration.py +445 -0
- hiddenlayer/sdk/rest/exceptions.py +199 -0
- hiddenlayer/sdk/rest/models/__init__.py +30 -0
- hiddenlayer/sdk/rest/models/create_sensor_request.py +95 -0
- hiddenlayer/sdk/rest/models/file_info.py +110 -0
- hiddenlayer/sdk/rest/models/get_multipart_upload_response.py +97 -0
- hiddenlayer/sdk/rest/models/model.py +100 -0
- hiddenlayer/sdk/rest/models/model_query_response.py +101 -0
- hiddenlayer/sdk/rest/models/multipart_upload_part.py +93 -0
- hiddenlayer/sdk/rest/models/scan_model_request.py +87 -0
- hiddenlayer/sdk/rest/models/scan_results_v2.py +108 -0
- hiddenlayer/sdk/rest/models/sensor_sor_query_filter.py +108 -0
- hiddenlayer/sdk/rest/models/sensor_sor_query_request.py +109 -0
- hiddenlayer/sdk/rest/models/submission_response.py +95 -0
- hiddenlayer/sdk/rest/models/submission_v2.py +109 -0
- hiddenlayer/sdk/rest/models/validation_error_model.py +99 -0
- hiddenlayer/sdk/rest/models/validation_error_model_loc_inner.py +138 -0
- hiddenlayer/sdk/rest/rest.py +257 -0
- hiddenlayer/sdk/services/__init__.py +0 -0
- hiddenlayer/sdk/services/aidr_predictive.py +76 -0
- hiddenlayer/sdk/services/model.py +101 -0
- hiddenlayer/sdk/services/model_scan.py +414 -0
- hiddenlayer/sdk/utils.py +92 -0
- hiddenlayer/sdk/version.py +1 -0
- hiddenlayer_sdk-0.1.0.dist-info/LICENSE +201 -0
- hiddenlayer_sdk-0.1.0.dist-info/METADATA +320 -0
- hiddenlayer_sdk-0.1.0.dist-info/RECORD +43 -0
- hiddenlayer_sdk-0.1.0.dist-info/WHEEL +5 -0
- hiddenlayer_sdk-0.1.0.dist-info/top_level.txt +1 -0
hiddenlayer/__init__.py
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
import requests
|
4
|
+
from requests.auth import HTTPBasicAuth
|
5
|
+
|
6
|
+
from hiddenlayer.sdk.rest.api_client import ApiClient
|
7
|
+
from hiddenlayer.sdk.rest.configuration import Configuration
|
8
|
+
from hiddenlayer.sdk.services.aidr_predictive import AIDRPredictive
|
9
|
+
from hiddenlayer.sdk.services.model import ModelAPI
|
10
|
+
from hiddenlayer.sdk.services.model_scan import ModelScanAPI
|
11
|
+
from hiddenlayer.sdk.utils import is_saas
|
12
|
+
from hiddenlayer.sdk.version import VERSION
|
13
|
+
|
14
|
+
__version__ = VERSION
|
15
|
+
|
16
|
+
|
17
|
+
class HiddenlayerServiceAuthError(Exception):
|
18
|
+
pass
|
19
|
+
|
20
|
+
|
21
|
+
class HiddenlayerUnsupportedPlatformError(Exception):
|
22
|
+
pass
|
23
|
+
|
24
|
+
|
25
|
+
class HiddenlayerServiceClient:
|
26
|
+
"""
|
27
|
+
The Hiddenlayer Service Client is a client for the Hiddenlayer services REST API.
|
28
|
+
"""
|
29
|
+
|
30
|
+
def __init__(
|
31
|
+
self,
|
32
|
+
*,
|
33
|
+
api_id: Optional[str] = None,
|
34
|
+
api_key: Optional[str] = None,
|
35
|
+
host: str = "https://api.us.hiddenlayer.ai",
|
36
|
+
):
|
37
|
+
self.is_saas = is_saas(host)
|
38
|
+
|
39
|
+
if self.is_saas:
|
40
|
+
if not api_id:
|
41
|
+
raise EnvironmentError(
|
42
|
+
"`api_id` cannot be None when using the SaaS version of HiddenLayer."
|
43
|
+
)
|
44
|
+
|
45
|
+
if not api_key:
|
46
|
+
raise EnvironmentError(
|
47
|
+
"`api_key` cannot be None when using the SaaS version of HiddenLayer."
|
48
|
+
)
|
49
|
+
|
50
|
+
jwt_token = self._get_jwt(api_id=api_id, api_key=api_key)
|
51
|
+
self._config = Configuration(host=host, access_token=jwt_token)
|
52
|
+
|
53
|
+
else:
|
54
|
+
self._config = Configuration(host=host)
|
55
|
+
|
56
|
+
self._api_client = ApiClient(configuration=self._config)
|
57
|
+
self._aidr_predictive = AIDRPredictive(self._api_client)
|
58
|
+
self._model = ModelAPI(self._api_client)
|
59
|
+
self._model_scan = ModelScanAPI(self._api_client)
|
60
|
+
|
61
|
+
def _get_jwt(self, *, api_id: str, api_key: str) -> str:
|
62
|
+
"Get the JWT token to auth to the Hiddenlayer API."
|
63
|
+
|
64
|
+
token_url = (
|
65
|
+
"https://auth.hiddenlayer.ai/oauth2/token?grant_type=client_credentials"
|
66
|
+
)
|
67
|
+
|
68
|
+
resp = requests.post(token_url, auth=HTTPBasicAuth(api_id, api_key))
|
69
|
+
|
70
|
+
if not resp.ok:
|
71
|
+
raise HiddenlayerServiceAuthError(
|
72
|
+
f"Unable to get authentication credentials for the HiddenLayer API: {resp.status_code}: {resp.text}"
|
73
|
+
)
|
74
|
+
|
75
|
+
if "access_token" not in resp.json():
|
76
|
+
raise HiddenlayerServiceAuthError(
|
77
|
+
f"Unable to get authentication credentials for the HiddenLayer API - invalid response: {resp.json()}"
|
78
|
+
)
|
79
|
+
|
80
|
+
return resp.json()["access_token"]
|
81
|
+
|
82
|
+
@property
|
83
|
+
def config(self) -> Configuration:
|
84
|
+
return self._config
|
85
|
+
|
86
|
+
@property
|
87
|
+
def api_client(self) -> ApiClient:
|
88
|
+
return self._api_client
|
89
|
+
|
90
|
+
@property
|
91
|
+
def model_scanner(self) -> ModelScanAPI:
|
92
|
+
return self._model_scan
|
93
|
+
|
94
|
+
@property
|
95
|
+
def aidr_predictive(self) -> AIDRPredictive:
|
96
|
+
# If the platform is not SaaS, it's not supported
|
97
|
+
if not self.is_saas:
|
98
|
+
raise HiddenlayerUnsupportedPlatformError(
|
99
|
+
"AIDR for Predictive Models is currently only supported with the SaaS version of the platform."
|
100
|
+
)
|
101
|
+
return self._aidr_predictive
|
102
|
+
|
103
|
+
@property
|
104
|
+
def model(self) -> ModelAPI:
|
105
|
+
if not self.is_saas:
|
106
|
+
raise HiddenlayerUnsupportedPlatformError(
|
107
|
+
"Model management is currently only supported with the SaaS version of the platform."
|
108
|
+
)
|
109
|
+
return self._model
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
|
3
|
+
|
4
|
+
class ScanStatus(str, Enum):
|
5
|
+
DONE = "done"
|
6
|
+
ACCEPTED = "accepted"
|
7
|
+
FAILED = "failed"
|
8
|
+
PENDING = "pending"
|
9
|
+
CREATED = "created"
|
10
|
+
RETRY = "retry"
|
11
|
+
|
12
|
+
|
13
|
+
class ApiErrors(str, Enum):
|
14
|
+
NON_ADHOC_SENSOR_DELETE = "only adhoc sensors may be deleted"
|
File without changes
|
@@ -0,0 +1,55 @@
|
|
1
|
+
"""
|
2
|
+
This file is created because the Enterprise and SaaS APIs are not in sync.
|
3
|
+
|
4
|
+
When they are in sync, this file and related references can be deleted.
|
5
|
+
"""
|
6
|
+
from typing import Dict, Optional
|
7
|
+
|
8
|
+
from hiddenlayer.sdk.rest.api_client import ApiClient
|
9
|
+
from hiddenlayer.sdk.rest.models.scan_results_v2 import ScanResultsV2
|
10
|
+
|
11
|
+
|
12
|
+
class EnterpriseModelScanApi:
|
13
|
+
def __init__(self, api_client: ApiClient):
|
14
|
+
self.api_client = api_client
|
15
|
+
|
16
|
+
def scan_model(self, sensor_id: str, data: Optional[bytes] = None, post_params: Optional[dict] = None):
|
17
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
18
|
+
'201': "ScanResultsV2",
|
19
|
+
'400': None,
|
20
|
+
'422': "ValidationErrorModel",
|
21
|
+
}
|
22
|
+
resource_path = f"/api/v2/create/{sensor_id}"
|
23
|
+
|
24
|
+
response_data = self.api_client.call_api(
|
25
|
+
"POST",
|
26
|
+
self.api_client.configuration.host + resource_path,
|
27
|
+
body=data,
|
28
|
+
post_params=post_params,
|
29
|
+
header_params={"Content-Type": "octet-binary"}
|
30
|
+
)
|
31
|
+
response_data.read()
|
32
|
+
|
33
|
+
return self.api_client.response_deserialize(
|
34
|
+
response_data=response_data,
|
35
|
+
response_types_map=_response_types_map
|
36
|
+
).data
|
37
|
+
|
38
|
+
def scan_status(self, sensor_id: str) -> ScanResultsV2:
|
39
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
40
|
+
'200': "ScanResultsV2",
|
41
|
+
'400': None,
|
42
|
+
'404': None,
|
43
|
+
}
|
44
|
+
resource_path = f"/api/v2/status/{sensor_id}"
|
45
|
+
|
46
|
+
response_data = self.api_client.call_api(
|
47
|
+
"GET",
|
48
|
+
self.api_client.configuration.host + resource_path,
|
49
|
+
)
|
50
|
+
response_data.read()
|
51
|
+
|
52
|
+
return self.api_client.response_deserialize(
|
53
|
+
response_data=response_data,
|
54
|
+
response_types_map=_response_types_map
|
55
|
+
).data
|
@@ -0,0 +1,22 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from typing_extensions import Self
|
4
|
+
|
5
|
+
from hiddenlayer.sdk.rest.models import ScanResultsV2
|
6
|
+
|
7
|
+
|
8
|
+
class ScanResults(ScanResultsV2):
|
9
|
+
"""This class exists because the ScanResults API doesn't return anything about the file name or path that was scanned."""
|
10
|
+
|
11
|
+
file_name: Optional[str] = None
|
12
|
+
file_path: Optional[str] = None
|
13
|
+
sensor_id: Optional[str] = None
|
14
|
+
|
15
|
+
@classmethod
|
16
|
+
def from_scanresultsv2(
|
17
|
+
cls, *, scan_results_v2: ScanResultsV2, sensor_id: Optional[str] = None
|
18
|
+
) -> Self:
|
19
|
+
scan_results_dict = scan_results_v2.to_dict()
|
20
|
+
scan_results_dict["sensor_id"] = sensor_id
|
21
|
+
|
22
|
+
return cls(**scan_results_dict)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# flake8: noqa
|
4
|
+
|
5
|
+
"""
|
6
|
+
HiddenLayer ModelScan
|
7
|
+
|
8
|
+
HiddenLayer ModelScan API for scanning of models
|
9
|
+
|
10
|
+
The version of the OpenAPI document: 1
|
11
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
12
|
+
|
13
|
+
Do not edit the class manually.
|
14
|
+
""" # noqa: E501
|
15
|
+
|
16
|
+
|
17
|
+
__version__ = "1.0.0"
|
18
|
+
|
19
|
+
# import apis into sdk package
|
20
|
+
from hiddenlayer.sdk.rest.api.aidr_predictive_api import AidrPredictiveApi
|
21
|
+
from hiddenlayer.sdk.rest.api.model_scan_api import ModelScanApi
|
22
|
+
from hiddenlayer.sdk.rest.api.sensor_api import SensorApi
|
23
|
+
|
24
|
+
# import ApiClient
|
25
|
+
from hiddenlayer.sdk.rest.api_response import ApiResponse
|
26
|
+
from hiddenlayer.sdk.rest.api_client import ApiClient
|
27
|
+
from hiddenlayer.sdk.rest.configuration import Configuration
|
28
|
+
from hiddenlayer.sdk.rest.exceptions import OpenApiException
|
29
|
+
from hiddenlayer.sdk.rest.exceptions import ApiTypeError
|
30
|
+
from hiddenlayer.sdk.rest.exceptions import ApiValueError
|
31
|
+
from hiddenlayer.sdk.rest.exceptions import ApiKeyError
|
32
|
+
from hiddenlayer.sdk.rest.exceptions import ApiAttributeError
|
33
|
+
from hiddenlayer.sdk.rest.exceptions import ApiException
|
34
|
+
|
35
|
+
# import models into sdk package
|
36
|
+
from hiddenlayer.sdk.rest.models.create_sensor_request import CreateSensorRequest
|
37
|
+
from hiddenlayer.sdk.rest.models.file_info import FileInfo
|
38
|
+
from hiddenlayer.sdk.rest.models.get_multipart_upload_response import GetMultipartUploadResponse
|
39
|
+
from hiddenlayer.sdk.rest.models.model import Model
|
40
|
+
from hiddenlayer.sdk.rest.models.model_query_response import ModelQueryResponse
|
41
|
+
from hiddenlayer.sdk.rest.models.multipart_upload_part import MultipartUploadPart
|
42
|
+
from hiddenlayer.sdk.rest.models.scan_model_request import ScanModelRequest
|
43
|
+
from hiddenlayer.sdk.rest.models.scan_results_v2 import ScanResultsV2
|
44
|
+
from hiddenlayer.sdk.rest.models.sensor_sor_query_filter import SensorSORQueryFilter
|
45
|
+
from hiddenlayer.sdk.rest.models.sensor_sor_query_request import SensorSORQueryRequest
|
46
|
+
from hiddenlayer.sdk.rest.models.submission_response import SubmissionResponse
|
47
|
+
from hiddenlayer.sdk.rest.models.submission_v2 import SubmissionV2
|
48
|
+
from hiddenlayer.sdk.rest.models.validation_error_model import ValidationErrorModel
|
49
|
+
from hiddenlayer.sdk.rest.models.validation_error_model_loc_inner import ValidationErrorModelLocInner
|
@@ -0,0 +1,308 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
HiddenLayer ModelScan
|
5
|
+
|
6
|
+
HiddenLayer ModelScan API for scanning of models
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 1
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
""" # noqa: E501
|
13
|
+
|
14
|
+
import warnings
|
15
|
+
from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
|
16
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
17
|
+
from typing_extensions import Annotated
|
18
|
+
|
19
|
+
from hiddenlayer.sdk.rest.models.submission_response import SubmissionResponse
|
20
|
+
from hiddenlayer.sdk.rest.models.submission_v2 import SubmissionV2
|
21
|
+
|
22
|
+
from hiddenlayer.sdk.rest.api_client import ApiClient, RequestSerialized
|
23
|
+
from hiddenlayer.sdk.rest.api_response import ApiResponse
|
24
|
+
from hiddenlayer.sdk.rest.rest import RESTResponseType
|
25
|
+
|
26
|
+
|
27
|
+
class AidrPredictiveApi:
|
28
|
+
"""NOTE: This class is auto generated by OpenAPI Generator
|
29
|
+
Ref: https://openapi-generator.tech
|
30
|
+
|
31
|
+
Do not edit the class manually.
|
32
|
+
"""
|
33
|
+
|
34
|
+
def __init__(self, api_client=None) -> None:
|
35
|
+
if api_client is None:
|
36
|
+
api_client = ApiClient.get_default()
|
37
|
+
self.api_client = api_client
|
38
|
+
|
39
|
+
|
40
|
+
@validate_call
|
41
|
+
def submit_vectors(
|
42
|
+
self,
|
43
|
+
submission_v2: SubmissionV2,
|
44
|
+
_request_timeout: Union[
|
45
|
+
None,
|
46
|
+
Annotated[StrictFloat, Field(gt=0)],
|
47
|
+
Tuple[
|
48
|
+
Annotated[StrictFloat, Field(gt=0)],
|
49
|
+
Annotated[StrictFloat, Field(gt=0)]
|
50
|
+
]
|
51
|
+
] = None,
|
52
|
+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
53
|
+
_content_type: Optional[StrictStr] = None,
|
54
|
+
_headers: Optional[Dict[StrictStr, Any]] = None,
|
55
|
+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
56
|
+
) -> SubmissionResponse:
|
57
|
+
"""Submit vectors
|
58
|
+
|
59
|
+
|
60
|
+
:param submission_v2: (required)
|
61
|
+
:type submission_v2: SubmissionV2
|
62
|
+
:param _request_timeout: timeout setting for this request. If one
|
63
|
+
number provided, it will be total request
|
64
|
+
timeout. It can also be a pair (tuple) of
|
65
|
+
(connection, read) timeouts.
|
66
|
+
:type _request_timeout: int, tuple(int, int), optional
|
67
|
+
:param _request_auth: set to override the auth_settings for an a single
|
68
|
+
request; this effectively ignores the
|
69
|
+
authentication in the spec for a single request.
|
70
|
+
:type _request_auth: dict, optional
|
71
|
+
:param _content_type: force content-type for the request.
|
72
|
+
:type _content_type: str, Optional
|
73
|
+
:param _headers: set to override the headers for a single
|
74
|
+
request; this effectively ignores the headers
|
75
|
+
in the spec for a single request.
|
76
|
+
:type _headers: dict, optional
|
77
|
+
:param _host_index: set to override the host_index for a single
|
78
|
+
request; this effectively ignores the host_index
|
79
|
+
in the spec for a single request.
|
80
|
+
:type _host_index: int, optional
|
81
|
+
:return: Returns the result object.
|
82
|
+
""" # noqa: E501
|
83
|
+
|
84
|
+
_param = self._submit_vectors_serialize(
|
85
|
+
submission_v2=submission_v2,
|
86
|
+
_request_auth=_request_auth,
|
87
|
+
_content_type=_content_type,
|
88
|
+
_headers=_headers,
|
89
|
+
_host_index=_host_index
|
90
|
+
)
|
91
|
+
|
92
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
93
|
+
'200': "SubmissionResponse",
|
94
|
+
'422': "ValidationErrorModel",
|
95
|
+
}
|
96
|
+
response_data = self.api_client.call_api(
|
97
|
+
*_param,
|
98
|
+
_request_timeout=_request_timeout
|
99
|
+
)
|
100
|
+
response_data.read()
|
101
|
+
return self.api_client.response_deserialize(
|
102
|
+
response_data=response_data,
|
103
|
+
response_types_map=_response_types_map,
|
104
|
+
).data
|
105
|
+
|
106
|
+
|
107
|
+
@validate_call
|
108
|
+
def submit_vectors_with_http_info(
|
109
|
+
self,
|
110
|
+
submission_v2: SubmissionV2,
|
111
|
+
_request_timeout: Union[
|
112
|
+
None,
|
113
|
+
Annotated[StrictFloat, Field(gt=0)],
|
114
|
+
Tuple[
|
115
|
+
Annotated[StrictFloat, Field(gt=0)],
|
116
|
+
Annotated[StrictFloat, Field(gt=0)]
|
117
|
+
]
|
118
|
+
] = None,
|
119
|
+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
120
|
+
_content_type: Optional[StrictStr] = None,
|
121
|
+
_headers: Optional[Dict[StrictStr, Any]] = None,
|
122
|
+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
123
|
+
) -> ApiResponse[SubmissionResponse]:
|
124
|
+
"""Submit vectors
|
125
|
+
|
126
|
+
|
127
|
+
:param submission_v2: (required)
|
128
|
+
:type submission_v2: SubmissionV2
|
129
|
+
:param _request_timeout: timeout setting for this request. If one
|
130
|
+
number provided, it will be total request
|
131
|
+
timeout. It can also be a pair (tuple) of
|
132
|
+
(connection, read) timeouts.
|
133
|
+
:type _request_timeout: int, tuple(int, int), optional
|
134
|
+
:param _request_auth: set to override the auth_settings for an a single
|
135
|
+
request; this effectively ignores the
|
136
|
+
authentication in the spec for a single request.
|
137
|
+
:type _request_auth: dict, optional
|
138
|
+
:param _content_type: force content-type for the request.
|
139
|
+
:type _content_type: str, Optional
|
140
|
+
:param _headers: set to override the headers for a single
|
141
|
+
request; this effectively ignores the headers
|
142
|
+
in the spec for a single request.
|
143
|
+
:type _headers: dict, optional
|
144
|
+
:param _host_index: set to override the host_index for a single
|
145
|
+
request; this effectively ignores the host_index
|
146
|
+
in the spec for a single request.
|
147
|
+
:type _host_index: int, optional
|
148
|
+
:return: Returns the result object.
|
149
|
+
""" # noqa: E501
|
150
|
+
|
151
|
+
_param = self._submit_vectors_serialize(
|
152
|
+
submission_v2=submission_v2,
|
153
|
+
_request_auth=_request_auth,
|
154
|
+
_content_type=_content_type,
|
155
|
+
_headers=_headers,
|
156
|
+
_host_index=_host_index
|
157
|
+
)
|
158
|
+
|
159
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
160
|
+
'200': "SubmissionResponse",
|
161
|
+
'422': "ValidationErrorModel",
|
162
|
+
}
|
163
|
+
response_data = self.api_client.call_api(
|
164
|
+
*_param,
|
165
|
+
_request_timeout=_request_timeout
|
166
|
+
)
|
167
|
+
response_data.read()
|
168
|
+
return self.api_client.response_deserialize(
|
169
|
+
response_data=response_data,
|
170
|
+
response_types_map=_response_types_map,
|
171
|
+
)
|
172
|
+
|
173
|
+
|
174
|
+
@validate_call
|
175
|
+
def submit_vectors_without_preload_content(
|
176
|
+
self,
|
177
|
+
submission_v2: SubmissionV2,
|
178
|
+
_request_timeout: Union[
|
179
|
+
None,
|
180
|
+
Annotated[StrictFloat, Field(gt=0)],
|
181
|
+
Tuple[
|
182
|
+
Annotated[StrictFloat, Field(gt=0)],
|
183
|
+
Annotated[StrictFloat, Field(gt=0)]
|
184
|
+
]
|
185
|
+
] = None,
|
186
|
+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
187
|
+
_content_type: Optional[StrictStr] = None,
|
188
|
+
_headers: Optional[Dict[StrictStr, Any]] = None,
|
189
|
+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
190
|
+
) -> RESTResponseType:
|
191
|
+
"""Submit vectors
|
192
|
+
|
193
|
+
|
194
|
+
:param submission_v2: (required)
|
195
|
+
:type submission_v2: SubmissionV2
|
196
|
+
:param _request_timeout: timeout setting for this request. If one
|
197
|
+
number provided, it will be total request
|
198
|
+
timeout. It can also be a pair (tuple) of
|
199
|
+
(connection, read) timeouts.
|
200
|
+
:type _request_timeout: int, tuple(int, int), optional
|
201
|
+
:param _request_auth: set to override the auth_settings for an a single
|
202
|
+
request; this effectively ignores the
|
203
|
+
authentication in the spec for a single request.
|
204
|
+
:type _request_auth: dict, optional
|
205
|
+
:param _content_type: force content-type for the request.
|
206
|
+
:type _content_type: str, Optional
|
207
|
+
:param _headers: set to override the headers for a single
|
208
|
+
request; this effectively ignores the headers
|
209
|
+
in the spec for a single request.
|
210
|
+
:type _headers: dict, optional
|
211
|
+
:param _host_index: set to override the host_index for a single
|
212
|
+
request; this effectively ignores the host_index
|
213
|
+
in the spec for a single request.
|
214
|
+
:type _host_index: int, optional
|
215
|
+
:return: Returns the result object.
|
216
|
+
""" # noqa: E501
|
217
|
+
|
218
|
+
_param = self._submit_vectors_serialize(
|
219
|
+
submission_v2=submission_v2,
|
220
|
+
_request_auth=_request_auth,
|
221
|
+
_content_type=_content_type,
|
222
|
+
_headers=_headers,
|
223
|
+
_host_index=_host_index
|
224
|
+
)
|
225
|
+
|
226
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
227
|
+
'200': "SubmissionResponse",
|
228
|
+
'422': "ValidationErrorModel",
|
229
|
+
}
|
230
|
+
response_data = self.api_client.call_api(
|
231
|
+
*_param,
|
232
|
+
_request_timeout=_request_timeout
|
233
|
+
)
|
234
|
+
return response_data.response
|
235
|
+
|
236
|
+
|
237
|
+
def _submit_vectors_serialize(
|
238
|
+
self,
|
239
|
+
submission_v2,
|
240
|
+
_request_auth,
|
241
|
+
_content_type,
|
242
|
+
_headers,
|
243
|
+
_host_index,
|
244
|
+
) -> RequestSerialized:
|
245
|
+
|
246
|
+
_host = None
|
247
|
+
|
248
|
+
_collection_formats: Dict[str, str] = {
|
249
|
+
}
|
250
|
+
|
251
|
+
_path_params: Dict[str, str] = {}
|
252
|
+
_query_params: List[Tuple[str, str]] = []
|
253
|
+
_header_params: Dict[str, Optional[str]] = _headers or {}
|
254
|
+
_form_params: List[Tuple[str, str]] = []
|
255
|
+
_files: Dict[str, Union[str, bytes]] = {}
|
256
|
+
_body_params: Optional[bytes] = None
|
257
|
+
|
258
|
+
# process the path parameters
|
259
|
+
# process the query parameters
|
260
|
+
# process the header parameters
|
261
|
+
# process the form parameters
|
262
|
+
# process the body parameter
|
263
|
+
if submission_v2 is not None:
|
264
|
+
_body_params = submission_v2
|
265
|
+
|
266
|
+
|
267
|
+
# set the HTTP header `Accept`
|
268
|
+
_header_params['Accept'] = self.api_client.select_header_accept(
|
269
|
+
[
|
270
|
+
'application/json'
|
271
|
+
]
|
272
|
+
)
|
273
|
+
|
274
|
+
# set the HTTP header `Content-Type`
|
275
|
+
if _content_type:
|
276
|
+
_header_params['Content-Type'] = _content_type
|
277
|
+
else:
|
278
|
+
_default_content_type = (
|
279
|
+
self.api_client.select_header_content_type(
|
280
|
+
[
|
281
|
+
'application/json'
|
282
|
+
]
|
283
|
+
)
|
284
|
+
)
|
285
|
+
if _default_content_type is not None:
|
286
|
+
_header_params['Content-Type'] = _default_content_type
|
287
|
+
|
288
|
+
# authentication setting
|
289
|
+
_auth_settings: List[str] = [
|
290
|
+
'BearerAuth'
|
291
|
+
]
|
292
|
+
|
293
|
+
return self.api_client.param_serialize(
|
294
|
+
method='POST',
|
295
|
+
resource_path='/api/v2/submit',
|
296
|
+
path_params=_path_params,
|
297
|
+
query_params=_query_params,
|
298
|
+
header_params=_header_params,
|
299
|
+
body=_body_params,
|
300
|
+
post_params=_form_params,
|
301
|
+
files=_files,
|
302
|
+
auth_settings=_auth_settings,
|
303
|
+
collection_formats=_collection_formats,
|
304
|
+
_host=_host,
|
305
|
+
_request_auth=_request_auth
|
306
|
+
)
|
307
|
+
|
308
|
+
|