oracle-ads 2.11.1__py3-none-any.whl → 2.11.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ads/aqua/base.py CHANGED
@@ -17,7 +17,6 @@ from ads.aqua.utils import (
17
17
  UNKNOWN,
18
18
  _is_valid_mvs,
19
19
  get_artifact_path,
20
- get_base_model_from_tags,
21
20
  is_valid_ocid,
22
21
  load_config,
23
22
  logger,
ads/aqua/data.py CHANGED
@@ -36,5 +36,7 @@ class Tags(Enum):
36
36
  AQUA_TAG = "OCI_AQUA"
37
37
  AQUA_SERVICE_MODEL_TAG = "aqua_service_model"
38
38
  AQUA_FINE_TUNED_MODEL_TAG = "aqua_fine_tuned_model"
39
+ AQUA_MODEL_NAME_TAG = "aqua_model_name"
39
40
  AQUA_EVALUATION = "aqua_evaluation"
40
41
  AQUA_FINE_TUNING = "aqua_finetuning"
42
+ READY_TO_FINE_TUNE = "ready_to_fine_tune"
ads/aqua/deployment.py CHANGED
@@ -61,6 +61,7 @@ class AquaDeployment(DataClassSerializable):
61
61
  id: str = None
62
62
  display_name: str = None
63
63
  aqua_service_model: bool = None
64
+ aqua_model_name: str = None
64
65
  state: str = None
65
66
  description: str = None
66
67
  created_on: str = None
@@ -116,13 +117,17 @@ class AquaDeployment(DataClassSerializable):
116
117
  ),
117
118
  )
118
119
 
120
+ freeform_tags = oci_model_deployment.freeform_tags or UNKNOWN_DICT
121
+ aqua_service_model_tag = freeform_tags.get(
122
+ Tags.AQUA_SERVICE_MODEL_TAG.value, None
123
+ )
124
+ aqua_model_name = freeform_tags.get(Tags.AQUA_MODEL_NAME_TAG.value, UNKNOWN)
125
+
119
126
  return AquaDeployment(
120
127
  id=oci_model_deployment.id,
121
128
  display_name=oci_model_deployment.display_name,
122
- aqua_service_model=oci_model_deployment.freeform_tags.get(
123
- Tags.AQUA_SERVICE_MODEL_TAG.value
124
- )
125
- is not None,
129
+ aqua_service_model=aqua_service_model_tag is not None,
130
+ aqua_model_name=aqua_model_name,
126
131
  shape_info=shape_info,
127
132
  state=oci_model_deployment.lifecycle_state,
128
133
  lifecycle_details=getattr(
@@ -137,7 +142,7 @@ class AquaDeployment(DataClassSerializable):
137
142
  ocid=oci_model_deployment.id,
138
143
  region=region,
139
144
  ),
140
- tags=oci_model_deployment.freeform_tags,
145
+ tags=freeform_tags,
141
146
  )
142
147
 
143
148
 
@@ -235,17 +240,9 @@ class AquaDeploymentApp(AquaApp):
235
240
  An Aqua deployment instance
236
241
 
237
242
  """
238
- # todo: revisit error handling and pull deployment image info from config
239
- # if not AQUA_MODEL_DEPLOYMENT_IMAGE:
240
- # raise AquaValueError(
241
- # f"AQUA_MODEL_DEPLOYMENT_IMAGE must be available in environment variables to "
242
- # f"continue with Aqua model deployment."
243
- # )
244
-
245
- # todo: for fine tuned models, skip model creation.
246
243
  # Create a model catalog entry in the user compartment
247
244
  aqua_model = AquaModelApp().create(
248
- model_id=model_id, comparment_id=compartment_id, project_id=project_id
245
+ model_id=model_id, compartment_id=compartment_id, project_id=project_id
249
246
  )
250
247
 
251
248
  tags = {}
@@ -257,6 +254,8 @@ class AquaDeploymentApp(AquaApp):
257
254
  if tag in aqua_model.freeform_tags:
258
255
  tags[tag] = aqua_model.freeform_tags[tag]
259
256
 
257
+ tags.update({Tags.AQUA_MODEL_NAME_TAG.value: aqua_model.display_name})
258
+
260
259
  # Set up info to get deployment config
261
260
  config_source_id = model_id
262
261
  model_name = aqua_model.display_name
@@ -535,7 +534,7 @@ class AquaDeploymentApp(AquaApp):
535
534
  log_group_id=log_group_id,
536
535
  log_id=log_id,
537
536
  compartment_id=model_deployment.compartment_id,
538
- source_id=model_deployment.id
537
+ source_id=model_deployment.id,
539
538
  )
540
539
 
541
540
  return AquaDeploymentDetail(
ads/aqua/evaluation.py CHANGED
@@ -362,7 +362,7 @@ class AquaEvaluationApp(AquaApp):
362
362
  @telemetry(entry_point="plugin=evaluation&action=create", name="aqua")
363
363
  def create(
364
364
  self,
365
- create_aqua_evaluation_details: CreateAquaEvaluationDetails,
365
+ create_aqua_evaluation_details: CreateAquaEvaluationDetails = None,
366
366
  **kwargs,
367
367
  ) -> "AquaEvaluationSummary":
368
368
  """Creates Aqua evaluation for resource.
@@ -373,13 +373,23 @@ class AquaEvaluationApp(AquaApp):
373
373
  The CreateAquaEvaluationDetails data class which contains all
374
374
  required and optional fields to create the aqua evaluation.
375
375
  kwargs:
376
- The kwargs for the evaluation.
376
+ The kwargs for creating CreateAquaEvaluationDetails instance if
377
+ no create_aqua_evaluation_details provided.
377
378
 
378
379
  Returns
379
380
  -------
380
381
  AquaEvaluationSummary:
381
382
  The instance of AquaEvaluationSummary.
382
383
  """
384
+ if not create_aqua_evaluation_details:
385
+ try:
386
+ create_aqua_evaluation_details = CreateAquaEvaluationDetails(**kwargs)
387
+ except:
388
+ raise AquaValueError(
389
+ "Invalid create evaluation parameters. Allowable parameters are: "
390
+ f"{', '.join(list(asdict(CreateAquaEvaluationDetails).keys()))}."
391
+ )
392
+
383
393
  if not is_valid_ocid(create_aqua_evaluation_details.evaluation_source_id):
384
394
  raise AquaValueError(
385
395
  f"Invalid evaluation source {create_aqua_evaluation_details.evaluation_source_id}. "
@@ -1066,7 +1076,7 @@ class AquaEvaluationApp(AquaApp):
1066
1076
  {
1067
1077
  "use_case": ["text_generation"],
1068
1078
  "key": "bertscore",
1069
- "name": "BERT Score",
1079
+ "name": "bertscore",
1070
1080
  "description": (
1071
1081
  "BERT Score is a metric for evaluating the quality of text "
1072
1082
  "generation models, such as machine translation or summarization. "
@@ -1079,7 +1089,7 @@ class AquaEvaluationApp(AquaApp):
1079
1089
  {
1080
1090
  "use_case": ["text_generation"],
1081
1091
  "key": "rouge",
1082
- "name": "ROUGE Score",
1092
+ "name": "rouge",
1083
1093
  "description": (
1084
1094
  "ROUGE scores compare a candidate document to a collection of "
1085
1095
  "reference documents to evaluate the similarity between them. "
@@ -1363,40 +1373,30 @@ class AquaEvaluationApp(AquaApp):
1363
1373
  },
1364
1374
  "shape": {
1365
1375
  "VM.Standard.E3.Flex": {
1366
- "ocpu": 2,
1367
- "memory_in_gbs": 64,
1368
- "block_storage_size": 100,
1369
- },
1370
- "VM.Standard.E3.Flex": {
1371
- "ocpu": 2,
1372
- "memory_in_gbs": 64,
1373
- "block_storage_size": 100,
1376
+ "ocpu": 8,
1377
+ "memory_in_gbs": 128,
1378
+ "block_storage_size": 200,
1374
1379
  },
1375
1380
  "VM.Standard.E4.Flex": {
1376
- "ocpu": 2,
1377
- "memory_in_gbs": 64,
1378
- "block_storage_size": 100,
1381
+ "ocpu": 8,
1382
+ "memory_in_gbs": 128,
1383
+ "block_storage_size": 200,
1379
1384
  },
1380
1385
  "VM.Standard3.Flex": {
1381
- "ocpu": 2,
1382
- "memory_in_gbs": 64,
1383
- "block_storage_size": 100,
1386
+ "ocpu": 8,
1387
+ "memory_in_gbs": 128,
1388
+ "block_storage_size": 200,
1384
1389
  },
1385
1390
  "VM.Optimized3.Flex": {
1386
- "ocpu": 2,
1387
- "memory_in_gbs": 64,
1388
- "block_storage_size": 100,
1389
- },
1390
- "VM.Standard.A1.Flex": {
1391
- "ocpu": 2,
1392
- "memory_in_gbs": 64,
1393
- "block_storage_size": 100,
1391
+ "ocpu": 8,
1392
+ "memory_in_gbs": 128,
1393
+ "block_storage_size": 200,
1394
1394
  },
1395
1395
  },
1396
1396
  "default": {
1397
- "ocpu": 2,
1398
- "memory_in_gbs": 64,
1399
- "block_storage_size": 100,
1397
+ "ocpu": 8,
1398
+ "memory_in_gbs": 128,
1399
+ "block_storage_size": 200,
1400
1400
  },
1401
1401
  }
1402
1402
 
ads/aqua/finetune.py CHANGED
@@ -24,12 +24,10 @@ from ads.aqua.utils import (
24
24
  DEFAULT_FT_BLOCK_STORAGE_SIZE,
25
25
  DEFAULT_FT_REPLICA,
26
26
  DEFAULT_FT_VALIDATION_SET_SIZE,
27
- FINE_TUNING_RUNTIME_CONTAINER,
28
27
  JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING,
29
28
  UNKNOWN,
30
29
  UNKNOWN_DICT,
31
30
  get_container_image,
32
- load_config,
33
31
  logger,
34
32
  upload_local_to_os,
35
33
  )
@@ -433,6 +431,11 @@ class AquaFineTuningApp(AquaApp):
433
431
  for metadata in ft_model_custom_metadata.to_dict()["data"]
434
432
  ]
435
433
 
434
+ source_freeform_tags = source.freeform_tags or {}
435
+ source_freeform_tags.pop(Tags.LICENSE.value, None)
436
+ source_freeform_tags.update({Tags.READY_TO_FINE_TUNE.value: "false"})
437
+ source_freeform_tags.update({Tags.AQUA_TAG.value: UNKNOWN})
438
+
436
439
  self.update_model(
437
440
  model_id=ft_model.id,
438
441
  update_model_details=UpdateModelDetails(
@@ -441,7 +444,7 @@ class AquaFineTuningApp(AquaApp):
441
444
  Tags.AQUA_FINE_TUNED_MODEL_TAG.value: (
442
445
  f"{source.id}#{source.display_name}"
443
446
  ),
444
- **source.freeform_tags,
447
+ **source_freeform_tags,
445
448
  },
446
449
  ),
447
450
  )
ads/aqua/model.py CHANGED
@@ -2,11 +2,11 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  # Copyright (c) 2024 Oracle and/or its affiliates.
4
4
  # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5
+ import os
5
6
  import re
6
7
  from dataclasses import InitVar, dataclass, field
7
8
  from datetime import datetime, timedelta
8
9
  from enum import Enum
9
- import os
10
10
  from threading import Lock
11
11
  from typing import List, Union
12
12
 
@@ -25,18 +25,19 @@ from ads.aqua.constants import (
25
25
  FineTuningDefinedMetadata,
26
26
  )
27
27
  from ads.aqua.data import AquaResourceIdentifier, Tags
28
-
29
28
  from ads.aqua.exception import AquaRuntimeError
29
+
30
+ from ads.aqua.training.exceptions import exit_code_dict
30
31
  from ads.aqua.utils import (
31
32
  LICENSE_TXT,
32
33
  README,
33
34
  READY_TO_DEPLOY_STATUS,
35
+ READY_TO_FINE_TUNE_STATUS,
34
36
  UNKNOWN,
35
37
  create_word_icon,
36
38
  get_artifact_path,
37
39
  read_file,
38
40
  )
39
- from ads.aqua.training.exceptions import exit_code_dict
40
41
  from ads.common.auth import default_signer
41
42
  from ads.common.object_storage_details import ObjectStorageDetails
42
43
  from ads.common.oci_resource import SEARCH_TYPE, OCIResource
@@ -45,10 +46,10 @@ from ads.common.utils import get_console_link, get_log_links
45
46
  from ads.config import (
46
47
  AQUA_SERVICE_MODELS_BUCKET,
47
48
  COMPARTMENT_OCID,
49
+ CONDA_BUCKET_NS,
48
50
  ODSC_MODEL_COMPARTMENT_OCID,
49
51
  PROJECT_OCID,
50
52
  TENANCY_OCID,
51
- CONDA_BUCKET_NS,
52
53
  )
53
54
  from ads.model import DataScienceModel
54
55
  from ads.model.model_metadata import MetadataTaxonomyKeys, ModelCustomMetadata
@@ -106,6 +107,7 @@ class AquaModelSummary(DataClassSerializable):
106
107
  console_link: str = None
107
108
  search_text: str = None
108
109
  ready_to_deploy: bool = True
110
+ ready_to_finetune: bool = False
109
111
 
110
112
 
111
113
  @dataclass(repr=False)
@@ -626,8 +628,10 @@ class AquaModelApp(AquaApp):
626
628
  is_fine_tuned_model = Tags.AQUA_FINE_TUNED_MODEL_TAG.value in freeform_tags
627
629
  ready_to_deploy = (
628
630
  freeform_tags.get(Tags.AQUA_TAG.value, "").upper() == READY_TO_DEPLOY_STATUS
629
- if is_fine_tuned_model
630
- else True
631
+ )
632
+ ready_to_finetune = (
633
+ freeform_tags.get(Tags.READY_TO_FINE_TUNE.value, "").upper()
634
+ == READY_TO_FINE_TUNE_STATUS
631
635
  )
632
636
 
633
637
  return dict(
@@ -644,6 +648,7 @@ class AquaModelApp(AquaApp):
644
648
  console_link=console_link,
645
649
  search_text=search_text,
646
650
  ready_to_deploy=ready_to_deploy,
651
+ ready_to_finetune=ready_to_finetune,
647
652
  )
648
653
 
649
654
  @telemetry(entry_point="plugin=model&action=list", name="aqua")
@@ -66,6 +66,16 @@ class TrainingExit(SystemExit):
66
66
  traceback.print_exc()
67
67
 
68
68
 
69
+ class TrustRemoteCodeErrorExit(TrainingExit):
70
+ """Error when the model contains custom code while `trust_remote_code` is not set to True."""
71
+
72
+ code = 30
73
+ reason = (
74
+ "The model contains custom code which must be executed in order to correctly load the model."
75
+ "However, `trust_remote_code` is not enabled."
76
+ )
77
+
78
+
69
79
  class DistributedTrainingLoggingError(TrainingExit):
70
80
  """Error when fetching job run logs for setting up distributed training."""
71
81
 
@@ -349,7 +359,7 @@ class ObjectStorageErrorExit(ServiceErrorExit):
349
359
  target_service = "object_storage"
350
360
  reason = (
351
361
  "Failed to access object storage service. "
352
- "Please make sure the job run has permission to access the object stroage."
362
+ "Please make sure the job run has permission to access the object storage."
353
363
  )
354
364
 
355
365
 
@@ -364,7 +374,7 @@ class OutOfMemoryErrorExit(TrainingExit):
364
374
  )
365
375
 
366
376
 
367
- class NetworkTimeoutError(TrainingExit):
377
+ class NetworkTimeoutErrorExit(TrainingExit):
368
378
  """Error due to network connection timeout."""
369
379
 
370
380
  code = 101
@@ -372,10 +382,17 @@ class NetworkTimeoutError(TrainingExit):
372
382
  "Network connection timeout. "
373
383
  "If you are using custom networking, "
374
384
  "please check the VCN/subnet setting to make sure service or NAT gateway is configured correctly. "
375
- "This could also be a temperoary issue."
385
+ "This could also be a temporary issue."
376
386
  )
377
387
 
378
388
 
389
+ class GPUNotAvailableErrorExit(TrainingExit):
390
+ """Error when GPU is not available."""
391
+
392
+ code = 102
393
+ reason = "GPU is not available."
394
+
395
+
379
396
  def exception_list():
380
397
  """Returns a list of exceptions that may cause the training to exit with specific code."""
381
398
  return [
@@ -437,14 +454,13 @@ def service_dict():
437
454
  }
438
455
 
439
456
 
440
- def log_reason_and_raise(exception_cause: BaseException, exit_ex: TrainingExit = None):
457
+ def log_reason_and_print_exc(exit_ex: TrainingExit = None):
441
458
  """Log the exit reason and raise a TrainingExit exception to exit with exit code."""
442
459
  logger.error(traceback.format_exc())
443
460
  logger.critical(exit_ex.reason)
444
- raise exit_ex from exception_cause
445
461
 
446
462
 
447
- def raise_service_exit(ex: oci.exceptions.ServiceError):
463
+ def prepare_service_exit(ex: oci.exceptions.ServiceError):
448
464
  """Raise ServiceErrorExit base on OCI ServiceError."""
449
465
  operations = operation_dict()
450
466
  services = service_dict()
@@ -456,4 +472,5 @@ def raise_service_exit(ex: oci.exceptions.ServiceError):
456
472
  exit_ex = ServiceErrorExit(
457
473
  service=ex.target_service, operation=ex.operation_name
458
474
  )
459
- log_reason_and_raise(exception_cause=ex, exit_ex=exit_ex)
475
+ log_reason_and_print_exc(exit_ex=exit_ex)
476
+ return exit_ex
ads/aqua/ui.py CHANGED
@@ -406,7 +406,7 @@ class AquaUIApp(AquaApp):
406
406
  ).data
407
407
  except ServiceError as se:
408
408
  raise AquaResourceAccessError(
409
- f"Could not check limits availability for the shape {instance_shape}.",
409
+ f"Could not check limits availability for the shape {instance_shape}. Make sure you have the necessary policy to check limits availability.",
410
410
  service_payload=se.args[0] if se.args else None,
411
411
  )
412
412
 
ads/aqua/utils.py CHANGED
@@ -31,8 +31,8 @@ from ads.common.utils import get_console_link, upload_to_os
31
31
  from ads.config import (
32
32
  AQUA_CONFIG_FOLDER,
33
33
  AQUA_SERVICE_MODELS_BUCKET,
34
- TENANCY_OCID,
35
34
  CONDA_BUCKET_NS,
35
+ TENANCY_OCID,
36
36
  )
37
37
  from ads.model import DataScienceModel, ModelVersionSet
38
38
 
@@ -67,7 +67,7 @@ CONSOLE_LINK_RESOURCE_TYPE_MAPPING = dict(
67
67
  datasciencemodelversionsetdev="model-version-sets",
68
68
  )
69
69
  FINE_TUNING_RUNTIME_CONTAINER = "iad.ocir.io/ociodscdev/aqua_ft_cuda121:0.3.17.20"
70
- DEFAULT_FT_BLOCK_STORAGE_SIZE = 256
70
+ DEFAULT_FT_BLOCK_STORAGE_SIZE = 750
71
71
  DEFAULT_FT_REPLICA = 1
72
72
  DEFAULT_FT_BATCH_SIZE = 1
73
73
  DEFAULT_FT_VALIDATION_SET_SIZE = 0.1
@@ -78,6 +78,7 @@ JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING = "ME_STANDALONE"
78
78
  NB_SESSION_IDENTIFIER = "NB_SESSION_OCID"
79
79
  LIFECYCLE_DETAILS_MISSING_JOBRUN = "The asscociated JobRun resource has been deleted."
80
80
  READY_TO_DEPLOY_STATUS = "ACTIVE"
81
+ READY_TO_FINE_TUNE_STATUS = "TRUE"
81
82
 
82
83
 
83
84
  class LifecycleStatus(Enum):
@@ -610,18 +611,18 @@ def fire_and_forget(func):
610
611
  return wrapped
611
612
 
612
613
 
613
- def get_base_model_from_tags(tags):
614
- base_model_ocid = ""
615
- base_model_name = ""
616
- if Tags.AQUA_FINE_TUNED_MODEL_TAG.value in tags:
617
- tag = tags[Tags.AQUA_FINE_TUNED_MODEL_TAG.value]
618
- if "#" in tag:
619
- base_model_ocid, base_model_name = tag.split("#")
614
+ def extract_id_and_name_from_tag(tag: str):
615
+ base_model_ocid = UNKNOWN
616
+ base_model_name = UNKNOWN
617
+ try:
618
+ base_model_ocid, base_model_name = tag.split("#")
619
+ except:
620
+ pass
620
621
 
621
- if not (is_valid_ocid(base_model_ocid) and base_model_name):
622
- raise AquaValueError(
623
- f"{Tags.AQUA_FINE_TUNED_MODEL_TAG.value} tag should have the format `Service Model OCID#Model Name`."
624
- )
622
+ if not (is_valid_ocid(base_model_ocid) and base_model_name):
623
+ logger.debug(
624
+ f"Invalid {tag}. Specify tag in the format as <service_model_id>#<service_model_name>."
625
+ )
625
626
 
626
627
  return base_model_ocid, base_model_name
627
628
 
ads/config.py CHANGED
@@ -8,7 +8,6 @@ import contextlib
8
8
  import inspect
9
9
  import os
10
10
  from typing import Dict, Optional
11
-
12
11
  from ads.common.config import DEFAULT_CONFIG_PATH, DEFAULT_CONFIG_PROFILE, Config, Mode
13
12
 
14
13
  OCI_ODSC_SERVICE_ENDPOINT = os.environ.get("OCI_ODSC_SERVICE_ENDPOINT")
@@ -49,8 +48,6 @@ RESOURCE_OCID = (
49
48
  NO_CONTAINER = os.environ.get("NO_CONTAINER")
50
49
  TMPDIR = os.environ.get("TMPDIR")
51
50
 
52
- ODSC_MODEL_COMPARTMENT_OCID = os.environ.get("ODSC_MODEL_COMPARTMENT_OCID")
53
- AQUA_MODEL_DEPLOYMENT_IMAGE = os.environ.get("AQUA_MODEL_DEPLOYMENT_IMAGE")
54
51
  AQUA_MODEL_DEPLOYMENT_CONFIG = os.environ.get(
55
52
  "AQUA_DEPLOYMENT_CONFIG", "deployment_config.json"
56
53
  )
@@ -86,6 +83,17 @@ DEBUG_TELEMETRY = os.environ.get("DEBUG_TELEMETRY", None)
86
83
  AQUA_SERVICE_NAME = "aqua"
87
84
  DATA_SCIENCE_SERVICE_NAME = "data-science"
88
85
 
86
+ compartment_mapping = {
87
+ "idoaxnz5ar4s": "ocid1.compartment.oc1..aaaaaaaabxqyb6w4kj5y4fwwkc47auxdothlqc7jpm3zbah5aamflvp7th3q",
88
+ "id19sfcrra6z": "ocid1.compartment.oc1..aaaaaaaasdur4tm5apdm6qyapaba7apdiyv22n2mwt6zquyubqevk3uo7nha",
89
+ }
90
+ default_compartment = compartment_mapping.get(CONDA_BUCKET_NS)
91
+ ODSC_MODEL_COMPARTMENT_OCID = (
92
+ default_compartment
93
+ if default_compartment
94
+ else os.environ.get("ODSC_MODEL_COMPARTMENT_OCID")
95
+ )
96
+
89
97
 
90
98
  def export(
91
99
  uri: Optional[str] = DEFAULT_CONFIG_PATH,
@@ -18,7 +18,11 @@ from jsonschema import ValidationError, validate
18
18
 
19
19
  from ads.common import utils
20
20
  from ads.common.object_storage_details import ObjectStorageDetails
21
- from ads.config import COMPARTMENT_OCID, PROJECT_OCID
21
+ from ads.config import (
22
+ COMPARTMENT_OCID,
23
+ PROJECT_OCID,
24
+ AQUA_SERVICE_MODELS_BUCKET as SERVICE_MODELS_BUCKET,
25
+ )
22
26
  from ads.feature_engineering.schema import Schema
23
27
  from ads.jobs.builders.base import Builder
24
28
  from ads.model.artifact_downloader import (
@@ -1316,7 +1320,11 @@ class DataScienceModel(Builder):
1316
1320
  bucket_uri = [bucket_uri]
1317
1321
 
1318
1322
  for uri in bucket_uri:
1319
- if not ObjectStorageDetails.from_path(uri).is_bucket_versioned():
1323
+ os_path = ObjectStorageDetails.from_path(uri)
1324
+ # for aqua use case, user may not have access to the service bucket.
1325
+ if os_path.bucket == SERVICE_MODELS_BUCKET:
1326
+ continue
1327
+ if not os_path.is_bucket_versioned():
1320
1328
  message = f"Model artifact bucket {uri} is not versioned. Enable versioning on the bucket to proceed with model creation by reference."
1321
1329
  logger.error(message)
1322
1330
  raise BucketNotVersionedError(message)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oracle_ads
3
- Version: 2.11.1
3
+ Version: 2.11.3
4
4
  Summary: Oracle Accelerated Data Science SDK
5
5
  Keywords: Oracle Cloud Infrastructure,OCI,Machine Learning,ML,Artificial Intelligence,AI,Data Science,Cloud,Oracle
6
6
  Author: Oracle Data Science
@@ -1,20 +1,20 @@
1
1
  ads/__init__.py,sha256=OxHySbHbMqPgZ8sUj33Bxy-smSiNgRjtcSUV77oBL08,3787
2
2
  ads/cli.py,sha256=GVJOtlkeLYIyMEH_sqZ93aGb3j0XIcS4aiCyOVkf6So,2044
3
- ads/config.py,sha256=Co8DFoILeOD0xeJQoMQi56Bdi-mnm0N7qIpTjSv6a8g,7962
3
+ ads/config.py,sha256=KxnvnTxA-xai-4yd6-Dfh6dVHC6hAmT__7IVEVdmPXE,8253
4
4
  ads/aqua/__init__.py,sha256=GvScTRi_de89ryqIsyCRQQEi6jbjOA7NojZYKYhCvqY,342
5
- ads/aqua/base.py,sha256=OVN63YJTsYdgHv7uVVRyMki2CrK52OfAC-Pz-UhJ00I,11167
5
+ ads/aqua/base.py,sha256=xxLdZPirDALBXSkSR6_amWNhnsDTpJcooF-pNS3rDic,11137
6
6
  ads/aqua/cli.py,sha256=GQUSeAOjD3aGK9VfRpj80_Pp1wZaOMC1xlVUVgUMMQ8,602
7
7
  ads/aqua/constants.py,sha256=ArlrOW6xGsXReKKVLSWNqhaFsAqlqCTEJAVGR-sqbNM,1463
8
- ads/aqua/data.py,sha256=TskINi2c8ctBPH5r1Ir1IEOYff9SclLKppdlk8gmZO4,1047
8
+ ads/aqua/data.py,sha256=VYP_uByT3G2vUC-gsgLSHpWNTxGFz8gD2xOKxdPzpCI,1137
9
9
  ads/aqua/decorator.py,sha256=bTaOa90q4rJ18Dpiy8ETupbpru3IXvm3Di5DGiZO_N8,3152
10
- ads/aqua/deployment.py,sha256=dyEO-Rwq0GbSmDnRW36uNa4nTfOjFRvDdPsaP5u9kq8,23398
11
- ads/aqua/evaluation.py,sha256=tmeTj23QKgD3rKYknI1WSQEQrZ1-M_Xv1JdbvQ90xyo,66573
10
+ ads/aqua/deployment.py,sha256=gy8BRQxXvVPOk1wo7MQs6xx1laHy2a2AAmmc1Jyh9lg,23323
11
+ ads/aqua/evaluation.py,sha256=DxHywtjZHxMmeZapT0APXX9iAM4gkJD6XF-SBa2dl-E,66710
12
12
  ads/aqua/exception.py,sha256=wV0XEZy9dlZfX7DQ_hLcEFW8tTEeL375qVuOQmjiRPs,2381
13
- ads/aqua/finetune.py,sha256=aNn1TLZAGLWiZ_qtO1OBDfBmM65ZEwoX8IvLe3duZQQ,22700
13
+ ads/aqua/finetune.py,sha256=eMSyRwQuhbALmv7tPImSOD-Brjfb0WurGxmCY3siLNg,22912
14
14
  ads/aqua/job.py,sha256=QfFLRaCcaUh3qNd7ofMAvsB23mr2AAvE5JaPyBpCJpE,904
15
- ads/aqua/model.py,sha256=8FDnsdQZYoPLaiwVHj3KmeUUyuYtOA1c7qq8fJ6_MgI,28803
16
- ads/aqua/ui.py,sha256=xU8RwHECOLM_VZX6VXrlgJ-flELFo9wUH23Ew4uZofY,17510
17
- ads/aqua/utils.py,sha256=F4rUnvuRdft0B5Q-JbVPR5cicAYAcxGRkKlLC6Obdso,22306
15
+ ads/aqua/model.py,sha256=P90OwiAm3Aq1xtDPjsNiI0lregmB_qfe5MrslpnNvkw,29016
16
+ ads/aqua/ui.py,sha256=zetpa_61X3SyMTuH_d3T3UieAp7H1MzRm6VR23PgYfc,17580
17
+ ads/aqua/utils.py,sha256=Np8-Le7M39GbVEgp3RCva2NQJAP4pbtgI7GsH4lGVvI,22218
18
18
  ads/aqua/config/deployment_config_defaults.json,sha256=SoGP0J3BChwhR7L0HHpgLfSxLi0DsDfuLSGwWnrh5Zk,121
19
19
  ads/aqua/config/resource_limit_names.json,sha256=Nsd_Ll5X09Wzhab7alAc2Utg8Bt2BSABK-E6JefUeA0,195
20
20
  ads/aqua/dummy_data/icon.txt,sha256=wlB79r3A4mUBbrK5yVVXrNEEKpvfZiwBx2sKlj7wzA4,6326
@@ -31,7 +31,7 @@ ads/aqua/extension/model_handler.py,sha256=_qcFj45dgi3LUKnqjzcCoUObe1zs1S3PiEybo
31
31
  ads/aqua/extension/ui_handler.py,sha256=ty_lCi_L-ojnfz8UPru7Lbo1ZGucROt_C3Zwbcptrm0,8021
32
32
  ads/aqua/extension/utils.py,sha256=0TVxQPnJQ7Eqsrt81zRCHbVtTrSb8gnnN9BA5HF5TF4,855
33
33
  ads/aqua/training/__init__.py,sha256=w2DNWltXtASQgbrHyvKo0gMs5_chZoG-CSDMI4qe7i0,202
34
- ads/aqua/training/exceptions.py,sha256=emcYXQ6SiB1hpVMgViV46zB5ZD4SJQAUDL--U6UhUUQ,13203
34
+ ads/aqua/training/exceptions.py,sha256=S5gHUeUiiPErxuwqG0TB1Yf11mhsAGNYb9o3zd1L1dI,13627
35
35
  ads/automl/__init__.py,sha256=BrLB7utK9cULb_vHpH2QOUZv_NvDDF6kuR6o4boFWrU,264
36
36
  ads/automl/driver.py,sha256=98KpOo2IAy4dot1vcxWYhJPEuVoa4krensXSXfy2gvQ,13159
37
37
  ads/automl/provider.py,sha256=yWkgIDlVIbGvxwyjfMSlbNZD8ZgYcvGr_Qn6otVXBg8,35984
@@ -436,7 +436,7 @@ ads/model/artifact.py,sha256=ONKyjZKO5wmAYI-GT63z8yLm_QsmIGXcob9KrnwtF5k,20503
436
436
  ads/model/artifact_downloader.py,sha256=-9IYkjZ0LaMWf5foz5HUGTZCEm67f-3LbDsigNlzEPg,9751
437
437
  ads/model/artifact_uploader.py,sha256=jdkpmncczceOc28LyMkv4u6f845HJ1vVCoI-hLBT-RM,11305
438
438
  ads/model/base_properties.py,sha256=YeVyjCync4fzqqruMc9UfZKR4PnscU31n0mf4CJv3R8,7885
439
- ads/model/datascience_model.py,sha256=P40wngD41JXVnphX1GBD_05yekPZ-wO4uJ4OLGSARik,53148
439
+ ads/model/datascience_model.py,sha256=pu49ZpGNJKIkLf5N_hWEV0wDEZnlaVT4NQoSGRtFqvM,53426
440
440
  ads/model/generic_model.py,sha256=aQco26ziO79q1BkLbRoS7CuE4Se4JYioyjRsFI3U5fU,146170
441
441
  ads/model/model_file_description_schema.json,sha256=NZw_U4CvKf9oOdxCKr1eUxq8FHwjR_g0GSDk0Hz3SnE,1402
442
442
  ads/model/model_introspect.py,sha256=z9pJul9dwT9w8flvRguhu0ZKoEkbm2Tvdutw_SHYTeg,9745
@@ -758,8 +758,8 @@ ads/type_discovery/unknown_detector.py,sha256=yZuYQReO7PUyoWZE7onhhtYaOg6088wf1y
758
758
  ads/type_discovery/zipcode_detector.py,sha256=3AlETg_ZF4FT0u914WXvTT3F3Z6Vf51WiIt34yQMRbw,1421
759
759
  ads/vault/__init__.py,sha256=x9tMdDAOdF5iDHk9u2di_K-ze5Nq068x25EWOBoWwqY,245
760
760
  ads/vault/vault.py,sha256=hFBkpYE-Hfmzu1L0sQwUfYcGxpWmgG18JPndRl0NOXI,8624
761
- oracle_ads-2.11.1.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
762
- oracle_ads-2.11.1.dist-info/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
763
- oracle_ads-2.11.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
764
- oracle_ads-2.11.1.dist-info/METADATA,sha256=nBDsBaP-Fhiy-Kghh4OhUxiBf1HLzWynQV_VpcEPynk,15876
765
- oracle_ads-2.11.1.dist-info/RECORD,,
761
+ oracle_ads-2.11.3.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
762
+ oracle_ads-2.11.3.dist-info/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
763
+ oracle_ads-2.11.3.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
764
+ oracle_ads-2.11.3.dist-info/METADATA,sha256=sdabg-gAdrPytrxbaHnHE5BCAVMuiaPnAtTwQjoho9Q,15876
765
+ oracle_ads-2.11.3.dist-info/RECORD,,