oracle-ads 2.12.7__py3-none-any.whl → 2.12.8__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/modeldeployment/deployment.py +15 -9
- ads/opctl/operator/common/utils.py +6 -4
- ads/opctl/operator/lowcode/anomaly/model/base_model.py +2 -3
- ads/opctl/operator/lowcode/anomaly/model/factory.py +2 -2
- ads/opctl/operator/lowcode/common/transformations.py +14 -10
- ads/opctl/operator/lowcode/common/utils.py +37 -37
- ads/opctl/operator/lowcode/forecast/model/automlx.py +10 -2
- ads/opctl/operator/lowcode/forecast/model/base_model.py +2 -1
- ads/opctl/operator/lowcode/forecast/model/factory.py +3 -2
- ads/opctl/operator/lowcode/forecast/model/prophet.py +4 -1
- ads/opctl/operator/lowcode/forecast/schema.yaml +1 -1
- ads/opctl/operator/lowcode/pii/model/factory.py +7 -5
- ads/opctl/operator/lowcode/recommender/model/base_model.py +2 -1
- ads/opctl/operator/lowcode/recommender/model/factory.py +4 -6
- ads/opctl/operator/lowcode/recommender/model/svd.py +5 -5
- {oracle_ads-2.12.7.dist-info → oracle_ads-2.12.8.dist-info}/METADATA +1 -1
- {oracle_ads-2.12.7.dist-info → oracle_ads-2.12.8.dist-info}/RECORD +20 -20
- {oracle_ads-2.12.7.dist-info → oracle_ads-2.12.8.dist-info}/LICENSE.txt +0 -0
- {oracle_ads-2.12.7.dist-info → oracle_ads-2.12.8.dist-info}/WHEEL +0 -0
- {oracle_ads-2.12.7.dist-info → oracle_ads-2.12.8.dist-info}/entry_points.txt +0 -0
@@ -185,7 +185,7 @@ class AquaDeploymentApp(AquaApp):
|
|
185
185
|
tags[tag] = aqua_model.freeform_tags[tag]
|
186
186
|
|
187
187
|
tags.update({Tags.AQUA_MODEL_NAME_TAG: aqua_model.display_name})
|
188
|
-
tags.update({Tags.TASK: aqua_model.freeform_tags.get(Tags.TASK,
|
188
|
+
tags.update({Tags.TASK: aqua_model.freeform_tags.get(Tags.TASK, UNKNOWN)})
|
189
189
|
|
190
190
|
# Set up info to get deployment config
|
191
191
|
config_source_id = model_id
|
@@ -533,16 +533,22 @@ class AquaDeploymentApp(AquaApp):
|
|
533
533
|
return results
|
534
534
|
|
535
535
|
@telemetry(entry_point="plugin=deployment&action=delete", name="aqua")
|
536
|
-
def delete(self,model_deployment_id:str):
|
537
|
-
return self.ds_client.delete_model_deployment(
|
536
|
+
def delete(self, model_deployment_id: str):
|
537
|
+
return self.ds_client.delete_model_deployment(
|
538
|
+
model_deployment_id=model_deployment_id
|
539
|
+
).data
|
538
540
|
|
539
|
-
@telemetry(entry_point="plugin=deployment&action=deactivate",name="aqua")
|
540
|
-
def deactivate(self,model_deployment_id:str):
|
541
|
-
return self.ds_client.deactivate_model_deployment(
|
541
|
+
@telemetry(entry_point="plugin=deployment&action=deactivate", name="aqua")
|
542
|
+
def deactivate(self, model_deployment_id: str):
|
543
|
+
return self.ds_client.deactivate_model_deployment(
|
544
|
+
model_deployment_id=model_deployment_id
|
545
|
+
).data
|
542
546
|
|
543
|
-
@telemetry(entry_point="plugin=deployment&action=activate",name="aqua")
|
544
|
-
def activate(self,model_deployment_id:str):
|
545
|
-
return self.ds_client.activate_model_deployment(
|
547
|
+
@telemetry(entry_point="plugin=deployment&action=activate", name="aqua")
|
548
|
+
def activate(self, model_deployment_id: str):
|
549
|
+
return self.ds_client.activate_model_deployment(
|
550
|
+
model_deployment_id=model_deployment_id
|
551
|
+
).data
|
546
552
|
|
547
553
|
@telemetry(entry_point="plugin=deployment&action=get", name="aqua")
|
548
554
|
def get(self, model_deployment_id: str, **kwargs) -> "AquaDeploymentDetail":
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# -*- coding: utf-8 -*--
|
3
2
|
|
4
3
|
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
|
5
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
@@ -18,7 +17,6 @@ import yaml
|
|
18
17
|
from cerberus import Validator
|
19
18
|
|
20
19
|
from ads.opctl import logger, utils
|
21
|
-
from ads.opctl.operator import __operators__
|
22
20
|
|
23
21
|
CONTAINER_NETWORK = "CONTAINER_NETWORK"
|
24
22
|
|
@@ -26,7 +24,11 @@ CONTAINER_NETWORK = "CONTAINER_NETWORK"
|
|
26
24
|
class OperatorValidator(Validator):
|
27
25
|
"""The custom validator class."""
|
28
26
|
|
29
|
-
|
27
|
+
def validate(self, obj_dict, **kwargs):
|
28
|
+
# Model should be case insensitive
|
29
|
+
if "model" in obj_dict["spec"]:
|
30
|
+
obj_dict["spec"]["model"] = str(obj_dict["spec"]["model"]).lower()
|
31
|
+
return super().validate(obj_dict, **kwargs)
|
30
32
|
|
31
33
|
|
32
34
|
def create_output_folder(name):
|
@@ -34,7 +36,7 @@ def create_output_folder(name):
|
|
34
36
|
protocol = fsspec.utils.get_protocol(output_folder)
|
35
37
|
storage_options = {}
|
36
38
|
if protocol != "file":
|
37
|
-
storage_options =
|
39
|
+
storage_options = default_signer()
|
38
40
|
|
39
41
|
fs = fsspec.filesystem(protocol, **storage_options)
|
40
42
|
name_suffix = 1
|
@@ -166,9 +166,8 @@ class AnomalyOperatorBaseModel(ABC):
|
|
166
166
|
yaml_appendix = rc.Yaml(self.config.to_dict())
|
167
167
|
summary = rc.Block(
|
168
168
|
rc.Group(
|
169
|
-
rc.Text(
|
170
|
-
|
171
|
-
),
|
169
|
+
rc.Text(f"You selected the **`{self.spec.model}`** model.\n"),
|
170
|
+
model_description,
|
172
171
|
rc.Text(
|
173
172
|
"Based on your dataset, you could have also selected "
|
174
173
|
f"any of the models: `{'`, `'.join(SupportedModels.keys() if self.spec.datetime_column else NonTimeADSupportedModels.keys())}`."
|
@@ -26,9 +26,9 @@ class UnSupportedModelError(Exception):
|
|
26
26
|
|
27
27
|
def __init__(self, operator_config: AnomalyOperatorConfig, model_type: str):
|
28
28
|
supported_models = (
|
29
|
-
SupportedModels.values
|
29
|
+
SupportedModels.values()
|
30
30
|
if operator_config.spec.datetime_column
|
31
|
-
else NonTimeADSupportedModels.values
|
31
|
+
else NonTimeADSupportedModels.values()
|
32
32
|
)
|
33
33
|
message = (
|
34
34
|
f"Model: `{model_type}` is not supported. "
|
@@ -1,18 +1,19 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# -*- coding: utf-8 -*--
|
3
2
|
|
4
|
-
# Copyright (c) 2023 Oracle and/or its affiliates.
|
3
|
+
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
|
5
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
5
|
|
6
|
+
from abc import ABC
|
7
|
+
|
8
|
+
import pandas as pd
|
9
|
+
|
7
10
|
from ads.opctl import logger
|
11
|
+
from ads.opctl.operator.lowcode.common.const import DataColumns
|
8
12
|
from ads.opctl.operator.lowcode.common.errors import (
|
9
|
-
InvalidParameterError,
|
10
13
|
DataMismatchError,
|
14
|
+
InvalidParameterError,
|
11
15
|
)
|
12
|
-
from ads.opctl.operator.lowcode.common.const import DataColumns
|
13
16
|
from ads.opctl.operator.lowcode.common.utils import merge_category_columns
|
14
|
-
import pandas as pd
|
15
|
-
from abc import ABC
|
16
17
|
|
17
18
|
|
18
19
|
class Transformations(ABC):
|
@@ -58,6 +59,7 @@ class Transformations(ABC):
|
|
58
59
|
|
59
60
|
"""
|
60
61
|
clean_df = self._remove_trailing_whitespace(data)
|
62
|
+
# clean_df = self._normalize_column_names(clean_df)
|
61
63
|
if self.name == "historical_data":
|
62
64
|
self._check_historical_dataset(clean_df)
|
63
65
|
clean_df = self._set_series_id_column(clean_df)
|
@@ -95,8 +97,11 @@ class Transformations(ABC):
|
|
95
97
|
def _remove_trailing_whitespace(self, df):
|
96
98
|
return df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
|
97
99
|
|
100
|
+
# def _normalize_column_names(self, df):
|
101
|
+
# return df.rename(columns=lambda x: re.sub("[^A-Za-z0-9_]+", "", x))
|
102
|
+
|
98
103
|
def _set_series_id_column(self, df):
|
99
|
-
self._target_category_columns_map =
|
104
|
+
self._target_category_columns_map = {}
|
100
105
|
if not self.target_category_columns:
|
101
106
|
df[DataColumns.Series] = "Series 1"
|
102
107
|
self.has_artificial_series = True
|
@@ -125,10 +130,10 @@ class Transformations(ABC):
|
|
125
130
|
df[self.dt_column_name] = pd.to_datetime(
|
126
131
|
df[self.dt_column_name], format=self.dt_column_format
|
127
132
|
)
|
128
|
-
except:
|
133
|
+
except Exception as ee:
|
129
134
|
raise InvalidParameterError(
|
130
135
|
f"Unable to determine the datetime type for column: {self.dt_column_name} in dataset: {self.name}. Please specify the format explicitly. (For example adding 'format: %d/%m/%Y' underneath 'name: {self.dt_column_name}' in the datetime_column section of the yaml file if you haven't already. For reference, here is the first datetime given: {df[self.dt_column_name].values[0]}"
|
131
|
-
)
|
136
|
+
) from ee
|
132
137
|
return df
|
133
138
|
|
134
139
|
def _set_multi_index(self, df):
|
@@ -242,7 +247,6 @@ class Transformations(ABC):
|
|
242
247
|
"Class": "A",
|
243
248
|
"Num": 2
|
244
249
|
},
|
245
|
-
|
246
250
|
}
|
247
251
|
"""
|
248
252
|
|
@@ -1,42 +1,32 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# -*- coding: utf-8 -*--
|
3
2
|
|
4
3
|
# Copyright (c) 2024 Oracle and/or its affiliates.
|
5
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
5
|
|
7
|
-
import argparse
|
8
6
|
import logging
|
9
7
|
import os
|
10
8
|
import shutil
|
11
9
|
import sys
|
12
10
|
import tempfile
|
13
|
-
import
|
14
|
-
from string import Template
|
15
|
-
from typing import Any, Dict, List, Tuple
|
16
|
-
import pandas as pd
|
17
|
-
from ads.opctl import logger
|
18
|
-
import oracledb
|
11
|
+
from typing import List, Union
|
19
12
|
|
20
13
|
import fsspec
|
21
|
-
import
|
22
|
-
|
14
|
+
import oracledb
|
15
|
+
import pandas as pd
|
23
16
|
|
17
|
+
from ads.common.object_storage_details import ObjectStorageDetails
|
24
18
|
from ads.opctl import logger
|
19
|
+
from ads.opctl.operator.common.operator_config import OutputDirectory
|
25
20
|
from ads.opctl.operator.lowcode.common.errors import (
|
26
|
-
InputDataError,
|
27
21
|
InvalidParameterError,
|
28
|
-
PermissionsError,
|
29
|
-
DataMismatchError,
|
30
22
|
)
|
31
|
-
from ads.opctl.operator.common.operator_config import OutputDirectory
|
32
|
-
from ads.common.object_storage_details import ObjectStorageDetails
|
33
23
|
from ads.secrets import ADBSecretKeeper
|
34
24
|
|
35
25
|
|
36
26
|
def call_pandas_fsspec(pd_fn, filename, storage_options, **kwargs):
|
37
|
-
if fsspec.utils.get_protocol(filename) == "file"
|
38
|
-
|
39
|
-
|
27
|
+
if fsspec.utils.get_protocol(filename) == "file" or fsspec.utils.get_protocol(
|
28
|
+
filename
|
29
|
+
) in ["http", "https"]:
|
40
30
|
return pd_fn(filename, **kwargs)
|
41
31
|
|
42
32
|
storage_options = storage_options or (
|
@@ -48,7 +38,7 @@ def call_pandas_fsspec(pd_fn, filename, storage_options, **kwargs):
|
|
48
38
|
|
49
39
|
def load_data(data_spec, storage_options=None, **kwargs):
|
50
40
|
if data_spec is None:
|
51
|
-
raise InvalidParameterError(
|
41
|
+
raise InvalidParameterError("No details provided for this data source.")
|
52
42
|
filename = data_spec.url
|
53
43
|
format = data_spec.format
|
54
44
|
columns = data_spec.columns
|
@@ -67,7 +57,7 @@ def load_data(data_spec, storage_options=None, **kwargs):
|
|
67
57
|
if not format:
|
68
58
|
_, format = os.path.splitext(filename)
|
69
59
|
format = format[1:]
|
70
|
-
if format in ["json", "clipboard", "excel", "csv", "feather", "hdf"]:
|
60
|
+
if format in ["json", "clipboard", "excel", "csv", "feather", "hdf", "parquet"]:
|
71
61
|
read_fn = getattr(pd, f"read_{format}")
|
72
62
|
data = call_pandas_fsspec(
|
73
63
|
read_fn, filename, storage_options=storage_options
|
@@ -84,19 +74,31 @@ def load_data(data_spec, storage_options=None, **kwargs):
|
|
84
74
|
with tempfile.TemporaryDirectory() as temp_dir:
|
85
75
|
if vault_secret_id is not None:
|
86
76
|
try:
|
87
|
-
with ADBSecretKeeper.load_secret(
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
77
|
+
with ADBSecretKeeper.load_secret(
|
78
|
+
vault_secret_id, wallet_dir=temp_dir
|
79
|
+
) as adwsecret:
|
80
|
+
if (
|
81
|
+
"wallet_location" in adwsecret
|
82
|
+
and "wallet_location" not in connect_args
|
83
|
+
):
|
84
|
+
shutil.unpack_archive(
|
85
|
+
adwsecret["wallet_location"], temp_dir
|
86
|
+
)
|
87
|
+
connect_args["wallet_location"] = temp_dir
|
88
|
+
if "user_name" in adwsecret and "user" not in connect_args:
|
89
|
+
connect_args["user"] = adwsecret["user_name"]
|
90
|
+
if "password" in adwsecret and "password" not in connect_args:
|
91
|
+
connect_args["password"] = adwsecret["password"]
|
92
|
+
if (
|
93
|
+
"service_name" in adwsecret
|
94
|
+
and "service_name" not in connect_args
|
95
|
+
):
|
96
|
+
connect_args["service_name"] = adwsecret["service_name"]
|
97
97
|
|
98
98
|
except Exception as e:
|
99
|
-
raise Exception(
|
99
|
+
raise Exception(
|
100
|
+
f"Could not retrieve database credentials from vault {vault_secret_id}: {e}"
|
101
|
+
)
|
100
102
|
|
101
103
|
con = oracledb.connect(**connect_args)
|
102
104
|
if table_name is not None:
|
@@ -105,11 +107,11 @@ def load_data(data_spec, storage_options=None, **kwargs):
|
|
105
107
|
data = pd.read_sql(sql, con)
|
106
108
|
else:
|
107
109
|
raise InvalidParameterError(
|
108
|
-
|
110
|
+
"Database `connect_args` provided without sql query or table name. Please specify either `sql` or `table_name`."
|
109
111
|
)
|
110
112
|
else:
|
111
113
|
raise InvalidParameterError(
|
112
|
-
|
114
|
+
"No filename/url provided, and no connect_args provided. Please specify one of these if you want to read data from a file or a database respectively."
|
113
115
|
)
|
114
116
|
if columns:
|
115
117
|
# keep only these columns, done after load because only CSV supports stream filtering
|
@@ -232,7 +234,7 @@ def human_time_friendly(seconds):
|
|
232
234
|
accumulator.append(
|
233
235
|
"{} {}{}".format(int(amount), unit, "" if amount == 1 else "s")
|
234
236
|
)
|
235
|
-
accumulator.append("{
|
237
|
+
accumulator.append(f"{round(seconds, 2)} secs")
|
236
238
|
return ", ".join(accumulator)
|
237
239
|
|
238
240
|
|
@@ -248,9 +250,7 @@ def find_output_dirname(output_dir: OutputDirectory):
|
|
248
250
|
unique_output_dir = f"{output_dir}_{counter}"
|
249
251
|
counter += 1
|
250
252
|
logger.warn(
|
251
|
-
"Since the output directory was not specified, the output will be saved to {} directory."
|
252
|
-
unique_output_dir
|
253
|
-
)
|
253
|
+
f"Since the output directory was not specified, the output will be saved to {unique_output_dir} directory."
|
254
254
|
)
|
255
255
|
return unique_output_dir
|
256
256
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
|
3
3
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
4
|
import logging
|
5
|
+
import os
|
5
6
|
import traceback
|
6
7
|
|
7
8
|
import numpy as np
|
@@ -80,10 +81,17 @@ class AutoMLXOperatorModel(ForecastOperatorBaseModel):
|
|
80
81
|
|
81
82
|
from automlx import Pipeline, init
|
82
83
|
|
84
|
+
cpu_count = os.cpu_count()
|
83
85
|
try:
|
86
|
+
if cpu_count < 4:
|
87
|
+
engine = "local"
|
88
|
+
engine_opts = None
|
89
|
+
else:
|
90
|
+
engine = "ray"
|
91
|
+
engine_opts = ({"ray_setup": {"_temp_dir": "/tmp/ray-temp"}},)
|
84
92
|
init(
|
85
|
-
engine=
|
86
|
-
engine_opts=
|
93
|
+
engine=engine,
|
94
|
+
engine_opts=engine_opts,
|
87
95
|
loglevel=logging.CRITICAL,
|
88
96
|
)
|
89
97
|
except Exception as e:
|
@@ -148,8 +148,9 @@ class ForecastOperatorBaseModel(ABC):
|
|
148
148
|
header_section = rc.Block(
|
149
149
|
rc.Heading("Forecast Report", level=1),
|
150
150
|
rc.Text(
|
151
|
-
f"You selected the {self.spec.model} model.\
|
151
|
+
f"You selected the {self.spec.model} model.\nBased on your dataset, you could have also selected any of the models: {SupportedModels.keys()}."
|
152
152
|
),
|
153
|
+
model_description,
|
153
154
|
rc.Group(
|
154
155
|
rc.Metric(
|
155
156
|
heading="Analysis was completed in ",
|
@@ -11,6 +11,7 @@ from .automlx import AutoMLXOperatorModel
|
|
11
11
|
from .autots import AutoTSOperatorModel
|
12
12
|
from .base_model import ForecastOperatorBaseModel
|
13
13
|
from .forecast_datasets import ForecastDatasets
|
14
|
+
from .ml_forecast import MLForecastOperatorModel
|
14
15
|
from .neuralprophet import NeuralProphetOperatorModel
|
15
16
|
from .prophet import ProphetOperatorModel
|
16
17
|
|
@@ -19,7 +20,7 @@ class UnSupportedModelError(Exception):
|
|
19
20
|
def __init__(self, model_type: str):
|
20
21
|
super().__init__(
|
21
22
|
f"Model: `{model_type}` "
|
22
|
-
f"is not supported. Supported models: {SupportedModels.values}"
|
23
|
+
f"is not supported. Supported models: {SupportedModels.values()}"
|
23
24
|
)
|
24
25
|
|
25
26
|
|
@@ -32,7 +33,7 @@ class ForecastOperatorModelFactory:
|
|
32
33
|
SupportedModels.Prophet: ProphetOperatorModel,
|
33
34
|
SupportedModels.Arima: ArimaOperatorModel,
|
34
35
|
SupportedModels.NeuralProphet: NeuralProphetOperatorModel,
|
35
|
-
|
36
|
+
SupportedModels.LGBForecast: MLForecastOperatorModel,
|
36
37
|
SupportedModels.AutoMLX: AutoMLXOperatorModel,
|
37
38
|
SupportedModels.AutoTS: AutoTSOperatorModel,
|
38
39
|
}
|
@@ -142,6 +142,9 @@ class ProphetOperatorModel(ForecastOperatorBaseModel):
|
|
142
142
|
dt_column=self.spec.datetime_column.name,
|
143
143
|
)
|
144
144
|
|
145
|
+
# if os.environ["OCI__IS_SPARK"]:
|
146
|
+
# pass
|
147
|
+
# else:
|
145
148
|
Parallel(n_jobs=-1, require="sharedmem")(
|
146
149
|
delayed(ProphetOperatorModel._train_model)(
|
147
150
|
self, i, series_id, df, model_kwargs.copy()
|
@@ -354,7 +357,7 @@ class ProphetOperatorModel(ForecastOperatorBaseModel):
|
|
354
357
|
logger.warn(f"Failed to generate Explanations with error: {e}.")
|
355
358
|
logger.debug(f"Full Traceback: {traceback.format_exc()}")
|
356
359
|
|
357
|
-
model_description = (
|
360
|
+
model_description = rc.Text(
|
358
361
|
"Prophet is a procedure for forecasting time series data based on an additive "
|
359
362
|
"model where non-linear trends are fit with yearly, weekly, and daily seasonality, "
|
360
363
|
"plus holiday effects. It works best with time series that have strong seasonal "
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# -*- coding: utf-8 -*--
|
3
2
|
|
4
|
-
# Copyright (c) 2023 Oracle and/or its affiliates.
|
3
|
+
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
|
5
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
5
|
|
7
6
|
import uuid
|
@@ -18,7 +17,7 @@ class UnSupportedDetectorError(Exception):
|
|
18
17
|
def __init__(self, dtype: str):
|
19
18
|
super().__init__(
|
20
19
|
f"Detector: `{dtype}` "
|
21
|
-
f"is not supported. Supported models: {SupportedDetector.values}"
|
20
|
+
f"is not supported. Supported models: {SupportedDetector.values()}"
|
22
21
|
)
|
23
22
|
|
24
23
|
|
@@ -42,7 +41,10 @@ class SpacyDetector(PiiBaseDetector):
|
|
42
41
|
@runtime_dependency(module="scrubadub", install_from=OptionalDependency.PII)
|
43
42
|
@runtime_dependency(module="scrubadub_spacy", install_from=OptionalDependency.PII)
|
44
43
|
def construct(cls, entity, model, **kwargs):
|
45
|
-
|
44
|
+
from scrubadub.filth import Filth
|
45
|
+
from scrubadub_spacy.detectors.spacy import SpacyEntityDetector
|
46
|
+
|
47
|
+
spacy_entity_detector = SpacyEntityDetector(
|
46
48
|
named_entities=[entity],
|
47
49
|
name=f"spacy_{uuid.uuid4()}",
|
48
50
|
model=model,
|
@@ -50,7 +52,7 @@ class SpacyDetector(PiiBaseDetector):
|
|
50
52
|
if entity.upper() not in cls.DEFAULT_SPACY_NAMED_ENTITIES:
|
51
53
|
filth_cls = type(
|
52
54
|
construct_filth_cls_name(entity),
|
53
|
-
(
|
55
|
+
(Filth,),
|
54
56
|
{"type": entity.upper()},
|
55
57
|
)
|
56
58
|
spacy_entity_detector.filth_cls_map[entity.upper()] = filth_cls
|
@@ -61,8 +61,9 @@ class RecommenderOperatorBaseModel(ABC):
|
|
61
61
|
header_section = rc.Block(
|
62
62
|
rc.Heading("Recommender Report", level=1),
|
63
63
|
rc.Text(
|
64
|
-
f"The recommendations was generated using {SupportedModels.SVD.upper()}.
|
64
|
+
f"The recommendations was generated using {SupportedModels.SVD.upper()}."
|
65
65
|
),
|
66
|
+
model_description,
|
66
67
|
rc.Group(
|
67
68
|
rc.Metric(
|
68
69
|
heading="Recommendations was generated in ",
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
|
-
# -*- coding: utf-8 -*--
|
3
2
|
|
4
|
-
# Copyright (c) 2023 Oracle and/or its affiliates.
|
3
|
+
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
|
5
4
|
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
5
|
|
7
6
|
from ..constant import SupportedModels
|
@@ -10,11 +9,12 @@ from .base_model import RecommenderOperatorBaseModel
|
|
10
9
|
from .recommender_dataset import RecommenderDatasets
|
11
10
|
from .svd import SVDOperatorModel
|
12
11
|
|
12
|
+
|
13
13
|
class UnSupportedModelError(Exception):
|
14
14
|
def __init__(self, model_type: str):
|
15
15
|
super().__init__(
|
16
16
|
f"Model: `{model_type}` "
|
17
|
-
f"is not supported. Supported models: {SupportedModels.values}"
|
17
|
+
f"is not supported. Supported models: {SupportedModels.values()}"
|
18
18
|
)
|
19
19
|
|
20
20
|
|
@@ -23,9 +23,7 @@ class RecommenderOperatorModelFactory:
|
|
23
23
|
The factory class helps to instantiate proper model operator based on the model type.
|
24
24
|
"""
|
25
25
|
|
26
|
-
_MAP = {
|
27
|
-
SupportedModels.SVD: SVDOperatorModel
|
28
|
-
}
|
26
|
+
_MAP = {SupportedModels.SVD: SVDOperatorModel}
|
29
27
|
|
30
28
|
@classmethod
|
31
29
|
def get_model(
|
@@ -78,11 +78,11 @@ class SVDOperatorModel(RecommenderOperatorBaseModel):
|
|
78
78
|
return recommendations_df, metric
|
79
79
|
|
80
80
|
def _generate_report(self):
|
81
|
-
model_description =
|
82
|
-
Singular Value Decomposition (SVD) is a matrix factorization technique used in recommendation systems to
|
83
|
-
decompose a user-item interaction matrix into three constituent matrices. These matrices capture the
|
84
|
-
latent factors that explain the observed interactions.
|
85
|
-
|
81
|
+
model_description = rc.Text(
|
82
|
+
"Singular Value Decomposition (SVD) is a matrix factorization technique used in recommendation systems to \
|
83
|
+
decompose a user-item interaction matrix into three constituent matrices. These matrices capture the \
|
84
|
+
latent factors that explain the observed interactions."
|
85
|
+
)
|
86
86
|
new_user_recommendations = self._get_recommendations(
|
87
87
|
"__new_user__", self.spec.top_k
|
88
88
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: oracle_ads
|
3
|
-
Version: 2.12.
|
3
|
+
Version: 2.12.8
|
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
|
@@ -58,7 +58,7 @@ ads/aqua/model/enums.py,sha256=t8GbK2nblIPm3gClR8W31RmbtTuqpoSzoN4W3JfD6AI,1004
|
|
58
58
|
ads/aqua/model/model.py,sha256=pFG4lkaqtovSpiu3BOCGT7scMtXt4rwup9Rof6Hl_CU,63908
|
59
59
|
ads/aqua/modeldeployment/__init__.py,sha256=RJCfU1yazv3hVWi5rS08QVLTpTwZLnlC8wU8diwFjnM,391
|
60
60
|
ads/aqua/modeldeployment/constants.py,sha256=lJF77zwxmlECljDYjwFAMprAUR_zctZHmawiP-4alLg,296
|
61
|
-
ads/aqua/modeldeployment/deployment.py,sha256=
|
61
|
+
ads/aqua/modeldeployment/deployment.py,sha256=bk58MfjnrUiDUFwjBRJwBR_8b-6z8IuzTts2T0-pK3E,30729
|
62
62
|
ads/aqua/modeldeployment/entities.py,sha256=7aoE2HemsFEvkQynAI4PCfZBcfPJrvbyZeEYvc7OIAA,5111
|
63
63
|
ads/aqua/modeldeployment/inference.py,sha256=JPqzbHJoM-PpIU_Ft9lHudO9_1vFr7OPQ2GHjPoAufU,2142
|
64
64
|
ads/aqua/training/__init__.py,sha256=w2DNWltXtASQgbrHyvKo0gMs5_chZoG-CSDMI4qe7i0,202
|
@@ -632,7 +632,7 @@ ads/opctl/operator/common/operator_config.py,sha256=1OEWqNOj7w4vpnSQ9lLxkGDOM4lI
|
|
632
632
|
ads/opctl/operator/common/operator_loader.py,sha256=fpdrqDyOF9h4lsnGOsdDQsZl1xbdRFtqU6haaQJ15Ls,24146
|
633
633
|
ads/opctl/operator/common/operator_schema.yaml,sha256=kIXKI9GCkwGhkby6THJR2zY6YK0waIgPfPxw85I7aG4,3046
|
634
634
|
ads/opctl/operator/common/operator_yaml_generator.py,sha256=hH6wYj7oDYeAsE1grcIF4K1EE_RhguLXltxPbmB65iQ,5108
|
635
|
-
ads/opctl/operator/common/utils.py,sha256=
|
635
|
+
ads/opctl/operator/common/utils.py,sha256=VC9DLNxipUzwEhkIIL50aQKhh2cjKNm8Nl_pwfXvVM4,5142
|
636
636
|
ads/opctl/operator/common/data/synthetic.csv,sha256=zAxZ7NsWn0CKRWTW6IUKWWwdJs2OY_-yO1Nme_peFY4,769681
|
637
637
|
ads/opctl/operator/lowcode/__init__.py,sha256=sAqmLhogrLXb3xI7dPOj9HmSkpTnLh9wkzysuGd8AXk,204
|
638
638
|
ads/opctl/operator/lowcode/anomaly/MLoperator,sha256=mkf13TlGl64AZtgeNy4PVi81Z-0XEvntW2y7ME8wikw,509
|
@@ -650,8 +650,8 @@ ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py,sha256=zpRRAtbjRgX9H
|
|
650
650
|
ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py,sha256=IT0g6wf2rZI-GFuuOgtESWYTE_D77P8y9YeRZ6ucguQ,5836
|
651
651
|
ads/opctl/operator/lowcode/anomaly/model/automlx.py,sha256=40rY-mVYoLBmDw5uagayRoyYSkjsIY4U4LfyeU11AoA,3469
|
652
652
|
ads/opctl/operator/lowcode/anomaly/model/autots.py,sha256=Ft6bLEXdpIMMDv4lLBzLhC2kRZki7zD9Jnu-LIPDDbw,4154
|
653
|
-
ads/opctl/operator/lowcode/anomaly/model/base_model.py,sha256=
|
654
|
-
ads/opctl/operator/lowcode/anomaly/model/factory.py,sha256=
|
653
|
+
ads/opctl/operator/lowcode/anomaly/model/base_model.py,sha256=RUNyoGPKi09h4zMQ__NNyremGVZKvllH4_5_8ftNVDA,15533
|
654
|
+
ads/opctl/operator/lowcode/anomaly/model/factory.py,sha256=EVYgEGvVTMNFt-tDP6SH3qDoVBAZD3D_Jlw6Xu9zdQU,4148
|
655
655
|
ads/opctl/operator/lowcode/anomaly/model/isolationforest.py,sha256=e_C_I6d6PVojPoHz_D5r8nC_JctTYooVVKFlcX5kkls,2657
|
656
656
|
ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py,sha256=eejgAtxwjGzWJBVdgp0oZHM4NCLAQh-AksGE0YuM7D4,2557
|
657
657
|
ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py,sha256=K8fVcG952bSUkgoXm7uU1jUUyBd8jvHprkbM4a7i_Xs,4329
|
@@ -660,8 +660,8 @@ ads/opctl/operator/lowcode/common/__init__.py,sha256=rZrmh1nho40OCeabXCNWtze-mXi
|
|
660
660
|
ads/opctl/operator/lowcode/common/const.py,sha256=1dUhgup4L_U0s6BSYmgLPpZAe6xqfSHPPoLqW0j46U8,265
|
661
661
|
ads/opctl/operator/lowcode/common/data.py,sha256=nKwE0ubF9fTHFOls5uQ3BBpcPNRtwvGW3UGK-JjAm84,4107
|
662
662
|
ads/opctl/operator/lowcode/common/errors.py,sha256=LvQ_Qzh6cqD6uP91DMFFVXPrcc3010EE8LfBH-CH0ho,1534
|
663
|
-
ads/opctl/operator/lowcode/common/transformations.py,sha256=
|
664
|
-
ads/opctl/operator/lowcode/common/utils.py,sha256=
|
663
|
+
ads/opctl/operator/lowcode/common/transformations.py,sha256=WQsVKmYmPecZTsGvabUDCBzuNJfzpQVSe93nzElRnIc,9804
|
664
|
+
ads/opctl/operator/lowcode/common/utils.py,sha256=XadRZMiIgAUdXw7rDXl4xUPfta9Z_NQsQbDQIR-L73Q,9327
|
665
665
|
ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator,sha256=JO5ulr32WsFnbpk1KN97h8-D70jcFt1kRQ08UMkP4rU,346
|
666
666
|
ads/opctl/operator/lowcode/feature_store_marketplace/README.md,sha256=fN9ROzOPdEZdRgSP_uYvAmD5bD983NC7Irfe_D-mvrw,1356
|
667
667
|
ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py,sha256=rZrmh1nho40OCeabXCNWtze-mXi-PGKetcZdxZSn3_0,204
|
@@ -686,18 +686,18 @@ ads/opctl/operator/lowcode/forecast/environment.yaml,sha256=eVMf9pcjADI14_GRGdZO
|
|
686
686
|
ads/opctl/operator/lowcode/forecast/errors.py,sha256=X9zuV2Lqb5N9FuBHHshOFYyhvng5r9KGLHnQijZ5b8c,911
|
687
687
|
ads/opctl/operator/lowcode/forecast/model_evaluator.py,sha256=HssIlfJlJt5HetwzT87rDeRYRwJAXG1yoSjT4SUB8D0,9266
|
688
688
|
ads/opctl/operator/lowcode/forecast/operator_config.py,sha256=vG7n-RIiazujH0UtJ0uarx9IKDIAS0b4WcCo1dNLVL0,6422
|
689
|
-
ads/opctl/operator/lowcode/forecast/schema.yaml,sha256=
|
689
|
+
ads/opctl/operator/lowcode/forecast/schema.yaml,sha256=r9vll4zNn3maiEXO0aQdt4bQ9l9DmK_Jy7lpidhVubc,10135
|
690
690
|
ads/opctl/operator/lowcode/forecast/utils.py,sha256=B7X3vLxmbx3MyUQxoplhQCMb0bgmPk2g-KN-OY768E8,13908
|
691
691
|
ads/opctl/operator/lowcode/forecast/model/__init__.py,sha256=sAqmLhogrLXb3xI7dPOj9HmSkpTnLh9wkzysuGd8AXk,204
|
692
692
|
ads/opctl/operator/lowcode/forecast/model/arima.py,sha256=lU7NlpXI1-g-O_1rGJLlEL17_ruGXAdzzY7H8nFRvGQ,10943
|
693
|
-
ads/opctl/operator/lowcode/forecast/model/automlx.py,sha256=
|
693
|
+
ads/opctl/operator/lowcode/forecast/model/automlx.py,sha256=lrNktixdaJJHHXqIrSmgzCZKEzB_CirQcuquf73AYUQ,14978
|
694
694
|
ads/opctl/operator/lowcode/forecast/model/autots.py,sha256=Y9_EAfDD5r6SPZq7iGp7YMh-vH0lwAGNpyNT2sm7cqo,13027
|
695
|
-
ads/opctl/operator/lowcode/forecast/model/base_model.py,sha256=
|
696
|
-
ads/opctl/operator/lowcode/forecast/model/factory.py,sha256=
|
695
|
+
ads/opctl/operator/lowcode/forecast/model/base_model.py,sha256=H9yQ1DzyfGqnggEaSWgUJjW_bxml6Kto62gohuEO9y4,31006
|
696
|
+
ads/opctl/operator/lowcode/forecast/model/factory.py,sha256=hSRPPWdpIRSMYPUFMIUuxc2TPZt-SG18MiqhtdfL3mg,3488
|
697
697
|
ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py,sha256=GCwX9Udh4U79wBNG5bjSYabgRDO0u-ElVJkSC_HcBeA,16563
|
698
698
|
ads/opctl/operator/lowcode/forecast/model/ml_forecast.py,sha256=NSZ2L6gRw4S68BUF0Vyu-cUPSsq8LRxgoVajW9Ra63k,9640
|
699
699
|
ads/opctl/operator/lowcode/forecast/model/neuralprophet.py,sha256=rt4106o9qIKwoHnYICB9sOnQ8ujXyI83eoFY26KzsOU,18774
|
700
|
-
ads/opctl/operator/lowcode/forecast/model/prophet.py,sha256=
|
700
|
+
ads/opctl/operator/lowcode/forecast/model/prophet.py,sha256=h3So9XYBZPRNqMvYNpU5bxbHgvwgpspuATALCuIWHeM,14368
|
701
701
|
ads/opctl/operator/lowcode/pii/MLoperator,sha256=GKCuiXRwfGLyBqELbtgtg-kJPtNWNVA-kSprYTqhF64,6406
|
702
702
|
ads/opctl/operator/lowcode/pii/README.md,sha256=2P3tpKv6v__Eehj6iLfTXgyDhS4lmi1BTfEdmJhT0K4,9237
|
703
703
|
ads/opctl/operator/lowcode/pii/__init__.py,sha256=sAqmLhogrLXb3xI7dPOj9HmSkpTnLh9wkzysuGd8AXk,204
|
@@ -710,7 +710,7 @@ ads/opctl/operator/lowcode/pii/operator_config.py,sha256=pXCo97VCq6S7AvfeXW6BUUD
|
|
710
710
|
ads/opctl/operator/lowcode/pii/schema.yaml,sha256=bgXBVJdOZWff_tthQvkuDE1P0KqeYlqbGyGkHNdln0Y,2735
|
711
711
|
ads/opctl/operator/lowcode/pii/utils.py,sha256=z8VBPRURj_62xifxzijDElxvQNszNUmP694MQ2ErLLw,1130
|
712
712
|
ads/opctl/operator/lowcode/pii/model/__init__.py,sha256=sAqmLhogrLXb3xI7dPOj9HmSkpTnLh9wkzysuGd8AXk,204
|
713
|
-
ads/opctl/operator/lowcode/pii/model/factory.py,sha256=
|
713
|
+
ads/opctl/operator/lowcode/pii/model/factory.py,sha256=mM-xifHwVa1tGHcTcvgySUrGsPmIqmOavf8i_dVbkRQ,2502
|
714
714
|
ads/opctl/operator/lowcode/pii/model/guardrails.py,sha256=--GUFt-zlVyJY5WQZNMHjQDlVfVy-tYeXubgvYN-H-U,6246
|
715
715
|
ads/opctl/operator/lowcode/pii/model/pii.py,sha256=hbOomsCNgj7uZNOdUIja3rE-iTGhh9P2hKh8xrtpXR4,5110
|
716
716
|
ads/opctl/operator/lowcode/pii/model/report.py,sha256=vDivP5dWWBoIzDpT1ww2WMBZKybX6DigaPSCW46F__Q,16361
|
@@ -730,10 +730,10 @@ ads/opctl/operator/lowcode/recommender/environment.yaml,sha256=m3jYkrFpkQfL1dpiA
|
|
730
730
|
ads/opctl/operator/lowcode/recommender/operator_config.py,sha256=HE30TuiXbVrC6Uy7G2mw4KU_xRSjzgTQHlMNumQauqE,2920
|
731
731
|
ads/opctl/operator/lowcode/recommender/schema.yaml,sha256=OvaQRc56sOO-NNrF2hYU7JEsD-fNkr2LJwP7Nzj_bo8,6029
|
732
732
|
ads/opctl/operator/lowcode/recommender/utils.py,sha256=-DgqObJ3G54wZw04aLvA9zwI_NUqwgQ7jaPHQP_6Q9g,401
|
733
|
-
ads/opctl/operator/lowcode/recommender/model/base_model.py,sha256=
|
734
|
-
ads/opctl/operator/lowcode/recommender/model/factory.py,sha256=
|
733
|
+
ads/opctl/operator/lowcode/recommender/model/base_model.py,sha256=FwEadpqyETznrrRt1hvgVz_Rn7JiYbiBkCUFaIewajQ,7410
|
734
|
+
ads/opctl/operator/lowcode/recommender/model/factory.py,sha256=L6llG5EUP-yuCbqh8SSk08GONt-91nsplGnynV7DkCs,1768
|
735
735
|
ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py,sha256=QzcfA4Dzp412NCiNhFrJY2Rqbzlmneb1SAb98m_L_ms,870
|
736
|
-
ads/opctl/operator/lowcode/recommender/model/svd.py,sha256=
|
736
|
+
ads/opctl/operator/lowcode/recommender/model/svd.py,sha256=tGi6QccsU_OqrxTjvf6oWY5I3KfVrdjtzM5RwiNzTr0,4372
|
737
737
|
ads/opctl/operator/runtime/__init__.py,sha256=sAqmLhogrLXb3xI7dPOj9HmSkpTnLh9wkzysuGd8AXk,204
|
738
738
|
ads/opctl/operator/runtime/const.py,sha256=FSgllXcXKIRCbYSJiVAP8gZGpH7hGrEf3enYmUBrAIk,522
|
739
739
|
ads/opctl/operator/runtime/container_runtime_schema.yaml,sha256=FU8Jjq1doq1eYW8b5YjlfSmWKnBN-lAuEk289_P9QFU,1235
|
@@ -815,8 +815,8 @@ ads/type_discovery/unknown_detector.py,sha256=yZuYQReO7PUyoWZE7onhhtYaOg6088wf1y
|
|
815
815
|
ads/type_discovery/zipcode_detector.py,sha256=3AlETg_ZF4FT0u914WXvTT3F3Z6Vf51WiIt34yQMRbw,1421
|
816
816
|
ads/vault/__init__.py,sha256=x9tMdDAOdF5iDHk9u2di_K-ze5Nq068x25EWOBoWwqY,245
|
817
817
|
ads/vault/vault.py,sha256=hFBkpYE-Hfmzu1L0sQwUfYcGxpWmgG18JPndRl0NOXI,8624
|
818
|
-
oracle_ads-2.12.
|
819
|
-
oracle_ads-2.12.
|
820
|
-
oracle_ads-2.12.
|
821
|
-
oracle_ads-2.12.
|
822
|
-
oracle_ads-2.12.
|
818
|
+
oracle_ads-2.12.8.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
|
819
|
+
oracle_ads-2.12.8.dist-info/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
|
820
|
+
oracle_ads-2.12.8.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
821
|
+
oracle_ads-2.12.8.dist-info/METADATA,sha256=aKjc1EqBFSoyK7K30kgMzGfqvemx9-25hmyl5mZZ-xU,16282
|
822
|
+
oracle_ads-2.12.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|