oracle-ads 2.13.5__py3-none-any.whl → 2.13.7__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/__init__.py +0 -5
- ads/aqua/app.py +133 -20
- ads/aqua/cli.py +2 -15
- ads/aqua/common/enums.py +14 -0
- ads/aqua/common/utils.py +50 -83
- ads/aqua/config/container_config.py +105 -69
- ads/aqua/config/evaluation/evaluation_service_config.py +40 -0
- ads/aqua/constants.py +22 -20
- ads/aqua/evaluation/evaluation.py +98 -32
- ads/aqua/extension/common_handler.py +3 -12
- ads/aqua/extension/common_ws_msg_handler.py +3 -24
- ads/aqua/extension/model_handler.py +59 -6
- ads/aqua/extension/models/ws_models.py +2 -0
- ads/aqua/extension/models_ws_msg_handler.py +1 -0
- ads/aqua/extension/utils.py +11 -24
- ads/aqua/finetuning/entities.py +23 -1
- ads/aqua/finetuning/finetuning.py +26 -10
- ads/aqua/model/constants.py +8 -0
- ads/aqua/model/entities.py +8 -1
- ads/aqua/model/model.py +286 -111
- ads/aqua/modeldeployment/deployment.py +51 -47
- ads/aqua/modeldeployment/utils.py +23 -5
- ads/aqua/ui.py +3 -4
- ads/config.py +2 -2
- ads/dataset/recommendation.py +11 -20
- ads/model/datascience_model.py +29 -0
- ads/model/service/oci_datascience_model.py +1 -1
- ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +8 -6
- ads/opctl/operator/lowcode/anomaly/model/base_model.py +1 -1
- ads/opctl/operator/lowcode/anomaly/operator_config.py +5 -3
- ads/opctl/operator/lowcode/common/transformations.py +2 -0
- ads/opctl/operator/lowcode/forecast/model/automlx.py +29 -0
- ads/opctl/operator/lowcode/pii/model/report.py +9 -16
- ads/opctl/utils.py +1 -1
- ads/type_discovery/typed_feature.py +32 -34
- {oracle_ads-2.13.5.dist-info → oracle_ads-2.13.7.dist-info}/METADATA +1 -1
- {oracle_ads-2.13.5.dist-info → oracle_ads-2.13.7.dist-info}/RECORD +40 -41
- ads/aqua/config/config.py +0 -31
- {oracle_ads-2.13.5.dist-info → oracle_ads-2.13.7.dist-info}/WHEEL +0 -0
- {oracle_ads-2.13.5.dist-info → oracle_ads-2.13.7.dist-info}/entry_points.txt +0 -0
- {oracle_ads-2.13.5.dist-info → oracle_ads-2.13.7.dist-info}/licenses/LICENSE.txt +0 -0
ads/aqua/finetuning/entities.py
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
4
|
|
5
5
|
import json
|
6
|
-
from typing import List, Literal, Optional, Union
|
6
|
+
from typing import Any, Dict, List, Literal, Optional, Union
|
7
7
|
|
8
8
|
from pydantic import Field, model_validator
|
9
9
|
|
@@ -55,6 +55,28 @@ class AquaFineTuningParams(Serializable):
|
|
55
55
|
return data
|
56
56
|
|
57
57
|
|
58
|
+
class AquaFineTuningConfig(Serializable):
|
59
|
+
"""Represents model's shape list and detailed configuration for fine-tuning.
|
60
|
+
|
61
|
+
Attributes:
|
62
|
+
shape (List[str], optional): A list of shape names (e.g., BM.GPU.A10.4).
|
63
|
+
configuration (Dict[str, Any], optional): Configuration details of fine-tuning.
|
64
|
+
"""
|
65
|
+
|
66
|
+
shape: Optional[Dict[str, Any]] = Field(
|
67
|
+
default_factory=dict, description="List of supported shapes for the model."
|
68
|
+
)
|
69
|
+
finetuning_params: Optional[str] = Field(
|
70
|
+
default_factory=str, description="Fine tuning parameters."
|
71
|
+
)
|
72
|
+
configuration: Optional[Dict[str, Any]] = Field(
|
73
|
+
default_factory=dict, description="Configuration details keyed by shape."
|
74
|
+
)
|
75
|
+
|
76
|
+
class Config:
|
77
|
+
extra = "allow"
|
78
|
+
|
79
|
+
|
58
80
|
class AquaFineTuningSummary(Serializable):
|
59
81
|
"""Represents a summary of Aqua Finetuning job."""
|
60
82
|
|
@@ -20,8 +20,8 @@ from ads.aqua.app import AquaApp
|
|
20
20
|
from ads.aqua.common.enums import Resource, Tags
|
21
21
|
from ads.aqua.common.errors import AquaFileExistsError, AquaValueError
|
22
22
|
from ads.aqua.common.utils import (
|
23
|
+
DEFINED_METADATA_TO_FILE_MAP,
|
23
24
|
build_pydantic_error_message,
|
24
|
-
get_container_image,
|
25
25
|
upload_local_to_os,
|
26
26
|
)
|
27
27
|
from ads.aqua.constants import (
|
@@ -38,17 +38,18 @@ from ads.aqua.finetuning.constants import (
|
|
38
38
|
FineTuneCustomMetadata,
|
39
39
|
)
|
40
40
|
from ads.aqua.finetuning.entities import (
|
41
|
+
AquaFineTuningConfig,
|
41
42
|
AquaFineTuningParams,
|
42
43
|
AquaFineTuningSummary,
|
43
44
|
CreateFineTuningDetails,
|
44
45
|
)
|
46
|
+
from ads.aqua.model.constants import AquaModelMetadataKeys
|
45
47
|
from ads.common.auth import default_signer
|
46
48
|
from ads.common.object_storage_details import ObjectStorageDetails
|
47
49
|
from ads.common.utils import UNKNOWN, get_console_link
|
48
50
|
from ads.config import (
|
49
51
|
AQUA_FINETUNING_CONTAINER_OVERRIDE_FLAG_METADATA_NAME,
|
50
52
|
AQUA_JOB_SUBNET_ID,
|
51
|
-
AQUA_MODEL_FINETUNING_CONFIG,
|
52
53
|
COMPARTMENT_OCID,
|
53
54
|
CONDA_BUCKET_NS,
|
54
55
|
PROJECT_OCID,
|
@@ -312,7 +313,7 @@ class AquaFineTuningApp(AquaApp):
|
|
312
313
|
compartment_id=target_compartment,
|
313
314
|
project_id=target_project,
|
314
315
|
model_by_reference=True,
|
315
|
-
defined_tags=create_fine_tuning_details.defined_tags
|
316
|
+
defined_tags=create_fine_tuning_details.defined_tags,
|
316
317
|
)
|
317
318
|
|
318
319
|
ft_job_freeform_tags = {
|
@@ -371,11 +372,11 @@ class AquaFineTuningApp(AquaApp):
|
|
371
372
|
is_custom_container = True
|
372
373
|
|
373
374
|
ft_parameters.batch_size = ft_parameters.batch_size or (
|
374
|
-
ft_config.
|
375
|
+
(ft_config.shape if ft_config else UNKNOWN_DICT)
|
375
376
|
.get(create_fine_tuning_details.shape_name, UNKNOWN_DICT)
|
376
377
|
.get("batch_size", DEFAULT_FT_BATCH_SIZE)
|
377
378
|
)
|
378
|
-
finetuning_params = ft_config.
|
379
|
+
finetuning_params = ft_config.finetuning_params if ft_config else UNKNOWN
|
379
380
|
|
380
381
|
ft_job.with_runtime(
|
381
382
|
self._build_fine_tuning_runtime(
|
@@ -558,7 +559,7 @@ class AquaFineTuningApp(AquaApp):
|
|
558
559
|
) -> Runtime:
|
559
560
|
"""Builds fine tuning runtime for Job."""
|
560
561
|
container = (
|
561
|
-
get_container_image(
|
562
|
+
self.get_container_image(
|
562
563
|
container_type=ft_container,
|
563
564
|
)
|
564
565
|
if not is_custom_container
|
@@ -626,7 +627,7 @@ class AquaFineTuningApp(AquaApp):
|
|
626
627
|
@telemetry(
|
627
628
|
entry_point="plugin=finetuning&action=get_finetuning_config", name="aqua"
|
628
629
|
)
|
629
|
-
def get_finetuning_config(self, model_id: str) ->
|
630
|
+
def get_finetuning_config(self, model_id: str) -> AquaFineTuningConfig:
|
630
631
|
"""Gets the finetuning config for given Aqua model.
|
631
632
|
|
632
633
|
Parameters
|
@@ -639,12 +640,25 @@ class AquaFineTuningApp(AquaApp):
|
|
639
640
|
Dict:
|
640
641
|
A dict of allowed finetuning configs.
|
641
642
|
"""
|
642
|
-
config = self.
|
643
|
+
config = self.get_config_from_metadata(
|
644
|
+
model_id, AquaModelMetadataKeys.FINE_TUNING_CONFIGURATION
|
645
|
+
).config
|
646
|
+
if config:
|
647
|
+
logger.info(
|
648
|
+
f"Fetched {AquaModelMetadataKeys.FINE_TUNING_CONFIGURATION} from defined metadata for model: {model_id}."
|
649
|
+
)
|
650
|
+
return AquaFineTuningConfig(**(config or UNKNOWN_DICT))
|
651
|
+
config = self.get_config(
|
652
|
+
model_id,
|
653
|
+
DEFINED_METADATA_TO_FILE_MAP.get(
|
654
|
+
AquaModelMetadataKeys.FINE_TUNING_CONFIGURATION.lower()
|
655
|
+
),
|
656
|
+
).config
|
643
657
|
if not config:
|
644
658
|
logger.debug(
|
645
659
|
f"Fine-tuning config for custom model: {model_id} is not available. Use defaults."
|
646
660
|
)
|
647
|
-
return config
|
661
|
+
return AquaFineTuningConfig(**(config or UNKNOWN_DICT))
|
648
662
|
|
649
663
|
@telemetry(
|
650
664
|
entry_point="plugin=finetuning&action=get_finetuning_default_params",
|
@@ -667,7 +681,9 @@ class AquaFineTuningApp(AquaApp):
|
|
667
681
|
"""
|
668
682
|
default_params = {"params": {}}
|
669
683
|
finetuning_config = self.get_finetuning_config(model_id)
|
670
|
-
config_parameters =
|
684
|
+
config_parameters = (
|
685
|
+
finetuning_config.configuration if finetuning_config else UNKNOWN_DICT
|
686
|
+
)
|
671
687
|
dataclass_fields = self._get_finetuning_params(
|
672
688
|
config_parameters, validate=False
|
673
689
|
).to_dict()
|
ads/aqua/model/constants.py
CHANGED
@@ -50,3 +50,11 @@ class FineTuningCustomMetadata(ExtendedEnum):
|
|
50
50
|
VALIDATION_METRICS_FINAL = "val_metrics_final"
|
51
51
|
TRAINING_METRICS_EPOCH = "train_metrics_epoch"
|
52
52
|
VALIDATION_METRICS_EPOCH = "val_metrics_epoch"
|
53
|
+
|
54
|
+
|
55
|
+
class AquaModelMetadataKeys(ExtendedEnum):
|
56
|
+
FINE_TUNING_CONFIGURATION = "FineTuneConfiguration"
|
57
|
+
DEPLOYMENT_CONFIGURATION = "DeploymentConfiguration"
|
58
|
+
README = "Readme"
|
59
|
+
LICENSE = "License"
|
60
|
+
REPORTS = "Reports"
|
ads/aqua/model/entities.py
CHANGED
@@ -15,6 +15,7 @@ from typing import List, Optional
|
|
15
15
|
|
16
16
|
import oci
|
17
17
|
from huggingface_hub import hf_api
|
18
|
+
from pydantic import BaseModel
|
18
19
|
|
19
20
|
from ads.aqua import logger
|
20
21
|
from ads.aqua.app import CLIBuilderMixin
|
@@ -29,6 +30,13 @@ from ads.model.datascience_model import DataScienceModel
|
|
29
30
|
from ads.model.model_metadata import MetadataTaxonomyKeys
|
30
31
|
|
31
32
|
|
33
|
+
class AquaModelReadme(BaseModel):
|
34
|
+
"""Represents the response of Get Model Readme."""
|
35
|
+
|
36
|
+
id: str = field(default_factory=str)
|
37
|
+
model_card: str = field(default_factory=str)
|
38
|
+
|
39
|
+
|
32
40
|
@dataclass(repr=False)
|
33
41
|
class FineTuningShapeInfo(DataClassSerializable):
|
34
42
|
instance_shape: str = field(default_factory=str)
|
@@ -95,7 +103,6 @@ class AquaModelSummary(DataClassSerializable):
|
|
95
103
|
class AquaModel(AquaModelSummary, DataClassSerializable):
|
96
104
|
"""Represents an Aqua model."""
|
97
105
|
|
98
|
-
model_card: str = None
|
99
106
|
inference_container: str = None
|
100
107
|
inference_container_uri: str = None
|
101
108
|
finetuning_container: str = None
|