oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10rc0__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 +40 -0
- ads/aqua/app.py +507 -0
- ads/aqua/cli.py +96 -0
- ads/aqua/client/__init__.py +3 -0
- ads/aqua/client/client.py +836 -0
- ads/aqua/client/openai_client.py +305 -0
- ads/aqua/common/__init__.py +5 -0
- ads/aqua/common/decorator.py +125 -0
- ads/aqua/common/entities.py +274 -0
- ads/aqua/common/enums.py +134 -0
- ads/aqua/common/errors.py +109 -0
- ads/aqua/common/utils.py +1295 -0
- ads/aqua/config/__init__.py +4 -0
- ads/aqua/config/container_config.py +247 -0
- ads/aqua/config/evaluation/__init__.py +4 -0
- ads/aqua/config/evaluation/evaluation_service_config.py +147 -0
- ads/aqua/config/utils/__init__.py +4 -0
- ads/aqua/config/utils/serializer.py +339 -0
- ads/aqua/constants.py +116 -0
- ads/aqua/data.py +14 -0
- ads/aqua/dummy_data/icon.txt +1 -0
- ads/aqua/dummy_data/oci_model_deployments.json +56 -0
- ads/aqua/dummy_data/oci_models.json +1 -0
- ads/aqua/dummy_data/readme.md +26 -0
- ads/aqua/evaluation/__init__.py +8 -0
- ads/aqua/evaluation/constants.py +53 -0
- ads/aqua/evaluation/entities.py +186 -0
- ads/aqua/evaluation/errors.py +70 -0
- ads/aqua/evaluation/evaluation.py +1814 -0
- ads/aqua/extension/__init__.py +42 -0
- ads/aqua/extension/aqua_ws_msg_handler.py +76 -0
- ads/aqua/extension/base_handler.py +90 -0
- ads/aqua/extension/common_handler.py +121 -0
- ads/aqua/extension/common_ws_msg_handler.py +36 -0
- ads/aqua/extension/deployment_handler.py +381 -0
- ads/aqua/extension/deployment_ws_msg_handler.py +54 -0
- ads/aqua/extension/errors.py +30 -0
- ads/aqua/extension/evaluation_handler.py +129 -0
- ads/aqua/extension/evaluation_ws_msg_handler.py +61 -0
- ads/aqua/extension/finetune_handler.py +96 -0
- ads/aqua/extension/model_handler.py +390 -0
- ads/aqua/extension/models/__init__.py +0 -0
- ads/aqua/extension/models/ws_models.py +145 -0
- ads/aqua/extension/models_ws_msg_handler.py +50 -0
- ads/aqua/extension/ui_handler.py +300 -0
- ads/aqua/extension/ui_websocket_handler.py +130 -0
- ads/aqua/extension/utils.py +133 -0
- ads/aqua/finetuning/__init__.py +7 -0
- ads/aqua/finetuning/constants.py +23 -0
- ads/aqua/finetuning/entities.py +181 -0
- ads/aqua/finetuning/finetuning.py +749 -0
- ads/aqua/model/__init__.py +8 -0
- ads/aqua/model/constants.py +60 -0
- ads/aqua/model/entities.py +385 -0
- ads/aqua/model/enums.py +32 -0
- ads/aqua/model/model.py +2134 -0
- ads/aqua/model/utils.py +52 -0
- ads/aqua/modeldeployment/__init__.py +6 -0
- ads/aqua/modeldeployment/constants.py +10 -0
- ads/aqua/modeldeployment/deployment.py +1315 -0
- ads/aqua/modeldeployment/entities.py +653 -0
- ads/aqua/modeldeployment/utils.py +543 -0
- ads/aqua/resources/gpu_shapes_index.json +94 -0
- ads/aqua/server/__init__.py +4 -0
- ads/aqua/server/__main__.py +24 -0
- ads/aqua/server/app.py +47 -0
- ads/aqua/server/aqua_spec.yml +1291 -0
- ads/aqua/training/__init__.py +4 -0
- ads/aqua/training/exceptions.py +476 -0
- ads/aqua/ui.py +519 -0
- ads/automl/__init__.py +9 -0
- ads/automl/driver.py +330 -0
- ads/automl/provider.py +975 -0
- ads/bds/__init__.py +5 -0
- ads/bds/auth.py +127 -0
- ads/bds/big_data_service.py +255 -0
- ads/catalog/__init__.py +19 -0
- ads/catalog/model.py +1576 -0
- ads/catalog/notebook.py +461 -0
- ads/catalog/project.py +468 -0
- ads/catalog/summary.py +178 -0
- ads/common/__init__.py +11 -0
- ads/common/analyzer.py +65 -0
- ads/common/artifact/.model-ignore +63 -0
- ads/common/artifact/__init__.py +10 -0
- ads/common/auth.py +1122 -0
- ads/common/card_identifier.py +83 -0
- ads/common/config.py +647 -0
- ads/common/data.py +165 -0
- ads/common/decorator/__init__.py +9 -0
- ads/common/decorator/argument_to_case.py +88 -0
- ads/common/decorator/deprecate.py +69 -0
- ads/common/decorator/require_nonempty_arg.py +65 -0
- ads/common/decorator/runtime_dependency.py +178 -0
- ads/common/decorator/threaded.py +97 -0
- ads/common/decorator/utils.py +35 -0
- ads/common/dsc_file_system.py +303 -0
- ads/common/error.py +14 -0
- ads/common/extended_enum.py +81 -0
- ads/common/function/__init__.py +5 -0
- ads/common/function/fn_util.py +142 -0
- ads/common/function/func_conf.yaml +25 -0
- ads/common/ipython.py +76 -0
- ads/common/model.py +679 -0
- ads/common/model_artifact.py +1759 -0
- ads/common/model_artifact_schema.json +107 -0
- ads/common/model_export_util.py +664 -0
- ads/common/model_metadata.py +24 -0
- ads/common/object_storage_details.py +296 -0
- ads/common/oci_client.py +179 -0
- ads/common/oci_datascience.py +46 -0
- ads/common/oci_logging.py +1144 -0
- ads/common/oci_mixin.py +957 -0
- ads/common/oci_resource.py +136 -0
- ads/common/serializer.py +559 -0
- ads/common/utils.py +1852 -0
- ads/common/word_lists.py +1491 -0
- ads/common/work_request.py +189 -0
- ads/config.py +1 -0
- ads/data_labeling/__init__.py +13 -0
- ads/data_labeling/boundingbox.py +253 -0
- ads/data_labeling/constants.py +47 -0
- ads/data_labeling/data_labeling_service.py +244 -0
- ads/data_labeling/interface/__init__.py +5 -0
- ads/data_labeling/interface/loader.py +16 -0
- ads/data_labeling/interface/parser.py +16 -0
- ads/data_labeling/interface/reader.py +23 -0
- ads/data_labeling/loader/__init__.py +5 -0
- ads/data_labeling/loader/file_loader.py +241 -0
- ads/data_labeling/metadata.py +110 -0
- ads/data_labeling/mixin/__init__.py +5 -0
- ads/data_labeling/mixin/data_labeling.py +232 -0
- ads/data_labeling/ner.py +129 -0
- ads/data_labeling/parser/__init__.py +5 -0
- ads/data_labeling/parser/dls_record_parser.py +388 -0
- ads/data_labeling/parser/export_metadata_parser.py +94 -0
- ads/data_labeling/parser/export_record_parser.py +473 -0
- ads/data_labeling/reader/__init__.py +5 -0
- ads/data_labeling/reader/dataset_reader.py +574 -0
- ads/data_labeling/reader/dls_record_reader.py +121 -0
- ads/data_labeling/reader/export_record_reader.py +62 -0
- ads/data_labeling/reader/jsonl_reader.py +75 -0
- ads/data_labeling/reader/metadata_reader.py +203 -0
- ads/data_labeling/reader/record_reader.py +263 -0
- ads/data_labeling/record.py +52 -0
- ads/data_labeling/visualizer/__init__.py +5 -0
- ads/data_labeling/visualizer/image_visualizer.py +525 -0
- ads/data_labeling/visualizer/text_visualizer.py +357 -0
- ads/database/__init__.py +5 -0
- ads/database/connection.py +338 -0
- ads/dataset/__init__.py +10 -0
- ads/dataset/capabilities.md +51 -0
- ads/dataset/classification_dataset.py +339 -0
- ads/dataset/correlation.py +226 -0
- ads/dataset/correlation_plot.py +563 -0
- ads/dataset/dask_series.py +173 -0
- ads/dataset/dataframe_transformer.py +110 -0
- ads/dataset/dataset.py +1979 -0
- ads/dataset/dataset_browser.py +360 -0
- ads/dataset/dataset_with_target.py +995 -0
- ads/dataset/exception.py +25 -0
- ads/dataset/factory.py +987 -0
- ads/dataset/feature_engineering_transformer.py +35 -0
- ads/dataset/feature_selection.py +107 -0
- ads/dataset/forecasting_dataset.py +26 -0
- ads/dataset/helper.py +1450 -0
- ads/dataset/label_encoder.py +99 -0
- ads/dataset/mixin/__init__.py +5 -0
- ads/dataset/mixin/dataset_accessor.py +134 -0
- ads/dataset/pipeline.py +58 -0
- ads/dataset/plot.py +710 -0
- ads/dataset/progress.py +86 -0
- ads/dataset/recommendation.py +297 -0
- ads/dataset/recommendation_transformer.py +502 -0
- ads/dataset/regression_dataset.py +14 -0
- ads/dataset/sampled_dataset.py +1050 -0
- ads/dataset/target.py +98 -0
- ads/dataset/timeseries.py +18 -0
- ads/dbmixin/__init__.py +5 -0
- ads/dbmixin/db_pandas_accessor.py +153 -0
- ads/environment/__init__.py +9 -0
- ads/environment/ml_runtime.py +66 -0
- ads/evaluations/README.md +14 -0
- ads/evaluations/__init__.py +109 -0
- ads/evaluations/evaluation_plot.py +983 -0
- ads/evaluations/evaluator.py +1334 -0
- ads/evaluations/statistical_metrics.py +543 -0
- ads/experiments/__init__.py +9 -0
- ads/experiments/capabilities.md +0 -0
- ads/explanations/__init__.py +21 -0
- ads/explanations/base_explainer.py +142 -0
- ads/explanations/capabilities.md +83 -0
- ads/explanations/explainer.py +190 -0
- ads/explanations/mlx_global_explainer.py +1050 -0
- ads/explanations/mlx_interface.py +386 -0
- ads/explanations/mlx_local_explainer.py +287 -0
- ads/explanations/mlx_whatif_explainer.py +201 -0
- ads/feature_engineering/__init__.py +20 -0
- ads/feature_engineering/accessor/__init__.py +5 -0
- ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
- ads/feature_engineering/accessor/mixin/__init__.py +5 -0
- ads/feature_engineering/accessor/mixin/correlation.py +166 -0
- ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
- ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
- ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
- ads/feature_engineering/accessor/mixin/utils.py +65 -0
- ads/feature_engineering/accessor/series_accessor.py +431 -0
- ads/feature_engineering/adsimage/__init__.py +5 -0
- ads/feature_engineering/adsimage/image.py +192 -0
- ads/feature_engineering/adsimage/image_reader.py +170 -0
- ads/feature_engineering/adsimage/interface/__init__.py +5 -0
- ads/feature_engineering/adsimage/interface/reader.py +19 -0
- ads/feature_engineering/adsstring/__init__.py +7 -0
- ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
- ads/feature_engineering/adsstring/string/__init__.py +8 -0
- ads/feature_engineering/data_schema.json +57 -0
- ads/feature_engineering/dataset/__init__.py +5 -0
- ads/feature_engineering/dataset/zip_code_data.py +42062 -0
- ads/feature_engineering/exceptions.py +40 -0
- ads/feature_engineering/feature_type/__init__.py +133 -0
- ads/feature_engineering/feature_type/address.py +184 -0
- ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
- ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
- ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
- ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
- ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
- ads/feature_engineering/feature_type/adsstring/string.py +258 -0
- ads/feature_engineering/feature_type/base.py +58 -0
- ads/feature_engineering/feature_type/boolean.py +183 -0
- ads/feature_engineering/feature_type/category.py +146 -0
- ads/feature_engineering/feature_type/constant.py +137 -0
- ads/feature_engineering/feature_type/continuous.py +151 -0
- ads/feature_engineering/feature_type/creditcard.py +314 -0
- ads/feature_engineering/feature_type/datetime.py +190 -0
- ads/feature_engineering/feature_type/discrete.py +134 -0
- ads/feature_engineering/feature_type/document.py +43 -0
- ads/feature_engineering/feature_type/gis.py +251 -0
- ads/feature_engineering/feature_type/handler/__init__.py +5 -0
- ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
- ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
- ads/feature_engineering/feature_type/handler/warnings.py +128 -0
- ads/feature_engineering/feature_type/integer.py +142 -0
- ads/feature_engineering/feature_type/ip_address.py +144 -0
- ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
- ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
- ads/feature_engineering/feature_type/lat_long.py +256 -0
- ads/feature_engineering/feature_type/object.py +43 -0
- ads/feature_engineering/feature_type/ordinal.py +132 -0
- ads/feature_engineering/feature_type/phone_number.py +135 -0
- ads/feature_engineering/feature_type/string.py +171 -0
- ads/feature_engineering/feature_type/text.py +93 -0
- ads/feature_engineering/feature_type/unknown.py +43 -0
- ads/feature_engineering/feature_type/zip_code.py +164 -0
- ads/feature_engineering/feature_type_manager.py +406 -0
- ads/feature_engineering/schema.py +795 -0
- ads/feature_engineering/utils.py +245 -0
- ads/feature_store/.readthedocs.yaml +19 -0
- ads/feature_store/README.md +65 -0
- ads/feature_store/__init__.py +9 -0
- ads/feature_store/common/__init__.py +0 -0
- ads/feature_store/common/enums.py +339 -0
- ads/feature_store/common/exceptions.py +18 -0
- ads/feature_store/common/spark_session_singleton.py +125 -0
- ads/feature_store/common/utils/__init__.py +0 -0
- ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
- ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
- ads/feature_store/common/utils/transformation_utils.py +82 -0
- ads/feature_store/common/utils/utility.py +403 -0
- ads/feature_store/data_validation/__init__.py +0 -0
- ads/feature_store/data_validation/great_expectation.py +129 -0
- ads/feature_store/dataset.py +1230 -0
- ads/feature_store/dataset_job.py +530 -0
- ads/feature_store/docs/Dockerfile +7 -0
- ads/feature_store/docs/Makefile +44 -0
- ads/feature_store/docs/conf.py +28 -0
- ads/feature_store/docs/requirements.txt +14 -0
- ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
- ads/feature_store/docs/source/cicd.rst +137 -0
- ads/feature_store/docs/source/conf.py +86 -0
- ads/feature_store/docs/source/data_versioning.rst +33 -0
- ads/feature_store/docs/source/dataset.rst +388 -0
- ads/feature_store/docs/source/dataset_job.rst +27 -0
- ads/feature_store/docs/source/demo.rst +70 -0
- ads/feature_store/docs/source/entity.rst +78 -0
- ads/feature_store/docs/source/feature_group.rst +624 -0
- ads/feature_store/docs/source/feature_group_job.rst +29 -0
- ads/feature_store/docs/source/feature_store.rst +122 -0
- ads/feature_store/docs/source/feature_store_class.rst +123 -0
- ads/feature_store/docs/source/feature_validation.rst +66 -0
- ads/feature_store/docs/source/figures/cicd.png +0 -0
- ads/feature_store/docs/source/figures/data_validation.png +0 -0
- ads/feature_store/docs/source/figures/data_versioning.png +0 -0
- ads/feature_store/docs/source/figures/dataset.gif +0 -0
- ads/feature_store/docs/source/figures/dataset.png +0 -0
- ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
- ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
- ads/feature_store/docs/source/figures/entity.png +0 -0
- ads/feature_store/docs/source/figures/feature_group.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
- ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
- ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
- ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
- ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
- ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
- ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
- ads/feature_store/docs/source/figures/overview.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
- ads/feature_store/docs/source/figures/stats_1.png +0 -0
- ads/feature_store/docs/source/figures/stats_2.png +0 -0
- ads/feature_store/docs/source/figures/stats_d.png +0 -0
- ads/feature_store/docs/source/figures/stats_fg.png +0 -0
- ads/feature_store/docs/source/figures/transformation.png +0 -0
- ads/feature_store/docs/source/figures/transformations.gif +0 -0
- ads/feature_store/docs/source/figures/validation.png +0 -0
- ads/feature_store/docs/source/figures/validation_fg.png +0 -0
- ads/feature_store/docs/source/figures/validation_results.png +0 -0
- ads/feature_store/docs/source/figures/validation_summary.png +0 -0
- ads/feature_store/docs/source/index.rst +81 -0
- ads/feature_store/docs/source/module.rst +8 -0
- ads/feature_store/docs/source/notebook.rst +94 -0
- ads/feature_store/docs/source/overview.rst +47 -0
- ads/feature_store/docs/source/quickstart.rst +176 -0
- ads/feature_store/docs/source/release_notes.rst +194 -0
- ads/feature_store/docs/source/setup_feature_store.rst +81 -0
- ads/feature_store/docs/source/statistics.rst +58 -0
- ads/feature_store/docs/source/transformation.rst +199 -0
- ads/feature_store/docs/source/ui.rst +65 -0
- ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
- ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
- ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
- ads/feature_store/entity.py +718 -0
- ads/feature_store/execution_strategy/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
- ads/feature_store/execution_strategy/engine/__init__.py +0 -0
- ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
- ads/feature_store/execution_strategy/execution_strategy.py +113 -0
- ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
- ads/feature_store/execution_strategy/spark/__init__.py +0 -0
- ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
- ads/feature_store/feature.py +192 -0
- ads/feature_store/feature_group.py +1494 -0
- ads/feature_store/feature_group_expectation.py +346 -0
- ads/feature_store/feature_group_job.py +602 -0
- ads/feature_store/feature_lineage/__init__.py +0 -0
- ads/feature_store/feature_lineage/graphviz_service.py +180 -0
- ads/feature_store/feature_option_details.py +50 -0
- ads/feature_store/feature_statistics/__init__.py +0 -0
- ads/feature_store/feature_statistics/statistics_service.py +99 -0
- ads/feature_store/feature_store.py +699 -0
- ads/feature_store/feature_store_registrar.py +518 -0
- ads/feature_store/input_feature_detail.py +149 -0
- ads/feature_store/mixin/__init__.py +4 -0
- ads/feature_store/mixin/oci_feature_store.py +145 -0
- ads/feature_store/model_details.py +73 -0
- ads/feature_store/query/__init__.py +0 -0
- ads/feature_store/query/filter.py +266 -0
- ads/feature_store/query/generator/__init__.py +0 -0
- ads/feature_store/query/generator/query_generator.py +298 -0
- ads/feature_store/query/join.py +161 -0
- ads/feature_store/query/query.py +403 -0
- ads/feature_store/query/validator/__init__.py +0 -0
- ads/feature_store/query/validator/query_validator.py +57 -0
- ads/feature_store/response/__init__.py +0 -0
- ads/feature_store/response/response_builder.py +68 -0
- ads/feature_store/service/__init__.py +0 -0
- ads/feature_store/service/oci_dataset.py +139 -0
- ads/feature_store/service/oci_dataset_job.py +199 -0
- ads/feature_store/service/oci_entity.py +125 -0
- ads/feature_store/service/oci_feature_group.py +164 -0
- ads/feature_store/service/oci_feature_group_job.py +214 -0
- ads/feature_store/service/oci_feature_store.py +182 -0
- ads/feature_store/service/oci_lineage.py +87 -0
- ads/feature_store/service/oci_transformation.py +104 -0
- ads/feature_store/statistics/__init__.py +0 -0
- ads/feature_store/statistics/abs_feature_value.py +49 -0
- ads/feature_store/statistics/charts/__init__.py +0 -0
- ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
- ads/feature_store/statistics/charts/box_plot.py +148 -0
- ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
- ads/feature_store/statistics/charts/probability_distribution.py +68 -0
- ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
- ads/feature_store/statistics/feature_stat.py +126 -0
- ads/feature_store/statistics/generic_feature_value.py +33 -0
- ads/feature_store/statistics/statistics.py +41 -0
- ads/feature_store/statistics_config.py +101 -0
- ads/feature_store/templates/feature_store_template.yaml +45 -0
- ads/feature_store/transformation.py +499 -0
- ads/feature_store/validation_output.py +57 -0
- ads/hpo/__init__.py +9 -0
- ads/hpo/_imports.py +91 -0
- ads/hpo/ads_search_space.py +439 -0
- ads/hpo/distributions.py +325 -0
- ads/hpo/objective.py +280 -0
- ads/hpo/search_cv.py +1657 -0
- ads/hpo/stopping_criterion.py +75 -0
- ads/hpo/tuner_artifact.py +413 -0
- ads/hpo/utils.py +91 -0
- ads/hpo/validation.py +140 -0
- ads/hpo/visualization/__init__.py +5 -0
- ads/hpo/visualization/_contour.py +23 -0
- ads/hpo/visualization/_edf.py +20 -0
- ads/hpo/visualization/_intermediate_values.py +21 -0
- ads/hpo/visualization/_optimization_history.py +25 -0
- ads/hpo/visualization/_parallel_coordinate.py +169 -0
- ads/hpo/visualization/_param_importances.py +26 -0
- ads/jobs/__init__.py +53 -0
- ads/jobs/ads_job.py +663 -0
- ads/jobs/builders/__init__.py +5 -0
- ads/jobs/builders/base.py +156 -0
- ads/jobs/builders/infrastructure/__init__.py +6 -0
- ads/jobs/builders/infrastructure/base.py +165 -0
- ads/jobs/builders/infrastructure/dataflow.py +1252 -0
- ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
- ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
- ads/jobs/builders/infrastructure/utils.py +65 -0
- ads/jobs/builders/runtimes/__init__.py +5 -0
- ads/jobs/builders/runtimes/artifact.py +338 -0
- ads/jobs/builders/runtimes/base.py +325 -0
- ads/jobs/builders/runtimes/container_runtime.py +242 -0
- ads/jobs/builders/runtimes/python_runtime.py +1016 -0
- ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
- ads/jobs/cli.py +104 -0
- ads/jobs/env_var_parser.py +131 -0
- ads/jobs/extension.py +160 -0
- ads/jobs/schema/__init__.py +5 -0
- ads/jobs/schema/infrastructure_schema.json +116 -0
- ads/jobs/schema/job_schema.json +42 -0
- ads/jobs/schema/runtime_schema.json +183 -0
- ads/jobs/schema/validator.py +141 -0
- ads/jobs/serializer.py +296 -0
- ads/jobs/templates/__init__.py +5 -0
- ads/jobs/templates/container.py +6 -0
- ads/jobs/templates/driver_notebook.py +177 -0
- ads/jobs/templates/driver_oci.py +500 -0
- ads/jobs/templates/driver_python.py +48 -0
- ads/jobs/templates/driver_pytorch.py +852 -0
- ads/jobs/templates/driver_utils.py +615 -0
- ads/jobs/templates/hostname_from_env.c +55 -0
- ads/jobs/templates/oci_metrics.py +181 -0
- ads/jobs/utils.py +104 -0
- ads/llm/__init__.py +28 -0
- ads/llm/autogen/__init__.py +2 -0
- ads/llm/autogen/constants.py +15 -0
- ads/llm/autogen/reports/__init__.py +2 -0
- ads/llm/autogen/reports/base.py +67 -0
- ads/llm/autogen/reports/data.py +103 -0
- ads/llm/autogen/reports/session.py +526 -0
- ads/llm/autogen/reports/templates/chat_box.html +13 -0
- ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
- ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
- ads/llm/autogen/reports/utils.py +56 -0
- ads/llm/autogen/v02/__init__.py +4 -0
- ads/llm/autogen/v02/client.py +295 -0
- ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
- ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
- ads/llm/autogen/v02/loggers/__init__.py +6 -0
- ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
- ads/llm/autogen/v02/loggers/session_logger.py +580 -0
- ads/llm/autogen/v02/loggers/utils.py +86 -0
- ads/llm/autogen/v02/runtime_logging.py +163 -0
- ads/llm/chain.py +268 -0
- ads/llm/chat_template.py +31 -0
- ads/llm/deploy.py +63 -0
- ads/llm/guardrails/__init__.py +5 -0
- ads/llm/guardrails/base.py +442 -0
- ads/llm/guardrails/huggingface.py +44 -0
- ads/llm/langchain/__init__.py +5 -0
- ads/llm/langchain/plugins/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
- ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
- ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
- ads/llm/langchain/plugins/llms/__init__.py +5 -0
- ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
- ads/llm/requirements.txt +3 -0
- ads/llm/serialize.py +219 -0
- ads/llm/serializers/__init__.py +0 -0
- ads/llm/serializers/retrieval_qa.py +153 -0
- ads/llm/serializers/runnable_parallel.py +27 -0
- ads/llm/templates/score_chain.jinja2 +155 -0
- ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
- ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
- ads/model/__init__.py +52 -0
- ads/model/artifact.py +573 -0
- ads/model/artifact_downloader.py +254 -0
- ads/model/artifact_uploader.py +267 -0
- ads/model/base_properties.py +238 -0
- ads/model/common/.model-ignore +66 -0
- ads/model/common/__init__.py +5 -0
- ads/model/common/utils.py +142 -0
- ads/model/datascience_model.py +2635 -0
- ads/model/deployment/__init__.py +20 -0
- ads/model/deployment/common/__init__.py +5 -0
- ads/model/deployment/common/utils.py +308 -0
- ads/model/deployment/model_deployer.py +466 -0
- ads/model/deployment/model_deployment.py +1846 -0
- ads/model/deployment/model_deployment_infrastructure.py +671 -0
- ads/model/deployment/model_deployment_properties.py +493 -0
- ads/model/deployment/model_deployment_runtime.py +838 -0
- ads/model/extractor/__init__.py +5 -0
- ads/model/extractor/automl_extractor.py +74 -0
- ads/model/extractor/embedding_onnx_extractor.py +80 -0
- ads/model/extractor/huggingface_extractor.py +88 -0
- ads/model/extractor/keras_extractor.py +84 -0
- ads/model/extractor/lightgbm_extractor.py +93 -0
- ads/model/extractor/model_info_extractor.py +114 -0
- ads/model/extractor/model_info_extractor_factory.py +105 -0
- ads/model/extractor/pytorch_extractor.py +87 -0
- ads/model/extractor/sklearn_extractor.py +112 -0
- ads/model/extractor/spark_extractor.py +89 -0
- ads/model/extractor/tensorflow_extractor.py +85 -0
- ads/model/extractor/xgboost_extractor.py +94 -0
- ads/model/framework/__init__.py +5 -0
- ads/model/framework/automl_model.py +178 -0
- ads/model/framework/embedding_onnx_model.py +438 -0
- ads/model/framework/huggingface_model.py +399 -0
- ads/model/framework/lightgbm_model.py +266 -0
- ads/model/framework/pytorch_model.py +266 -0
- ads/model/framework/sklearn_model.py +250 -0
- ads/model/framework/spark_model.py +326 -0
- ads/model/framework/tensorflow_model.py +254 -0
- ads/model/framework/xgboost_model.py +258 -0
- ads/model/generic_model.py +3518 -0
- ads/model/model_artifact_boilerplate/README.md +381 -0
- ads/model/model_artifact_boilerplate/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
- ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
- ads/model/model_artifact_boilerplate/score.py +61 -0
- ads/model/model_file_description_schema.json +68 -0
- ads/model/model_introspect.py +331 -0
- ads/model/model_metadata.py +1810 -0
- ads/model/model_metadata_mixin.py +460 -0
- ads/model/model_properties.py +63 -0
- ads/model/model_version_set.py +739 -0
- ads/model/runtime/__init__.py +5 -0
- ads/model/runtime/env_info.py +306 -0
- ads/model/runtime/model_deployment_details.py +37 -0
- ads/model/runtime/model_provenance_details.py +58 -0
- ads/model/runtime/runtime_info.py +81 -0
- ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
- ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
- ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
- ads/model/runtime/utils.py +201 -0
- ads/model/serde/__init__.py +5 -0
- ads/model/serde/common.py +40 -0
- ads/model/serde/model_input.py +547 -0
- ads/model/serde/model_serializer.py +1184 -0
- ads/model/service/__init__.py +5 -0
- ads/model/service/oci_datascience_model.py +1076 -0
- ads/model/service/oci_datascience_model_deployment.py +500 -0
- ads/model/service/oci_datascience_model_version_set.py +176 -0
- ads/model/transformer/__init__.py +5 -0
- ads/model/transformer/onnx_transformer.py +324 -0
- ads/mysqldb/__init__.py +5 -0
- ads/mysqldb/mysql_db.py +227 -0
- ads/opctl/__init__.py +18 -0
- ads/opctl/anomaly_detection.py +11 -0
- ads/opctl/backend/__init__.py +5 -0
- ads/opctl/backend/ads_dataflow.py +353 -0
- ads/opctl/backend/ads_ml_job.py +710 -0
- ads/opctl/backend/ads_ml_pipeline.py +164 -0
- ads/opctl/backend/ads_model_deployment.py +209 -0
- ads/opctl/backend/base.py +146 -0
- ads/opctl/backend/local.py +1053 -0
- ads/opctl/backend/marketplace/__init__.py +9 -0
- ads/opctl/backend/marketplace/helm_helper.py +173 -0
- ads/opctl/backend/marketplace/local_marketplace.py +271 -0
- ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
- ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
- ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
- ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
- ads/opctl/backend/marketplace/models/__init__.py +5 -0
- ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
- ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
- ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
- ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
- ads/opctl/cli.py +707 -0
- ads/opctl/cmds.py +869 -0
- ads/opctl/conda/__init__.py +5 -0
- ads/opctl/conda/cli.py +193 -0
- ads/opctl/conda/cmds.py +749 -0
- ads/opctl/conda/config.yaml +34 -0
- ads/opctl/conda/manifest_template.yaml +13 -0
- ads/opctl/conda/multipart_uploader.py +188 -0
- ads/opctl/conda/pack.py +89 -0
- ads/opctl/config/__init__.py +5 -0
- ads/opctl/config/base.py +57 -0
- ads/opctl/config/diagnostics/__init__.py +5 -0
- ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
- ads/opctl/config/merger.py +255 -0
- ads/opctl/config/resolver.py +297 -0
- ads/opctl/config/utils.py +79 -0
- ads/opctl/config/validator.py +17 -0
- ads/opctl/config/versioner.py +68 -0
- ads/opctl/config/yaml_parsers/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/base.py +58 -0
- ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
- ads/opctl/constants.py +66 -0
- ads/opctl/decorator/__init__.py +5 -0
- ads/opctl/decorator/common.py +129 -0
- ads/opctl/diagnostics/__init__.py +5 -0
- ads/opctl/diagnostics/__main__.py +25 -0
- ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
- ads/opctl/diagnostics/check_requirements.py +144 -0
- ads/opctl/diagnostics/requirement_exception.py +9 -0
- ads/opctl/distributed/README.md +109 -0
- ads/opctl/distributed/__init__.py +5 -0
- ads/opctl/distributed/certificates.py +32 -0
- ads/opctl/distributed/cli.py +207 -0
- ads/opctl/distributed/cmds.py +731 -0
- ads/opctl/distributed/common/__init__.py +5 -0
- ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
- ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
- ads/opctl/distributed/common/cluster_config_helper.py +103 -0
- ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
- ads/opctl/distributed/common/cluster_runner.py +54 -0
- ads/opctl/distributed/common/framework_factory.py +29 -0
- ads/opctl/docker/Dockerfile.job +103 -0
- ads/opctl/docker/Dockerfile.job.arm +107 -0
- ads/opctl/docker/Dockerfile.job.gpu +175 -0
- ads/opctl/docker/base-env.yaml +13 -0
- ads/opctl/docker/cuda.repo +6 -0
- ads/opctl/docker/operator/.dockerignore +0 -0
- ads/opctl/docker/operator/Dockerfile +41 -0
- ads/opctl/docker/operator/Dockerfile.gpu +85 -0
- ads/opctl/docker/operator/cuda.repo +6 -0
- ads/opctl/docker/operator/environment.yaml +8 -0
- ads/opctl/forecast.py +11 -0
- ads/opctl/index.yaml +3 -0
- ads/opctl/model/__init__.py +5 -0
- ads/opctl/model/cli.py +65 -0
- ads/opctl/model/cmds.py +73 -0
- ads/opctl/operator/README.md +4 -0
- ads/opctl/operator/__init__.py +31 -0
- ads/opctl/operator/cli.py +344 -0
- ads/opctl/operator/cmd.py +596 -0
- ads/opctl/operator/common/__init__.py +5 -0
- ads/opctl/operator/common/backend_factory.py +460 -0
- ads/opctl/operator/common/const.py +27 -0
- ads/opctl/operator/common/data/synthetic.csv +16001 -0
- ads/opctl/operator/common/dictionary_merger.py +148 -0
- ads/opctl/operator/common/errors.py +42 -0
- ads/opctl/operator/common/operator_config.py +99 -0
- ads/opctl/operator/common/operator_loader.py +811 -0
- ads/opctl/operator/common/operator_schema.yaml +130 -0
- ads/opctl/operator/common/operator_yaml_generator.py +152 -0
- ads/opctl/operator/common/utils.py +208 -0
- ads/opctl/operator/lowcode/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
- ads/opctl/operator/lowcode/anomaly/README.md +207 -0
- ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
- ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
- ads/opctl/operator/lowcode/anomaly/const.py +167 -0
- ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
- ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
- ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
- ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
- ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
- ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
- ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
- ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
- ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
- ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
- ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
- ads/opctl/operator/lowcode/common/__init__.py +5 -0
- ads/opctl/operator/lowcode/common/const.py +10 -0
- ads/opctl/operator/lowcode/common/data.py +116 -0
- ads/opctl/operator/lowcode/common/errors.py +47 -0
- ads/opctl/operator/lowcode/common/transformations.py +296 -0
- ads/opctl/operator/lowcode/common/utils.py +384 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
- ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
- ads/opctl/operator/lowcode/forecast/README.md +209 -0
- ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
- ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
- ads/opctl/operator/lowcode/forecast/const.py +92 -0
- ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
- ads/opctl/operator/lowcode/forecast/errors.py +26 -0
- ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
- ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
- ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
- ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
- ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
- ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
- ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
- ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
- ads/opctl/operator/lowcode/forecast/model/prophet.py +450 -0
- ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
- ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
- ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
- ads/opctl/operator/lowcode/forecast/utils.py +397 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
- ads/opctl/operator/lowcode/pii/MLoperator +17 -0
- ads/opctl/operator/lowcode/pii/README.md +208 -0
- ads/opctl/operator/lowcode/pii/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/__main__.py +78 -0
- ads/opctl/operator/lowcode/pii/cmd.py +39 -0
- ads/opctl/operator/lowcode/pii/constant.py +84 -0
- ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
- ads/opctl/operator/lowcode/pii/errors.py +27 -0
- ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
- ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
- ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
- ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
- ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
- ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
- ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
- ads/opctl/operator/lowcode/pii/model/report.py +487 -0
- ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
- ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
- ads/opctl/operator/lowcode/pii/utils.py +43 -0
- ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
- ads/opctl/operator/lowcode/recommender/README.md +206 -0
- ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
- ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
- ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
- ads/opctl/operator/lowcode/recommender/constant.py +30 -0
- ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
- ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
- ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
- ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
- ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
- ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
- ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
- ads/opctl/operator/lowcode/recommender/utils.py +13 -0
- ads/opctl/operator/runtime/__init__.py +5 -0
- ads/opctl/operator/runtime/const.py +17 -0
- ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
- ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
- ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/runtime.py +115 -0
- ads/opctl/schema.yaml.yml +36 -0
- ads/opctl/script.py +40 -0
- ads/opctl/spark/__init__.py +5 -0
- ads/opctl/spark/cli.py +43 -0
- ads/opctl/spark/cmds.py +147 -0
- ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
- ads/opctl/utils.py +344 -0
- ads/oracledb/__init__.py +5 -0
- ads/oracledb/oracle_db.py +346 -0
- ads/pipeline/__init__.py +39 -0
- ads/pipeline/ads_pipeline.py +2279 -0
- ads/pipeline/ads_pipeline_run.py +772 -0
- ads/pipeline/ads_pipeline_step.py +605 -0
- ads/pipeline/builders/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/custom_script.py +32 -0
- ads/pipeline/cli.py +119 -0
- ads/pipeline/extension.py +291 -0
- ads/pipeline/schema/__init__.py +5 -0
- ads/pipeline/schema/cs_step_schema.json +35 -0
- ads/pipeline/schema/ml_step_schema.json +31 -0
- ads/pipeline/schema/pipeline_schema.json +71 -0
- ads/pipeline/visualizer/__init__.py +5 -0
- ads/pipeline/visualizer/base.py +570 -0
- ads/pipeline/visualizer/graph_renderer.py +272 -0
- ads/pipeline/visualizer/text_renderer.py +84 -0
- ads/secrets/__init__.py +11 -0
- ads/secrets/adb.py +386 -0
- ads/secrets/auth_token.py +86 -0
- ads/secrets/big_data_service.py +365 -0
- ads/secrets/mysqldb.py +149 -0
- ads/secrets/oracledb.py +160 -0
- ads/secrets/secrets.py +407 -0
- ads/telemetry/__init__.py +7 -0
- ads/telemetry/base.py +69 -0
- ads/telemetry/client.py +122 -0
- ads/telemetry/telemetry.py +257 -0
- ads/templates/dataflow_pyspark.jinja2 +13 -0
- ads/templates/dataflow_sparksql.jinja2 +22 -0
- ads/templates/func.jinja2 +20 -0
- ads/templates/schemas/openapi.json +1740 -0
- ads/templates/score-pkl.jinja2 +173 -0
- ads/templates/score.jinja2 +322 -0
- ads/templates/score_embedding_onnx.jinja2 +202 -0
- ads/templates/score_generic.jinja2 +165 -0
- ads/templates/score_huggingface_pipeline.jinja2 +217 -0
- ads/templates/score_lightgbm.jinja2 +185 -0
- ads/templates/score_onnx.jinja2 +407 -0
- ads/templates/score_onnx_new.jinja2 +473 -0
- ads/templates/score_oracle_automl.jinja2 +185 -0
- ads/templates/score_pyspark.jinja2 +154 -0
- ads/templates/score_pytorch.jinja2 +219 -0
- ads/templates/score_scikit-learn.jinja2 +184 -0
- ads/templates/score_tensorflow.jinja2 +184 -0
- ads/templates/score_xgboost.jinja2 +178 -0
- ads/text_dataset/__init__.py +5 -0
- ads/text_dataset/backends.py +211 -0
- ads/text_dataset/dataset.py +445 -0
- ads/text_dataset/extractor.py +207 -0
- ads/text_dataset/options.py +53 -0
- ads/text_dataset/udfs.py +22 -0
- ads/text_dataset/utils.py +49 -0
- ads/type_discovery/__init__.py +9 -0
- ads/type_discovery/abstract_detector.py +21 -0
- ads/type_discovery/constant_detector.py +41 -0
- ads/type_discovery/continuous_detector.py +54 -0
- ads/type_discovery/credit_card_detector.py +99 -0
- ads/type_discovery/datetime_detector.py +92 -0
- ads/type_discovery/discrete_detector.py +118 -0
- ads/type_discovery/document_detector.py +146 -0
- ads/type_discovery/ip_detector.py +68 -0
- ads/type_discovery/latlon_detector.py +90 -0
- ads/type_discovery/phone_number_detector.py +63 -0
- ads/type_discovery/type_discovery_driver.py +87 -0
- ads/type_discovery/typed_feature.py +594 -0
- ads/type_discovery/unknown_detector.py +41 -0
- ads/type_discovery/zipcode_detector.py +48 -0
- ads/vault/__init__.py +7 -0
- ads/vault/vault.py +237 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/METADATA +150 -149
- oracle_ads-2.13.10rc0.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/entry_points.txt +2 -1
- oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
- oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,199 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import datetime
|
8
|
+
import logging
|
9
|
+
import time
|
10
|
+
|
11
|
+
from feature_store_client.feature_store.models import (
|
12
|
+
CreateDatasetJobDetails,
|
13
|
+
CompleteDatasetJobDetails,
|
14
|
+
DatasetJob,
|
15
|
+
)
|
16
|
+
|
17
|
+
from ads.feature_store.mixin.oci_feature_store import OCIFeatureStoreMixin
|
18
|
+
|
19
|
+
logger = logging.getLogger(__name__)
|
20
|
+
|
21
|
+
SLEEP_INTERVAL = 3
|
22
|
+
|
23
|
+
|
24
|
+
class OCIDatasetJob(OCIFeatureStoreMixin, DatasetJob):
|
25
|
+
"""Represents an OCI Data Science DatasetJob.
|
26
|
+
This class contains all attributes of the `oci.data_science.models.DatasetJob`.
|
27
|
+
The main purpose of this class is to link the `oci.data_science.models.DatasetJob`
|
28
|
+
and the related client methods.
|
29
|
+
Linking the `DatasetJob` (payload) to Create methods.
|
30
|
+
|
31
|
+
The `OCIDatasetJob` can be initialized by unpacking the properties stored in a dictionary:
|
32
|
+
|
33
|
+
.. code-block:: python
|
34
|
+
|
35
|
+
properties = {
|
36
|
+
"compartment_id": "<compartment_ocid>",
|
37
|
+
"display_name": "<dataset_job_display_name>",
|
38
|
+
"description": "<dataset_job_description>",
|
39
|
+
"feature_store_id":"<feature_store_id>",
|
40
|
+
}
|
41
|
+
dataset_job = OCIDatasetJob(**properties)
|
42
|
+
|
43
|
+
The properties can also be OCI REST API payload, in which the keys are in camel format.
|
44
|
+
|
45
|
+
.. code-block:: python
|
46
|
+
|
47
|
+
properties = {
|
48
|
+
"compartment_id": "<compartment_ocid>",
|
49
|
+
"display_name": "<dataset_job_display_name>",
|
50
|
+
"description": "<dataset_job_description>",
|
51
|
+
"feature_store_id":"<feature_store_id>",
|
52
|
+
}
|
53
|
+
dataset_job = OCIDatasetJob(**properties)
|
54
|
+
|
55
|
+
Methods
|
56
|
+
-------
|
57
|
+
create(self) -> "OCIDatasetJob"
|
58
|
+
Creates dataset job.
|
59
|
+
from_id(cls, ocid: str) -> "OCIDatasetJob":
|
60
|
+
Gets existing dataset by Id.
|
61
|
+
Examples
|
62
|
+
--------
|
63
|
+
>>> oci_dataset_job = OCIDatasetJob.from_id("<dataset_job_id>")
|
64
|
+
>>> oci_dataset_job.create()
|
65
|
+
"""
|
66
|
+
|
67
|
+
TERMINAL_STATES = [
|
68
|
+
DatasetJob.LIFECYCLE_STATE_SUCCEEDED,
|
69
|
+
DatasetJob.LIFECYCLE_STATE_FAILED,
|
70
|
+
]
|
71
|
+
|
72
|
+
def __init__(self, **kwargs) -> None:
|
73
|
+
"""Initialize a OCIDatasetJob object.
|
74
|
+
|
75
|
+
Parameters
|
76
|
+
----------
|
77
|
+
kwargs:
|
78
|
+
Same as kwargs in feature_store.models.OCIDatasetJob.
|
79
|
+
Keyword arguments are passed into OCI feature group job model to initialize the properties.
|
80
|
+
|
81
|
+
"""
|
82
|
+
|
83
|
+
super().__init__(**kwargs)
|
84
|
+
|
85
|
+
def create(self) -> "OCIDatasetJob":
|
86
|
+
"""Creates dataset resource.
|
87
|
+
|
88
|
+
Returns
|
89
|
+
-------
|
90
|
+
OCIDatasetJob
|
91
|
+
The `OCIDatasetJob` instance (self), which allows chaining additional method.
|
92
|
+
"""
|
93
|
+
if not self.compartment_id:
|
94
|
+
raise ValueError("The `compartment_id` must be specified.")
|
95
|
+
dataset_job_details = self.to_oci_model(CreateDatasetJobDetails)
|
96
|
+
return self.update_from_oci_model(
|
97
|
+
self.client.create_dataset_job(dataset_job_details).data
|
98
|
+
)
|
99
|
+
|
100
|
+
@property
|
101
|
+
def status(self) -> str:
|
102
|
+
"""Lifecycle status
|
103
|
+
|
104
|
+
Returns
|
105
|
+
-------
|
106
|
+
str
|
107
|
+
Status in a string.
|
108
|
+
"""
|
109
|
+
return self.lifecycle_state
|
110
|
+
|
111
|
+
def watch(self, interval: float = SLEEP_INTERVAL) -> "OCIDatasetJob":
|
112
|
+
"""Watches the dataset job run until it finishes.
|
113
|
+
Before the job start running, this method will output the dataset job run status.
|
114
|
+
Once the job start running, the logs will be streamed until the job is success, failed or cancelled.
|
115
|
+
|
116
|
+
Parameters
|
117
|
+
----------
|
118
|
+
interval : int
|
119
|
+
Time interval in seconds between each request to update the logs.
|
120
|
+
Defaults to 3 (seconds).
|
121
|
+
|
122
|
+
"""
|
123
|
+
|
124
|
+
def stop_condition():
|
125
|
+
"""Stops the log once the job is in a terminal state."""
|
126
|
+
self.sync()
|
127
|
+
if self.lifecycle_state not in self.TERMINAL_STATES:
|
128
|
+
return False
|
129
|
+
# Stop if time_finished is not available.
|
130
|
+
if not self.time_finished:
|
131
|
+
return True
|
132
|
+
# Stop only if time_finished is over 1 minute ago.
|
133
|
+
# This is for the time delay between dataset job run stopped and the logs appear in oci logging.
|
134
|
+
if (
|
135
|
+
datetime.datetime.now(self.time_finished.tzinfo)
|
136
|
+
- datetime.timedelta(minutes=1)
|
137
|
+
> self.time_finished
|
138
|
+
):
|
139
|
+
return True
|
140
|
+
return False
|
141
|
+
|
142
|
+
logger.info(f"Dataset job OCID: {self.job.id}")
|
143
|
+
logger.info(f"Dataset job run OCID: {self.id}")
|
144
|
+
|
145
|
+
status = ""
|
146
|
+
while not stop_condition():
|
147
|
+
status = self._check_and_print_status(status)
|
148
|
+
# Break and stream logs if job has log ID and started.
|
149
|
+
# Otherwise, keep watching the status until job terminates.
|
150
|
+
if self.time_started and self.log_id:
|
151
|
+
break
|
152
|
+
time.sleep(interval)
|
153
|
+
self._check_and_print_status(status)
|
154
|
+
return self
|
155
|
+
|
156
|
+
def _job_run_status_text(self) -> str:
|
157
|
+
details = f", {self.lifecycle_details}" if self.lifecycle_details else ""
|
158
|
+
return f"Job Run {self.lifecycle_state}" + details
|
159
|
+
|
160
|
+
def _check_and_print_status(self, prev_status) -> str:
|
161
|
+
status = self._job_run_status_text()
|
162
|
+
if status != prev_status:
|
163
|
+
if self.lifecycle_state in self.TERMINAL_STATES and self.time_finished:
|
164
|
+
timestamp = self.time_finished
|
165
|
+
else:
|
166
|
+
timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
|
167
|
+
return status
|
168
|
+
|
169
|
+
@classmethod
|
170
|
+
def from_id(cls, id: str) -> "OCIDatasetJob":
|
171
|
+
"""Gets dataset resource by id.
|
172
|
+
|
173
|
+
Parameters
|
174
|
+
----------
|
175
|
+
id: str
|
176
|
+
The id of the dataset resource.
|
177
|
+
|
178
|
+
Returns
|
179
|
+
-------
|
180
|
+
OCIDatasetJob
|
181
|
+
An instance of `OCIDatasetJob`.
|
182
|
+
"""
|
183
|
+
if not id:
|
184
|
+
raise ValueError("DatasetJob id not provided.")
|
185
|
+
return super().from_ocid(id)
|
186
|
+
|
187
|
+
def complete_dataset_job(self) -> "OCIDatasetJob":
|
188
|
+
"""Completes a dataset job.
|
189
|
+
|
190
|
+
Returns
|
191
|
+
-------
|
192
|
+
OCIDatasetJob
|
193
|
+
The `OCIDatasetJob` instance (self).
|
194
|
+
"""
|
195
|
+
return self.update_from_oci_model(
|
196
|
+
self.client.complete_dataset_job(
|
197
|
+
self.id, self.to_oci_model(CompleteDatasetJobDetails)
|
198
|
+
).data
|
199
|
+
)
|
@@ -0,0 +1,125 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import feature_store_client.feature_store as fs
|
8
|
+
from feature_store_client.feature_store.models import (
|
9
|
+
CreateEntityDetails,
|
10
|
+
UpdateEntityDetails,
|
11
|
+
Entity,
|
12
|
+
)
|
13
|
+
|
14
|
+
from ads.feature_store.mixin.oci_feature_store import OCIFeatureStoreMixin
|
15
|
+
import logging
|
16
|
+
|
17
|
+
logger = logging.getLogger(__name__)
|
18
|
+
|
19
|
+
|
20
|
+
class OCIEntity(OCIFeatureStoreMixin, Entity):
|
21
|
+
"""Represents an OCI Data Science Entity.
|
22
|
+
This class contains all attributes of the `oci.data_science.models.Entity`.
|
23
|
+
The main purpose of this class is to link the `oci.data_science.models.Entity`
|
24
|
+
and the related client methods.
|
25
|
+
Linking the `Transformation` (payload) to Create/Update/Get/List/Delete methods.
|
26
|
+
|
27
|
+
The `OCIEntity` can be initialized by unpacking the properties stored in a dictionary:
|
28
|
+
|
29
|
+
.. code-block:: python
|
30
|
+
|
31
|
+
properties = {
|
32
|
+
"compartment_id": "<compartment_ocid>",
|
33
|
+
"name": "<entity_name>",
|
34
|
+
"description": "<entity_description>",
|
35
|
+
"feature_store_id":"<feature_store_id>",
|
36
|
+
}
|
37
|
+
transformation_model = OCIEntity(**properties)
|
38
|
+
|
39
|
+
The properties can also be OCI REST API payload, in which the keys are in camel format.
|
40
|
+
|
41
|
+
.. code-block:: python
|
42
|
+
|
43
|
+
properties = {
|
44
|
+
"compartment_id": "<compartment_ocid>",
|
45
|
+
"name": "<entity_name>",
|
46
|
+
"description": "<entity_description>",
|
47
|
+
"feature_store_id":"<feature_store_id>",
|
48
|
+
}
|
49
|
+
transformation_model = OCIEntity(**properties)
|
50
|
+
|
51
|
+
Methods
|
52
|
+
-------
|
53
|
+
create(self) -> "OCIEntity"
|
54
|
+
Creates entity.
|
55
|
+
delete(self):
|
56
|
+
Deletes entity.
|
57
|
+
from_id(cls, ocid: str) -> "OCIEntity":
|
58
|
+
Gets existing entity by Id.
|
59
|
+
Examples
|
60
|
+
--------
|
61
|
+
>>> oci_entity = OCIEntity.from_id("<entity_id>")
|
62
|
+
>>> oci_entity.delete()
|
63
|
+
"""
|
64
|
+
|
65
|
+
# Overriding default behavior
|
66
|
+
@classmethod
|
67
|
+
def init_client(cls, **kwargs) -> fs.feature_store_client.FeatureStoreClient:
|
68
|
+
client = super().init_client(**kwargs)
|
69
|
+
|
70
|
+
# Define the list entities callable to list the resources
|
71
|
+
cls.OCI_LIST_METHOD = client.list_entities
|
72
|
+
|
73
|
+
return client
|
74
|
+
|
75
|
+
def create(self) -> "OCIEntity":
|
76
|
+
"""Creates entity resource.
|
77
|
+
|
78
|
+
Returns
|
79
|
+
-------
|
80
|
+
OCIEntity
|
81
|
+
The `OCIEntity` instance (self), which allows chaining additional method.
|
82
|
+
"""
|
83
|
+
if not self.compartment_id:
|
84
|
+
raise ValueError("The `compartment_id` must be specified.")
|
85
|
+
entity_details = self.to_oci_model(CreateEntityDetails)
|
86
|
+
return self.update_from_oci_model(
|
87
|
+
self.client.create_entity(entity_details).data
|
88
|
+
)
|
89
|
+
|
90
|
+
def update(self) -> "OCIEntity":
|
91
|
+
"""Updates entity.
|
92
|
+
|
93
|
+
Returns
|
94
|
+
-------
|
95
|
+
OCIEntity
|
96
|
+
The `OCIEntity` instance (self).
|
97
|
+
"""
|
98
|
+
return self.update_from_oci_model(
|
99
|
+
self.client.update_entity(
|
100
|
+
self.id, self.to_oci_model(UpdateEntityDetails)
|
101
|
+
).data
|
102
|
+
)
|
103
|
+
|
104
|
+
@classmethod
|
105
|
+
def from_id(cls, id: str) -> "OCIEntity":
|
106
|
+
"""Gets entity resource by id.
|
107
|
+
|
108
|
+
Parameters
|
109
|
+
----------
|
110
|
+
id: str
|
111
|
+
The id of the entity resource.
|
112
|
+
|
113
|
+
Returns
|
114
|
+
-------
|
115
|
+
OCIEntity
|
116
|
+
An instance of `OCIEntity`.
|
117
|
+
"""
|
118
|
+
if not id:
|
119
|
+
raise ValueError("Entity id not provided.")
|
120
|
+
return super().from_ocid(id)
|
121
|
+
|
122
|
+
def delete(self):
|
123
|
+
"""Removes entity"""
|
124
|
+
|
125
|
+
self.client.delete_entity(self.id)
|
@@ -0,0 +1,164 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import datetime
|
8
|
+
import pandas as pd
|
9
|
+
from ads.common import utils
|
10
|
+
|
11
|
+
from feature_store_client.feature_store.models import (
|
12
|
+
CreateFeatureGroupDetails,
|
13
|
+
UpdateFeatureGroupDetails,
|
14
|
+
FeatureGroup,
|
15
|
+
)
|
16
|
+
|
17
|
+
from ads.feature_store.mixin.oci_feature_store import OCIFeatureStoreMixin
|
18
|
+
|
19
|
+
|
20
|
+
class OCIFeatureGroup(OCIFeatureStoreMixin, FeatureGroup):
|
21
|
+
"""Represents an OCI Data Science feature group.
|
22
|
+
This class contains all attributes of the `oci.data_science.models.FeatureDefinition`.
|
23
|
+
The main purpose of this class is to link the `oci.data_science.models.FeatureDefinition`
|
24
|
+
and the related client methods.
|
25
|
+
Linking the `FeatureGroup` (payload) to Create/Update/Get/List/Delete methods.
|
26
|
+
|
27
|
+
The `OCIFeatureGroup` can be initialized by unpacking the properties stored in a dictionary:
|
28
|
+
|
29
|
+
.. code-block:: python
|
30
|
+
|
31
|
+
properties = {
|
32
|
+
"compartment_id": "<compartment_ocid>",
|
33
|
+
"display_name": "<feature_group_name>",
|
34
|
+
"description": "<feature_group_description>",
|
35
|
+
"feature_store_id": <feature_store_id>
|
36
|
+
"entity_id": "<entity id>",
|
37
|
+
"input_feature_details": "",
|
38
|
+
"primary_keys": []
|
39
|
+
}
|
40
|
+
feature_group = OCIFeatureGroup(**properties)
|
41
|
+
|
42
|
+
The properties can also be OCI REST API payload, in which the keys are in camel format.
|
43
|
+
|
44
|
+
.. code-block:: python
|
45
|
+
|
46
|
+
payload = {
|
47
|
+
"compartmentId": "<compartment_ocid>",
|
48
|
+
"displayName": "<feature_group_name>",
|
49
|
+
"description": "<feature_group_description>",
|
50
|
+
"featureStoreId": <feature_store_id>
|
51
|
+
"entityId": "<entity id>",
|
52
|
+
"inputFeatureDetails": "",
|
53
|
+
"primaryKeys": []
|
54
|
+
}
|
55
|
+
feature_group = OCIFeatureGroup(**payload)
|
56
|
+
|
57
|
+
Methods
|
58
|
+
-------
|
59
|
+
create(self) -> "OCIFeatureGroup"
|
60
|
+
Creates feature group
|
61
|
+
delete(self) -> "OCIFeatureGroup":
|
62
|
+
Deletes feature group
|
63
|
+
update(self) -> "OCIFeatureGroup":
|
64
|
+
Updates feature group
|
65
|
+
from_id(cls, ocid: str) -> "OCIFeatureGroup":
|
66
|
+
Gets feature group by OCID.
|
67
|
+
Examples
|
68
|
+
--------
|
69
|
+
>>> self = OCIFeatureGroup.from_id("<feature_group_id>")
|
70
|
+
>>> self.description = "A brand new description"
|
71
|
+
>>> self.delete()
|
72
|
+
"""
|
73
|
+
|
74
|
+
def create(self) -> "OCIFeatureGroup":
|
75
|
+
"""Creates feature group on OCI Data Science platform
|
76
|
+
|
77
|
+
Returns
|
78
|
+
-------
|
79
|
+
OCIFeatureGroup
|
80
|
+
The OCIFeatureGroup instance (self), which allows chaining additional method.
|
81
|
+
"""
|
82
|
+
if not self.compartment_id:
|
83
|
+
raise ValueError(
|
84
|
+
"`compartment_id` must be specified for the feature group."
|
85
|
+
)
|
86
|
+
|
87
|
+
if not self.feature_store_id:
|
88
|
+
raise ValueError(
|
89
|
+
"`feature_store_id` must be specified for the feature group."
|
90
|
+
)
|
91
|
+
|
92
|
+
if not self.entity_id:
|
93
|
+
raise ValueError("`entity_id` must be specified for the feature group.")
|
94
|
+
|
95
|
+
if not self.name:
|
96
|
+
timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M")
|
97
|
+
self.name = f"feature-group-{timestamp}"
|
98
|
+
|
99
|
+
feature_group_details = self.to_oci_model(CreateFeatureGroupDetails)
|
100
|
+
return self.update_from_oci_model(
|
101
|
+
self.client.create_feature_group(feature_group_details).data
|
102
|
+
)
|
103
|
+
|
104
|
+
def update(self) -> "OCIFeatureGroup":
|
105
|
+
"""Updates feature group.
|
106
|
+
|
107
|
+
Returns
|
108
|
+
-------
|
109
|
+
OCIFeatureGroup
|
110
|
+
The `OCIFeatureGroup` instance (self).
|
111
|
+
"""
|
112
|
+
return self.update_from_oci_model(
|
113
|
+
self.client.update_feature_group(
|
114
|
+
self.to_oci_model(UpdateFeatureGroupDetails), self.id
|
115
|
+
).data
|
116
|
+
)
|
117
|
+
|
118
|
+
def delete(self):
|
119
|
+
"""Removes feature group
|
120
|
+
|
121
|
+
Returns
|
122
|
+
-------
|
123
|
+
None
|
124
|
+
"""
|
125
|
+
self.client.delete_feature_group(self.id)
|
126
|
+
|
127
|
+
def to_df(self):
|
128
|
+
return pd.DataFrame.from_records([self.to_df_record()])
|
129
|
+
|
130
|
+
def to_df_record(self):
|
131
|
+
return {
|
132
|
+
"id": self.id,
|
133
|
+
"name": self.name,
|
134
|
+
"description": self.description,
|
135
|
+
"time_created": self.time_created.strftime(utils.date_format),
|
136
|
+
"time_updated": self.time_updated.strftime(utils.date_format),
|
137
|
+
"lifecycle_state": self.lifecycle_state,
|
138
|
+
"created_by": f"...{self.created_by[-6:]}",
|
139
|
+
"compartment_id": f"...{self.compartment_id[-6:]}",
|
140
|
+
"primary_keys": self.primary_keys,
|
141
|
+
"feature_store_id": self.feature_store_id,
|
142
|
+
"entity_id": self.entity_id,
|
143
|
+
"input_feature_details": self.input_feature_details,
|
144
|
+
"expectation_details": self.expectation_details,
|
145
|
+
"statistics_config": self.statistics_config,
|
146
|
+
}
|
147
|
+
|
148
|
+
@classmethod
|
149
|
+
def from_id(cls, id: str) -> "OCIFeatureGroup":
|
150
|
+
"""Gets feature group resource by id.
|
151
|
+
|
152
|
+
Parameters
|
153
|
+
----------
|
154
|
+
id: str
|
155
|
+
The id of the feature group resource.
|
156
|
+
|
157
|
+
Returns
|
158
|
+
-------
|
159
|
+
OCIFeatureStore
|
160
|
+
An instance of `OCIFeatureStore`.
|
161
|
+
"""
|
162
|
+
if not id:
|
163
|
+
raise ValueError("feature group id not provided.")
|
164
|
+
return super().from_ocid(id)
|
@@ -0,0 +1,214 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import datetime
|
8
|
+
import logging
|
9
|
+
import time
|
10
|
+
|
11
|
+
import feature_store_client.feature_store as fs
|
12
|
+
from feature_store_client.feature_store.models import (
|
13
|
+
CreateFeatureGroupJobDetails,
|
14
|
+
CompleteFeatureGroupJobDetails,
|
15
|
+
FeatureGroupJob,
|
16
|
+
DatasetJob,
|
17
|
+
)
|
18
|
+
|
19
|
+
from ads.feature_store.mixin.oci_feature_store import OCIFeatureStoreMixin
|
20
|
+
|
21
|
+
logger = logging.getLogger(__name__)
|
22
|
+
|
23
|
+
SLEEP_INTERVAL = 3
|
24
|
+
|
25
|
+
|
26
|
+
class OCIFeatureGroupJob(OCIFeatureStoreMixin, FeatureGroupJob):
|
27
|
+
"""Represents an OCI Data Science FeatureGroupJob.
|
28
|
+
This class contains all attributes of the `oci.data_science.models.FeatureGroupJob`.
|
29
|
+
The main purpose of this class is to link the `oci.data_science.models.FeatureGroupJob`
|
30
|
+
and the related client methods.
|
31
|
+
Linking the `FeatureGroupJob` (payload) to Create methods.
|
32
|
+
|
33
|
+
The `OCIFeatureGroupJob` can be initialized by unpacking the properties stored in a dictionary:
|
34
|
+
|
35
|
+
.. code-block:: python
|
36
|
+
|
37
|
+
properties = {
|
38
|
+
"compartment_id": "<compartment_ocid>",
|
39
|
+
"display_name": "<feature_definition_job_display_name>",
|
40
|
+
"description": "<feature_definition_job_description>",
|
41
|
+
"feature_store_id":"<feature_store_id>",
|
42
|
+
}
|
43
|
+
feature_definition_job = OCIFeatureGroupJob(**properties)
|
44
|
+
|
45
|
+
The properties can also be OCI REST API payload, in which the keys are in camel format.
|
46
|
+
|
47
|
+
.. code-block:: python
|
48
|
+
|
49
|
+
properties = {
|
50
|
+
"compartment_id": "<compartment_ocid>",
|
51
|
+
"display_name": "<feature_definition_job_display_name>",
|
52
|
+
"description": "<feature_definition_job_description>",
|
53
|
+
"feature_store_id":"<feature_store_id>",
|
54
|
+
}
|
55
|
+
feature_definition_job = OCIFeatureGroupJob(**properties)
|
56
|
+
|
57
|
+
Methods
|
58
|
+
-------
|
59
|
+
create(self) -> "OCIFeatureGroupJob"
|
60
|
+
Creates feature definition job.
|
61
|
+
from_id(cls, ocid: str) -> "OCIFeatureGroupJob":
|
62
|
+
Gets existing feature definition run by Id.
|
63
|
+
Examples
|
64
|
+
--------
|
65
|
+
>>> oci_feature_definition_job = OCIFeatureGroupJob.from_id("<feature_definition_job_id>")
|
66
|
+
>>> oci_feature_definition_job.create()
|
67
|
+
"""
|
68
|
+
|
69
|
+
TERMINAL_STATES = [
|
70
|
+
DatasetJob.LIFECYCLE_STATE_SUCCEEDED,
|
71
|
+
DatasetJob.LIFECYCLE_STATE_FAILED,
|
72
|
+
]
|
73
|
+
|
74
|
+
def __init__(self, **kwargs) -> None:
|
75
|
+
"""Initialize a OCIFeatureGroupJob object.
|
76
|
+
|
77
|
+
Parameters
|
78
|
+
----------
|
79
|
+
kwargs:
|
80
|
+
Same as kwargs in feature_store.models.OCIFeatureGroupJob.
|
81
|
+
Keyword arguments are passed into OCI feature group job model to initialize the properties.
|
82
|
+
|
83
|
+
"""
|
84
|
+
|
85
|
+
super().__init__(**kwargs)
|
86
|
+
|
87
|
+
# Overriding default behavior
|
88
|
+
@classmethod
|
89
|
+
def init_client(cls, **kwargs) -> fs.feature_store_client.FeatureStoreClient:
|
90
|
+
client = super().init_client(**kwargs)
|
91
|
+
|
92
|
+
# Define the list entities callable to list the resources
|
93
|
+
cls.OCI_LIST_METHOD = client.list_feature_group_jobs
|
94
|
+
|
95
|
+
return client
|
96
|
+
|
97
|
+
def create(self) -> "OCIFeatureGroupJob":
|
98
|
+
"""Creates feature definition resource.
|
99
|
+
|
100
|
+
Returns
|
101
|
+
-------
|
102
|
+
OCIFeatureGroupJob
|
103
|
+
The `OCIFeatureGroupJob` instance (self), which allows chaining additional method.
|
104
|
+
"""
|
105
|
+
if not self.compartment_id:
|
106
|
+
raise ValueError("The `compartment_id` must be specified.")
|
107
|
+
feature_definition_job_details = self.to_oci_model(CreateFeatureGroupJobDetails)
|
108
|
+
return self.update_from_oci_model(
|
109
|
+
self.client.create_feature_group_job(feature_definition_job_details).data
|
110
|
+
)
|
111
|
+
|
112
|
+
@property
|
113
|
+
def status(self) -> str:
|
114
|
+
"""Lifecycle status
|
115
|
+
|
116
|
+
Returns
|
117
|
+
-------
|
118
|
+
str
|
119
|
+
Status in a string.
|
120
|
+
"""
|
121
|
+
return self.lifecycle_state
|
122
|
+
|
123
|
+
def _job_run_status_text(self) -> str:
|
124
|
+
details = f", {self.lifecycle_details}" if self.lifecycle_details else ""
|
125
|
+
return f"Job Run {self.lifecycle_state}" + details
|
126
|
+
|
127
|
+
def watch(self, interval: float = SLEEP_INTERVAL) -> "OCIFeatureGroupJob":
|
128
|
+
"""Watches the feature definition job run until it finishes.
|
129
|
+
Before the job start running, this method will output the feature definition job run status.
|
130
|
+
Once the job start running, the logs will be streamed until the job is success, failed or cancelled.
|
131
|
+
|
132
|
+
Parameters
|
133
|
+
----------
|
134
|
+
interval : int
|
135
|
+
Time interval in seconds between each request to update the logs.
|
136
|
+
Defaults to 3 (seconds).
|
137
|
+
"""
|
138
|
+
|
139
|
+
def stop_condition():
|
140
|
+
"""Stops the log once the job is in a terminal state."""
|
141
|
+
self.sync()
|
142
|
+
if self.lifecycle_state not in self.TERMINAL_STATES:
|
143
|
+
return False
|
144
|
+
# Stop if time_finished is not available.
|
145
|
+
if not self.time_finished:
|
146
|
+
return True
|
147
|
+
# Stop only if time_finished is over 1 minute ago.
|
148
|
+
# This is for the time delay between feature definition job run stopped and the logs appear in oci logging.
|
149
|
+
if (
|
150
|
+
datetime.datetime.now(self.time_finished.tzinfo)
|
151
|
+
- datetime.timedelta(minutes=1)
|
152
|
+
> self.time_finished
|
153
|
+
):
|
154
|
+
return True
|
155
|
+
return False
|
156
|
+
|
157
|
+
logger.info(f"Feature definition job OCID: {self.job.id}")
|
158
|
+
logger.info(f"Feature definition job run OCID: {self.id}")
|
159
|
+
|
160
|
+
status = ""
|
161
|
+
while not stop_condition():
|
162
|
+
status = self._check_and_print_status(status)
|
163
|
+
# Break and stream logs if job has log ID and started.
|
164
|
+
# Otherwise, keep watching the status until job terminates.
|
165
|
+
if self.time_started and self.log_id:
|
166
|
+
break
|
167
|
+
time.sleep(interval)
|
168
|
+
self._check_and_print_status(status)
|
169
|
+
return self
|
170
|
+
|
171
|
+
def _check_and_print_status(self, prev_status) -> str:
|
172
|
+
status = self._job_run_status_text()
|
173
|
+
if status != prev_status:
|
174
|
+
if self.lifecycle_state in self.TERMINAL_STATES and self.time_finished:
|
175
|
+
timestamp = self.time_finished
|
176
|
+
else:
|
177
|
+
timestamp = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
|
178
|
+
return status
|
179
|
+
|
180
|
+
def complete_feature_group_job(self) -> "OCIFeatureGroupJob":
|
181
|
+
"""Completes a feature group job.
|
182
|
+
|
183
|
+
Returns
|
184
|
+
-------
|
185
|
+
OCIFeatureGroupJob
|
186
|
+
The `OCIFeatureGroupJob` instance (self).
|
187
|
+
"""
|
188
|
+
return self.update_from_oci_model(
|
189
|
+
self.client.complete_feature_group_job(
|
190
|
+
self.id, self.to_oci_model(CompleteFeatureGroupJobDetails)
|
191
|
+
).data
|
192
|
+
)
|
193
|
+
|
194
|
+
@classmethod
|
195
|
+
def from_id(cls, id: str) -> "OCIFeatureGroupJob":
|
196
|
+
"""Gets feature definition resource by id.
|
197
|
+
|
198
|
+
Parameters
|
199
|
+
----------
|
200
|
+
id: str
|
201
|
+
The id of the feature definition resource.
|
202
|
+
|
203
|
+
Returns
|
204
|
+
-------
|
205
|
+
OCIFeatureGroupJob
|
206
|
+
An instance of `OCIFeatureGroupJob`.
|
207
|
+
"""
|
208
|
+
if not id:
|
209
|
+
raise ValueError("FeatureGroupJob id not provided.")
|
210
|
+
return super().from_ocid(id)
|
211
|
+
|
212
|
+
def __repr__(self) -> str:
|
213
|
+
"""Displays the object as YAML."""
|
214
|
+
return self.to_yaml()
|