From e86c8702125f9861795e3f0a6ef28f66827bad94 Mon Sep 17 00:00:00 2001 From: Agrim Khanna Date: Wed, 30 Jul 2025 16:09:22 +0530 Subject: [PATCH 1/5] added support for custom model name for single MD --- ads/aqua/model/model.py | 4 ++++ ads/aqua/modeldeployment/deployment.py | 3 ++- ads/aqua/modeldeployment/entities.py | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index 2b5d7108f..d5dffb978 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -147,6 +147,7 @@ class AquaModelApp(AquaApp): def create( self, model_id: Union[str, AquaMultiModelRef], + display_name: Optional[str] = None, project_id: Optional[str] = None, compartment_id: Optional[str] = None, freeform_tags: Optional[Dict] = None, @@ -204,6 +205,9 @@ def create( **(defined_tags or {}), } + if display_name: + service_model.display_name = display_name + custom_model = ( DataScienceModel() .with_compartment_id(target_compartment) diff --git a/ads/aqua/modeldeployment/deployment.py b/ads/aqua/modeldeployment/deployment.py index 3e93f38ee..c11425f17 100644 --- a/ads/aqua/modeldeployment/deployment.py +++ b/ads/aqua/modeldeployment/deployment.py @@ -214,6 +214,7 @@ def create( ) aqua_model = model_app.create( model_id=create_deployment_details.model_id, + display_name=create_deployment_details.model_name, compartment_id=compartment_id, project_id=project_id, freeform_tags=freeform_tags, @@ -446,6 +447,7 @@ def _create( cmd_var_string = aqua_model.custom_metadata_list.get( AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME ).value + default_cmd_var = shlex.split(cmd_var_string) if default_cmd_var: cmd_var = validate_cmd_var(default_cmd_var, cmd_var) @@ -538,7 +540,6 @@ def _create( ) deployment_params = get_combined_params(config_params, user_params) - params = f"{params} {deployment_params}".strip() if params: env_var.update({"PARAMS": params}) diff --git a/ads/aqua/modeldeployment/entities.py b/ads/aqua/modeldeployment/entities.py index ebce26dc8..5b31f1611 100644 --- a/ads/aqua/modeldeployment/entities.py +++ b/ads/aqua/modeldeployment/entities.py @@ -233,6 +233,9 @@ class CreateModelDeploymentDetails(BaseModel): None, description="The description of the deployment." ) model_id: Optional[str] = Field(None, description="The model OCID to deploy.") + model_name: Optional[str] = Field( + None, description="The model name specified by user to deploy." + ) models: Optional[List[AquaMultiModelRef]] = Field( None, description="List of models for multimodel deployment." ) From 2b7120de7e19f4dad3b325cbdbed5f15ec3a6021 Mon Sep 17 00:00:00 2001 From: Agrim Khanna Date: Fri, 1 Aug 2025 15:41:48 +0530 Subject: [PATCH 2/5] PR review comments --- ads/aqua/model/model.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index d5dffb978..c848b2103 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -147,11 +147,11 @@ class AquaModelApp(AquaApp): def create( self, model_id: Union[str, AquaMultiModelRef], - display_name: Optional[str] = None, project_id: Optional[str] = None, compartment_id: Optional[str] = None, freeform_tags: Optional[Dict] = None, defined_tags: Optional[Dict] = None, + display_name: Optional[str] = None, **kwargs, ) -> DataScienceModel: """ @@ -170,6 +170,8 @@ def create( Freeform tags for the model. defined_tags : Optional[Dict] Defined tags for the model. + display_name: ptional[str] + The display name of the custom model. Returns ------- From 8dd84ac61dbe58bf2b9e81438d3dda5c088ec210 Mon Sep 17 00:00:00 2001 From: Agrim Khanna Date: Fri, 1 Aug 2025 18:48:47 +0530 Subject: [PATCH 3/5] picking tag from model instead of MD --- ads/aqua/modeldeployment/deployment.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ads/aqua/modeldeployment/deployment.py b/ads/aqua/modeldeployment/deployment.py index c11425f17..6c059b629 100644 --- a/ads/aqua/modeldeployment/deployment.py +++ b/ads/aqua/modeldeployment/deployment.py @@ -561,6 +561,8 @@ def _create( AQUA_MODEL_TYPE_CUSTOM if is_fine_tuned_model else AQUA_MODEL_TYPE_SERVICE ) + is_custom_base_model = Tags.BASE_MODEL_CUSTOM in aqua_model.freeform_tags + return self._create_deployment( create_deployment_details=create_deployment_details, aqua_model_id=aqua_model.id, @@ -572,6 +574,7 @@ def _create( env_var=env_var, tags=tags, cmd_var=cmd_var, + is_custom_base_model=is_custom_base_model, ) def _create_multi( @@ -648,6 +651,7 @@ def _create_multi( } model_name = f"{MODEL_NAME_DELIMITER} ".join(model_name_list) + is_custom_base_model = Tags.BASE_MODEL_CUSTOM in aqua_model.freeform_tags aqua_deployment = self._create_deployment( create_deployment_details=create_deployment_details, @@ -659,6 +663,7 @@ def _create_multi( health_check_port=health_check_port, env_var=env_var, tags=tags, + is_custom_base_model=is_custom_base_model, ) aqua_deployment.models = create_deployment_details.models return aqua_deployment @@ -674,6 +679,7 @@ def _create_deployment( health_check_port: str, env_var: dict, tags: dict, + is_custom_base_model: bool = False, cmd_var: Optional[dict] = None, ): """Creates data science model deployment. @@ -699,6 +705,8 @@ def _create_deployment( The environment variables input for the deployment. tags: dict The tags input for the deployment. + is_custom_base_model: bool, optional + The flag set true for custom model. cmd_var: dict, optional The cmd arguments input for the deployment. @@ -786,8 +794,8 @@ def _create_deployment( # we arbitrarily choose last 8 characters of OCID to identify MD in telemetry telemetry_kwargs = {"ocid": get_ocid_substring(deployment_id, key_len=8)} - if Tags.BASE_MODEL_CUSTOM in tags: - telemetry_kwargs["custom_base_model"] = True + if is_custom_base_model: + telemetry_kwargs["custom_base_model"] = "True" # tracks unique deployments that were created in the user compartment self.telemetry.record_event_async( From bfc9873acaf37f34a04c365d49a2d01206d8b192 Mon Sep 17 00:00:00 2001 From: Agrim Khanna Date: Tue, 5 Aug 2025 17:34:22 +0530 Subject: [PATCH 4/5] PR review changes --- ads/aqua/model/model.py | 2 +- ads/aqua/modeldeployment/deployment.py | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index c848b2103..4b811b15b 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -170,7 +170,7 @@ def create( Freeform tags for the model. defined_tags : Optional[Dict] Defined tags for the model. - display_name: ptional[str] + display_name: Optional[str] The display name of the custom model. Returns diff --git a/ads/aqua/modeldeployment/deployment.py b/ads/aqua/modeldeployment/deployment.py index 6c059b629..93ed03aef 100644 --- a/ads/aqua/modeldeployment/deployment.py +++ b/ads/aqua/modeldeployment/deployment.py @@ -382,6 +382,7 @@ def _create( Tags.AQUA_SERVICE_MODEL_TAG, Tags.AQUA_FINE_TUNED_MODEL_TAG, Tags.AQUA_TAG, + Tags.BASE_MODEL_CUSTOM, ]: if tag in aqua_model.freeform_tags: tags[tag] = aqua_model.freeform_tags[tag] @@ -561,8 +562,6 @@ def _create( AQUA_MODEL_TYPE_CUSTOM if is_fine_tuned_model else AQUA_MODEL_TYPE_SERVICE ) - is_custom_base_model = Tags.BASE_MODEL_CUSTOM in aqua_model.freeform_tags - return self._create_deployment( create_deployment_details=create_deployment_details, aqua_model_id=aqua_model.id, @@ -574,7 +573,6 @@ def _create( env_var=env_var, tags=tags, cmd_var=cmd_var, - is_custom_base_model=is_custom_base_model, ) def _create_multi( @@ -651,7 +649,6 @@ def _create_multi( } model_name = f"{MODEL_NAME_DELIMITER} ".join(model_name_list) - is_custom_base_model = Tags.BASE_MODEL_CUSTOM in aqua_model.freeform_tags aqua_deployment = self._create_deployment( create_deployment_details=create_deployment_details, @@ -663,7 +660,6 @@ def _create_multi( health_check_port=health_check_port, env_var=env_var, tags=tags, - is_custom_base_model=is_custom_base_model, ) aqua_deployment.models = create_deployment_details.models return aqua_deployment @@ -679,7 +675,6 @@ def _create_deployment( health_check_port: str, env_var: dict, tags: dict, - is_custom_base_model: bool = False, cmd_var: Optional[dict] = None, ): """Creates data science model deployment. @@ -705,8 +700,6 @@ def _create_deployment( The environment variables input for the deployment. tags: dict The tags input for the deployment. - is_custom_base_model: bool, optional - The flag set true for custom model. cmd_var: dict, optional The cmd arguments input for the deployment. @@ -794,8 +787,8 @@ def _create_deployment( # we arbitrarily choose last 8 characters of OCID to identify MD in telemetry telemetry_kwargs = {"ocid": get_ocid_substring(deployment_id, key_len=8)} - if is_custom_base_model: - telemetry_kwargs["custom_base_model"] = "True" + if Tags.BASE_MODEL_CUSTOM in tags: + telemetry_kwargs["custom_base_model"] = True # tracks unique deployments that were created in the user compartment self.telemetry.record_event_async( From d01a33eee9ab28a740e3fe7ed60dd0e876f72a78 Mon Sep 17 00:00:00 2001 From: Agrim Khanna Date: Wed, 6 Aug 2025 21:38:06 +0530 Subject: [PATCH 5/5] removing changes of PR 1236 --- ads/aqua/model/model.py | 6 ------ ads/aqua/modeldeployment/deployment.py | 3 +-- ads/aqua/modeldeployment/entities.py | 4 +--- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/ads/aqua/model/model.py b/ads/aqua/model/model.py index 4b811b15b..2b5d7108f 100644 --- a/ads/aqua/model/model.py +++ b/ads/aqua/model/model.py @@ -151,7 +151,6 @@ def create( compartment_id: Optional[str] = None, freeform_tags: Optional[Dict] = None, defined_tags: Optional[Dict] = None, - display_name: Optional[str] = None, **kwargs, ) -> DataScienceModel: """ @@ -170,8 +169,6 @@ def create( Freeform tags for the model. defined_tags : Optional[Dict] Defined tags for the model. - display_name: Optional[str] - The display name of the custom model. Returns ------- @@ -207,9 +204,6 @@ def create( **(defined_tags or {}), } - if display_name: - service_model.display_name = display_name - custom_model = ( DataScienceModel() .with_compartment_id(target_compartment) diff --git a/ads/aqua/modeldeployment/deployment.py b/ads/aqua/modeldeployment/deployment.py index 93ed03aef..ee2c364ce 100644 --- a/ads/aqua/modeldeployment/deployment.py +++ b/ads/aqua/modeldeployment/deployment.py @@ -214,7 +214,6 @@ def create( ) aqua_model = model_app.create( model_id=create_deployment_details.model_id, - display_name=create_deployment_details.model_name, compartment_id=compartment_id, project_id=project_id, freeform_tags=freeform_tags, @@ -448,7 +447,6 @@ def _create( cmd_var_string = aqua_model.custom_metadata_list.get( AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME ).value - default_cmd_var = shlex.split(cmd_var_string) if default_cmd_var: cmd_var = validate_cmd_var(default_cmd_var, cmd_var) @@ -541,6 +539,7 @@ def _create( ) deployment_params = get_combined_params(config_params, user_params) + params = f"{params} {deployment_params}".strip() if params: env_var.update({"PARAMS": params}) diff --git a/ads/aqua/modeldeployment/entities.py b/ads/aqua/modeldeployment/entities.py index 5b31f1611..4429b0472 100644 --- a/ads/aqua/modeldeployment/entities.py +++ b/ads/aqua/modeldeployment/entities.py @@ -233,9 +233,7 @@ class CreateModelDeploymentDetails(BaseModel): None, description="The description of the deployment." ) model_id: Optional[str] = Field(None, description="The model OCID to deploy.") - model_name: Optional[str] = Field( - None, description="The model name specified by user to deploy." - ) + models: Optional[List[AquaMultiModelRef]] = Field( None, description="List of models for multimodel deployment." )