From 2295252f0dac8a862b0fa469e045ef9fd68467ca Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Thu, 19 Dec 2024 15:30:26 +0530 Subject: [PATCH 01/10] Adding inference container uri for edit model --- ads/aqua/extension/model_handler.py | 4 +++- ads/aqua/model/model.py | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ads/aqua/extension/model_handler.py b/ads/aqua/extension/model_handler.py index 42f90ffef..4a01f4cdd 100644 --- a/ads/aqua/extension/model_handler.py +++ b/ads/aqua/extension/model_handler.py @@ -163,10 +163,12 @@ def put(self, id): raise HTTPError(400, Errors.NO_INPUT_DATA) inference_container = input_data.get("inference_container") + inference_container_uri=input_data.get("inference_container_uri") inference_containers = AquaModelApp.list_valid_inference_containers() if ( inference_container is not None and inference_container not in inference_containers + and inference_container != InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY ): raise HTTPError( 400, Errors.INVALID_VALUE_OF_PARAMETER.format("inference_container") @@ -176,7 +178,7 @@ def put(self, id): task = input_data.get("task") app = AquaModelApp() self.finish( - app.edit_registered_model(id, inference_container, enable_finetuning, task) + app.edit_registered_model(id, inference_container, inference_container_uri,enable_finetuning, task) ) app.clear_model_details_cache(model_id=id) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index 02e0df00f..cc8124131 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -377,7 +377,7 @@ def delete_model(self, model_id): ) @telemetry(entry_point="plugin=model&action=delete", name="aqua") - def edit_registered_model(self, id, inference_container, enable_finetuning, task): + def edit_registered_model(self, id, inference_container,inference_container_uri, enable_finetuning, task): """Edits the default config of unverified registered model. Parameters @@ -386,6 +386,8 @@ def edit_registered_model(self, id, inference_container, enable_finetuning, task The model OCID. inference_container: str. The inference container family name + inference_container_uri: str + The inference container uri for embedding models enable_finetuning: str Flag to enable or disable finetuning over the model. Defaults to None task: @@ -414,6 +416,13 @@ def edit_registered_model(self, id, inference_container, enable_finetuning, task description="Deployment container mapping for SMC", replace=True, ) + if inference_container_uri: + custom_metadata_list.add( + key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER_URI, + value=inference_container_uri, + category=MetadataCustomCategory.OTHER, + description=f"Inference container URI for {ds_model.display_name}" + ) if enable_finetuning is not None: if enable_finetuning.lower() == "true": custom_metadata_list.add( From 3aedb4893a3eac7a71591b46f7148672c3c4c1eb Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Thu, 19 Dec 2024 15:32:21 +0530 Subject: [PATCH 02/10] Formatting --- ads/aqua/extension/model_handler.py | 14 +++++++++++--- ads/aqua/model/model.py | 6 ++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ads/aqua/extension/model_handler.py b/ads/aqua/extension/model_handler.py index 4a01f4cdd..0640e8b94 100644 --- a/ads/aqua/extension/model_handler.py +++ b/ads/aqua/extension/model_handler.py @@ -13,6 +13,7 @@ get_hf_model_info, list_hf_models, ) +from ads.aqua.common.enums import InferenceContainerTypeFamily from ads.aqua.extension.base_handler import AquaAPIhandler from ads.aqua.extension.errors import Errors from ads.aqua.model import AquaModelApp @@ -163,12 +164,13 @@ def put(self, id): raise HTTPError(400, Errors.NO_INPUT_DATA) inference_container = input_data.get("inference_container") - inference_container_uri=input_data.get("inference_container_uri") + inference_container_uri = input_data.get("inference_container_uri") inference_containers = AquaModelApp.list_valid_inference_containers() if ( inference_container is not None and inference_container not in inference_containers - and inference_container != InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + and inference_container + != InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY ): raise HTTPError( 400, Errors.INVALID_VALUE_OF_PARAMETER.format("inference_container") @@ -178,7 +180,13 @@ def put(self, id): task = input_data.get("task") app = AquaModelApp() self.finish( - app.edit_registered_model(id, inference_container, inference_container_uri,enable_finetuning, task) + app.edit_registered_model( + id, + inference_container, + inference_container_uri, + enable_finetuning, + task, + ) ) app.clear_model_details_cache(model_id=id) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index cc8124131..d036eb877 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -377,7 +377,9 @@ def delete_model(self, model_id): ) @telemetry(entry_point="plugin=model&action=delete", name="aqua") - def edit_registered_model(self, id, inference_container,inference_container_uri, enable_finetuning, task): + def edit_registered_model( + self, id, inference_container, inference_container_uri, enable_finetuning, task + ): """Edits the default config of unverified registered model. Parameters @@ -421,7 +423,7 @@ def edit_registered_model(self, id, inference_container,inference_container_uri, key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER_URI, value=inference_container_uri, category=MetadataCustomCategory.OTHER, - description=f"Inference container URI for {ds_model.display_name}" + description=f"Inference container URI for {ds_model.display_name}", ) if enable_finetuning is not None: if enable_finetuning.lower() == "true": From a95a6784d0d262cd1cb17efb799ebbe516642949 Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Thu, 19 Dec 2024 15:32:38 +0530 Subject: [PATCH 03/10] Formatting --- ads/aqua/extension/model_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ads/aqua/extension/model_handler.py b/ads/aqua/extension/model_handler.py index 0640e8b94..c6f5d871f 100644 --- a/ads/aqua/extension/model_handler.py +++ b/ads/aqua/extension/model_handler.py @@ -8,12 +8,12 @@ from tornado.web import HTTPError from ads.aqua.common.decorator import handle_exceptions +from ads.aqua.common.enums import InferenceContainerTypeFamily from ads.aqua.common.errors import AquaRuntimeError, AquaValueError from ads.aqua.common.utils import ( get_hf_model_info, list_hf_models, ) -from ads.aqua.common.enums import InferenceContainerTypeFamily from ads.aqua.extension.base_handler import AquaAPIhandler from ads.aqua.extension.errors import Errors from ads.aqua.model import AquaModelApp From 5b3a316effb81864128313163eb60e4f306993d4 Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Thu, 19 Dec 2024 16:26:10 +0530 Subject: [PATCH 04/10] inference container uri validation check --- ads/aqua/model/model.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index d036eb877..a021a0ade 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -411,20 +411,33 @@ def edit_registered_model( custom_metadata_list = ds_model.custom_metadata_list freeform_tags = ds_model.freeform_tags if inference_container: - custom_metadata_list.add( - key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER, - value=inference_container, - category=MetadataCustomCategory.OTHER, - description="Deployment container mapping for SMC", - replace=True, - ) + if (inference_container==InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + and inference_container_uri is None): + raise AquaRuntimeError( + f"Failed to edit model:{id}. Inference container URI must be provided." + ) + else: + custom_metadata_list.add( + key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER, + value=inference_container, + category=MetadataCustomCategory.OTHER, + description="Deployment container mapping for SMC", + replace=True, + ) if inference_container_uri: - custom_metadata_list.add( - key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER_URI, - value=inference_container_uri, - category=MetadataCustomCategory.OTHER, - description=f"Inference container URI for {ds_model.display_name}", - ) + if inference_container==InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY or inference_container==None: + custom_metadata_list.add( + key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER_URI, + value=inference_container_uri, + category=MetadataCustomCategory.OTHER, + description=f"Inference container URI for {ds_model.display_name}", + replace=True + ) + else: + raise AquaRuntimeError( + f"Failed to edit model:{id}. Inference container URI can be edited only with TEI container." + ) + if enable_finetuning is not None: if enable_finetuning.lower() == "true": custom_metadata_list.add( From 16b7ace0399f042de54b3f00ec5125373ddc7246 Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Thu, 19 Dec 2024 16:28:49 +0530 Subject: [PATCH 05/10] formatting --- ads/aqua/model/model.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index a021a0ade..511434fdf 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -411,8 +411,11 @@ def edit_registered_model( custom_metadata_list = ds_model.custom_metadata_list freeform_tags = ds_model.freeform_tags if inference_container: - if (inference_container==InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY - and inference_container_uri is None): + if ( + inference_container + == InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + and inference_container_uri is None + ): raise AquaRuntimeError( f"Failed to edit model:{id}. Inference container URI must be provided." ) @@ -425,13 +428,17 @@ def edit_registered_model( replace=True, ) if inference_container_uri: - if inference_container==InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY or inference_container==None: + if ( + inference_container + == InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + or inference_container == None + ): custom_metadata_list.add( key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER_URI, value=inference_container_uri, category=MetadataCustomCategory.OTHER, description=f"Inference container URI for {ds_model.display_name}", - replace=True + replace=True, ) else: raise AquaRuntimeError( From c6f87ec3515fa4df31e5ff2e272cf40e978df0a0 Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Thu, 19 Dec 2024 16:29:08 +0530 Subject: [PATCH 06/10] formatting --- ads/aqua/model/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index 511434fdf..03ca2d154 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -431,7 +431,7 @@ def edit_registered_model( if ( inference_container == InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY - or inference_container == None + or inference_container is None ): custom_metadata_list.add( key=ModelCustomMetadataFields.DEPLOYMENT_CONTAINER_URI, From 3a9fa5b820923fe78042642e618c90b332153666 Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Mon, 20 Jan 2025 23:20:12 +0530 Subject: [PATCH 07/10] Addressing review comments --- ads/aqua/common/enums.py | 3 ++- ads/aqua/extension/model_handler.py | 5 ++--- ads/aqua/model/model.py | 19 ++++++++----------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/ads/aqua/common/enums.py b/ads/aqua/common/enums.py index 4a423788d..e6ada6e33 100644 --- a/ads/aqua/common/enums.py +++ b/ads/aqua/common/enums.py @@ -52,8 +52,9 @@ class InferenceContainerTypeFamily(str, metaclass=ExtendedEnumMeta): AQUA_VLLM_CONTAINER_FAMILY = "odsc-vllm-serving" AQUA_TGI_CONTAINER_FAMILY = "odsc-tgi-serving" AQUA_LLAMA_CPP_CONTAINER_FAMILY = "odsc-llama-cpp-serving" - AQUA_TEI_CONTAINER_FAMILY = "odsc-tei-serving" +class CustomInferenceContainerTypeFamily(str,metaclass=ExtendedEnumMeta): + AQUA_TEI_CONTAINER_FAMILY="odsc-tei-serving" class InferenceContainerParamType(str, metaclass=ExtendedEnumMeta): PARAM_TYPE_VLLM = "VLLM_PARAMS" diff --git a/ads/aqua/extension/model_handler.py b/ads/aqua/extension/model_handler.py index c6f5d871f..aa089b780 100644 --- a/ads/aqua/extension/model_handler.py +++ b/ads/aqua/extension/model_handler.py @@ -8,7 +8,7 @@ from tornado.web import HTTPError from ads.aqua.common.decorator import handle_exceptions -from ads.aqua.common.enums import InferenceContainerTypeFamily +from ads.aqua.common.enums import InferenceContainerTypeFamily,CustomInferenceContainerTypeFamily from ads.aqua.common.errors import AquaRuntimeError, AquaValueError from ads.aqua.common.utils import ( get_hf_model_info, @@ -166,11 +166,10 @@ def put(self, id): inference_container = input_data.get("inference_container") inference_container_uri = input_data.get("inference_container_uri") inference_containers = AquaModelApp.list_valid_inference_containers() + inference_containers.extend(CustomInferenceContainerTypeFamily.values()) if ( inference_container is not None and inference_container not in inference_containers - and inference_container - != InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY ): raise HTTPError( 400, Errors.INVALID_VALUE_OF_PARAMETER.format("inference_container") diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index 03ca2d154..9e2432950 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -17,7 +17,7 @@ from ads.aqua.common.enums import ( FineTuningContainerTypeFamily, InferenceContainerTypeFamily, - Tags, + Tags, CustomInferenceContainerTypeFamily, ) from ads.aqua.common.errors import AquaRuntimeError, AquaValueError from ads.aqua.common.utils import ( @@ -405,19 +405,18 @@ def edit_registered_model( if ds_model.freeform_tags.get(Tags.BASE_MODEL_CUSTOM, None): if ds_model.freeform_tags.get(Tags.AQUA_SERVICE_MODEL_TAG, None): raise AquaRuntimeError( - f"Failed to edit model:{id}. Only registered unverified models can be edited." + f"Only registered unverified models can be edited." ) else: custom_metadata_list = ds_model.custom_metadata_list freeform_tags = ds_model.freeform_tags if inference_container: if ( - inference_container - == InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + inference_container in CustomInferenceContainerTypeFamily.values() and inference_container_uri is None ): raise AquaRuntimeError( - f"Failed to edit model:{id}. Inference container URI must be provided." + f"Inference container URI must be provided." ) else: custom_metadata_list.add( @@ -429,8 +428,7 @@ def edit_registered_model( ) if inference_container_uri: if ( - inference_container - == InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + inference_container in CustomInferenceContainerTypeFamily.values() or inference_container is None ): custom_metadata_list.add( @@ -442,7 +440,7 @@ def edit_registered_model( ) else: raise AquaRuntimeError( - f"Failed to edit model:{id}. Inference container URI can be edited only with TEI container." + f"Inference container URI can be edited only with container values: {CustomInferenceContainerTypeFamily.values()}" ) if enable_finetuning is not None: @@ -480,7 +478,7 @@ def edit_registered_model( AquaApp().update_model(id, update_model_details) else: raise AquaRuntimeError( - f"Failed to edit model:{id}. Only registered unverified models can be edited." + f"Only registered unverified models can be edited." ) def _fetch_metric_from_metadata( @@ -900,8 +898,7 @@ def _create_model_catalog_entry( # only add cmd vars if inference container is not an SMC if ( inference_container not in smc_container_set - and inference_container - == InferenceContainerTypeFamily.AQUA_TEI_CONTAINER_FAMILY + and inference_container in CustomInferenceContainerTypeFamily.values() ): cmd_vars = generate_tei_cmd_var(os_path) metadata.add( From f1963317bb8afa3fa8625c077e95b34601695855 Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Mon, 20 Jan 2025 23:20:51 +0530 Subject: [PATCH 08/10] Formatting --- ads/aqua/common/enums.py | 6 ++++-- ads/aqua/extension/model_handler.py | 4 +++- ads/aqua/model/model.py | 17 +++++++++-------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/ads/aqua/common/enums.py b/ads/aqua/common/enums.py index e6ada6e33..f1d1cd661 100644 --- a/ads/aqua/common/enums.py +++ b/ads/aqua/common/enums.py @@ -53,8 +53,10 @@ class InferenceContainerTypeFamily(str, metaclass=ExtendedEnumMeta): AQUA_TGI_CONTAINER_FAMILY = "odsc-tgi-serving" AQUA_LLAMA_CPP_CONTAINER_FAMILY = "odsc-llama-cpp-serving" -class CustomInferenceContainerTypeFamily(str,metaclass=ExtendedEnumMeta): - AQUA_TEI_CONTAINER_FAMILY="odsc-tei-serving" + +class CustomInferenceContainerTypeFamily(str, metaclass=ExtendedEnumMeta): + AQUA_TEI_CONTAINER_FAMILY = "odsc-tei-serving" + class InferenceContainerParamType(str, metaclass=ExtendedEnumMeta): PARAM_TYPE_VLLM = "VLLM_PARAMS" diff --git a/ads/aqua/extension/model_handler.py b/ads/aqua/extension/model_handler.py index aa089b780..68c9cedaa 100644 --- a/ads/aqua/extension/model_handler.py +++ b/ads/aqua/extension/model_handler.py @@ -8,7 +8,9 @@ from tornado.web import HTTPError from ads.aqua.common.decorator import handle_exceptions -from ads.aqua.common.enums import InferenceContainerTypeFamily,CustomInferenceContainerTypeFamily +from ads.aqua.common.enums import ( + CustomInferenceContainerTypeFamily, +) from ads.aqua.common.errors import AquaRuntimeError, AquaValueError from ads.aqua.common.utils import ( get_hf_model_info, diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index 9e2432950..ac75f938c 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -15,9 +15,10 @@ from ads.aqua import ODSC_MODEL_COMPARTMENT_OCID, logger from ads.aqua.app import AquaApp from ads.aqua.common.enums import ( + CustomInferenceContainerTypeFamily, FineTuningContainerTypeFamily, InferenceContainerTypeFamily, - Tags, CustomInferenceContainerTypeFamily, + Tags, ) from ads.aqua.common.errors import AquaRuntimeError, AquaValueError from ads.aqua.common.utils import ( @@ -405,18 +406,19 @@ def edit_registered_model( if ds_model.freeform_tags.get(Tags.BASE_MODEL_CUSTOM, None): if ds_model.freeform_tags.get(Tags.AQUA_SERVICE_MODEL_TAG, None): raise AquaRuntimeError( - f"Only registered unverified models can be edited." + "Only registered unverified models can be edited." ) else: custom_metadata_list = ds_model.custom_metadata_list freeform_tags = ds_model.freeform_tags if inference_container: if ( - inference_container in CustomInferenceContainerTypeFamily.values() + inference_container + in CustomInferenceContainerTypeFamily.values() and inference_container_uri is None ): raise AquaRuntimeError( - f"Inference container URI must be provided." + "Inference container URI must be provided." ) else: custom_metadata_list.add( @@ -428,7 +430,8 @@ def edit_registered_model( ) if inference_container_uri: if ( - inference_container in CustomInferenceContainerTypeFamily.values() + inference_container + in CustomInferenceContainerTypeFamily.values() or inference_container is None ): custom_metadata_list.add( @@ -477,9 +480,7 @@ def edit_registered_model( ) AquaApp().update_model(id, update_model_details) else: - raise AquaRuntimeError( - f"Only registered unverified models can be edited." - ) + raise AquaRuntimeError("Only registered unverified models can be edited.") def _fetch_metric_from_metadata( self, From e8d366f546404251a855b3f40d5ab077646d955b Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Tue, 21 Jan 2025 00:50:00 +0530 Subject: [PATCH 09/10] Addressing review comments --- ads/aqua/model/model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index ac75f938c..c0ecd95b4 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -377,7 +377,7 @@ def delete_model(self, model_id): f"Failed to delete model:{model_id}. Only registered models or finetuned model can be deleted." ) - @telemetry(entry_point="plugin=model&action=delete", name="aqua") + @telemetry(entry_point="plugin=model&action=edit", name="aqua") def edit_registered_model( self, id, inference_container, inference_container_uri, enable_finetuning, task ): @@ -414,7 +414,7 @@ def edit_registered_model( if inference_container: if ( inference_container - in CustomInferenceContainerTypeFamily.values() + in CustomInferenceContainerTypeFamily and inference_container_uri is None ): raise AquaRuntimeError( @@ -431,7 +431,7 @@ def edit_registered_model( if inference_container_uri: if ( inference_container - in CustomInferenceContainerTypeFamily.values() + in CustomInferenceContainerTypeFamily or inference_container is None ): custom_metadata_list.add( From 557509eef520388b5897e2d4c3a0d3659f975a6b Mon Sep 17 00:00:00 2001 From: kumar shivam ranjan Date: Tue, 21 Jan 2025 00:50:13 +0530 Subject: [PATCH 10/10] Addressing review comments --- ads/aqua/model/model.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index c0ecd95b4..064f5fab4 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -413,8 +413,7 @@ def edit_registered_model( freeform_tags = ds_model.freeform_tags if inference_container: if ( - inference_container - in CustomInferenceContainerTypeFamily + inference_container in CustomInferenceContainerTypeFamily and inference_container_uri is None ): raise AquaRuntimeError( @@ -430,8 +429,7 @@ def edit_registered_model( ) if inference_container_uri: if ( - inference_container - in CustomInferenceContainerTypeFamily + inference_container in CustomInferenceContainerTypeFamily or inference_container is None ): custom_metadata_list.add(