superb-ai-onprem 0.5.10__py3-none-any.whl → 0.5.12__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.
Potentially problematic release.
This version of superb-ai-onprem might be problematic. Click here for more details.
- spb_onprem/__init__.py +9 -0
- spb_onprem/_version.py +2 -2
- spb_onprem/activities/service.py +1 -2
- spb_onprem/contents/params/__init__.py +2 -0
- spb_onprem/contents/params/delete_content.py +10 -0
- spb_onprem/contents/queries.py +11 -0
- spb_onprem/contents/service.py +19 -0
- spb_onprem/data/params/__init__.py +8 -0
- spb_onprem/data/params/get_data_detail.py +14 -0
- spb_onprem/data/params/get_evaluation_value_list.py +36 -0
- spb_onprem/data/queries.py +70 -0
- spb_onprem/data/service.py +106 -4
- spb_onprem/datasets/params/__init__.py +2 -0
- spb_onprem/datasets/params/delete_dataset.py +12 -0
- spb_onprem/datasets/queries.py +11 -0
- spb_onprem/datasets/service.py +18 -0
- spb_onprem/entities.py +4 -0
- spb_onprem/inferences/__init__.py +5 -0
- spb_onprem/inferences/service.py +56 -0
- spb_onprem/models/__init__.py +7 -0
- spb_onprem/models/entities.py +9 -0
- spb_onprem/models/params/__init__.py +7 -0
- spb_onprem/models/params/delete_model.py +14 -0
- spb_onprem/models/params/get_models.py +29 -0
- spb_onprem/models/queries.py +33 -0
- spb_onprem/models/service.py +76 -0
- spb_onprem/predictions/__init__.py +7 -0
- spb_onprem/predictions/entities.py +11 -0
- spb_onprem/predictions/params/__init__.py +15 -0
- spb_onprem/predictions/params/create_prediction_set.py +44 -0
- spb_onprem/predictions/params/delete_prediction_from_data.py +20 -0
- spb_onprem/predictions/params/delete_prediction_set.py +14 -0
- spb_onprem/predictions/params/get_prediction_set.py +14 -0
- spb_onprem/predictions/params/get_prediction_sets.py +29 -0
- spb_onprem/predictions/params/update_prediction_set_data_info.py +28 -0
- spb_onprem/predictions/queries.py +110 -0
- spb_onprem/predictions/service.py +225 -0
- {superb_ai_onprem-0.5.10.dist-info → superb_ai_onprem-0.5.12.dist-info}/METADATA +1 -1
- {superb_ai_onprem-0.5.10.dist-info → superb_ai_onprem-0.5.12.dist-info}/RECORD +53 -21
- tests/activities/test_params.py +2 -2
- tests/activities/test_service.py +28 -38
- tests/data/__init__.py +0 -0
- tests/data/test_data_service.py +504 -0
- tests/datasets/__init__.py +1 -0
- tests/datasets/test_dataset_service.py +135 -0
- tests/exports/test_service.py +1 -0
- tests/models/__init__.py +1 -0
- tests/models/test_model_service.py +249 -0
- tests/predictions/__init__.py +1 -0
- tests/predictions/test_prediction_service.py +359 -0
- {superb_ai_onprem-0.5.10.dist-info → superb_ai_onprem-0.5.12.dist-info}/WHEEL +0 -0
- {superb_ai_onprem-0.5.10.dist-info → superb_ai_onprem-0.5.12.dist-info}/licenses/LICENSE +0 -0
- {superb_ai_onprem-0.5.10.dist-info → superb_ai_onprem-0.5.12.dist-info}/top_level.txt +0 -0
spb_onprem/__init__.py
CHANGED
|
@@ -10,6 +10,9 @@ from .slices.service import SliceService
|
|
|
10
10
|
from .activities.service import ActivityService
|
|
11
11
|
from .exports.service import ExportService
|
|
12
12
|
from .contents.service import ContentService
|
|
13
|
+
from .predictions.service import PredictionService
|
|
14
|
+
from .models.service import ModelService
|
|
15
|
+
from .inferences.service import InferService
|
|
13
16
|
|
|
14
17
|
# Core Entities and Enums
|
|
15
18
|
from .entities import (
|
|
@@ -28,6 +31,7 @@ from .entities import (
|
|
|
28
31
|
Export,
|
|
29
32
|
Content,
|
|
30
33
|
Frame,
|
|
34
|
+
Model,
|
|
31
35
|
|
|
32
36
|
# Enums
|
|
33
37
|
DataType,
|
|
@@ -77,6 +81,9 @@ __all__ = (
|
|
|
77
81
|
"ActivityService",
|
|
78
82
|
"ExportService",
|
|
79
83
|
"ContentService",
|
|
84
|
+
"PredictionService",
|
|
85
|
+
"ModelService",
|
|
86
|
+
"InferService",
|
|
80
87
|
|
|
81
88
|
# Core Entities
|
|
82
89
|
"Data",
|
|
@@ -93,6 +100,8 @@ __all__ = (
|
|
|
93
100
|
"Export",
|
|
94
101
|
"Content",
|
|
95
102
|
"Frame",
|
|
103
|
+
"PredictionSet",
|
|
104
|
+
"Model",
|
|
96
105
|
|
|
97
106
|
# Enums
|
|
98
107
|
"DataType",
|
spb_onprem/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.5.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 5,
|
|
31
|
+
__version__ = version = '0.5.12'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 5, 12)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
spb_onprem/activities/service.py
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
def delete_content_params(content_id: str):
|
|
2
|
+
"""Generate variables for delete content GraphQL mutation.
|
|
3
|
+
|
|
4
|
+
Args:
|
|
5
|
+
content_id (str): The ID of the content to delete.
|
|
6
|
+
|
|
7
|
+
Returns:
|
|
8
|
+
dict: Variables dictionary for the GraphQL query.
|
|
9
|
+
"""
|
|
10
|
+
return {"id": content_id}
|
spb_onprem/contents/queries.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .params import (
|
|
2
2
|
create_variables,
|
|
3
3
|
get_download_url_params,
|
|
4
|
+
delete_content_params,
|
|
4
5
|
)
|
|
5
6
|
|
|
6
7
|
class Queries:
|
|
@@ -33,3 +34,13 @@ class Queries:
|
|
|
33
34
|
''',
|
|
34
35
|
"variables": get_download_url_params
|
|
35
36
|
}
|
|
37
|
+
|
|
38
|
+
DELETE = {
|
|
39
|
+
"name": "deleteContent",
|
|
40
|
+
"query": '''
|
|
41
|
+
mutation DeleteContent($id: ID!) {
|
|
42
|
+
deleteContent(id: $id)
|
|
43
|
+
}
|
|
44
|
+
''',
|
|
45
|
+
"variables": delete_content_params
|
|
46
|
+
}
|
spb_onprem/contents/service.py
CHANGED
|
@@ -176,3 +176,22 @@ class ContentService(BaseService):
|
|
|
176
176
|
variables=Queries.GET_DOWNLOAD_URL["variables"](content_id)
|
|
177
177
|
)
|
|
178
178
|
return response
|
|
179
|
+
|
|
180
|
+
def delete_content(
|
|
181
|
+
self,
|
|
182
|
+
content_id: str,
|
|
183
|
+
) -> bool:
|
|
184
|
+
'''
|
|
185
|
+
Delete a content by ID.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
content_id (str): The ID of the content to delete.
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
bool: True if deletion was successful.
|
|
192
|
+
'''
|
|
193
|
+
response = self.request_gql(
|
|
194
|
+
query=Queries.DELETE,
|
|
195
|
+
variables=Queries.DELETE["variables"](content_id)
|
|
196
|
+
)
|
|
197
|
+
return response.get("deleteContent", False)
|
|
@@ -15,6 +15,12 @@ from .data_list import (
|
|
|
15
15
|
DataFilterOptions,
|
|
16
16
|
DataListFilter,
|
|
17
17
|
)
|
|
18
|
+
from .get_data_detail import (
|
|
19
|
+
get_data_detail_params,
|
|
20
|
+
)
|
|
21
|
+
from .get_evaluation_value_list import (
|
|
22
|
+
get_evaluation_value_list_params,
|
|
23
|
+
)
|
|
18
24
|
from .remove_data_from_slice import (
|
|
19
25
|
remove_data_from_slice_params
|
|
20
26
|
)
|
|
@@ -73,6 +79,8 @@ __all__ = [
|
|
|
73
79
|
"get_params",
|
|
74
80
|
"get_data_id_list_params",
|
|
75
81
|
"get_data_list_params",
|
|
82
|
+
"get_data_detail_params",
|
|
83
|
+
"get_evaluation_value_list_params",
|
|
76
84
|
"AnnotationFilter",
|
|
77
85
|
"AnnotationRangeFilter",
|
|
78
86
|
"DataFilterOptions",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
def get_data_detail_params(dataset_id: str, data_id: str):
|
|
2
|
+
"""Generate variables for get data detail GraphQL query.
|
|
3
|
+
|
|
4
|
+
Args:
|
|
5
|
+
dataset_id (str): The ID of the dataset.
|
|
6
|
+
data_id (str): The ID of the data.
|
|
7
|
+
|
|
8
|
+
Returns:
|
|
9
|
+
dict: Variables dictionary for the GraphQL query.
|
|
10
|
+
"""
|
|
11
|
+
return {
|
|
12
|
+
"datasetId": dataset_id,
|
|
13
|
+
"id": data_id
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
from spb_onprem.base_types import UndefinedType, Undefined
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def get_evaluation_value_list_params(
|
|
6
|
+
dataset_id: str,
|
|
7
|
+
prediction_set_id: str,
|
|
8
|
+
filter: Union[UndefinedType, dict] = Undefined,
|
|
9
|
+
length: int = 50,
|
|
10
|
+
cursor: Union[UndefinedType, str] = Undefined
|
|
11
|
+
):
|
|
12
|
+
"""Generate variables for get evaluation value list GraphQL query.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
dataset_id (str): The ID of the dataset.
|
|
16
|
+
prediction_set_id (str): The ID of the prediction set.
|
|
17
|
+
filter (Union[UndefinedType, dict], optional): Diagnosis filter for evaluation values.
|
|
18
|
+
length (int): Number of items to retrieve per page.
|
|
19
|
+
cursor (Union[UndefinedType, str], optional): Cursor for pagination.
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
dict: Variables dictionary for the GraphQL query.
|
|
23
|
+
"""
|
|
24
|
+
params = {
|
|
25
|
+
"datasetId": dataset_id,
|
|
26
|
+
"predictionSetId": prediction_set_id,
|
|
27
|
+
"length": length
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if filter is not Undefined:
|
|
31
|
+
params["filter"] = filter
|
|
32
|
+
|
|
33
|
+
if cursor is not Undefined:
|
|
34
|
+
params["cursor"] = cursor
|
|
35
|
+
|
|
36
|
+
return params
|
spb_onprem/data/queries.py
CHANGED
|
@@ -4,6 +4,8 @@ from .params import (
|
|
|
4
4
|
get_params,
|
|
5
5
|
get_data_id_list_params,
|
|
6
6
|
get_data_list_params,
|
|
7
|
+
get_data_detail_params,
|
|
8
|
+
get_evaluation_value_list_params,
|
|
7
9
|
remove_data_from_slice_params,
|
|
8
10
|
insert_data_to_slice_params,
|
|
9
11
|
delete_data_params,
|
|
@@ -106,6 +108,34 @@ class Schemas:
|
|
|
106
108
|
{DATA}
|
|
107
109
|
}}
|
|
108
110
|
'''
|
|
111
|
+
|
|
112
|
+
DATA_DETAIL = '''
|
|
113
|
+
id
|
|
114
|
+
datasetId
|
|
115
|
+
scene {
|
|
116
|
+
id
|
|
117
|
+
content {
|
|
118
|
+
id
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
annotation {
|
|
122
|
+
versions {
|
|
123
|
+
id
|
|
124
|
+
content {
|
|
125
|
+
id
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
predictions {
|
|
130
|
+
id
|
|
131
|
+
content {
|
|
132
|
+
id
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
thumbnail {
|
|
136
|
+
id
|
|
137
|
+
}
|
|
138
|
+
'''
|
|
109
139
|
|
|
110
140
|
|
|
111
141
|
class Queries():
|
|
@@ -590,3 +620,43 @@ class Queries():
|
|
|
590
620
|
''',
|
|
591
621
|
"variables": update_frames_params,
|
|
592
622
|
}
|
|
623
|
+
|
|
624
|
+
GET_DETAIL = {
|
|
625
|
+
"name": "getDataDetail",
|
|
626
|
+
"query": f'''
|
|
627
|
+
query GetDataDetail($datasetId: ID!, $id: ID!) {{
|
|
628
|
+
data(datasetId: $datasetId, id: $id) {{
|
|
629
|
+
{Schemas.DATA_DETAIL}
|
|
630
|
+
}}
|
|
631
|
+
}}
|
|
632
|
+
''',
|
|
633
|
+
"variables": get_data_detail_params
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
GET_EVALUATION_VALUE_LIST = {
|
|
637
|
+
"name": "getEvaluationValueList",
|
|
638
|
+
"query": '''
|
|
639
|
+
query GetEvaluationValueList(
|
|
640
|
+
$datasetId: String!,
|
|
641
|
+
$predictionSetId: String!,
|
|
642
|
+
$filter: DiagnosisFilter,
|
|
643
|
+
$length: Int,
|
|
644
|
+
$cursor: String
|
|
645
|
+
) {
|
|
646
|
+
evaluationValueList(
|
|
647
|
+
datasetId: $datasetId,
|
|
648
|
+
predictionSetId: $predictionSetId,
|
|
649
|
+
filter: $filter,
|
|
650
|
+
length: $length,
|
|
651
|
+
cursor: $cursor
|
|
652
|
+
) {
|
|
653
|
+
totalCount
|
|
654
|
+
next
|
|
655
|
+
data {
|
|
656
|
+
dataId
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
''',
|
|
661
|
+
"variables": get_evaluation_value_list_params
|
|
662
|
+
}
|
spb_onprem/data/service.py
CHANGED
|
@@ -269,7 +269,7 @@ class DataService(BaseService):
|
|
|
269
269
|
self,
|
|
270
270
|
dataset_id: str,
|
|
271
271
|
data_id: str,
|
|
272
|
-
):
|
|
272
|
+
) -> bool:
|
|
273
273
|
"""Delete a data.
|
|
274
274
|
|
|
275
275
|
Args:
|
|
@@ -277,14 +277,21 @@ class DataService(BaseService):
|
|
|
277
277
|
data_id (str): The data id.
|
|
278
278
|
|
|
279
279
|
Returns:
|
|
280
|
-
|
|
280
|
+
bool: True if deletion was successful.
|
|
281
|
+
|
|
282
|
+
Raises:
|
|
283
|
+
BadParameterError: If required parameters are missing.
|
|
281
284
|
"""
|
|
285
|
+
if dataset_id is None:
|
|
286
|
+
raise BadParameterError("dataset_id is required.")
|
|
287
|
+
if data_id is None:
|
|
288
|
+
raise BadParameterError("data_id is required.")
|
|
289
|
+
|
|
282
290
|
response = self.request_gql(
|
|
283
291
|
Queries.DELETE,
|
|
284
292
|
Queries.DELETE["variables"](dataset_id=dataset_id, data_id=data_id)
|
|
285
293
|
)
|
|
286
|
-
|
|
287
|
-
return data
|
|
294
|
+
return response.get("deleteData", False)
|
|
288
295
|
|
|
289
296
|
def insert_prediction(
|
|
290
297
|
self,
|
|
@@ -769,3 +776,98 @@ class DataService(BaseService):
|
|
|
769
776
|
)
|
|
770
777
|
data = Data.model_validate(response)
|
|
771
778
|
return data
|
|
779
|
+
|
|
780
|
+
def get_data_detail(
|
|
781
|
+
self,
|
|
782
|
+
dataset_id: str,
|
|
783
|
+
data_id: str,
|
|
784
|
+
) -> Data:
|
|
785
|
+
"""Get detailed data information including all nested relationships.
|
|
786
|
+
|
|
787
|
+
This method retrieves comprehensive data information including:
|
|
788
|
+
- Scene content references
|
|
789
|
+
- Annotation versions with content references
|
|
790
|
+
- Predictions with content references
|
|
791
|
+
- Thumbnail references
|
|
792
|
+
|
|
793
|
+
Args:
|
|
794
|
+
dataset_id (str): The dataset ID.
|
|
795
|
+
data_id (str): The data ID.
|
|
796
|
+
|
|
797
|
+
Returns:
|
|
798
|
+
Data: The data object with all nested relationships.
|
|
799
|
+
"""
|
|
800
|
+
if dataset_id is None:
|
|
801
|
+
raise BadParameterError("dataset_id is required.")
|
|
802
|
+
if data_id is None:
|
|
803
|
+
raise BadParameterError("data_id is required.")
|
|
804
|
+
|
|
805
|
+
response = self.request_gql(
|
|
806
|
+
Queries.GET_DETAIL,
|
|
807
|
+
Queries.GET_DETAIL["variables"](dataset_id, data_id)
|
|
808
|
+
)
|
|
809
|
+
data_dict = response.get("data", {})
|
|
810
|
+
return Data.model_validate(data_dict)
|
|
811
|
+
|
|
812
|
+
def get_evaluation_value_list(
|
|
813
|
+
self,
|
|
814
|
+
dataset_id: str,
|
|
815
|
+
prediction_set_id: str,
|
|
816
|
+
filter: Union[UndefinedType, dict] = Undefined,
|
|
817
|
+
length: int = 50,
|
|
818
|
+
cursor: Union[UndefinedType, str] = Undefined
|
|
819
|
+
) -> dict:
|
|
820
|
+
"""Get evaluation values list for diagnosis filtering.
|
|
821
|
+
|
|
822
|
+
Retrieves evaluation values for diagnosis filtering with pagination support.
|
|
823
|
+
|
|
824
|
+
Args:
|
|
825
|
+
dataset_id (str): The dataset ID.
|
|
826
|
+
prediction_set_id (str): The prediction set ID.
|
|
827
|
+
filter (Union[UndefinedType, dict]): Diagnosis filter for evaluation values.
|
|
828
|
+
length (int): Number of items to retrieve per page.
|
|
829
|
+
cursor (Union[UndefinedType, str]): Cursor for pagination.
|
|
830
|
+
|
|
831
|
+
Returns:
|
|
832
|
+
dict: Response containing totalCount, next cursor, and data list with dataId fields.
|
|
833
|
+
"""
|
|
834
|
+
if dataset_id is None:
|
|
835
|
+
raise BadParameterError("dataset_id is required.")
|
|
836
|
+
if prediction_set_id is None:
|
|
837
|
+
raise BadParameterError("prediction_set_id is required.")
|
|
838
|
+
|
|
839
|
+
response = self.request_gql(
|
|
840
|
+
Queries.GET_EVALUATION_VALUE_LIST,
|
|
841
|
+
Queries.GET_EVALUATION_VALUE_LIST["variables"](
|
|
842
|
+
dataset_id=dataset_id,
|
|
843
|
+
prediction_set_id=prediction_set_id,
|
|
844
|
+
filter=filter,
|
|
845
|
+
length=length,
|
|
846
|
+
cursor=cursor
|
|
847
|
+
)
|
|
848
|
+
)
|
|
849
|
+
return response.get("evaluationValueList", {})
|
|
850
|
+
|
|
851
|
+
def get_total_data_id_count_in_evaluation_value(
|
|
852
|
+
self,
|
|
853
|
+
dataset_id: str,
|
|
854
|
+
prediction_set_id: str,
|
|
855
|
+
filter: Union[UndefinedType, dict] = Undefined
|
|
856
|
+
) -> int:
|
|
857
|
+
"""Get total count of data IDs in evaluation values for diagnosis filtering.
|
|
858
|
+
|
|
859
|
+
Args:
|
|
860
|
+
dataset_id (str): The dataset ID.
|
|
861
|
+
prediction_set_id (str): The prediction set ID.
|
|
862
|
+
filter (Union[UndefinedType, dict]): Diagnosis filter for evaluation values.
|
|
863
|
+
|
|
864
|
+
Returns:
|
|
865
|
+
int: Total count of evaluation values.
|
|
866
|
+
"""
|
|
867
|
+
result = self.get_evaluation_value_list(
|
|
868
|
+
dataset_id=dataset_id,
|
|
869
|
+
prediction_set_id=prediction_set_id,
|
|
870
|
+
filter=filter,
|
|
871
|
+
length=1
|
|
872
|
+
)
|
|
873
|
+
return result.get("totalCount", 0)
|
|
@@ -2,10 +2,12 @@ from .dataset import dataset_params
|
|
|
2
2
|
from .datasets import datasets_params
|
|
3
3
|
from .create_dataset import create_dataset_params
|
|
4
4
|
from .update_dataset import update_dataset_params
|
|
5
|
+
from .delete_dataset import delete_dataset_params
|
|
5
6
|
|
|
6
7
|
__all__ = (
|
|
7
8
|
"dataset_params",
|
|
8
9
|
"datasets_params",
|
|
9
10
|
"create_dataset_params",
|
|
10
11
|
"update_dataset_params",
|
|
12
|
+
"delete_dataset_params",
|
|
11
13
|
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
def delete_dataset_params(dataset_id: str):
|
|
2
|
+
"""Generate variables for delete dataset GraphQL mutation.
|
|
3
|
+
|
|
4
|
+
Args:
|
|
5
|
+
dataset_id (str): The ID of the dataset to delete.
|
|
6
|
+
|
|
7
|
+
Returns:
|
|
8
|
+
dict: Variables dictionary for the GraphQL mutation.
|
|
9
|
+
"""
|
|
10
|
+
return {
|
|
11
|
+
"dataset_id": dataset_id
|
|
12
|
+
}
|
spb_onprem/datasets/queries.py
CHANGED
|
@@ -3,6 +3,7 @@ from spb_onprem.datasets.params import (
|
|
|
3
3
|
datasets_params,
|
|
4
4
|
create_dataset_params,
|
|
5
5
|
update_dataset_params,
|
|
6
|
+
delete_dataset_params,
|
|
6
7
|
)
|
|
7
8
|
|
|
8
9
|
class Schemas:
|
|
@@ -77,3 +78,13 @@ class Queries():
|
|
|
77
78
|
''',
|
|
78
79
|
"variables": update_dataset_params,
|
|
79
80
|
}
|
|
81
|
+
|
|
82
|
+
DELETE_DATASET = {
|
|
83
|
+
"name": "deleteDataset",
|
|
84
|
+
"query": '''
|
|
85
|
+
mutation DeleteDataset($dataset_id: ID!) {
|
|
86
|
+
deleteDataset(datasetId: $dataset_id)
|
|
87
|
+
}
|
|
88
|
+
''',
|
|
89
|
+
"variables": delete_dataset_params,
|
|
90
|
+
}
|
spb_onprem/datasets/service.py
CHANGED
|
@@ -130,3 +130,21 @@ class DatasetService(BaseService):
|
|
|
130
130
|
),
|
|
131
131
|
)
|
|
132
132
|
return Dataset.model_validate(response)
|
|
133
|
+
|
|
134
|
+
def delete_dataset(self, dataset_id: str) -> bool:
|
|
135
|
+
"""Delete the dataset.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
dataset_id (str): The ID of the dataset to delete.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
bool: True if deletion was successful.
|
|
142
|
+
"""
|
|
143
|
+
if dataset_id is None:
|
|
144
|
+
raise BadParameterError("dataset_id is required.")
|
|
145
|
+
|
|
146
|
+
response = self.request_gql(
|
|
147
|
+
Queries.DELETE_DATASET,
|
|
148
|
+
Queries.DELETE_DATASET["variables"](dataset_id=dataset_id)
|
|
149
|
+
)
|
|
150
|
+
return response.get("deleteDataset", False)
|
spb_onprem/entities.py
CHANGED
|
@@ -26,6 +26,8 @@ from .activities.entities import (
|
|
|
26
26
|
)
|
|
27
27
|
from .exports.entities import Export
|
|
28
28
|
from .contents.entities import Content
|
|
29
|
+
from .predictions.entities import PredictionSet
|
|
30
|
+
from .models.entities import Model
|
|
29
31
|
|
|
30
32
|
__all__ = [
|
|
31
33
|
# Core Entities
|
|
@@ -43,6 +45,8 @@ __all__ = [
|
|
|
43
45
|
"Export",
|
|
44
46
|
"Content",
|
|
45
47
|
"Frame",
|
|
48
|
+
"PredictionSet",
|
|
49
|
+
"Model",
|
|
46
50
|
|
|
47
51
|
# Enums
|
|
48
52
|
"DataType",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Dict, Any
|
|
3
|
+
|
|
4
|
+
from spb_onprem.base_service import BaseService
|
|
5
|
+
from spb_onprem.exceptions import BadParameterError
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class InferService(BaseService):
|
|
9
|
+
"""Service class for handling inference operations."""
|
|
10
|
+
|
|
11
|
+
def __init__(self):
|
|
12
|
+
super().__init__()
|
|
13
|
+
self.model_endpoint_url = os.environ.get("MODEL_ENDPOINT_URL")
|
|
14
|
+
if not self.model_endpoint_url:
|
|
15
|
+
raise ValueError("MODEL_ENDPOINT_URL environment variable is required")
|
|
16
|
+
|
|
17
|
+
def infer_data(
|
|
18
|
+
self,
|
|
19
|
+
model_id: str,
|
|
20
|
+
base64_image: str
|
|
21
|
+
) -> Dict[str, Any]:
|
|
22
|
+
"""Perform inference on image data using the specified model.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
model_id (str): The model ID to use for inference.
|
|
26
|
+
base64_image (str): Base64 encoded image data.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
Dict[str, Any]: The inference result.
|
|
30
|
+
|
|
31
|
+
Raises:
|
|
32
|
+
BadParameterError: If required parameters are missing.
|
|
33
|
+
"""
|
|
34
|
+
if model_id is None:
|
|
35
|
+
raise BadParameterError("model_id is required.")
|
|
36
|
+
if base64_image is None:
|
|
37
|
+
raise BadParameterError("base64_image is required.")
|
|
38
|
+
|
|
39
|
+
payload = {
|
|
40
|
+
"model_id": model_id,
|
|
41
|
+
"base64_image": base64_image,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
response = self.request(
|
|
46
|
+
method="POST",
|
|
47
|
+
url=self.model_endpoint_url,
|
|
48
|
+
json_data=payload,
|
|
49
|
+
headers={
|
|
50
|
+
"Content-Type": "application/json"
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
return response
|
|
54
|
+
except Exception as e:
|
|
55
|
+
print(f"Failed to fetch inference result: {e}")
|
|
56
|
+
raise
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
def delete_model_params(dataset_id: str, model_id: str):
|
|
2
|
+
"""Generate variables for delete model GraphQL mutation.
|
|
3
|
+
|
|
4
|
+
Args:
|
|
5
|
+
dataset_id (str): The ID of the dataset.
|
|
6
|
+
model_id (str): The ID of the model to delete.
|
|
7
|
+
|
|
8
|
+
Returns:
|
|
9
|
+
dict: Variables dictionary for the GraphQL mutation.
|
|
10
|
+
"""
|
|
11
|
+
return {
|
|
12
|
+
"dataset_id": dataset_id,
|
|
13
|
+
"id": model_id
|
|
14
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
def get_models_params(
|
|
2
|
+
dataset_id: str,
|
|
3
|
+
filter: dict = None,
|
|
4
|
+
cursor: str = None,
|
|
5
|
+
length: int = 50
|
|
6
|
+
):
|
|
7
|
+
"""Generate variables for get models GraphQL query.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
dataset_id (str): The ID of the dataset.
|
|
11
|
+
filter (dict, optional): Filter for models.
|
|
12
|
+
cursor (str, optional): Cursor for pagination.
|
|
13
|
+
length (int): Number of items to retrieve per page.
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
dict: Variables dictionary for the GraphQL query.
|
|
17
|
+
"""
|
|
18
|
+
params = {
|
|
19
|
+
"dataset_id": dataset_id,
|
|
20
|
+
"length": length
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if filter is not None:
|
|
24
|
+
params["filter"] = filter
|
|
25
|
+
|
|
26
|
+
if cursor is not None:
|
|
27
|
+
params["cursor"] = cursor
|
|
28
|
+
|
|
29
|
+
return params
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from .params import (
|
|
2
|
+
get_models_params,
|
|
3
|
+
delete_model_params,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Queries:
|
|
8
|
+
GET_MODELS = {
|
|
9
|
+
"name": "getModels",
|
|
10
|
+
"query": '''
|
|
11
|
+
query GetModels($dataset_id: String!, $filter: ModelFilter, $cursor: String, $length: Int) {
|
|
12
|
+
models(datasetId: $dataset_id, filter: $filter, cursor: $cursor, length: $length) {
|
|
13
|
+
models {
|
|
14
|
+
id
|
|
15
|
+
name
|
|
16
|
+
}
|
|
17
|
+
next
|
|
18
|
+
totalCount
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
''',
|
|
22
|
+
"variables": get_models_params
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
DELETE_MODEL = {
|
|
26
|
+
"name": "deleteModel",
|
|
27
|
+
"query": '''
|
|
28
|
+
mutation DeleteModel($dataset_id: String!, $id: String!) {
|
|
29
|
+
deleteModel(datasetId: $dataset_id, id: $id)
|
|
30
|
+
}
|
|
31
|
+
''',
|
|
32
|
+
"variables": delete_model_params
|
|
33
|
+
}
|