From 4958090ea42729335f8417d419dddca8dd547ba6 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Mon, 26 Feb 2024 17:05:07 +0100 Subject: [PATCH 01/12] Make `datasets` optional in Project data model --- geti_sdk/data_models/project.py | 4 +- .../project_client/project_client.py | 49 +++++++++++++++---- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/geti_sdk/data_models/project.py b/geti_sdk/data_models/project.py index d2e6e6ef..51f391e1 100644 --- a/geti_sdk/data_models/project.py +++ b/geti_sdk/data_models/project.py @@ -217,7 +217,9 @@ class Project: name: str pipeline: Pipeline - datasets: List[Dataset] + datasets: Optional[List[Dataset]] = ( + None # `datasets` was removed from project listing in Geti v1.15 + ) score: Optional[float] = None # 'score' is removed in v1.1 performance: Optional[Performance] = None creation_time: Optional[str] = attr.field(default=None, converter=str_to_datetime) diff --git a/geti_sdk/rest_clients/project_client/project_client.py b/geti_sdk/rest_clients/project_client/project_client.py index 1cb2d6e9..35dfdf89 100644 --- a/geti_sdk/rest_clients/project_client/project_client.py +++ b/geti_sdk/rest_clients/project_client/project_client.py @@ -63,13 +63,18 @@ def __init__(self, session: GetiSession, workspace_id: str): self.workspace_id = workspace_id self.base_url = f"workspaces/{workspace_id}/" - def get_all_projects(self, request_page_size: int = 50) -> List[Project]: + def get_all_projects( + self, request_page_size: int = 50, get_project_details: bool = True + ) -> List[Project]: """ Return a list of projects found on the Intel® Geti™ server :param request_page_size: Max number of projects to fetch in a single HTTP request. Higher values may reduce the response time of this method when there are many projects, but increase the chance of timeout. + :param get_project_details: True to get all details of the projects on the + Intel® Geti™, False to fetch only a summary of each project. Set this to + False if minimizing latency is a concern. Defaults to True :return: List of Project objects, containing the project information for each project on the Intel® Geti™ server """ @@ -81,19 +86,23 @@ def get_all_projects(self, request_page_size: int = 50) -> List[Project]: # The 'projects' endpoint uses pagination: multiple HTTP may be necessary to # fetch the full list of projects - project_list: List[Dict] = [] + project_rest_list: List[Dict] = [] while response := self.session.get_rest_response( - url=f"{self.base_url}projects?limit={request_page_size}&skip={len(project_list)}", + url=f"{self.base_url}projects?limit={request_page_size}&skip={len(project_rest_list)}", method="GET", ): - project_list.extend(response[project_key]) - if len(project_list) >= response[num_total_projects_key]: + project_rest_list.extend(response[project_key]) + if len(project_rest_list) >= response[num_total_projects_key]: break - return [ + project_list = [ ProjectRESTConverter.from_dict(project_input=project) - for project in project_list + for project in project_rest_list ] + if get_project_details: + return [self._get_project_detail(project) for project in project_list] + else: + return project_list def get_project_by_name(self, project_name: str) -> Optional[Project]: """ @@ -103,11 +112,14 @@ def get_project_by_name(self, project_name: str) -> Optional[Project]: :return: Project object containing the data of the project, if the project is found on the server. Returns None if the project doesn't exist """ - project_list = self.get_all_projects() - project = next( + project_list = self.get_all_projects(get_project_details=False) + project_entry = next( (project for project in project_list if project.name == project_name), None ) - return project + if project_entry is not None: + return self._get_project_detail(project_entry) + else: + return None def get_or_create_project( self, @@ -619,3 +631,20 @@ def _await_project_ready( f"Project has not become ready within the specified timeout ({timeout} " f"seconds)." ) from error + + def _get_project_detail(self, project: Union[Project, str]) -> Project: + """ + Fetch the most recent project details from the Intel® Geti™ server + + :param project: Name of the project or Project object representing the project + to get detailed information for. + :return: Updated Project object + """ + if isinstance(project, str): + project = self.get_project_by_name(project_name=project) + return project + else: + response = self.session.get_rest_response( + url=f"{self.base_url}projects/{project.id}", method="GET" + ) + return ProjectRESTConverter.from_dict(response) From 31e4253657a9cd59ca02ba4328a529b3bc9495a8 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Mon, 4 Mar 2024 13:17:30 +0100 Subject: [PATCH 02/12] Fix token auth error handling --- geti_sdk/http_session/geti_session.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/geti_sdk/http_session/geti_session.py b/geti_sdk/http_session/geti_session.py index 7c66d115..3c0c3bc0 100644 --- a/geti_sdk/http_session/geti_session.py +++ b/geti_sdk/http_session/geti_session.py @@ -515,9 +515,16 @@ def _handle_error_response( logging.info("Authentication complete.") else: - access_token = self._acquire_access_token() - logging.info("New bearer token obtained.") - self.headers.update({"Authorization": f"Bearer {access_token}"}) + if self.authentication_service == AUTHENTICATION_DEX_OLD: + access_token = self._acquire_access_token() + logging.info("New bearer token obtained.") + self.headers.update({"Authorization": f"Bearer {access_token}"}) + else: + raise ValueError( + "Authentication via your personal access token has failed, " + "most likely the token has expired. Please verify that you " + "have provided a valid token." + ) retry_request = True From 997cb0c32a62f15712c41f186e1edce6de799cd8 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Tue, 5 Mar 2024 11:11:53 +0100 Subject: [PATCH 03/12] Update `otx` requirement to `otx==1.5.0` --- requirements/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 536e6bd3..3af1c950 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -10,7 +10,7 @@ Pillow==10.2.* pathvalidate>=2.5.0 simplejson==3.19.* ipython==8.12.* -otx==1.4.4 +otx==1.5.0 openvino==2023.0.* openvino-model-api==0.1.5 certifi>=2022.12.7 From b3f384774eee366c4437db549f5acfedc95ae739 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Tue, 5 Mar 2024 15:40:23 +0100 Subject: [PATCH 04/12] Update test cassettes --- ...otationClient.test_download_annotations_for_video.cassette | 4 ++-- ...t.test_upload_and_retrieve_annotations_for_images.cassette | 4 ++-- ...nt.test_upload_and_retrieve_annotations_for_video.cassette | 4 ++-- ...t.test_upload_and_retrieve_annotations_for_videos.cassette | 4 ++-- ...onfigurationClient.test_get_and_set_configuration.cassette | 4 ++-- .../cassettes/TestDatasetClient.test_create_dataset.cassette | 4 ++-- ...task_project_from_dataset[Classification project].cassette | 4 ++-- ...ngle_task_project_from_dataset[Detection project].cassette | 4 ++-- ...oject_from_dataset[Instance segmentation project].cassette | 4 ++-- ...k_project_from_dataset[Rotated detection project].cassette | 4 ++-- ...e_task_project_from_dataset[Segmentation project].cassette | 4 ++-- ...from_dataset[Detection to classification project].cassette | 4 ++-- ...t_from_dataset[Detection to segmentation project].cassette | 4 ++-- .../TestGeti.test_deployment[Single task project].cassette | 4 ++-- .../TestGeti.test_deployment[Task chain project].cassette | 4 ++-- ..._download_and_upload_project[Single task project].cassette | 4 ++-- ...t_download_and_upload_project[Task chain project].cassette | 4 ++-- ...download_project_including_models_and_predictions.cassette | 4 ++-- ...est_upload_and_predict_image[Single task project].cassette | 4 ++-- ...test_upload_and_predict_image[Task chain project].cassette | 4 ++-- .../TestGeti.test_upload_and_predict_media_folder.cassette | 4 ++-- .../cassettes/TestGeti.test_upload_and_predict_video.cassette | 4 ++-- tests/fixtures/cassettes/TestGetiSession.test_logout.cassette | 4 ++-- .../TestImageClient.test_upload_and_delete_image.cassette | 4 ++-- ...ImageClient.test_upload_image_folder_and_download.cassette | 4 ++-- ...dictionClient.test_download_active_model_for_task.cassette | 4 ++-- ...nClient.test_get_model_algorithm_task_and_version.cassette | 4 ++-- ...redictionClient.test_get_model_group_by_algo_name.cassette | 4 ++-- .../TestModelAndPredictionClient.test_predict_image.cassette | 4 ++-- ...ionClient.test_project_setup_and_get_model_by_job.cassette | 4 ++-- ...estModelAndPredictionClient.test_set_active_model.cassette | 4 ++-- .../TestProjectClient.test_add_labels_multitask.cassette | 4 ++-- .../TestProjectClient.test_add_labels_single_task.cassette | 4 ++-- .../TestProjectClient.test_create_and_delete_project.cassette | 4 ++-- .../TestProjectClient.test_get_all_projects.cassette | 4 ++-- .../TestProjectClient.test_get_all_projects.proj_A.cassette | 4 ++-- .../TestProjectClient.test_get_all_projects.proj_B.cassette | 4 ++-- .../TestProjectClient.test_get_all_projects.proj_C.cassette | 4 ++-- .../cassettes/TestProjectClient.test_list_projects.cassette | 4 ++-- .../cassettes/TestTrainingClient.test_get_status.cassette | 4 ++-- .../TestTrainingClient.test_train_task_and_get_jobs.cassette | 4 ++-- .../TestUtils.test_get_supported_algorithms.cassette | 4 ++-- tests/fixtures/cassettes/existing_projects.cassette | 4 ++-- tests/fixtures/cassettes/geti.cassette | 4 ++-- .../cassettes/geti_sdk_test_annotation_client.cassette | 4 ++-- .../geti_sdk_test_annotation_client_deletion.cassette | 4 ++-- .../cassettes/geti_sdk_test_configuration_client.cassette | 4 ++-- ...dk_test_configuration_client_configuration_client.cassette | 4 ++-- .../geti_sdk_test_configuration_client_deletion.cassette | 4 ++-- .../fixtures/cassettes/geti_sdk_test_dataset_client.cassette | 4 ++-- .../cassettes/geti_sdk_test_dataset_client_deletion.cassette | 4 ++-- .../cassettes/geti_sdk_test_geti_classification.cassette | 4 ++-- .../geti_sdk_test_geti_classification_deletion.cassette | 4 ++-- .../geti_sdk_test_geti_classification_is_training.cassette | 4 ++-- .../geti_sdk_test_geti_classification_setup_training.cassette | 4 ++-- ...geti_sdk_test_geti_classification_training_client.cassette | 4 ++-- .../geti_sdk_test_geti_detection_to_classification.cassette | 4 ++-- ...i_detection_to_classification_add_annotated_media.cassette | 4 ++-- ..._detection_to_classification_configuration_client.cassette | 4 ++-- ...dk_test_geti_detection_to_classification_deletion.cassette | 4 ++-- ...test_geti_detection_to_classification_is_training.cassette | 4 ++-- ...t_geti_detection_to_classification_set_auto_train.cassette | 4 ++-- ...ti_detection_to_classification_set_minimal_hypers.cassette | 4 ++-- ...t_geti_detection_to_classification_setup_training.cassette | 4 ++-- ..._geti_detection_to_classification_training_client.cassette | 4 ++-- tests/fixtures/cassettes/geti_sdk_test_image_client.cassette | 4 ++-- .../cassettes/geti_sdk_test_image_client_deletion.cassette | 4 ++-- .../geti_sdk_test_model_and_prediction_client.cassette | 4 ++-- ...t_model_and_prediction_client_add_annotated_media.cassette | 4 ++-- ..._model_and_prediction_client_configuration_client.cassette | 4 ++-- ...eti_sdk_test_model_and_prediction_client_deletion.cassette | 4 ++-- ...sdk_test_model_and_prediction_client_model_client.cassette | 4 ++-- ...est_model_and_prediction_client_prediction_client.cassette | 4 ++-- ...k_test_model_and_prediction_client_set_auto_train.cassette | 4 ++-- ...st_model_and_prediction_client_set_minimal_hypers.cassette | 4 ++-- ..._test_model_and_prediction_client_training_client.cassette | 4 ++-- .../cassettes/geti_sdk_test_project_hierarchical.cassette | 4 ++-- .../geti_sdk_test_project_hierarchical_deletion.cassette | 4 ++-- .../fixtures/cassettes/geti_sdk_test_project_simple.cassette | 4 ++-- .../cassettes/geti_sdk_test_test_supported_algos.cassette | 4 ++-- .../geti_sdk_test_test_supported_algos_deletion.cassette | 4 ++-- .../fixtures/cassettes/geti_sdk_test_training_client.cassette | 4 ++-- ...geti_sdk_test_training_client_add_annotated_media.cassette | 4 ++-- ...eti_sdk_test_training_client_configuration_client.cassette | 4 ++-- .../cassettes/geti_sdk_test_training_client_deletion.cassette | 4 ++-- .../geti_sdk_test_training_client_set_auto_train.cassette | 4 ++-- .../geti_sdk_test_training_client_set_minimal_hypers.cassette | 4 ++-- .../geti_sdk_test_training_client_training_client.cassette | 4 ++-- tests/fixtures/cassettes/session.cassette | 4 ++-- 89 files changed, 178 insertions(+), 178 deletions(-) diff --git a/tests/fixtures/cassettes/TestAnnotationClient.test_download_annotations_for_video.cassette b/tests/fixtures/cassettes/TestAnnotationClient.test_download_annotations_for_video.cassette index 867a486b..a136ad86 100644 --- a/tests/fixtures/cassettes/TestAnnotationClient.test_download_annotations_for_video.cassette +++ b/tests/fixtures/cassettes/TestAnnotationClient.test_download_annotations_for_video.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:638dc2fde16e5d40989f7a6671779194f34b564b6aa17ea4d3e8e4a5463da355 -size 38621 +oid sha256:a2b29a6a59009d0aa7642490f8cf04bad5525bdeecadd0b1bdb60aaa2b794a38 +size 45268 diff --git a/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_images.cassette b/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_images.cassette index 61c96e60..5b9e27f2 100644 --- a/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_images.cassette +++ b/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_images.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4056a249ac2b9fbd34b2830b7164096c0aecbc67063dd621a39295af33404047 -size 301632 +oid sha256:e219615033f1a6543cb1c74dc775d510abaf028a1851773e132fc6f48300de7a +size 308424 diff --git a/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_video.cassette b/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_video.cassette index fe4a8b78..33ffb83f 100644 --- a/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_video.cassette +++ b/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_video.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5718665e06735aad7711b45c493bc763f2051fa077abc7daf3fafd1a33c79516 -size 3670248 +oid sha256:e820ac74bbbe3421b8d473406d01fd49cd4e495fe29357348d21bb70c4c6fba4 +size 3719453 diff --git a/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_videos.cassette b/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_videos.cassette index 548a3804..443cd3f3 100644 --- a/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_videos.cassette +++ b/tests/fixtures/cassettes/TestAnnotationClient.test_upload_and_retrieve_annotations_for_videos.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb90f1f221327903231a68a844d4af11289f441da29c5b9ce486bea931f35960 -size 6237466 +oid sha256:870b26f4692338131b8a32e378b52975be4f17b40715682faee9501b86da6657 +size 6323070 diff --git a/tests/fixtures/cassettes/TestConfigurationClient.test_get_and_set_configuration.cassette b/tests/fixtures/cassettes/TestConfigurationClient.test_get_and_set_configuration.cassette index 463841ab..9511b654 100644 --- a/tests/fixtures/cassettes/TestConfigurationClient.test_get_and_set_configuration.cassette +++ b/tests/fixtures/cassettes/TestConfigurationClient.test_get_and_set_configuration.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3f55d3c408aaf088b59aae45ada5c7d9a97be5714a539ecf6f7bc74b0294bc1 -size 98983 +oid sha256:2a6e4fc114ccf1c3b71f4f5c50a721aef7fb48c41a880d0d152f28a28923b770 +size 108308 diff --git a/tests/fixtures/cassettes/TestDatasetClient.test_create_dataset.cassette b/tests/fixtures/cassettes/TestDatasetClient.test_create_dataset.cassette index fef764fd..819fd603 100644 --- a/tests/fixtures/cassettes/TestDatasetClient.test_create_dataset.cassette +++ b/tests/fixtures/cassettes/TestDatasetClient.test_create_dataset.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49a1493da791f549fa5f436406b55115299970740213b8ad7de0ba0bb70a39bc -size 11075 +oid sha256:ba4b29030bd77a0348fdfb341d9ec69dd32487b5ad53d9444627a2c9dcbb66cc +size 13697 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Classification project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Classification project].cassette index ed4fff58..dd3c6538 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Classification project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Classification project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68182ff9815e9a015c1a14259f3f691959ff6f179acdfb4858fc7d8eb111ce8f -size 559229 +oid sha256:3ecd370819bd4b7d2e2e51b8d234e730e7614714e087274c00c30460faf4c7c2 +size 549504 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Detection project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Detection project].cassette index de24298b..2ce08a16 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Detection project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Detection project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c40e2e9cd93f7be648a49e7751e160a554d1a101d642857c505bc6080d98543f -size 683387 +oid sha256:44ebec9959949eff50cc7904d86bbe6ca2b497de611dd51ba6cfe39e9f495a7a +size 681294 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Instance segmentation project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Instance segmentation project].cassette index 83fa3d26..b80c5bf3 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Instance segmentation project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Instance segmentation project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1f0a48e8419f3bcba46fe1605e093b0c2d859de7114048521cce5a577c48042 -size 769238 +oid sha256:ef4c2196de01fcee465885e02462a274bfd4d02e5526d819286a40cd163964f9 +size 766737 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Rotated detection project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Rotated detection project].cassette index 86e4b58b..baea8433 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Rotated detection project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Rotated detection project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4088e64d3be093d9505aa97c6e6e6131f8de28950929a0e07ca92aec448c99c8 -size 684844 +oid sha256:58e0e4aa69817cdd33fa65adcff7dbbcb1a64bf6aac7036b9b8b93cebfb8ce65 +size 685359 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Segmentation project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Segmentation project].cassette index 6a876af0..715885a4 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Segmentation project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_single_task_project_from_dataset[Segmentation project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2388e39e49f12b533c3dd0137def742994775722726065d3eab079d8ed97cc5c -size 759124 +oid sha256:6da5225f19436cfc4be76629d192c13e40e910253f83b60f66f240913ecdd834 +size 755582 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to classification project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to classification project].cassette index 74cce85e..93b577ac 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to classification project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to classification project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d738ffa2fe0f11f24a8bf223af40e47a6fac93d8e95caf648f4d75bf23738f69 -size 859074 +oid sha256:12ab3523123f9ff8dd823348b41779614266cee6b4177fe4f066825ced2efdba +size 880818 diff --git a/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to segmentation project].cassette b/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to segmentation project].cassette index df1ccdd1..4b2f083b 100644 --- a/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to segmentation project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_create_task_chain_project_from_dataset[Detection to segmentation project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:626ef316a1a177c08bc34b923df357a11ac0ffcabbcfeda085205669ccf65f35 -size 953515 +oid sha256:dac13a09156f89e88ee7089a3e030cd20a5fc6db5611b9d55b33ade82abf32a2 +size 976673 diff --git a/tests/fixtures/cassettes/TestGeti.test_deployment[Single task project].cassette b/tests/fixtures/cassettes/TestGeti.test_deployment[Single task project].cassette index 498bafce..69733540 100644 --- a/tests/fixtures/cassettes/TestGeti.test_deployment[Single task project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_deployment[Single task project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0dbde40756c5f5e5f5cef417ca6a5222610405dc13db6e9c61fe150e775db338 -size 11435008 +oid sha256:6a36f5d21e835606b78215aeae8600bbcd67b1cb98bd24a412f2bfbd579a88b8 +size 11547070 diff --git a/tests/fixtures/cassettes/TestGeti.test_deployment[Task chain project].cassette b/tests/fixtures/cassettes/TestGeti.test_deployment[Task chain project].cassette index 65eac580..e22a9fcf 100644 --- a/tests/fixtures/cassettes/TestGeti.test_deployment[Task chain project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_deployment[Task chain project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9aabc9e92c7b13f0a5b04426b813524eb7c799b0989cc88f72871f731b142d78 -size 17961565 +oid sha256:4ebc00078bb865a1a500b94cd60d2a7aec3d7276c1ac5991e451fea897a414f4 +size 18163402 diff --git a/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Single task project].cassette b/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Single task project].cassette index a71d9052..11488b4c 100644 --- a/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Single task project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Single task project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8726def86fd972dc5c7515e0c29bde84070aafa5980be8dc9f93662e4911bc0 -size 13240336 +oid sha256:7943e62967d8956ccb60f5fc89201b25c139f2e97cfc9b1000de5a48cd12b879 +size 13378637 diff --git a/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Task chain project].cassette b/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Task chain project].cassette index 2f9e086e..ec1ee338 100644 --- a/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Task chain project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_download_and_upload_project[Task chain project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:541687782628d69fded22eff602500c1b17e6c9743c852f8ee11977bd3ba7692 -size 2478601 +oid sha256:d234413073f50848ead006f1b4eddd966589f2a04abadc243e05f03e37b5d514 +size 2503908 diff --git a/tests/fixtures/cassettes/TestGeti.test_download_project_including_models_and_predictions.cassette b/tests/fixtures/cassettes/TestGeti.test_download_project_including_models_and_predictions.cassette index ed16e76a..adfac8d6 100644 --- a/tests/fixtures/cassettes/TestGeti.test_download_project_including_models_and_predictions.cassette +++ b/tests/fixtures/cassettes/TestGeti.test_download_project_including_models_and_predictions.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:243d6a97225d67930617bdd6f94c91e0a398ee0060c7e173b5aaee0b4b24aa7d -size 159107243 +oid sha256:fdf01d87dfc8ccf07c68678d84d2d253cd1584b680768cd3dc2351717a6d77e6 +size 157101643 diff --git a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Single task project].cassette b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Single task project].cassette index 4038f123..ce025435 100644 --- a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Single task project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Single task project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d97ffd816e443c254ed0d78983d9820bbfd361d832c1cf3c558a9ca08cbc1572 -size 129014 +oid sha256:fe5c64b65aa288142c60fdcea8c23739cfbf6e57c65e089bef4b6834b540edb4 +size 119905 diff --git a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Task chain project].cassette b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Task chain project].cassette index 5002aca9..cff4b1e9 100644 --- a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Task chain project].cassette +++ b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_image[Task chain project].cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd18c5da70470579a32db3b1eca83cfc8122dea565c4209a795f748c70e887c7 -size 129431 +oid sha256:9d3c6048fbc8aa22ff62d34860b9a6c4d58158131306b6d3478d5ff1e0a7af86 +size 177355 diff --git a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_media_folder.cassette b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_media_folder.cassette index 9d57b9f1..7c28b1aa 100644 --- a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_media_folder.cassette +++ b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_media_folder.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14beec76d7a5fe6b8864bd743e7004066df16ed829369e7614a926526c47b3e1 -size 9134070 +oid sha256:64e1a62fdbdd563aaf41fb861758191e911d8e38d4a88b67f35910482edf4d58 +size 6795829 diff --git a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_video.cassette b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_video.cassette index 6a0613ae..5f446987 100644 --- a/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_video.cassette +++ b/tests/fixtures/cassettes/TestGeti.test_upload_and_predict_video.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:696ba78439b2645dfcc7c69cc1ecc803b00c5f12a1c9960dc1afc469bee4c509 -size 4118344 +oid sha256:dcac937306cb86406709e26242581a77675de3989fd457bb44fdc1838b2fd6c9 +size 4107910 diff --git a/tests/fixtures/cassettes/TestGetiSession.test_logout.cassette b/tests/fixtures/cassettes/TestGetiSession.test_logout.cassette index 834ec815..f068ba60 100644 --- a/tests/fixtures/cassettes/TestGetiSession.test_logout.cassette +++ b/tests/fixtures/cassettes/TestGetiSession.test_logout.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be40a4f8a7f9e21279175dcc394ce31bd1f1a6cb295226d4e2a326880628339f -size 13701 +oid sha256:762f2f7ab06623f0e6758651c5577027e00d251db64dcb5283e2c53c843498d1 +size 29968 diff --git a/tests/fixtures/cassettes/TestImageClient.test_upload_and_delete_image.cassette b/tests/fixtures/cassettes/TestImageClient.test_upload_and_delete_image.cassette index 60d4e2de..4e9e6558 100644 --- a/tests/fixtures/cassettes/TestImageClient.test_upload_and_delete_image.cassette +++ b/tests/fixtures/cassettes/TestImageClient.test_upload_and_delete_image.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cab85ea128ab0ff53217b3d505c861edab90bf8c9f3dc9926602228b76f0609e -size 102977 +oid sha256:8dfd77a3c687b150210b7a5a1d66f6b6b152b16123caa9bc12d151f904e7b274 +size 107223 diff --git a/tests/fixtures/cassettes/TestImageClient.test_upload_image_folder_and_download.cassette b/tests/fixtures/cassettes/TestImageClient.test_upload_image_folder_and_download.cassette index d3ba9486..0b0f1178 100644 --- a/tests/fixtures/cassettes/TestImageClient.test_upload_image_folder_and_download.cassette +++ b/tests/fixtures/cassettes/TestImageClient.test_upload_image_folder_and_download.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ad0cfc659ed94f84ef481787dbb814a0f2c103337425d5eaafae2e7c16fe7f4 -size 1479510 +oid sha256:4be6a4041355aff5ac36e6ce44aaee8696b39df83c041d36b32dfc0b7962b110 +size 1519461 diff --git a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_download_active_model_for_task.cassette b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_download_active_model_for_task.cassette index 0496afaa..9623b213 100644 --- a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_download_active_model_for_task.cassette +++ b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_download_active_model_for_task.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7ed10504cefb2c9f498ec656bcf5ab9830982d9c5fcaa274a369ad9bc546db7 -size 133299230 +oid sha256:f20ad38449c0efa9e218d5fccd8bf6dce951de004dabdb7f9bd05c7ac2e1ece4 +size 134832718 diff --git a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_algorithm_task_and_version.cassette b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_algorithm_task_and_version.cassette index f8089d88..cd63cdef 100644 --- a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_algorithm_task_and_version.cassette +++ b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_algorithm_task_and_version.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35929f07c28c0d66d4dd64030fc444eb99c306df7edf8b9a13e8d40450474c15 -size 30349 +oid sha256:12be3184a639ecce3442b8d54469807db30b1f4be58103724cceed29cec98fbd +size 34550 diff --git a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_group_by_algo_name.cassette b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_group_by_algo_name.cassette index 83a53903..6e6c3630 100644 --- a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_group_by_algo_name.cassette +++ b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_get_model_group_by_algo_name.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd38fa8d3a7d682aa896bebdb90e8d43497a68feb613f0ddb3ccb2942b2e860c -size 2401 +oid sha256:461357bdc90e0f4b36b2f49235371b5cd2a209d654f614a4237ff85c524c8e2f +size 2911 diff --git a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_predict_image.cassette b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_predict_image.cassette index ff432905..ef0a5940 100644 --- a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_predict_image.cassette +++ b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_predict_image.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9b760f5ab29fc62e5721866496ed7cf840d7a014c3f48e071175418944613f4 -size 8074149 +oid sha256:1c859cd3a66f9e2c2479c28700770c22a3fab093170a120a822900a261f814b5 +size 1735935 diff --git a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_project_setup_and_get_model_by_job.cassette b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_project_setup_and_get_model_by_job.cassette index 032feff0..96ad1684 100644 --- a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_project_setup_and_get_model_by_job.cassette +++ b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_project_setup_and_get_model_by_job.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9a08767297f05a209570b9cb1a6766a6892930c991a2666742fb07890206f9d -size 106144 +oid sha256:719ac1348159f6469b35553a54ce4ba1542fae26e48d976c31a08654d96958ce +size 206531 diff --git a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_set_active_model.cassette b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_set_active_model.cassette index 74e7a491..3600ce4f 100644 --- a/tests/fixtures/cassettes/TestModelAndPredictionClient.test_set_active_model.cassette +++ b/tests/fixtures/cassettes/TestModelAndPredictionClient.test_set_active_model.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1115449dabc7dd38350ae47a1f5a9e4cc1e9d303f3d3c28c3716f77500c920e -size 165030 +oid sha256:ce8b571b030e0c7ce4fd142f7579446d3e30ec83fedaceafabe2ef67f1f926a7 +size 412024 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_add_labels_multitask.cassette b/tests/fixtures/cassettes/TestProjectClient.test_add_labels_multitask.cassette index 62ab7ba6..d7057e98 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_add_labels_multitask.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_add_labels_multitask.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b1476bbca08c60f240555c2b68d17bb00da58fa95420faafdf80c289e5c5596 -size 38092 +oid sha256:70084232879e80ea057bd69d4473a932139347a4268f44459aff878eb7dfa305 +size 23595 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_add_labels_single_task.cassette b/tests/fixtures/cassettes/TestProjectClient.test_add_labels_single_task.cassette index 1f63ef9e..550aff79 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_add_labels_single_task.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_add_labels_single_task.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc9727a264b34c4b6a00a1f2dd52ce73122edaca232d21d01c5c2ef5361c2d8b -size 40416 +oid sha256:ad50aaf1b6e8fc7922db7fcbbb37c9aec06f3ad1bc4bd9dbf4383fec538c3d9d +size 26389 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_create_and_delete_project.cassette b/tests/fixtures/cassettes/TestProjectClient.test_create_and_delete_project.cassette index ec0a4d39..d20e4640 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_create_and_delete_project.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_create_and_delete_project.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d91b532b6e24227b3e86dd07ae41a1c292b914a3bded29fc12e7f3dbbf4ff16 -size 63835 +oid sha256:065836a0b9f41d63a0fbd8630fcc5b54df3e3c93698f2fb33b52422e12c25ff0 +size 20105 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.cassette b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.cassette index ea9f2e18..02c990c0 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e48dc42f62b2a2506b09d0ca0a85eb60126fc74f82deea329cc76f1283219862 -size 44035 +oid sha256:39f635642900258502a3978a475ce35439d14393737bc1a009cb3ec0ec855cda +size 28308 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_A.cassette b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_A.cassette index 072c695e..6f499bf6 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_A.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_A.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72bb265a132b023ef6612a50846cf958127f9a72f0638b0182774e9d687eb05e -size 28321 +oid sha256:25f0e45cb7569bbb7aaf4cb3bbbec9329f8d51b2aee5bd769496d3e48d392a39 +size 11220 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_B.cassette b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_B.cassette index 0137a3d2..8ceb299d 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_B.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_B.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fe339876b5bc6f61b1b79907d9dacdec56ed7bd0b7b797dc1344481965caf88 -size 25807 +oid sha256:8408f47cc72fb8f1333b9e0d64be70d71e9ab13fc98fdc795153d31cecacde37 +size 12532 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_C.cassette b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_C.cassette index ea5047c6..56c6e235 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_C.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_get_all_projects.proj_C.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b853a0618e12107be233573346d62bf8325fe1b394ac9621dc5e2ac37514a497 -size 27064 +oid sha256:7fbbaa1ef208c3b9a05197a16ea9dc62d30083766820a84813e6a8a44083fc03 +size 9776 diff --git a/tests/fixtures/cassettes/TestProjectClient.test_list_projects.cassette b/tests/fixtures/cassettes/TestProjectClient.test_list_projects.cassette index d4b8b2c3..9c056f7c 100644 --- a/tests/fixtures/cassettes/TestProjectClient.test_list_projects.cassette +++ b/tests/fixtures/cassettes/TestProjectClient.test_list_projects.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4ce735e3c114e07e4da4f91906695340c445c4868f1c18347995ba50c408f01 -size 22784 +oid sha256:232a0a64c33906fd38f85c2dc5f056daabd17460ecd64afc2d7dc23ce713fff3 +size 11156 diff --git a/tests/fixtures/cassettes/TestTrainingClient.test_get_status.cassette b/tests/fixtures/cassettes/TestTrainingClient.test_get_status.cassette index e9d7e814..09b1c4d0 100644 --- a/tests/fixtures/cassettes/TestTrainingClient.test_get_status.cassette +++ b/tests/fixtures/cassettes/TestTrainingClient.test_get_status.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1c311956ac0e6fdaede5271b1565afc9be3f2a3870c9bf887d2baef022df107 -size 2383 +oid sha256:0f7e1a48de4db8dfa036a31911f93cf69463d6ea72b748974936fde66947be1c +size 2985 diff --git a/tests/fixtures/cassettes/TestTrainingClient.test_train_task_and_get_jobs.cassette b/tests/fixtures/cassettes/TestTrainingClient.test_train_task_and_get_jobs.cassette index 3d232cd3..1bf14151 100644 --- a/tests/fixtures/cassettes/TestTrainingClient.test_train_task_and_get_jobs.cassette +++ b/tests/fixtures/cassettes/TestTrainingClient.test_train_task_and_get_jobs.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c46e771a2cbce29604300494b9ce920f38c53710339a1d2f666ebb7fb4543f4c -size 44776 +oid sha256:794bfb3051a5e3fa559751672febc0d1d8b685b9997b33d66c85f33b925282bf +size 27283 diff --git a/tests/fixtures/cassettes/TestUtils.test_get_supported_algorithms.cassette b/tests/fixtures/cassettes/TestUtils.test_get_supported_algorithms.cassette index 7b966276..ed9f6cae 100644 --- a/tests/fixtures/cassettes/TestUtils.test_get_supported_algorithms.cassette +++ b/tests/fixtures/cassettes/TestUtils.test_get_supported_algorithms.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f6b354e3129c1b8a1e1f768898ff9f6558a06db5ac8653d7f10f81c7eb2ce16 -size 70733 +oid sha256:d0634a8571acb2a8daa3c41c53d91069ca15e3b1763eaf45944299293825be13 +size 6395 diff --git a/tests/fixtures/cassettes/existing_projects.cassette b/tests/fixtures/cassettes/existing_projects.cassette index e1c09a36..7b2a2468 100644 --- a/tests/fixtures/cassettes/existing_projects.cassette +++ b/tests/fixtures/cassettes/existing_projects.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce0abf4d548b0f9f023c18f7ed7cb0b408cd7a5ca71455a095027507260ef5e4 -size 19865 +oid sha256:0e5d857f2a67e2630399b146c45689f4c968cc1f0baad10380a9fc135e43d6af +size 2516 diff --git a/tests/fixtures/cassettes/geti.cassette b/tests/fixtures/cassettes/geti.cassette index 78e595e0..7d0c12f5 100644 --- a/tests/fixtures/cassettes/geti.cassette +++ b/tests/fixtures/cassettes/geti.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa1123d696c38a31079cc0e30fa6bfb80eca218117705de603be91ac88a7c4ae -size 70128 +oid sha256:59c1fb403486d81f803a1a03fe82917702b31fca9bc491cff095aad9eb9e1823 +size 93654 diff --git a/tests/fixtures/cassettes/geti_sdk_test_annotation_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_annotation_client.cassette index a5c726b9..3d06eb6e 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_annotation_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_annotation_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73906f61ec94a9a3439773ee7c2d6b96ffea5e0a7d6bfc8a3e12daded49aec13 -size 88226 +oid sha256:22dc78302590496c4ad1bee61d0a08db5a876efd2c6d6c7afd6263399aa210e0 +size 9871 diff --git a/tests/fixtures/cassettes/geti_sdk_test_annotation_client_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_annotation_client_deletion.cassette index 26691550..13b46d56 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_annotation_client_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_annotation_client_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3928be2e6f58769c8e2bb0e82c0855a1c10a2a64c570d6e21252ff4531198840 -size 23015 +oid sha256:b8387ae4b1e9e05e4144ed1789381ad69caacc38e903959e44881f6b465b58c9 +size 10059 diff --git a/tests/fixtures/cassettes/geti_sdk_test_configuration_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_configuration_client.cassette index fc9621e2..6611c97f 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_configuration_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_configuration_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96ea1cb2085ed3911f93a63680680b2df3cb3554bca73fbd817dbf8ee9ec4021 -size 88184 +oid sha256:62ff1d9d22904acecdc9bc23c0f13fed72711ee879d67ca523f9b0e2d26d51a6 +size 9840 diff --git a/tests/fixtures/cassettes/geti_sdk_test_configuration_client_configuration_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_configuration_client_configuration_client.cassette index 62f631e2..7f3f3f57 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_configuration_client_configuration_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_configuration_client_configuration_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ec50b84d60d26e1a298ad8a61fa43946213c981cd631fe94b92621c6f53977e -size 11609 +oid sha256:d1728f6e0c06ee584bdd590b855b59c6462ff65a34f9ee3780628c7ca0a0c910 +size 7831 diff --git a/tests/fixtures/cassettes/geti_sdk_test_configuration_client_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_configuration_client_deletion.cassette index 1a1fe020..f116d77f 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_configuration_client_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_configuration_client_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c108fbd08276f2853d6994e2cb142f6e8478f9cc49c548df10627cd2a6db6e4f -size 23172 +oid sha256:99506b097627886df43c06f89a1b99b5900df99d1d4e0568130f10475670e90c +size 10393 diff --git a/tests/fixtures/cassettes/geti_sdk_test_dataset_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_dataset_client.cassette index d0e0136b..5cbff1bf 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_dataset_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_dataset_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2376ad1acd8bc5e3cce4c573a5f04dac71ea96a76d5f604981bd2cb7f19f8913 -size 88173 +oid sha256:77f7665dd49168e2098ffd93520a3c99e0eaf82b335b2a3b1b8883d342ace327 +size 9828 diff --git a/tests/fixtures/cassettes/geti_sdk_test_dataset_client_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_dataset_client_deletion.cassette index 338e3cd6..7ea0e3e8 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_dataset_client_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_dataset_client_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cef822f934b5cb523e534d5de03c47b5eb4f1b501c9554038ba75d28b2ca66d8 -size 23433 +oid sha256:2d5c4826b20eb8d73ee3258e604a00f6f99a5bd0bbd71b5f4a362ac7cc4d3d6a +size 10647 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_classification.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_classification.cassette index 5bd76166..929b91e4 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_classification.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_classification.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e359f0a77965452e78c4a41989776655d689dfbf53d73ea825f7e370f8b43cf -size 6598769 +oid sha256:bc921b135bc5ae74d75e913504ec05f2ddeca7fd1cbb15e58a2acff75dde32d6 +size 6672531 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_deletion.cassette index 9459dda4..f15100fd 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32211dc54fbae2532e6b2e535b19ec2ecabf475867e9c7a6f73fb41f9b6f1f26 -size 25191 +oid sha256:0f28e9ae84cf22a8b969ab9eb282c686cde50d7c5e3926b61862ec932d9f7400 +size 12354 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_is_training.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_is_training.cassette index 3ba9f380..a3d6b765 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_is_training.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_is_training.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d766de28d0ec5bb88f11b18393c8e648511bdcab61687546984b084c9e082702 -size 2396 +oid sha256:5a842d3a377ed1cf616273b13496255a1f2db76536e803421a7545961253c4ca +size 2990 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_setup_training.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_setup_training.cassette index 797d25af..27dfdba4 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_setup_training.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_setup_training.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40a280e3c4ea656cc5d0741882a642319643c6bac515afbb49a2c909bb6deb79 -size 21000 +oid sha256:fff477c712258ca96a0cc4244a79a16cf3ac077bfde442ecf281fca4323a4855 +size 8584 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_training_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_training_client.cassette index beeaeaf1..0b9a9750 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_classification_training_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_classification_training_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e103d4a2a0887646258eb19bc0ebaa8b5cb82e8fc7337179e64d891c4b3570c9 -size 9249 +oid sha256:5e8c9d533b2e028cdaf33723af1daaf6b5771bb4501da6dd3dbc24dc1a8ec6d5 +size 4050 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification.cassette index 0bb43b5b..49682d88 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abcda598194c8d7091f4ca22ce2f7999685ed3ff3076fec4aa1546119a3ec288 -size 28366 +oid sha256:3a82864bd012c2d76ca4be20dd88cd3c6778a83d7fc889e1f905c630089e062a +size 12636 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_add_annotated_media.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_add_annotated_media.cassette index 6a395753..6db7349c 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_add_annotated_media.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_add_annotated_media.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42e1cde01922668a0bc2e290abc07b0c622c3dab6bd8610ba2435da37691db50 -size 703307 +oid sha256:b9dbba43b5f0de6cb7b6079918a6e566a9417cc507c31ff2aeeb2bf0855c05d3 +size 746344 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_configuration_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_configuration_client.cassette index 36c7b92b..eaeca503 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_configuration_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_configuration_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b42ae6e3dbc51e7666aa3ac619ab4d16929c75d040f4423b79d4a1078f4c12c2 -size 12023 +oid sha256:bbdb1a3b9d75a269415f50aa010a3857cf7a3a13131a6de363975e65ff682cad +size 9831 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_deletion.cassette index b9cb4875..609a17f8 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a4b6af691faec190cbdc6d97227f311a9c1fc5154841c4f918ba70638356752 -size 23925 +oid sha256:a15fa4ce176baf0c7317fd9282ff78b6da084a54dbb912a5cb266773166b6549 +size 12023 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_is_training.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_is_training.cassette index d67926e1..09e56a42 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_is_training.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_is_training.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdcbc150cd4188a9a9822a6e0a679684e8237c365eecf1f7bb059e539cd01b78 -size 2624 +oid sha256:166ee9b6719dc8e15126b6bd0cbf9103b7229e4b49a9cefd23844413b42e0d44 +size 3275 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_auto_train.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_auto_train.cassette index cdd54b87..52fda390 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_auto_train.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_auto_train.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85c7e3d1f3ffc5a1aa6c51ea869ca83b766e66aec379d6b05e731a54f1c912ba -size 43353 +oid sha256:3d6a9a167e0227a550100afb89c6f50e438674bc605afa1e4ec8162383bbb6d2 +size 47513 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_minimal_hypers.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_minimal_hypers.cassette index 095028b6..da5f2a45 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_minimal_hypers.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_set_minimal_hypers.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:061df6137b52b53b3ddb733d1a69474f20260bf5c7bf698f9c99b597c2951d03 -size 274513 +oid sha256:f2d9dcef3e50b867b66aa4e2eb29dc4d3c170c7e10ab60ced13a78a01e3d360c +size 296373 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_setup_training.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_setup_training.cassette index 390676ff..4431c1da 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_setup_training.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_setup_training.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27c9f380892047a9586a5c614dac297c0df1f235280cea3793be51746850e802 -size 44230 +oid sha256:102567b27dac96b61d271062bb55a5e6d7ba3b3af7aa9be3ab71ee6a456308ea +size 17882 diff --git a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_training_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_training_client.cassette index 298dc109..66cd385f 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_training_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_geti_detection_to_classification_training_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f24f8fada6a4f5e246160c9fe457c27eb5730b943bf7cb44d3780f49bce8f632 -size 9249 +oid sha256:d5ad94756011bfc909cf822e67aa5afdcaf577414b8fc7537c68ed329acc5a90 +size 6395 diff --git a/tests/fixtures/cassettes/geti_sdk_test_image_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_image_client.cassette index e2e68ae6..089fa89c 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_image_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_image_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2893ecb29b86aa9db823546a7010ed398d176406f4f01c0034be5d0f9f4f99d -size 88170 +oid sha256:71e280556c88ed23f6aaadc21c2097eee34c6ed1c01d856df8d2e04b5177acb2 +size 9824 diff --git a/tests/fixtures/cassettes/geti_sdk_test_image_client_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_image_client_deletion.cassette index 7200a91a..2c1539c0 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_image_client_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_image_client_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcb0998cc350f59d1cf32d8567f05c9eb3dabcdff67af0d498f7931d7f225ed2 -size 23164 +oid sha256:f3bc3e76f228f6923294c06491ac405c5a50f7ac9b51b2d80bcedab1fc932cfb +size 10377 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client.cassette index 96678efc..06bc1cf9 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d69d3c6bc3eafbaa4cbe194dca230b93b3083ccd8af022b9a8a345d11f34ae6 -size 88267 +oid sha256:3a210bff0b85a5a9c94ff8941ff879baa6114bf554adce322c76003f63bb3cb6 +size 9912 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_add_annotated_media.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_add_annotated_media.cassette index d4bcf505..6dc0be7a 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_add_annotated_media.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_add_annotated_media.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80d6f45940b3104827c48630110bfa12a97a332459b4a97d0d3ac747c6c76179 -size 452897 +oid sha256:a5bd73e5b7bb50d6433c3e8964ef1d07973c656951a2215acc5a619c92056f44 +size 473053 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_configuration_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_configuration_client.cassette index 4ff19a1f..69bbf666 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_configuration_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_configuration_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d54f9cb52b31a264ec19af58b6dd50ca30b4a13e4670d8f8a8272b86dee96ae8 -size 11798 +oid sha256:2494f123d946078ac357f651f5ca4caf7ec3f3c00861758b68f8c4f821c1edc7 +size 7201 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_deletion.cassette index 9e52fe35..926c2c0a 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26c46a6b783c48fcd102a6d77d21d027707a479d53dcda4882d323b48dd2804c -size 23032 +oid sha256:abebb0923c8fb16ebbd8d57ef98f17a85631e45a33f257cc0357636b66ed2ea4 +size 10159 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_model_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_model_client.cassette index d9bd405e..b84ce5da 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_model_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_model_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7a755bbfe4929971ebfc69e69846ed94741896d6aa7acfb965a1b95e4ed6a76 -size 9249 +oid sha256:66f95409b30034ee79ef9af3cf676953188bbbf645eef7e3ad90523ffb819c5f +size 4050 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_prediction_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_prediction_client.cassette index 554cde79..ad61ab91 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_prediction_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_prediction_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c8b5f3bb8f07f4152f0f4d29ee69e9e0bc31cd454b6899b6aaa5f2510c23156 -size 1975 +oid sha256:9b4faaca70f0351cd5a73310f46e5c95bf3f7c0bff6b0b8e820ea5af2c324603 +size 2447 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_auto_train.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_auto_train.cassette index 157bc866..36ee3597 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_auto_train.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_auto_train.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a99357fe91f0229bdc5d26ab224e91748bde5445afdc72dc98d7b66e13f7892 -size 19780 +oid sha256:b88ee4624ce92eb4a590d4f619bb2171c5d244430b4a98b6d8bf4415813d05c9 +size 21400 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_minimal_hypers.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_minimal_hypers.cassette index d0944ad5..29fd3394 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_minimal_hypers.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_set_minimal_hypers.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a39a3a7ab58dbb749b77c76cfbcd48bebd7e789f1702356a6e291050e22e612 -size 84228 +oid sha256:cf7d4731bfe18234ca508df38b108ca2e4cb8d876cc07b9e823b3b3cab93da9a +size 90059 diff --git a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_training_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_training_client.cassette index 9be59f42..60ae690d 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_training_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_model_and_prediction_client_training_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26410e107235620a5cb65f16c6c432226fe2863b486e77a3e2bc691527797144 -size 9249 +oid sha256:bcfa5eb94f44a91bca535da2ed3881c27a79bc9123796acd1d410761a3f5f33e +size 4050 diff --git a/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical.cassette b/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical.cassette index fa74e7ba..95ba93a0 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b142dd55ee57fec010436053a1afa57f08b362c78cb1c4947e4e8a013fc3c6f -size 29124 +oid sha256:a5ea096b34b6c60f1e4a84fca86417b61709344ef42ef356299ea67f933c8325 +size 13097 diff --git a/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical_deletion.cassette index a9fc9eae..8bdf05fa 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_project_hierarchical_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:213a16009d3a7d8debf752065f0dd153236b30db19304733b4e715921f45e130 -size 24802 +oid sha256:872a148ea441ca15678fb757f89ed66fb49449345bb81c80a14a06c7d3221f71 +size 13647 diff --git a/tests/fixtures/cassettes/geti_sdk_test_project_simple.cassette b/tests/fixtures/cassettes/geti_sdk_test_project_simple.cassette index 2deb0112..762126b6 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_project_simple.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_project_simple.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0a746a29b3452fce69d425968b4623c74e0058553d2fc4775ae92dbd49cef65 -size 87339 +oid sha256:61c4576ac797f883ab814ecbd9adde3ac2be54c98106c453f797f65e421e004f +size 9886 diff --git a/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos.cassette b/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos.cassette index 6b7e56d6..bbad0d0c 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:692a04afd592d061e3a211a261af484c400794b3fa6d17c5bd06801366feff1e -size 88578 +oid sha256:2894e7b283ad8947b2e62fed249a9c84ded953095d5438d289023a2aedf4b946 +size 11256 diff --git a/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos_deletion.cassette index 251d0c2f..e66c3e69 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_test_supported_algos_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51d45b4f28c3bfe890f6726c8431c080637c81c8394a0828b076fddeab2ca849 -size 23767 +oid sha256:d4477adfc9da503ac7fe8fc1e8747cef25df5d350bb32fc30dce988454f7cb61 +size 11703 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client.cassette index 7152267b..f3e01393 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:289ae35820e6e1e74b51c8b4c9c8d9d79fa361fead43cccd766549aff1f5a81f -size 87274 +oid sha256:422ebecc2d64598e3b7970e5f8b4b88220dc0a4571af53197a4662ad65d36a0d +size 9830 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client_add_annotated_media.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client_add_annotated_media.cassette index cd1a5f63..8af45664 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client_add_annotated_media.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client_add_annotated_media.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:282fe2352437f7a8729bec9d05a886232373e4ff8629e446f193213ae651dad8 -size 569548 +oid sha256:4bec8ad110a14b6ed4415d673c172b50d7e132116285d61ef0904c5b504ef12f +size 594504 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client_configuration_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client_configuration_client.cassette index 5b0eed14..924cfe56 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client_configuration_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client_configuration_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7533b45595a8a273d74617b054f67aa7e5c39c2b50baffcd5d107eefbf4ce7bb -size 11608 +oid sha256:83eacf45b3157ee2ad325383f425006332509f320f626aabf562007c66c6ba94 +size 7831 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client_deletion.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client_deletion.cassette index 523eff98..aa8fddee 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client_deletion.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client_deletion.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c18e7fc227bc0e0cec3d0cc6a93a51c2ff30af92416673e6eac420132dc5edbb -size 23167 +oid sha256:369e530e35c26319112b5447a7c2925e90637574f0aa816f68534af22bfedfe2 +size 10383 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client_set_auto_train.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client_set_auto_train.cassette index 94859b02..95021a65 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client_set_auto_train.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client_set_auto_train.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:618a50b67bf79833b0bb8718518a34d6b26c0e78fc14b4b36fcf986ebf35c207 -size 23596 +oid sha256:71d42568a1c7b97228df7f70250bbd7b4dceef17c5ef5ccbb61fff1251e4e2d2 +size 26140 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client_set_minimal_hypers.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client_set_minimal_hypers.cassette index cdc09d3c..4a097fc3 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client_set_minimal_hypers.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client_set_minimal_hypers.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09d1f63b7762d72b8ee3dc90d08ce9d97d726829169f2676309bd2bf36773226 -size 101387 +oid sha256:d8383cda077eb55d290e4c18a5c811c9f087a6c2e8897023870b1e755850bae8 +size 111243 diff --git a/tests/fixtures/cassettes/geti_sdk_test_training_client_training_client.cassette b/tests/fixtures/cassettes/geti_sdk_test_training_client_training_client.cassette index 23139853..175369a1 100644 --- a/tests/fixtures/cassettes/geti_sdk_test_training_client_training_client.cassette +++ b/tests/fixtures/cassettes/geti_sdk_test_training_client_training_client.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e3fa86ea87fac5a7922d935b3a3cfbf25dbfc70432ebfd80b0eb0c81c5b9074 -size 9249 +oid sha256:a052190dd1f7c9036ca082a79a3127211e2b31c1791a5d4b077ebf2cc2f47a8f +size 4870 diff --git a/tests/fixtures/cassettes/session.cassette b/tests/fixtures/cassettes/session.cassette index bac9cf96..871563c4 100644 --- a/tests/fixtures/cassettes/session.cassette +++ b/tests/fixtures/cassettes/session.cassette @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fda38733defffbd6f1acfd7d2a0f3c74d60d9b213c19442d1639ad1da2c0c080 -size 64684 +oid sha256:73ca12f95e8ee0d62d31a755a3fadac68366d09f8a1f966f90dbc06aa3af1e4b +size 72534 From 6ca6503b801d35210f9d3152b5b07d8eb4d47e16 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Tue, 5 Mar 2024 16:03:08 +0100 Subject: [PATCH 05/12] Restrict default top-level permissions for all workflows --- .github/workflows/build-package-internal-pypi.yaml | 3 +++ .github/workflows/build-package-pypi.yaml | 3 +++ .github/workflows/build-package-test-pypi.yaml | 3 +++ .github/workflows/build-package.yaml | 3 +++ .github/workflows/nightly-tests-geti-develop.yaml | 3 +++ .github/workflows/nightly-tests-geti-latest.yaml | 3 +++ .github/workflows/nightly-tests-geti-mvp.yaml | 3 +++ .github/workflows/nightly-tests.yaml | 3 +++ .github/workflows/pre-merge-tests.yml | 5 +++++ .github/workflows/security-scan.yaml | 3 +++ 10 files changed, 32 insertions(+) diff --git a/.github/workflows/build-package-internal-pypi.yaml b/.github/workflows/build-package-internal-pypi.yaml index c12ad82c..7adcab29 100644 --- a/.github/workflows/build-package-internal-pypi.yaml +++ b/.github/workflows/build-package-internal-pypi.yaml @@ -6,6 +6,9 @@ on: release: types: [published] +permissions: + contents: read + jobs: build: uses: ./.github/workflows/build-package.yaml diff --git a/.github/workflows/build-package-pypi.yaml b/.github/workflows/build-package-pypi.yaml index 7c15309e..2f158466 100644 --- a/.github/workflows/build-package-pypi.yaml +++ b/.github/workflows/build-package-pypi.yaml @@ -3,6 +3,9 @@ name: Publish package [PyPI] on: workflow_dispatch: +permissions: + contents: read + jobs: build: uses: ./.github/workflows/build-package.yaml diff --git a/.github/workflows/build-package-test-pypi.yaml b/.github/workflows/build-package-test-pypi.yaml index ce82cc48..864c76c2 100644 --- a/.github/workflows/build-package-test-pypi.yaml +++ b/.github/workflows/build-package-test-pypi.yaml @@ -6,6 +6,9 @@ on: release: types: [published] +permissions: + contents: read + jobs: build: uses: ./.github/workflows/build-package.yaml diff --git a/.github/workflows/build-package.yaml b/.github/workflows/build-package.yaml index 4d2e803d..9a94347f 100644 --- a/.github/workflows/build-package.yaml +++ b/.github/workflows/build-package.yaml @@ -23,6 +23,9 @@ env: PYPI_PORT: ${{ secrets.PYPI_PORT }} ENABLE_DEV_DEPENDENCIES: ${{ inputs.enable_dev_dependencies }} +permissions: + contents: read + jobs: build_sdk: runs-on: [self-hosted, sdk-runner] diff --git a/.github/workflows/nightly-tests-geti-develop.yaml b/.github/workflows/nightly-tests-geti-develop.yaml index 5f4ef140..55054c08 100644 --- a/.github/workflows/nightly-tests-geti-develop.yaml +++ b/.github/workflows/nightly-tests-geti-develop.yaml @@ -6,6 +6,9 @@ on: schedule: # Execute tests at midnight every day - cron: "0 0 * * *" +permissions: + contents: read + jobs: build: uses: ./.github/workflows/nightly-tests.yaml diff --git a/.github/workflows/nightly-tests-geti-latest.yaml b/.github/workflows/nightly-tests-geti-latest.yaml index fe16423d..c9b551eb 100644 --- a/.github/workflows/nightly-tests-geti-latest.yaml +++ b/.github/workflows/nightly-tests-geti-latest.yaml @@ -6,6 +6,9 @@ on: schedule: # Execute tests at midnight every day - cron: "0 0 * * *" +permissions: + contents: read + jobs: build: uses: ./.github/workflows/nightly-tests.yaml diff --git a/.github/workflows/nightly-tests-geti-mvp.yaml b/.github/workflows/nightly-tests-geti-mvp.yaml index 3d69383d..9cda95d1 100644 --- a/.github/workflows/nightly-tests-geti-mvp.yaml +++ b/.github/workflows/nightly-tests-geti-mvp.yaml @@ -6,6 +6,9 @@ on: schedule: # Execute tests at midnight every day - cron: "0 0 * * *" +permissions: + contents: read + jobs: build: uses: ./.github/workflows/nightly-tests.yaml diff --git a/.github/workflows/nightly-tests.yaml b/.github/workflows/nightly-tests.yaml index 251b4162..ef6dbf8e 100644 --- a/.github/workflows/nightly-tests.yaml +++ b/.github/workflows/nightly-tests.yaml @@ -37,6 +37,9 @@ env: CONDA_ENV: sc_sdk_nightly_test_environment PYTHON_VERSION: 3.8 +permissions: + contents: read + jobs: nightly_tests: runs-on: [self-hosted, sdk-runner] diff --git a/.github/workflows/pre-merge-tests.yml b/.github/workflows/pre-merge-tests.yml index 14222c69..cd5310a2 100644 --- a/.github/workflows/pre-merge-tests.yml +++ b/.github/workflows/pre-merge-tests.yml @@ -14,6 +14,11 @@ env: REPORT_DIRECTORY: reports PYTHONUTF8: '1' +permissions: + contents: read + checks: write + actions: write + jobs: pr_tests: runs-on: ${{ matrix.os }} diff --git a/.github/workflows/security-scan.yaml b/.github/workflows/security-scan.yaml index 2c7eab97..abdd9e61 100644 --- a/.github/workflows/security-scan.yaml +++ b/.github/workflows/security-scan.yaml @@ -11,6 +11,9 @@ env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} REPORT_DIRECTORY: reports +permissions: + contents: read + jobs: security: runs-on: [self-hosted, sdk-runner] From 2f39ed680353a6b6443caa9ba7be51612cde02c0 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Wed, 6 Mar 2024 09:23:01 +0100 Subject: [PATCH 06/12] Add legacy prediction converter for classification --- geti_sdk/deployment/deployment.py | 23 +++-- .../deployment/legacy_converters/__init__.py | 6 +- .../legacy_classification_converter.py | 85 +++++++++++++++++++ 3 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 geti_sdk/deployment/legacy_converters/legacy_classification_converter.py diff --git a/geti_sdk/deployment/deployment.py b/geti_sdk/deployment/deployment.py index c5665465..c1a701fd 100644 --- a/geti_sdk/deployment/deployment.py +++ b/geti_sdk/deployment/deployment.py @@ -37,6 +37,7 @@ from geti_sdk.deployment.data_models import ROI, IntermediateInferenceResult from geti_sdk.deployment.legacy_converters import ( AnomalyClassificationToAnnotationConverter, + ClassificationToAnnotationConverter, ) from geti_sdk.rest_converters import ProjectRESTConverter @@ -334,17 +335,29 @@ def _infer_task( annotation_scene_entity = converter.convert_to_annotation( predictions=postprocessing_results, metadata=metadata ) - except AttributeError: + except AttributeError as e: # Add backwards compatibility for anomaly models created in Geti v1.8 and below if task.type.is_anomaly: legacy_converter = AnomalyClassificationToAnnotationConverter( label_schema=model.ote_label_schema ) - annotation_scene_entity = legacy_converter.convert_to_annotation( - predictions=postprocessing_results, metadata=metadata + elif task.type == TaskType.CLASSIFICATION: + hierarchical_info = json.loads( + model._inference_model.hierarchical_config ) - self._inference_converters[task.type] = legacy_converter - + hierarchical_cls_heads_info = hierarchical_info.get( + "cls_heads_info", {} + ) + legacy_converter = ClassificationToAnnotationConverter( + label_schema=model.ote_label_schema, + hierarchical_cls_heads_info=hierarchical_cls_heads_info, + ) + else: + raise e + annotation_scene_entity = legacy_converter.convert_to_annotation( + predictions=postprocessing_results, metadata=metadata + ) + self._inference_converters[task.type] = legacy_converter prediction = Prediction.from_ote( annotation_scene_entity, image_width=width, image_height=height ) diff --git a/geti_sdk/deployment/legacy_converters/__init__.py b/geti_sdk/deployment/legacy_converters/__init__.py index b815b578..12e365a8 100644 --- a/geti_sdk/deployment/legacy_converters/__init__.py +++ b/geti_sdk/deployment/legacy_converters/__init__.py @@ -18,5 +18,9 @@ """ from .legacy_anomaly_converter import AnomalyClassificationToAnnotationConverter +from .legacy_classification_converter import ClassificationToAnnotationConverter -__all__ = ["AnomalyClassificationToAnnotationConverter"] +__all__ = [ + "AnomalyClassificationToAnnotationConverter", + "ClassificationToAnnotationConverter", +] diff --git a/geti_sdk/deployment/legacy_converters/legacy_classification_converter.py b/geti_sdk/deployment/legacy_converters/legacy_classification_converter.py new file mode 100644 index 00000000..b16376f0 --- /dev/null +++ b/geti_sdk/deployment/legacy_converters/legacy_classification_converter.py @@ -0,0 +1,85 @@ +# Copyright (C) 2024 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions +# and limitations under the License. +from typing import Dict, List, Optional, Tuple + +from otx.algorithms.classification.utils import get_hierarchical_label_list +from otx.api.entities.annotation import ( + Annotation, + AnnotationSceneEntity, + AnnotationSceneKind, +) +from otx.api.entities.label_schema import LabelSchemaEntity +from otx.api.entities.scored_label import ScoredLabel +from otx.api.entities.shapes.rectangle import Rectangle +from otx.api.usecases.exportable_code.prediction_to_annotation_converter import ( + IPredictionToAnnotationConverter, +) +from otx.api.utils.labels_utils import get_empty_label + + +class ClassificationToAnnotationConverter(IPredictionToAnnotationConverter): + """ + Convert Classification Predictions ModelAPI to Annotations. + + + :param labels: Label Schema containing the label info of the task + :param hierarchical_cls_heads_info: Info from model.hierarchical_info["cls_heads_info"] + """ + + def __init__( + self, + label_schema: LabelSchemaEntity, + hierarchical_cls_heads_info: Optional[Dict] = None, + ): + if len(label_schema.get_labels(False)) == 1: + self.labels = label_schema.get_labels(include_empty=True) + else: + self.labels = label_schema.get_labels(include_empty=False) + self.empty_label = get_empty_label(label_schema) + multilabel = len(label_schema.get_groups(False)) > 1 + multilabel = multilabel and len(label_schema.get_groups(False)) == len( + label_schema.get_labels(include_empty=False) + ) + self.hierarchical = not multilabel and len(label_schema.get_groups(False)) > 1 + + self.label_schema = label_schema + + if self.hierarchical: + self.labels = get_hierarchical_label_list( + hierarchical_cls_heads_info, self.labels + ) + + def convert_to_annotation( + self, predictions: List[Tuple[int, float]], metadata: Optional[Dict] = None + ) -> AnnotationSceneEntity: + """ + Convert predictions to OTX Annotation Scene using the metadata. + + :param predictions: Raw predictions from the model. + :param metadata: Variable containing metadata information. + :return: OTX annotation scene entity object. + """ + labels = [] + for index, score in predictions: + labels.append(ScoredLabel(self.labels[index], float(score))) + if self.hierarchical: + labels = self.label_schema.resolve_labels_probabilistic(labels) + + if not labels and self.empty_label: + labels = [ScoredLabel(self.empty_label, probability=1.0)] + + annotations = [Annotation(Rectangle.generate_full_box(), labels=labels)] + return AnnotationSceneEntity( + kind=AnnotationSceneKind.PREDICTION, annotations=annotations + ) From c9e8175f6da944039bc21fa9351b071a01d20055 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Wed, 6 Mar 2024 09:42:12 +0100 Subject: [PATCH 07/12] Add legacy prediction converter for segmentation models --- geti_sdk/deployment/deployment.py | 5 ++ .../deployment/legacy_converters/__init__.py | 2 + .../legacy_segmentation_converter.py | 55 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py diff --git a/geti_sdk/deployment/deployment.py b/geti_sdk/deployment/deployment.py index c1a701fd..7a66190f 100644 --- a/geti_sdk/deployment/deployment.py +++ b/geti_sdk/deployment/deployment.py @@ -38,6 +38,7 @@ from geti_sdk.deployment.legacy_converters import ( AnomalyClassificationToAnnotationConverter, ClassificationToAnnotationConverter, + SegmentationToAnnotationConverter, ) from geti_sdk.rest_converters import ProjectRESTConverter @@ -352,6 +353,10 @@ def _infer_task( label_schema=model.ote_label_schema, hierarchical_cls_heads_info=hierarchical_cls_heads_info, ) + elif task.type == TaskType.SEGMENTATION: + legacy_converter = SegmentationToAnnotationConverter( + label_schema=model.ote_label_schema + ) else: raise e annotation_scene_entity = legacy_converter.convert_to_annotation( diff --git a/geti_sdk/deployment/legacy_converters/__init__.py b/geti_sdk/deployment/legacy_converters/__init__.py index 12e365a8..b2f6f20e 100644 --- a/geti_sdk/deployment/legacy_converters/__init__.py +++ b/geti_sdk/deployment/legacy_converters/__init__.py @@ -19,8 +19,10 @@ from .legacy_anomaly_converter import AnomalyClassificationToAnnotationConverter from .legacy_classification_converter import ClassificationToAnnotationConverter +from .legacy_segmentation_converter import SegmentationToAnnotationConverter __all__ = [ "AnomalyClassificationToAnnotationConverter", "ClassificationToAnnotationConverter", + "SegmentationToAnnotationConverter", ] diff --git a/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py b/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py new file mode 100644 index 00000000..3cb83a0d --- /dev/null +++ b/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py @@ -0,0 +1,55 @@ +# Copyright (C) 2024 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions +# and limitations under the License. +from typing import Any, Dict + +import numpy as np +from otx.api.entities.annotation import AnnotationSceneEntity, AnnotationSceneKind +from otx.api.entities.label_schema import LabelSchemaEntity +from otx.api.usecases.exportable_code.prediction_to_annotation_converter import ( + IPredictionToAnnotationConverter, +) +from otx.api.utils.segmentation_utils import create_annotation_from_segmentation_map + + +class SegmentationToAnnotationConverter(IPredictionToAnnotationConverter): + """ + Convert Segmentation Predictions ModelAPI to Annotations. + + :param labels: Label Schema containing the label info of the task + """ + + def __init__(self, label_schema: LabelSchemaEntity): + labels = label_schema.get_labels(include_empty=False) + self.label_map = dict(enumerate(labels, 1)) + + def convert_to_annotation( + self, predictions: np.ndarray, metadata: Dict[str, Any] + ) -> AnnotationSceneEntity: + """ + Convert predictions to OTX Annotation Scene using the metadata. + + :param predictions: Raw predictions from the model. + :param metadata: Variable containing metadata information. + :return: OTX annotation scene entity object. + """ + soft_prediction = metadata.get("soft_prediction", np.ones(predictions.shape)) + annotations = create_annotation_from_segmentation_map( + hard_prediction=predictions, + soft_prediction=soft_prediction, + label_map=self.label_map, + ) + + return AnnotationSceneEntity( + kind=AnnotationSceneKind.PREDICTION, annotations=annotations + ) From c45ca9028e2dd49de2f1a271878438e37648feae Mon Sep 17 00:00:00 2001 From: ljcornel Date: Wed, 6 Mar 2024 12:10:58 +0100 Subject: [PATCH 08/12] Add anomaly detection and anomaly segmentation converters --- geti_sdk/deployment/deployment.py | 12 ++- .../deployment/legacy_converters/__init__.py | 8 +- .../legacy_anomaly_converter.py | 101 ++++++++++++++++++ 3 files changed, 119 insertions(+), 2 deletions(-) diff --git a/geti_sdk/deployment/deployment.py b/geti_sdk/deployment/deployment.py index 7a66190f..7d7950b0 100644 --- a/geti_sdk/deployment/deployment.py +++ b/geti_sdk/deployment/deployment.py @@ -37,6 +37,8 @@ from geti_sdk.deployment.data_models import ROI, IntermediateInferenceResult from geti_sdk.deployment.legacy_converters import ( AnomalyClassificationToAnnotationConverter, + AnomalyDetectionToAnnotationConverter, + AnomalySegmentationToAnnotationConverter, ClassificationToAnnotationConverter, SegmentationToAnnotationConverter, ) @@ -338,10 +340,18 @@ def _infer_task( ) except AttributeError as e: # Add backwards compatibility for anomaly models created in Geti v1.8 and below - if task.type.is_anomaly: + if task.type == TaskType.ANOMALY_CLASSIFICATION: legacy_converter = AnomalyClassificationToAnnotationConverter( label_schema=model.ote_label_schema ) + elif task.type == TaskType.ANOMALY_SEGMENTATION: + legacy_converter = AnomalySegmentationToAnnotationConverter( + label_schema=model.ote_label_schema + ) + elif task.type == TaskType.ANOMALY_DETECTION: + legacy_converter = AnomalyDetectionToAnnotationConverter( + label_schema=model.ote_label_schema + ) elif task.type == TaskType.CLASSIFICATION: hierarchical_info = json.loads( model._inference_model.hierarchical_config diff --git a/geti_sdk/deployment/legacy_converters/__init__.py b/geti_sdk/deployment/legacy_converters/__init__.py index b2f6f20e..15feb2b7 100644 --- a/geti_sdk/deployment/legacy_converters/__init__.py +++ b/geti_sdk/deployment/legacy_converters/__init__.py @@ -17,12 +17,18 @@ versions of the Intel® Geti™ platform, i.e. v1.8 and below. """ -from .legacy_anomaly_converter import AnomalyClassificationToAnnotationConverter +from .legacy_anomaly_converter import ( + AnomalyClassificationToAnnotationConverter, + AnomalyDetectionToAnnotationConverter, + AnomalySegmentationToAnnotationConverter, +) from .legacy_classification_converter import ClassificationToAnnotationConverter from .legacy_segmentation_converter import SegmentationToAnnotationConverter __all__ = [ "AnomalyClassificationToAnnotationConverter", + "AnomalyDetectionToAnnotationConverter", + "AnomalySegmentationToAnnotationConverter", "ClassificationToAnnotationConverter", "SegmentationToAnnotationConverter", ] diff --git a/geti_sdk/deployment/legacy_converters/legacy_anomaly_converter.py b/geti_sdk/deployment/legacy_converters/legacy_anomaly_converter.py index 74ec230e..5c2530e5 100644 --- a/geti_sdk/deployment/legacy_converters/legacy_anomaly_converter.py +++ b/geti_sdk/deployment/legacy_converters/legacy_anomaly_converter.py @@ -14,6 +14,7 @@ from typing import Any, Dict import numpy as np +from openvino.model_api.models.utils import AnomalyResult from otx.api.entities.annotation import ( Annotation, AnnotationSceneEntity, @@ -25,6 +26,7 @@ from otx.api.usecases.exportable_code.prediction_to_annotation_converter import ( IPredictionToAnnotationConverter, ) +from otx.api.utils.segmentation_utils import create_annotation_from_segmentation_map class AnomalyClassificationToAnnotationConverter(IPredictionToAnnotationConverter): @@ -63,3 +65,102 @@ def convert_to_annotation( return AnnotationSceneEntity( kind=AnnotationSceneKind.PREDICTION, annotations=annotations ) + + +class AnomalySegmentationToAnnotationConverter(IPredictionToAnnotationConverter): + """ + Convert AnomalySegmentation Predictions ModelAPI to Annotations. + + :param labels: Label Schema containing the label info of the task + """ + + def __init__(self, label_schema: LabelSchemaEntity): + labels = label_schema.get_labels(include_empty=False) + self.normal_label = [label for label in labels if not label.is_anomalous][0] + self.anomalous_label = [label for label in labels if label.is_anomalous][0] + self.label_map = {0: self.normal_label, 1: self.anomalous_label} + + def convert_to_annotation( + self, predictions: AnomalyResult, metadata: Dict[str, Any] + ) -> AnnotationSceneEntity: + """ + Convert predictions to OTX Annotation Scene using the metadata. + + :param predictions: Raw predictions from the model. + :param metadata: Variable containing metadata information. + :return: OTX annotation scene entity object. + """ + assert predictions.pred_mask is not None + assert predictions.anomaly_map is not None + annotations = create_annotation_from_segmentation_map( + predictions.pred_mask, predictions.anomaly_map / 255.0, self.label_map + ) + if len(annotations) == 0: + # TODO: add confidence to this label + annotations = [ + Annotation( + Rectangle.generate_full_box(), + labels=[ScoredLabel(label=self.normal_label, probability=1.0)], + ) + ] + return AnnotationSceneEntity( + kind=AnnotationSceneKind.PREDICTION, annotations=annotations + ) + + +class AnomalyDetectionToAnnotationConverter(IPredictionToAnnotationConverter): + """ + Convert Anomaly Detection Predictions ModelAPI to Annotations. + + :param labels: Label Schema containing the label info of the task + """ + + def __init__(self, label_schema: LabelSchemaEntity): + labels = label_schema.get_labels(include_empty=False) + self.normal_label = [label for label in labels if not label.is_anomalous][0] + self.anomalous_label = [label for label in labels if label.is_anomalous][0] + self.label_map = {0: self.normal_label, 1: self.anomalous_label} + + def convert_to_annotation( + self, predictions: AnomalyResult, metadata: Dict[str, Any] + ) -> AnnotationSceneEntity: + """ + Convert predictions to OTX Annotation Scene using the metadata. + + :param predictions: Raw predictions from the model. + :param metadata: Variable containing metadata information. + :return: OTX annotation scene entity object. + """ + assert predictions.pred_boxes is not None + assert predictions.pred_score is not None + assert predictions.pred_mask is not None + annotations = [] + image_h, image_w = predictions.pred_mask.shape + for box in predictions.pred_boxes: + annotations.append( + Annotation( + Rectangle( + box[0] / image_w, + box[1] / image_h, + box[2] / image_w, + box[3] / image_h, + ), + labels=[ + ScoredLabel( + label=self.anomalous_label, + probability=predictions.pred_score, + ) + ], + ) + ) + if len(annotations) == 0: + # TODO: add confidence to this label + annotations = [ + Annotation( + Rectangle.generate_full_box(), + labels=[ScoredLabel(label=self.normal_label, probability=1.0)], + ) + ] + return AnnotationSceneEntity( + kind=AnnotationSceneKind.PREDICTION, annotations=annotations + ) From fc2d5c41a37f8d9ef5a0723dee06520939b6f19f Mon Sep 17 00:00:00 2001 From: ljcornel Date: Wed, 6 Mar 2024 12:19:24 +0100 Subject: [PATCH 09/12] Add instance segmentation legacy converter --- geti_sdk/deployment/deployment.py | 6 ++ .../deployment/legacy_converters/__init__.py | 6 +- .../legacy_segmentation_converter.py | 95 ++++++++++++++++++- 3 files changed, 104 insertions(+), 3 deletions(-) diff --git a/geti_sdk/deployment/deployment.py b/geti_sdk/deployment/deployment.py index 7d7950b0..4518da5e 100644 --- a/geti_sdk/deployment/deployment.py +++ b/geti_sdk/deployment/deployment.py @@ -40,6 +40,7 @@ AnomalyDetectionToAnnotationConverter, AnomalySegmentationToAnnotationConverter, ClassificationToAnnotationConverter, + MaskToAnnotationConverter, SegmentationToAnnotationConverter, ) from geti_sdk.rest_converters import ProjectRESTConverter @@ -367,6 +368,11 @@ def _infer_task( legacy_converter = SegmentationToAnnotationConverter( label_schema=model.ote_label_schema ) + elif task.type == TaskType.INSTANCE_SEGMENTATION: + legacy_converter = MaskToAnnotationConverter( + label_schema=model.ote_label_schema, + configuration=model.openvino_model_parameters, + ) else: raise e annotation_scene_entity = legacy_converter.convert_to_annotation( diff --git a/geti_sdk/deployment/legacy_converters/__init__.py b/geti_sdk/deployment/legacy_converters/__init__.py index 15feb2b7..081d3fc6 100644 --- a/geti_sdk/deployment/legacy_converters/__init__.py +++ b/geti_sdk/deployment/legacy_converters/__init__.py @@ -23,7 +23,10 @@ AnomalySegmentationToAnnotationConverter, ) from .legacy_classification_converter import ClassificationToAnnotationConverter -from .legacy_segmentation_converter import SegmentationToAnnotationConverter +from .legacy_segmentation_converter import ( + MaskToAnnotationConverter, + SegmentationToAnnotationConverter, +) __all__ = [ "AnomalyClassificationToAnnotationConverter", @@ -31,4 +34,5 @@ "AnomalySegmentationToAnnotationConverter", "ClassificationToAnnotationConverter", "SegmentationToAnnotationConverter", + "MaskToAnnotationConverter", ] diff --git a/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py b/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py index 3cb83a0d..f9b673a9 100644 --- a/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py +++ b/geti_sdk/deployment/legacy_converters/legacy_segmentation_converter.py @@ -11,11 +11,19 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions # and limitations under the License. -from typing import Any, Dict +from typing import Any, Dict, Optional, Union +import cv2 import numpy as np -from otx.api.entities.annotation import AnnotationSceneEntity, AnnotationSceneKind +from otx.api.entities.annotation import ( + Annotation, + AnnotationSceneEntity, + AnnotationSceneKind, +) from otx.api.entities.label_schema import LabelSchemaEntity +from otx.api.entities.scored_label import ScoredLabel +from otx.api.entities.shapes.ellipse import Ellipse +from otx.api.entities.shapes.polygon import Point, Polygon from otx.api.usecases.exportable_code.prediction_to_annotation_converter import ( IPredictionToAnnotationConverter, ) @@ -53,3 +61,86 @@ def convert_to_annotation( return AnnotationSceneEntity( kind=AnnotationSceneKind.PREDICTION, annotations=annotations ) + + +class MaskToAnnotationConverter(IPredictionToAnnotationConverter): + """ + Convert Instance Segmentation Mask Predictions ModelAPI to Annotations. + """ + + def __init__( + self, labels: LabelSchemaEntity, configuration: Optional[Dict[str, Any]] = None + ): + self.labels = labels.get_labels(include_empty=False) + self.use_ellipse_shapes = False + self.confidence_threshold = 0.0 + if configuration is not None: + if "use_ellipse_shapes" in configuration: + self.use_ellipse_shapes = configuration["use_ellipse_shapes"] + if "confidence_threshold" in configuration: + self.confidence_threshold = configuration["confidence_threshold"] + + def convert_to_annotation( + self, predictions: tuple, metadata: Dict[str, Any] + ) -> AnnotationSceneEntity: + """ + Convert predictions to OTX Annotation Scene using the metadata. + + :param predictions: Raw predictions from the model. + :param metadata: Variable containing metadata information. + :return: OTX annotation scene entity object. + """ + annotations = [] + height, width, _ = metadata["original_shape"] + shape: Union[Polygon, Ellipse] + for score, class_idx, box, mask in zip(*predictions): + if score < self.confidence_threshold: + continue + if self.use_ellipse_shapes: + shape = Ellipse( + box[0] / width, box[1] / height, box[2] / width, box[3] / height + ) + annotations.append( + Annotation( + shape, + labels=[ + ScoredLabel(self.labels[int(class_idx) - 1], float(score)) + ], + ) + ) + else: + mask = mask.astype(np.uint8) + contours, hierarchies = cv2.findContours( + mask, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE + ) + if hierarchies is None: + continue + for contour, hierarchy in zip(contours, hierarchies[0]): + if hierarchy[3] != -1: + continue + if len(contour) <= 2 or cv2.contourArea(contour) < 1.0: + continue + contour = list(contour) + points = [ + Point( + x=point[0][0] / width, + y=point[0][1] / height, + ) + for point in contour + ] + shape = Polygon(points=points) + annotations.append( + Annotation( + shape, + labels=[ + ScoredLabel( + self.labels[int(class_idx) - 1], float(score) + ) + ], + ) + ) + annotation_scene = AnnotationSceneEntity( + kind=AnnotationSceneKind.PREDICTION, + annotations=annotations, + ) + return annotation_scene From ff88ca8c6133818133eb044fdde4c2fb006330a5 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Wed, 6 Mar 2024 12:52:02 +0100 Subject: [PATCH 10/12] Add legacy rotated rectangle converter --- geti_sdk/deployment/deployment.py | 10 +- .../deployment/legacy_converters/__init__.py | 2 + .../legacy_detection_converter.py | 113 ++++++++++++++++++ 3 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 geti_sdk/deployment/legacy_converters/legacy_detection_converter.py diff --git a/geti_sdk/deployment/deployment.py b/geti_sdk/deployment/deployment.py index 4518da5e..033575c1 100644 --- a/geti_sdk/deployment/deployment.py +++ b/geti_sdk/deployment/deployment.py @@ -41,6 +41,7 @@ AnomalySegmentationToAnnotationConverter, ClassificationToAnnotationConverter, MaskToAnnotationConverter, + RotatedRectToAnnotationConverter, SegmentationToAnnotationConverter, ) from geti_sdk.rest_converters import ProjectRESTConverter @@ -340,7 +341,7 @@ def _infer_task( predictions=postprocessing_results, metadata=metadata ) except AttributeError as e: - # Add backwards compatibility for anomaly models created in Geti v1.8 and below + # Add backwards compatibility for models created in Geti v1.8 and below if task.type == TaskType.ANOMALY_CLASSIFICATION: legacy_converter = AnomalyClassificationToAnnotationConverter( label_schema=model.ote_label_schema @@ -370,7 +371,12 @@ def _infer_task( ) elif task.type == TaskType.INSTANCE_SEGMENTATION: legacy_converter = MaskToAnnotationConverter( - label_schema=model.ote_label_schema, + labels=model.ote_label_schema, + configuration=model.openvino_model_parameters, + ) + elif task.type == TaskType.ROTATED_DETECTION: + legacy_converter = RotatedRectToAnnotationConverter( + labels=model.ote_label_schema, configuration=model.openvino_model_parameters, ) else: diff --git a/geti_sdk/deployment/legacy_converters/__init__.py b/geti_sdk/deployment/legacy_converters/__init__.py index 081d3fc6..cd50fd4d 100644 --- a/geti_sdk/deployment/legacy_converters/__init__.py +++ b/geti_sdk/deployment/legacy_converters/__init__.py @@ -23,6 +23,7 @@ AnomalySegmentationToAnnotationConverter, ) from .legacy_classification_converter import ClassificationToAnnotationConverter +from .legacy_detection_converter import RotatedRectToAnnotationConverter from .legacy_segmentation_converter import ( MaskToAnnotationConverter, SegmentationToAnnotationConverter, @@ -35,4 +36,5 @@ "ClassificationToAnnotationConverter", "SegmentationToAnnotationConverter", "MaskToAnnotationConverter", + "RotatedRectToAnnotationConverter", ] diff --git a/geti_sdk/deployment/legacy_converters/legacy_detection_converter.py b/geti_sdk/deployment/legacy_converters/legacy_detection_converter.py new file mode 100644 index 00000000..0b9ef0f4 --- /dev/null +++ b/geti_sdk/deployment/legacy_converters/legacy_detection_converter.py @@ -0,0 +1,113 @@ +# Copyright (C) 2024 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions +# and limitations under the License. +from typing import Any, Dict, Optional, Union + +import cv2 +import numpy as np +from otx.api.entities.annotation import ( + Annotation, + AnnotationSceneEntity, + AnnotationSceneKind, +) +from otx.api.entities.label_schema import LabelSchemaEntity +from otx.api.entities.scored_label import ScoredLabel +from otx.api.entities.shapes.ellipse import Ellipse +from otx.api.entities.shapes.polygon import Point, Polygon +from otx.api.usecases.exportable_code.prediction_to_annotation_converter import ( + IPredictionToAnnotationConverter, +) + + +class RotatedRectToAnnotationConverter(IPredictionToAnnotationConverter): + """ + Convert Rotated Rect (mask) Predictions ModelAPI to Annotations. + + :param labels: Label Schema containing the label info of the task + """ + + def __init__( + self, labels: LabelSchemaEntity, configuration: Optional[Dict[str, Any]] = None + ): + self.labels = labels.get_labels(include_empty=False) + self.use_ellipse_shapes = False + self.confidence_threshold = 0.0 + if configuration is not None: + if "use_ellipse_shapes" in configuration: + self.use_ellipse_shapes = configuration["use_ellipse_shapes"] + if "confidence_threshold" in configuration: + self.confidence_threshold = configuration["confidence_threshold"] + + def convert_to_annotation( + self, predictions: tuple, metadata: Dict[str, Any] + ) -> AnnotationSceneEntity: + """ + Convert predictions to OTX Annotation Scene using the metadata. + + :param predictions: Raw predictions from the model. + :param metadata: Variable containing metadata information. + :return: OTX annotation scene entity object. + """ + annotations = [] + height, width, _ = metadata["original_shape"] + shape: Union[Polygon, Ellipse] + for score, class_idx, box, mask in zip(*predictions): + if score < self.confidence_threshold: + continue + if self.use_ellipse_shapes: + shape = Ellipse( + box[0] / width, box[1] / height, box[2] / width, box[3] / height + ) + annotations.append( + Annotation( + shape, + labels=[ + ScoredLabel(self.labels[int(class_idx) - 1], float(score)) + ], + ) + ) + else: + mask = mask.astype(np.uint8) + contours, hierarchies = cv2.findContours( + mask, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE + ) + if hierarchies is None: + continue + for contour, hierarchy in zip(contours, hierarchies[0]): + if hierarchy[3] != -1: + continue + if len(contour) <= 2 or cv2.contourArea(contour) < 1.0: + continue + points = [ + Point( + x=point[0] / width, + y=point[1] / height, + ) + for point in cv2.boxPoints(cv2.minAreaRect(contour)) + ] + shape = Polygon(points=points) + annotations.append( + Annotation( + shape, + labels=[ + ScoredLabel( + self.labels[int(class_idx) - 1], float(score) + ) + ], + ) + ) + annotation_scene = AnnotationSceneEntity( + kind=AnnotationSceneKind.PREDICTION, + annotations=annotations, + ) + return annotation_scene From 5c9afad4a81e8c48d95f237736b18f05c2d9fef5 Mon Sep 17 00:00:00 2001 From: ljcornel Date: Thu, 7 Mar 2024 11:02:39 +0100 Subject: [PATCH 11/12] Fix maskrcnn postprocessing for geti v1.15 --- geti_sdk/deployment/deployment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/geti_sdk/deployment/deployment.py b/geti_sdk/deployment/deployment.py index 033575c1..2966ec08 100644 --- a/geti_sdk/deployment/deployment.py +++ b/geti_sdk/deployment/deployment.py @@ -323,7 +323,6 @@ def _infer_task( TaskType.ROTATED_DETECTION, ]: n_outputs = len(postprocessing_results.segmentedObjects) - postprocessing_results = postprocessing_results.segmentedObjects elif isinstance(postprocessing_results, tuple): try: n_outputs = len(postprocessing_results) From d286eb34db74fc3b84d952c7cc7def4f39bd3d45 Mon Sep 17 00:00:00 2001 From: Ludo Cornelissen Date: Thu, 7 Mar 2024 13:06:42 +0100 Subject: [PATCH 12/12] Add openssf scorecard code scan - Create scorecard.yml --- .github/workflows/scorecard.yml | 72 +++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 .github/workflows/scorecard.yml diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 00000000..435fedfb --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,72 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '18 5 * * 2' + push: + branches: [ "main" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: "Checkout code" + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecard on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4 + with: + sarif_file: results.sarif