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,254 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2022, 2024 Oracle and/or its affiliates.
|
4
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
|
6
|
+
import os
|
7
|
+
import shutil
|
8
|
+
import uuid
|
9
|
+
from abc import ABC, abstractmethod
|
10
|
+
from typing import Dict, Optional
|
11
|
+
from zipfile import ZipFile
|
12
|
+
|
13
|
+
from ads.common import utils
|
14
|
+
from ads.common.object_storage_details import ObjectStorageDetails
|
15
|
+
from ads.common.utils import extract_region
|
16
|
+
from ads.model.service.oci_datascience_model import OCIDataScienceModel
|
17
|
+
|
18
|
+
|
19
|
+
class ArtifactDownloader(ABC):
|
20
|
+
"""The abstract class to download model artifacts."""
|
21
|
+
|
22
|
+
PROGRESS_STEPS_COUNT = 1
|
23
|
+
|
24
|
+
def __init__(
|
25
|
+
self,
|
26
|
+
dsc_model: OCIDataScienceModel,
|
27
|
+
target_dir: str,
|
28
|
+
force_overwrite: Optional[bool] = False,
|
29
|
+
):
|
30
|
+
"""Initializes `ArtifactDownloader` instance.
|
31
|
+
|
32
|
+
Parameters
|
33
|
+
----------
|
34
|
+
dsc_model: OCIDataScienceModel
|
35
|
+
The data scince model instance.
|
36
|
+
target_dir: str
|
37
|
+
The target location of model after download.
|
38
|
+
force_overwrite: bool
|
39
|
+
Overwrite target_dir if exists.
|
40
|
+
"""
|
41
|
+
self.dsc_model = dsc_model
|
42
|
+
self.target_dir = target_dir
|
43
|
+
self.force_overwrite = force_overwrite
|
44
|
+
self.progress = None
|
45
|
+
|
46
|
+
def download(self):
|
47
|
+
"""Downloads model artifacts.
|
48
|
+
|
49
|
+
Returns
|
50
|
+
-------
|
51
|
+
None
|
52
|
+
|
53
|
+
Raises
|
54
|
+
------
|
55
|
+
ValueError
|
56
|
+
If target directory does not exist.
|
57
|
+
"""
|
58
|
+
if os.path.exists(self.target_dir) and len(os.listdir(self.target_dir)) > 0:
|
59
|
+
if not self.force_overwrite:
|
60
|
+
raise ValueError(
|
61
|
+
f"The `{self.target_dir}` directory already exists. "
|
62
|
+
"Set `force_overwrite` to `True` if you wish to overwrite."
|
63
|
+
)
|
64
|
+
shutil.rmtree(self.target_dir)
|
65
|
+
os.makedirs(self.target_dir, exist_ok=True)
|
66
|
+
with utils.get_progress_bar(
|
67
|
+
ArtifactDownloader.PROGRESS_STEPS_COUNT + self.PROGRESS_STEPS_COUNT
|
68
|
+
) as progress:
|
69
|
+
self.progress = progress
|
70
|
+
self._download()
|
71
|
+
self.progress.update(
|
72
|
+
"Downloading model artifacts has been successfully completed."
|
73
|
+
)
|
74
|
+
self.progress.update("Done.")
|
75
|
+
|
76
|
+
@abstractmethod
|
77
|
+
def _download(self):
|
78
|
+
"""Downloads model artifacts."""
|
79
|
+
|
80
|
+
|
81
|
+
class SmallArtifactDownloader(ArtifactDownloader):
|
82
|
+
PROGRESS_STEPS_COUNT = 3
|
83
|
+
|
84
|
+
def _download(self):
|
85
|
+
"""Downloads model artifacts."""
|
86
|
+
self.progress.update("Importing model artifacts from catalog")
|
87
|
+
|
88
|
+
artifact_info = self.dsc_model.get_artifact_info()
|
89
|
+
artifact_name = artifact_info["Content-Disposition"].replace(
|
90
|
+
"attachment; filename=", ""
|
91
|
+
)
|
92
|
+
_, file_extension = os.path.splitext(artifact_name)
|
93
|
+
file_extension = file_extension.lower() if file_extension else ".zip"
|
94
|
+
|
95
|
+
file_content = self.dsc_model.get_model_artifact_content()
|
96
|
+
self.progress.update("Copying model artifacts to the artifact directory")
|
97
|
+
|
98
|
+
file_name = (
|
99
|
+
"model_description" if file_extension == ".json" else str(uuid.uuid4())
|
100
|
+
)
|
101
|
+
artifact_file_path = os.path.join(
|
102
|
+
self.target_dir, f"{file_name}{file_extension}"
|
103
|
+
)
|
104
|
+
with open(artifact_file_path, "wb") as _file:
|
105
|
+
_file.write(file_content)
|
106
|
+
|
107
|
+
if file_extension == ".zip":
|
108
|
+
self.progress.update("Extracting model artifacts")
|
109
|
+
with ZipFile(artifact_file_path) as _file:
|
110
|
+
_file.extractall(self.target_dir)
|
111
|
+
utils.remove_file(artifact_file_path)
|
112
|
+
|
113
|
+
|
114
|
+
class LargeArtifactDownloader(ArtifactDownloader):
|
115
|
+
PROGRESS_STEPS_COUNT = 4
|
116
|
+
|
117
|
+
def __init__(
|
118
|
+
self,
|
119
|
+
dsc_model: OCIDataScienceModel,
|
120
|
+
target_dir: str,
|
121
|
+
auth: Optional[Dict] = None,
|
122
|
+
force_overwrite: Optional[bool] = False,
|
123
|
+
region: Optional[str] = None,
|
124
|
+
bucket_uri: Optional[str] = None,
|
125
|
+
overwrite_existing_artifact: Optional[bool] = True,
|
126
|
+
remove_existing_artifact: Optional[bool] = True,
|
127
|
+
model_file_description: Optional[dict] = None,
|
128
|
+
):
|
129
|
+
"""Initializes `LargeArtifactDownloader` instance.
|
130
|
+
|
131
|
+
Parameters
|
132
|
+
----------
|
133
|
+
dsc_model: OCIDataScienceModel
|
134
|
+
The data scince model instance.
|
135
|
+
target_dir: str
|
136
|
+
The target location of model after download.
|
137
|
+
auth: (Dict, optional). Defaults to `None`.
|
138
|
+
The default authetication is set using `ads.set_auth` API.
|
139
|
+
If you need to override the default, use the `ads.common.auth.api_keys` or
|
140
|
+
`ads.common.auth.resource_principal` to create appropriate authentication signer
|
141
|
+
and kwargs required to instantiate IdentityClient object.
|
142
|
+
force_overwrite: (bool, optional). Defaults to `False`.
|
143
|
+
Overwrite target_dir if exists.
|
144
|
+
region: (str, optional). Defaults to `None`.
|
145
|
+
The destination Object Storage bucket region.
|
146
|
+
By default the value will be extracted from the `OCI_REGION_METADATA` environment variables.
|
147
|
+
bucket_uri: (str, optional). Defaults to None.
|
148
|
+
The OCI Object Storage URI where model artifacts will be copied to.
|
149
|
+
The `bucket_uri` is only necessary for uploading large artifacts which
|
150
|
+
size is greater than 2GB. Example: `oci://<bucket_name>@<namespace>/prefix/`.
|
151
|
+
overwrite_existing_artifact: (bool, optional). Defaults to `True`.
|
152
|
+
Overwrite target bucket artifact if exists.
|
153
|
+
remove_existing_artifact: (bool, optional). Defaults to `True`.
|
154
|
+
Wether artifacts uploaded to object storage bucket need to be removed or not.
|
155
|
+
model_file_description: (dict, optional). Defaults to None.
|
156
|
+
Contains object path details for models created by reference.
|
157
|
+
|
158
|
+
"""
|
159
|
+
super().__init__(
|
160
|
+
dsc_model=dsc_model, target_dir=target_dir, force_overwrite=force_overwrite
|
161
|
+
)
|
162
|
+
self.auth = auth or dsc_model.auth
|
163
|
+
self.region = region or extract_region(self.auth)
|
164
|
+
self.bucket_uri = bucket_uri
|
165
|
+
self.overwrite_existing_artifact = overwrite_existing_artifact
|
166
|
+
self.remove_existing_artifact = remove_existing_artifact
|
167
|
+
self.model_file_description = model_file_description
|
168
|
+
|
169
|
+
def _download(self):
|
170
|
+
"""Downloads model artifacts."""
|
171
|
+
self.progress.update("Importing model artifacts from catalog")
|
172
|
+
|
173
|
+
if (
|
174
|
+
self.dsc_model.is_model_created_by_reference()
|
175
|
+
and self.model_file_description
|
176
|
+
):
|
177
|
+
self.download_from_model_file_description()
|
178
|
+
self.progress.update()
|
179
|
+
return
|
180
|
+
|
181
|
+
bucket_uri = self.bucket_uri
|
182
|
+
|
183
|
+
if not os.path.basename(bucket_uri):
|
184
|
+
bucket_uri = os.path.join(bucket_uri, f"{self.dsc_model.id}.zip")
|
185
|
+
elif not bucket_uri.lower().endswith(".zip"):
|
186
|
+
bucket_uri = f"{bucket_uri}.zip"
|
187
|
+
|
188
|
+
self.dsc_model.import_model_artifact(bucket_uri=bucket_uri, region=self.region)
|
189
|
+
self.progress.update("Copying model artifacts to the artifact directory")
|
190
|
+
zip_file_path = os.path.join(self.target_dir, f"{str(uuid.uuid4())}.zip")
|
191
|
+
zip_file_path = utils.copy_file(
|
192
|
+
uri_src=bucket_uri,
|
193
|
+
uri_dst=zip_file_path,
|
194
|
+
auth=self.auth,
|
195
|
+
progressbar_description="Copying model artifacts to the artifact directory",
|
196
|
+
)
|
197
|
+
self.progress.update("Extracting model artifacts")
|
198
|
+
with ZipFile(zip_file_path) as zip_file:
|
199
|
+
zip_file.extractall(self.target_dir)
|
200
|
+
|
201
|
+
utils.remove_file(zip_file_path)
|
202
|
+
if self.remove_existing_artifact:
|
203
|
+
self.progress.update(
|
204
|
+
"Removing temporary artifacts from the Object Storage bucket"
|
205
|
+
)
|
206
|
+
utils.remove_file(bucket_uri)
|
207
|
+
else:
|
208
|
+
self.progress.update()
|
209
|
+
|
210
|
+
def download_from_model_file_description(self):
|
211
|
+
"""Helper function to download the objects using model file description content to the target directory."""
|
212
|
+
|
213
|
+
models = self.model_file_description["models"]
|
214
|
+
total_size = 0
|
215
|
+
|
216
|
+
for model in models:
|
217
|
+
namespace, bucket_name, prefix = (
|
218
|
+
model["namespace"],
|
219
|
+
model["bucketName"],
|
220
|
+
model["prefix"],
|
221
|
+
)
|
222
|
+
bucket_uri = f"oci://{bucket_name}@{namespace}/{prefix}"
|
223
|
+
|
224
|
+
message = f"Copying model artifacts by reference from {bucket_uri} to {self.target_dir}"
|
225
|
+
self.progress.update(message)
|
226
|
+
|
227
|
+
objects = model["objects"]
|
228
|
+
os_details_list = list()
|
229
|
+
|
230
|
+
for obj in objects:
|
231
|
+
name = obj["name"]
|
232
|
+
version = None if obj["version"] == "" else obj["version"]
|
233
|
+
size = obj["sizeInBytes"]
|
234
|
+
if size == 0:
|
235
|
+
continue
|
236
|
+
total_size += size
|
237
|
+
object_uri = f"oci://{bucket_name}@{namespace}/{name}"
|
238
|
+
|
239
|
+
os_details = ObjectStorageDetails.from_path(object_uri)
|
240
|
+
os_details.version = version
|
241
|
+
os_details_list.append(os_details)
|
242
|
+
try:
|
243
|
+
ObjectStorageDetails.from_path(
|
244
|
+
bucket_uri
|
245
|
+
).bulk_download_from_object_storage(
|
246
|
+
paths=os_details_list,
|
247
|
+
target_dir=self.target_dir,
|
248
|
+
progress_bar=self.progress,
|
249
|
+
)
|
250
|
+
except Exception as ex:
|
251
|
+
raise RuntimeError(
|
252
|
+
f"Failed to download model artifact by reference from the given Object Storage path `{bucket_uri}`."
|
253
|
+
f"See Exception: {ex}"
|
254
|
+
)
|
@@ -0,0 +1,267 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
import logging
|
4
|
+
|
5
|
+
# Copyright (c) 2022, 2024 Oracle and/or its affiliates.
|
6
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
7
|
+
|
8
|
+
import os
|
9
|
+
import shutil
|
10
|
+
from abc import ABC, abstractmethod
|
11
|
+
from typing import Dict, Optional
|
12
|
+
|
13
|
+
from ads.common import utils
|
14
|
+
from ads.common.object_storage_details import ObjectStorageDetails
|
15
|
+
from ads.model.common import utils as model_utils
|
16
|
+
from ads.model.service.oci_datascience_model import OCIDataScienceModel
|
17
|
+
|
18
|
+
|
19
|
+
class ArtifactUploader(ABC):
|
20
|
+
"""The abstract class to upload model artifacts."""
|
21
|
+
|
22
|
+
PROGRESS_STEPS_COUNT = 3
|
23
|
+
|
24
|
+
def __init__(self, dsc_model: OCIDataScienceModel, artifact_path: str):
|
25
|
+
"""Initializes `ArtifactUploader` instance.
|
26
|
+
|
27
|
+
Parameters
|
28
|
+
----------
|
29
|
+
dsc_model: OCIDataScienceModel
|
30
|
+
The data scince model instance.
|
31
|
+
artifact_path: str
|
32
|
+
The model artifact location.
|
33
|
+
"""
|
34
|
+
if not (
|
35
|
+
ObjectStorageDetails.is_oci_path(artifact_path)
|
36
|
+
or os.path.exists(artifact_path)
|
37
|
+
):
|
38
|
+
raise ValueError(f"The `{artifact_path}` does not exist")
|
39
|
+
|
40
|
+
self.dsc_model = dsc_model
|
41
|
+
self.artifact_path = artifact_path
|
42
|
+
self.artifact_file_path = None
|
43
|
+
self.progress = None
|
44
|
+
|
45
|
+
def upload(self):
|
46
|
+
"""Uploads model artifacts."""
|
47
|
+
try:
|
48
|
+
with utils.get_progress_bar(
|
49
|
+
ArtifactUploader.PROGRESS_STEPS_COUNT + self.PROGRESS_STEPS_COUNT
|
50
|
+
) as progress:
|
51
|
+
self.progress = progress
|
52
|
+
self.progress.update("Preparing model artifacts file.")
|
53
|
+
self._prepare_artifact_tmp_file()
|
54
|
+
self.progress.update("Uploading model artifacts.")
|
55
|
+
self._upload()
|
56
|
+
self.progress.update(
|
57
|
+
"Uploading model artifacts has been successfully completed."
|
58
|
+
)
|
59
|
+
self.progress.update("Done.")
|
60
|
+
except Exception:
|
61
|
+
raise
|
62
|
+
finally:
|
63
|
+
self._remove_artifact_tmp_file()
|
64
|
+
|
65
|
+
def _prepare_artifact_tmp_file(self) -> str:
|
66
|
+
"""Prepares model artifacts file.
|
67
|
+
|
68
|
+
Returns
|
69
|
+
-------
|
70
|
+
str
|
71
|
+
Path to the model artifact file.
|
72
|
+
"""
|
73
|
+
if ObjectStorageDetails.is_oci_path(self.artifact_path):
|
74
|
+
self.artifact_file_path = self.artifact_path
|
75
|
+
elif os.path.isfile(self.artifact_path) and self.artifact_path.lower().endswith(
|
76
|
+
(".zip", ".json")
|
77
|
+
):
|
78
|
+
self.artifact_file_path = self.artifact_path
|
79
|
+
else:
|
80
|
+
self.artifact_file_path = model_utils.zip_artifact(
|
81
|
+
artifact_dir=self.artifact_path
|
82
|
+
)
|
83
|
+
return self.artifact_file_path
|
84
|
+
|
85
|
+
def _remove_artifact_tmp_file(self):
|
86
|
+
"""Removes temporary created artifact file."""
|
87
|
+
if (
|
88
|
+
self.artifact_file_path
|
89
|
+
and self.artifact_file_path.lower() != self.artifact_path.lower()
|
90
|
+
):
|
91
|
+
shutil.rmtree(self.artifact_file_path, ignore_errors=True)
|
92
|
+
|
93
|
+
@abstractmethod
|
94
|
+
def _upload(self):
|
95
|
+
"""Uploads model artifacts. Needs to be implemented in a child class."""
|
96
|
+
|
97
|
+
|
98
|
+
class SmallArtifactUploader(ArtifactUploader):
|
99
|
+
"""The class helper to upload small model artifacts."""
|
100
|
+
|
101
|
+
PROGRESS_STEPS_COUNT = 1
|
102
|
+
|
103
|
+
def _upload(self):
|
104
|
+
"""Uploads model artifacts to the model catalog."""
|
105
|
+
_, ext = os.path.splitext(self.artifact_file_path)
|
106
|
+
self.progress.update("Uploading model artifacts to the catalog")
|
107
|
+
with open(self.artifact_file_path, "rb") as file_data:
|
108
|
+
self.dsc_model.create_model_artifact(bytes_content=file_data, extension=ext)
|
109
|
+
|
110
|
+
|
111
|
+
class LargeArtifactUploader(ArtifactUploader):
|
112
|
+
"""
|
113
|
+
The class helper to upload large model artifacts.
|
114
|
+
|
115
|
+
Attributes
|
116
|
+
----------
|
117
|
+
artifact_path: str
|
118
|
+
The model artifact location. Possible values are:
|
119
|
+
- object storage path to zip archive. Example: `oci://<bucket_name>@<namespace>/prefix/mymodel.zip`.
|
120
|
+
- local path to zip archive. Example: `./mymodel.zip`.
|
121
|
+
- local path to folder with artifacts. Example: `./mymodel`.
|
122
|
+
artifact_file_path: str
|
123
|
+
The uri of the zip of model artifact.
|
124
|
+
auth: dict
|
125
|
+
The default authetication is set using `ads.set_auth` API.
|
126
|
+
If you need to override the default, use the `ads.common.auth.api_keys` or
|
127
|
+
`ads.common.auth.resource_principal` to create appropriate authentication signer
|
128
|
+
and kwargs required to instantiate IdentityClient object.
|
129
|
+
bucket_uri: str
|
130
|
+
The OCI Object Storage URI where model artifacts will be copied to.
|
131
|
+
The `bucket_uri` is only necessary for uploading large artifacts which
|
132
|
+
size is greater than 2GB. Example: `oci://<bucket_name>@<namespace>/prefix/`.
|
133
|
+
|
134
|
+
.. versionadded:: 2.8.10
|
135
|
+
|
136
|
+
If artifact_path is object storage path to a zip archive, bucket_uri will be ignored.
|
137
|
+
|
138
|
+
dsc_model: OCIDataScienceModel
|
139
|
+
The data scince model instance.
|
140
|
+
overwrite_existing_artifact: bool
|
141
|
+
Overwrite target bucket artifact if exists.
|
142
|
+
progress: TqdmProgressBar
|
143
|
+
An instance of the TqdmProgressBar.
|
144
|
+
region: str
|
145
|
+
The destination Object Storage bucket region.
|
146
|
+
By default the value will be extracted from the `OCI_REGION_METADATA` environment variables.
|
147
|
+
remove_existing_artifact: bool
|
148
|
+
Wether artifacts uploaded to object storage bucket need to be removed or not.
|
149
|
+
upload_manager: UploadManager
|
150
|
+
The uploadManager simplifies interaction with the Object Storage service.
|
151
|
+
"""
|
152
|
+
|
153
|
+
PROGRESS_STEPS_COUNT = 4
|
154
|
+
|
155
|
+
def __init__(
|
156
|
+
self,
|
157
|
+
dsc_model: OCIDataScienceModel,
|
158
|
+
artifact_path: str,
|
159
|
+
bucket_uri: str = None,
|
160
|
+
auth: Optional[Dict] = None,
|
161
|
+
region: Optional[str] = None,
|
162
|
+
overwrite_existing_artifact: Optional[bool] = True,
|
163
|
+
remove_existing_artifact: Optional[bool] = True,
|
164
|
+
parallel_process_count: int = utils.DEFAULT_PARALLEL_PROCESS_COUNT,
|
165
|
+
):
|
166
|
+
"""Initializes `LargeArtifactUploader` instance.
|
167
|
+
|
168
|
+
Parameters
|
169
|
+
----------
|
170
|
+
dsc_model: OCIDataScienceModel
|
171
|
+
The data scince model instance.
|
172
|
+
artifact_path: str
|
173
|
+
The model artifact location. Possible values are:
|
174
|
+
- object storage path to zip archive. Example: `oci://<bucket_name>@<namespace>/prefix/mymodel.zip`.
|
175
|
+
- local path to zip archive. Example: `./mymodel.zip`.
|
176
|
+
- local path to folder with artifacts. Example: `./mymodel`.
|
177
|
+
bucket_uri: (str, optional). Defaults to `None`.
|
178
|
+
The OCI Object Storage URI where model artifacts will be copied to.
|
179
|
+
The `bucket_uri` is only necessary for uploading large artifacts from local which
|
180
|
+
size is greater than 2GB. Example: `oci://<bucket_name>@<namespace>/prefix/`.
|
181
|
+
|
182
|
+
.. versionadded:: 2.8.10
|
183
|
+
|
184
|
+
If `artifact_path` is object storage path to a zip archive, `bucket_uri` will be ignored.
|
185
|
+
|
186
|
+
auth: (Dict, optional). Defaults to `None`.
|
187
|
+
The default authetication is set using `ads.set_auth` API.
|
188
|
+
If you need to override the default, use the `ads.common.auth.api_keys` or
|
189
|
+
`ads.common.auth.resource_principal` to create appropriate authentication signer
|
190
|
+
and kwargs required to instantiate IdentityClient object.
|
191
|
+
region: (str, optional). Defaults to `None`.
|
192
|
+
The destination Object Storage bucket region.
|
193
|
+
By default the value will be extracted from the `OCI_REGION_METADATA` environment variables.
|
194
|
+
overwrite_existing_artifact: (bool, optional). Defaults to `True`.
|
195
|
+
Overwrite target bucket artifact if exists.
|
196
|
+
remove_existing_artifact: (bool, optional). Defaults to `True`.
|
197
|
+
Whether artifacts uploaded to object storage bucket need to be removed or not.
|
198
|
+
parallel_process_count: (int, optional).
|
199
|
+
The number of worker processes to use in parallel for uploading individual parts of a multipart upload.
|
200
|
+
"""
|
201
|
+
self.auth = auth or dsc_model.auth
|
202
|
+
if ObjectStorageDetails.is_oci_path(artifact_path):
|
203
|
+
if not artifact_path.endswith(".zip"):
|
204
|
+
raise ValueError(
|
205
|
+
f"The `artifact_path={artifact_path}` is invalid."
|
206
|
+
"The remote path for model artifact should be a zip archive, "
|
207
|
+
"e.g. `oci://<bucket_name>@<namespace>/prefix/mymodel.zip`."
|
208
|
+
)
|
209
|
+
if not utils.is_path_exists(uri=artifact_path, auth=self.auth):
|
210
|
+
raise ValueError(f"The `{artifact_path}` does not exist.")
|
211
|
+
bucket_uri = artifact_path
|
212
|
+
|
213
|
+
if not bucket_uri:
|
214
|
+
raise ValueError("The `bucket_uri` must be provided.")
|
215
|
+
|
216
|
+
super().__init__(dsc_model=dsc_model, artifact_path=artifact_path)
|
217
|
+
self.region = region or utils.extract_region(self.auth)
|
218
|
+
self.bucket_uri = bucket_uri
|
219
|
+
self.overwrite_existing_artifact = overwrite_existing_artifact
|
220
|
+
self.remove_existing_artifact = remove_existing_artifact
|
221
|
+
self._parallel_process_count = parallel_process_count
|
222
|
+
|
223
|
+
def _upload(self):
|
224
|
+
"""Uploads model artifacts to the model catalog."""
|
225
|
+
bucket_uri = self.bucket_uri
|
226
|
+
self.progress.update("Copying model artifact to the Object Storage bucket")
|
227
|
+
if not bucket_uri == self.artifact_file_path:
|
228
|
+
bucket_uri_file_name = os.path.basename(bucket_uri)
|
229
|
+
|
230
|
+
if not bucket_uri_file_name:
|
231
|
+
bucket_uri = os.path.join(bucket_uri, f"{self.dsc_model.id}.zip")
|
232
|
+
elif not bucket_uri.lower().endswith(".zip"):
|
233
|
+
bucket_uri = f"{bucket_uri}.zip"
|
234
|
+
|
235
|
+
if not self.overwrite_existing_artifact and utils.is_path_exists(
|
236
|
+
uri=bucket_uri, auth=self.auth
|
237
|
+
):
|
238
|
+
raise FileExistsError(
|
239
|
+
f"The bucket_uri=`{self.bucket_uri}` exists. Please use a new file name or "
|
240
|
+
"set `overwrite_existing_artifact` to `True` if you wish to overwrite."
|
241
|
+
)
|
242
|
+
|
243
|
+
try:
|
244
|
+
utils.upload_to_os(
|
245
|
+
src_uri=self.artifact_file_path,
|
246
|
+
dst_uri=bucket_uri,
|
247
|
+
auth=self.auth,
|
248
|
+
parallel_process_count=self._parallel_process_count,
|
249
|
+
force_overwrite=self.overwrite_existing_artifact,
|
250
|
+
progressbar_description="Copying model artifact to the Object Storage bucket.",
|
251
|
+
)
|
252
|
+
except Exception as ex:
|
253
|
+
raise RuntimeError(
|
254
|
+
f"Failed to upload model artifact to the given Object Storage path `{self.bucket_uri}`."
|
255
|
+
f"See Exception: {ex}"
|
256
|
+
)
|
257
|
+
|
258
|
+
self.progress.update("Exporting model artifact to the model catalog")
|
259
|
+
self.dsc_model.export_model_artifact(bucket_uri=bucket_uri, region=self.region)
|
260
|
+
|
261
|
+
if self.remove_existing_artifact:
|
262
|
+
self.progress.update(
|
263
|
+
"Removing temporary artifacts from the Object Storage bucket"
|
264
|
+
)
|
265
|
+
utils.remove_file(bucket_uri)
|
266
|
+
else:
|
267
|
+
self.progress.update()
|