Skip to content

Commit e7e3f19

Browse files
ADS changes for MS enhancements (#1036)
2 parents 737c713 + 5ef6f12 commit e7e3f19

22 files changed

+1160
-88
lines changed

ads/aqua/app.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@
2222
is_valid_ocid,
2323
load_config,
2424
)
25-
from ads.aqua.constants import UNKNOWN
2625
from ads.common import oci_client as oc
2726
from ads.common.auth import default_signer
28-
from ads.common.utils import extract_region, is_path_exists
27+
from ads.common.utils import UNKNOWN, extract_region, is_path_exists
2928
from ads.config import (
3029
AQUA_TELEMETRY_BUCKET,
3130
AQUA_TELEMETRY_BUCKET_NS,

ads/aqua/common/utils.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from string import Template
2020
from typing import List, Union
2121

22-
import fsspec
2322
import oci
2423
from cachetools import TTLCache, cached
2524
from huggingface_hub.constants import HF_HUB_CACHE
@@ -58,7 +57,6 @@
5857
SUPPORTED_FILE_FORMATS,
5958
TEI_CONTAINER_DEFAULT_HOST,
6059
TGI_INFERENCE_RESTRICTED_PARAMS,
61-
UNKNOWN,
6260
UNKNOWN_JSON_STR,
6361
VLLM_INFERENCE_RESTRICTED_PARAMS,
6462
)
@@ -68,7 +66,13 @@
6866
from ads.common.extended_enum import ExtendedEnum
6967
from ads.common.object_storage_details import ObjectStorageDetails
7068
from ads.common.oci_resource import SEARCH_TYPE, OCIResource
71-
from ads.common.utils import copy_file, get_console_link, upload_to_os
69+
from ads.common.utils import (
70+
UNKNOWN,
71+
copy_file,
72+
get_console_link,
73+
read_file,
74+
upload_to_os,
75+
)
7276
from ads.config import (
7377
AQUA_MODEL_DEPLOYMENT_FOLDER,
7478
AQUA_SERVICE_MODELS_BUCKET,
@@ -228,15 +232,6 @@ def get_artifact_path(custom_metadata_list: List) -> str:
228232
return UNKNOWN
229233

230234

231-
def read_file(file_path: str, **kwargs) -> str:
232-
try:
233-
with fsspec.open(file_path, "r", **kwargs.get("auth", {})) as f:
234-
return f.read()
235-
except Exception as e:
236-
logger.debug(f"Failed to read file {file_path}. {e}")
237-
return UNKNOWN
238-
239-
240235
@threaded()
241236
def load_config(file_path: str, config_file_name: str, **kwargs) -> dict:
242237
artifact_path = f"{file_path.rstrip('/')}/{config_file_name}"

ads/aqua/constants.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
44
"""This module defines constants used in ads.aqua module."""
55

6-
UNKNOWN = ""
76
UNKNOWN_VALUE = ""
87
READY_TO_IMPORT_STATUS = "TRUE"
98
UNKNOWN_DICT = {}

ads/aqua/evaluation/evaluation.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING,
5656
LIFECYCLE_DETAILS_MISSING_JOBRUN,
5757
NB_SESSION_IDENTIFIER,
58-
UNKNOWN,
5958
)
6059
from ads.aqua.evaluation.constants import (
6160
EVAL_TERMINATION_STATE,
@@ -79,7 +78,7 @@
7978
from ads.aqua.evaluation.errors import EVALUATION_JOB_EXIT_CODE_MESSAGE
8079
from ads.common.auth import default_signer
8180
from ads.common.object_storage_details import ObjectStorageDetails
82-
from ads.common.utils import get_console_link, get_files, get_log_links
81+
from ads.common.utils import UNKNOWN, get_console_link, get_files, get_log_links
8382
from ads.config import (
8483
AQUA_JOB_SUBNET_ID,
8584
COMPARTMENT_OCID,

ads/aqua/finetuning/finetuning.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
DEFAULT_FT_REPLICA,
3131
DEFAULT_FT_VALIDATION_SET_SIZE,
3232
JOB_INFRASTRUCTURE_TYPE_DEFAULT_NETWORKING,
33-
UNKNOWN,
3433
UNKNOWN_DICT,
3534
)
3635
from ads.aqua.data import AquaResourceIdentifier
@@ -45,7 +44,7 @@
4544
)
4645
from ads.common.auth import default_signer
4746
from ads.common.object_storage_details import ObjectStorageDetails
48-
from ads.common.utils import get_console_link
47+
from ads.common.utils import UNKNOWN, get_console_link
4948
from ads.config import (
5049
AQUA_FINETUNING_CONTAINER_OVERRIDE_FLAG_METADATA_NAME,
5150
AQUA_JOB_SUBNET_ID,

ads/aqua/model/model.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
READY_TO_IMPORT_STATUS,
6060
TRAINING_METRICS_FINAL,
6161
TRINING_METRICS,
62-
UNKNOWN,
6362
VALIDATION_METRICS,
6463
VALIDATION_METRICS_FINAL,
6564
)
@@ -80,7 +79,7 @@
8079
)
8180
from ads.common.auth import default_signer
8281
from ads.common.oci_resource import SEARCH_TYPE, OCIResource
83-
from ads.common.utils import get_console_link
82+
from ads.common.utils import UNKNOWN, get_console_link
8483
from ads.config import (
8584
AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME,
8685
AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME,

ads/aqua/modeldeployment/deployment.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@
2727
AQUA_MODEL_TYPE_CUSTOM,
2828
AQUA_MODEL_TYPE_SERVICE,
2929
MODEL_BY_REFERENCE_OSS_PATH_KEY,
30-
UNKNOWN,
3130
UNKNOWN_DICT,
3231
)
3332
from ads.aqua.data import AquaResourceIdentifier
3433
from ads.aqua.finetuning.finetuning import FineTuneCustomMetadata
3534
from ads.aqua.model import AquaModelApp
3635
from ads.aqua.modeldeployment.entities import AquaDeployment, AquaDeploymentDetail
3736
from ads.common.object_storage_details import ObjectStorageDetails
38-
from ads.common.utils import get_log_links
37+
from ads.common.utils import UNKNOWN, get_log_links
3938
from ads.config import (
4039
AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME,
4140
AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME,

ads/aqua/modeldeployment/entities.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
)
1212

1313
from ads.aqua.common.enums import Tags
14-
from ads.aqua.constants import UNKNOWN, UNKNOWN_DICT
14+
from ads.aqua.constants import UNKNOWN_DICT
1515
from ads.aqua.data import AquaResourceIdentifier
1616
from ads.common.serializer import DataClassSerializable
17-
from ads.common.utils import get_console_link
17+
from ads.common.utils import UNKNOWN, get_console_link
1818

1919

2020
@dataclass

ads/common/utils.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from enum import Enum
2323
from io import DEFAULT_BUFFER_SIZE
2424
from textwrap import fill
25-
from typing import Dict, Optional, Tuple, Union
25+
from typing import Any, Dict, Optional, Tuple, Union
2626
from urllib import request
2727
from urllib.parse import urlparse
2828

@@ -63,6 +63,8 @@
6363
# Maximum distinct values by cardinality will be used for plotting
6464
MAX_DISPLAY_VALUES = 10
6565

66+
UNKNOWN = ""
67+
6668
# par link of the index json file.
6769
PAR_LINK = "https://objectstorage.us-ashburn-1.oraclecloud.com/p/WyjtfVIG0uda-P3-2FmAfwaLlXYQZbvPZmfX1qg0-sbkwEQO6jpwabGr2hMDBmBp/n/ociodscdev/b/service-conda-packs/o/service_pack/index.json"
6870

@@ -82,6 +84,7 @@
8284
color=["teal", "blueviolet", "forestgreen", "peru", "y", "dodgerblue", "r"]
8385
)
8486

87+
8588
# sqlalchemy engines
8689
_engines = {}
8790

@@ -149,6 +152,22 @@ def oci_key_location():
149152
)
150153

151154

155+
def text_sanitizer(content):
156+
if isinstance(content, str):
157+
return (
158+
content.replace("“", '"')
159+
.replace("”", '"')
160+
.replace("’", "'")
161+
.replace("‘", "'")
162+
.replace("—", "-")
163+
.encode("utf-8", "ignore")
164+
.decode("utf-8", "ignore")
165+
)
166+
if isinstance(content, dict):
167+
return json.dumps(content)
168+
return str(content)
169+
170+
152171
@deprecated(
153172
"2.5.10",
154173
details="Deprecated, use: from ads.common.auth import AuthState; AuthState().oci_config_path",
@@ -212,6 +231,37 @@ def random_valid_ocid(prefix="ocid1.dataflowapplication.oc1.iad"):
212231
return f"{left}.{fake}"
213232

214233

234+
def parse_bool(value: Any) -> bool:
235+
"""
236+
Converts a value to boolean. For strings, it interprets 'true', '1', or 'yes'
237+
(case insensitive) as True; everything else as False.
238+
239+
Parameters
240+
----------
241+
value : Any
242+
The value to convert to boolean.
243+
244+
Returns
245+
-------
246+
bool
247+
The boolean interpretation of the value.
248+
"""
249+
if isinstance(value, bool):
250+
return value
251+
if isinstance(value, str):
252+
return value.strip().lower() in ("true", "1", "yes")
253+
return bool(value)
254+
255+
256+
def read_file(file_path: str, **kwargs) -> str:
257+
try:
258+
with fsspec.open(file_path, "r", **kwargs.get("auth", {})) as f:
259+
return f.read()
260+
except Exception as e:
261+
logger.debug(f"Failed to read file {file_path}. {e}")
262+
return UNKNOWN
263+
264+
215265
def get_dataframe_styles(max_width=75):
216266
"""Styles used for dataframe, example usage:
217267

ads/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@
8080
DEBUG_TELEMETRY = os.environ.get("DEBUG_TELEMETRY", None)
8181
AQUA_SERVICE_NAME = "aqua"
8282
DATA_SCIENCE_SERVICE_NAME = "data-science"
83+
USER = "USER"
84+
SERVICE = "SERVICE"
85+
8386

8487

8588
THREADED_DEFAULT_TIMEOUT = 5

0 commit comments

Comments
 (0)