oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10__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 +246 -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.10.dist-info}/METADATA +150 -149
- oracle_ads-2.13.10.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.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.10.dist-info}/licenses/LICENSE.txt +0 -0
ads/common/model.py
ADDED
@@ -0,0 +1,679 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2020, 2022 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
|
+
from distutils import dir_util
|
8
|
+
import os
|
9
|
+
import shutil
|
10
|
+
from collections.abc import Iterable
|
11
|
+
|
12
|
+
import numpy as np
|
13
|
+
import pandas as pd
|
14
|
+
from ads.common import logger, utils
|
15
|
+
from ads.common.model_export_util import (
|
16
|
+
Progress_Steps_W_Fn,
|
17
|
+
Progress_Steps_Wo_Fn,
|
18
|
+
prepare_generic_model,
|
19
|
+
serialize_model,
|
20
|
+
)
|
21
|
+
from ads.model.transformer.onnx_transformer import ONNXTransformer
|
22
|
+
from ads.common.decorator.runtime_dependency import (
|
23
|
+
runtime_dependency,
|
24
|
+
OptionalDependency,
|
25
|
+
)
|
26
|
+
from ads.common.decorator.deprecate import deprecated
|
27
|
+
from ads.common.utils import is_notebook
|
28
|
+
from ads.dataset.pipeline import TransformerPipeline
|
29
|
+
from sklearn.pipeline import Pipeline
|
30
|
+
|
31
|
+
Unsupported_Model_Types = []
|
32
|
+
NoTransformModels = ["torch", "tensorflow", "keras", "automl"]
|
33
|
+
|
34
|
+
|
35
|
+
class ADSModel(object):
|
36
|
+
def __init__(
|
37
|
+
self,
|
38
|
+
est,
|
39
|
+
target=None,
|
40
|
+
transformer_pipeline=None,
|
41
|
+
client=None,
|
42
|
+
booster=None,
|
43
|
+
classes=None,
|
44
|
+
name=None,
|
45
|
+
):
|
46
|
+
"""
|
47
|
+
Construct an ADSModel
|
48
|
+
|
49
|
+
Parameters
|
50
|
+
----------
|
51
|
+
est: fitted estimator object
|
52
|
+
The estimator can be a standard sklearn estimator, a keras, lightgbm, or xgboost estimator, or any other object that implement methods from
|
53
|
+
(BaseEstimator, RegressorMixin) for regression or (BaseEstimator, ClassifierMixin) for classification.
|
54
|
+
target: PandasSeries
|
55
|
+
The target column you are using in your dataset, this is assigned as the "y" attribute.
|
56
|
+
transformer_pipeline: TransformerPipeline
|
57
|
+
A custom trasnformer pipeline object.
|
58
|
+
client: Str
|
59
|
+
Currently unused.
|
60
|
+
booster: Str
|
61
|
+
Currently unused.
|
62
|
+
classes: list, optional
|
63
|
+
List of target classes. Required for classification problem if the est does not contain classes_ attribute.
|
64
|
+
name: str, optional
|
65
|
+
Name of the model.
|
66
|
+
"""
|
67
|
+
self.est = est
|
68
|
+
if utils.is_same_class(transformer_pipeline, Pipeline):
|
69
|
+
self.transformer_pipeline = TransformerPipeline(transformer_pipeline.steps)
|
70
|
+
elif isinstance(transformer_pipeline, list):
|
71
|
+
self.transformer_pipeline = TransformerPipeline(transformer_pipeline)
|
72
|
+
else:
|
73
|
+
self.transformer_pipeline = transformer_pipeline
|
74
|
+
self.target = target
|
75
|
+
if classes is not None:
|
76
|
+
self.classes_ = classes
|
77
|
+
self.name = (
|
78
|
+
name if name is not None else str(est)
|
79
|
+
) # Let the estimator define its own representation
|
80
|
+
# These parameters make sense for dask_xgboost
|
81
|
+
self.client = client
|
82
|
+
self.booster = booster
|
83
|
+
self._get_underlying_model_type()
|
84
|
+
|
85
|
+
@staticmethod
|
86
|
+
def from_estimator(est, transformers=None, classes=None, name=None):
|
87
|
+
"""
|
88
|
+
Build ADSModel from a fitted estimator
|
89
|
+
|
90
|
+
Parameters
|
91
|
+
----------
|
92
|
+
est: fitted estimator object
|
93
|
+
The estimator can be a standard sklearn estimator or any object that implement methods from
|
94
|
+
(BaseEstimator, RegressorMixin) for regression or (BaseEstimator, ClassifierMixin) for classification.
|
95
|
+
transformers: a scalar or an iterable of objects implementing transform function, optional
|
96
|
+
The transform function would be applied on data before calling predict and predict_proba on estimator.
|
97
|
+
classes: list, optional
|
98
|
+
List of target classes. Required for classification problem if the est does not contain classes_ attribute.
|
99
|
+
name: str, optional
|
100
|
+
Name of the model.
|
101
|
+
|
102
|
+
Returns
|
103
|
+
-------
|
104
|
+
model: ads.common.model.ADSModel
|
105
|
+
Examples
|
106
|
+
--------
|
107
|
+
>>> model = MyModelClass.train()
|
108
|
+
>>> model_ads = from_estimator(model)
|
109
|
+
"""
|
110
|
+
if hasattr(est, "predict"):
|
111
|
+
return ADSModel(
|
112
|
+
est, transformer_pipeline=transformers, classes=classes, name=name
|
113
|
+
)
|
114
|
+
elif callable(est):
|
115
|
+
return ADSModel(
|
116
|
+
est, transformer_pipeline=transformers, classes=classes, name=name
|
117
|
+
)
|
118
|
+
|
119
|
+
# determine if the model is one of the common types without importing all of the libraries
|
120
|
+
def _get_underlying_model_type(self):
|
121
|
+
# WARNING!! Do not change the order. Particularly, sklearn must be last, as many classes extend sklearn
|
122
|
+
model_bases = utils.get_base_modules(self.est)
|
123
|
+
# should we be going past the first pkg name??
|
124
|
+
if any([str(x)[:15] == "<class 'automl." for x in model_bases]):
|
125
|
+
self._underlying_model = (
|
126
|
+
"automl" # always has "automl.interface.pipeline.Pipeline" ?
|
127
|
+
)
|
128
|
+
elif any([str(x)[:12] == "<class 'h2o." for x in model_bases]):
|
129
|
+
self._underlying_model = (
|
130
|
+
"h2o" # always has "h2o.model.model_base.ModelBase" ?
|
131
|
+
)
|
132
|
+
elif any([str(x)[:17] == "<class 'lightgbm." for x in model_bases]):
|
133
|
+
self._underlying_model = (
|
134
|
+
"lightgbm" # either "lightgbm.sklearn.LGBMModel" or "lightgbm.Booster"
|
135
|
+
)
|
136
|
+
elif any([str(x)[:16] == "<class 'xgboost." for x in model_bases]):
|
137
|
+
self._underlying_model = (
|
138
|
+
"xgboost" # always has "xgboost.sklearn.XGBModel" or "xgboost."
|
139
|
+
)
|
140
|
+
elif any([str(x)[:14] == "<class 'torch." for x in model_bases]):
|
141
|
+
self._underlying_model = "torch" # "torch.nn.modules.module.Module"
|
142
|
+
elif any([str(x)[:14] == "<class 'mxnet." for x in model_bases]):
|
143
|
+
self._underlying_model = "mxnet"
|
144
|
+
elif any([str(x)[:19] == "<class 'tensorflow." for x in model_bases]):
|
145
|
+
self._underlying_model = (
|
146
|
+
"tensorflow" # "tensorflow.python.module.module.Module"
|
147
|
+
)
|
148
|
+
if any(
|
149
|
+
[str(x)[:32] == "<class 'tensorflow.python.keras." for x in model_bases]
|
150
|
+
):
|
151
|
+
self._underlying_model = "keras"
|
152
|
+
elif any([str(x)[:13] == "<class 'pyod." for x in model_bases]):
|
153
|
+
self._underlying_model = "pyod" # always has pyod.models.base.BaseDetector
|
154
|
+
elif any([str(x)[:16] == "<class 'sklearn." for x in model_bases]):
|
155
|
+
self._underlying_model = (
|
156
|
+
"sklearn" # always has "sklearn.base.BaseEstimator"
|
157
|
+
)
|
158
|
+
else:
|
159
|
+
self._underlying_model = "Unknown"
|
160
|
+
return
|
161
|
+
|
162
|
+
def rename(self, name):
|
163
|
+
"""
|
164
|
+
Changes the name of a model
|
165
|
+
|
166
|
+
Parameters
|
167
|
+
----------
|
168
|
+
name: str
|
169
|
+
A string which is supplied for naming a model.
|
170
|
+
"""
|
171
|
+
self.name = name
|
172
|
+
|
173
|
+
@deprecated(
|
174
|
+
"2.6.6",
|
175
|
+
details="Use framework specific Model utility class for saving and deploying model. Check https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_registration/quick_start.html",
|
176
|
+
)
|
177
|
+
def predict(self, X):
|
178
|
+
"""
|
179
|
+
Runs the models predict function on some data
|
180
|
+
|
181
|
+
Parameters
|
182
|
+
----------
|
183
|
+
X: ADSData
|
184
|
+
A ADSData object which holds the examples to be predicted on.
|
185
|
+
|
186
|
+
Returns
|
187
|
+
-------
|
188
|
+
Union[List, pandas.Series], depending on the estimator
|
189
|
+
Usually a list or PandasSeries of predictions
|
190
|
+
"""
|
191
|
+
X = self.transform(X)
|
192
|
+
if self._underlying_model in ["torch"]:
|
193
|
+
return self.est(X)
|
194
|
+
if self.client is not None and self.booster is not None:
|
195
|
+
return self.est.predict(self.client, self.booster, X).persist()
|
196
|
+
else:
|
197
|
+
return self.est.predict(X)
|
198
|
+
|
199
|
+
# For callable estimators, this will be more natural for ADSModel to support
|
200
|
+
__call__ = predict
|
201
|
+
|
202
|
+
def predict_proba(self, X):
|
203
|
+
"""
|
204
|
+
Runs the models predict probabilities function on some data
|
205
|
+
|
206
|
+
Parameters
|
207
|
+
----------
|
208
|
+
X: ADSData
|
209
|
+
A ADSData object which holds the examples to be predicted on.
|
210
|
+
|
211
|
+
Returns
|
212
|
+
-------
|
213
|
+
Union[List, pandas.Series], depending on the estimator
|
214
|
+
Usually a list or PandasSeries of predictions
|
215
|
+
"""
|
216
|
+
X = self.transform(X)
|
217
|
+
if self._underlying_model in ["torch"]:
|
218
|
+
return self.est(X)
|
219
|
+
if self.client is not None and self.booster is not None:
|
220
|
+
return self.est.predict_proba(self.client, self.booster, X).persist()
|
221
|
+
else:
|
222
|
+
return self.est.predict_proba(X)
|
223
|
+
|
224
|
+
@deprecated(
|
225
|
+
"2.6.6",
|
226
|
+
details="Use framework specific Model utility class for saving and deploying model. Check https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_registration/quick_start.html",
|
227
|
+
)
|
228
|
+
def score(self, X, y_true, score_fn=None):
|
229
|
+
"""
|
230
|
+
Scores a model according to a custom score function
|
231
|
+
|
232
|
+
Parameters
|
233
|
+
----------
|
234
|
+
X: ADSData
|
235
|
+
A ADSData object which holds the examples to be predicted on.
|
236
|
+
y_true: ADSData
|
237
|
+
A ADSData object which holds ground truth labels for the examples which are being predicted on.
|
238
|
+
score_fn: Scorer (callable)
|
239
|
+
A callable object that returns a score, usually created with sklearn.metrics.make_scorer().
|
240
|
+
|
241
|
+
Returns
|
242
|
+
-------
|
243
|
+
float, depending on the estimator
|
244
|
+
Almost always a scalar score (usually a float).
|
245
|
+
"""
|
246
|
+
X = self.transform(X)
|
247
|
+
if score_fn:
|
248
|
+
return score_fn(self, X, y_true)
|
249
|
+
else:
|
250
|
+
assert hasattr(self.est, "score"), (
|
251
|
+
f"Could not find a score function for estimator of type: "
|
252
|
+
f"{self._underlying_model}. Pass in your desired scoring "
|
253
|
+
f"function to score_fn "
|
254
|
+
)
|
255
|
+
if self.client is not None and self.booster is not None:
|
256
|
+
return self.est.score(self.client, self.booster, X, y_true).persist()
|
257
|
+
else:
|
258
|
+
return self.est.score(X, y_true)
|
259
|
+
|
260
|
+
@deprecated(
|
261
|
+
"2.6.6",
|
262
|
+
details="Use framework specific Model utility class for saving and deploying model. Check https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_registration/quick_start.html",
|
263
|
+
)
|
264
|
+
def summary(self):
|
265
|
+
"""
|
266
|
+
A summary of the ADSModel
|
267
|
+
"""
|
268
|
+
print(self)
|
269
|
+
|
270
|
+
def __repr__(self):
|
271
|
+
if self._underlying_model == "automl":
|
272
|
+
framework = self.est.pipeline.trained_model.__class__.__module__
|
273
|
+
est = self.est.selected_model_
|
274
|
+
params = self.est.selected_model_params_
|
275
|
+
else:
|
276
|
+
framework = self.est.__class__.__module__
|
277
|
+
est = self.est.__class__.__name__
|
278
|
+
params = self.est.get_params() if hasattr(self.est, "get_params") else None
|
279
|
+
return (
|
280
|
+
"Framework: %s\n" % framework
|
281
|
+
+ "Estimator class: %s\n" % est
|
282
|
+
+ "Model Parameters: %s\n" % params
|
283
|
+
)
|
284
|
+
|
285
|
+
def __getattr__(self, item):
|
286
|
+
return getattr(self.est, item)
|
287
|
+
|
288
|
+
@deprecated(
|
289
|
+
"2.6.6",
|
290
|
+
details="Use framework specific Model utility class for saving and deploying model. Check https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_registration/quick_start.html",
|
291
|
+
)
|
292
|
+
def transform(self, X):
|
293
|
+
"""
|
294
|
+
Process some ADSData through the selected ADSModel transformers
|
295
|
+
|
296
|
+
Parameters
|
297
|
+
----------
|
298
|
+
X: ADSData
|
299
|
+
A ADSData object which holds the examples to be transformed.
|
300
|
+
"""
|
301
|
+
|
302
|
+
if hasattr(X, "copy"):
|
303
|
+
X = X.copy()
|
304
|
+
if self.transformer_pipeline is not None:
|
305
|
+
transformer_pipeline = self.transformer_pipeline
|
306
|
+
if not isinstance(transformer_pipeline, Iterable):
|
307
|
+
transformer_pipeline = [self.transformer_pipeline]
|
308
|
+
for transformer in transformer_pipeline:
|
309
|
+
try:
|
310
|
+
X = transformer.transform(X)
|
311
|
+
except Exception as e:
|
312
|
+
pass
|
313
|
+
# logger.warn("Skipping pre-processing.")
|
314
|
+
if self.target is not None and self.target in X.columns:
|
315
|
+
X = X.drop(self.target, axis=1)
|
316
|
+
return X
|
317
|
+
|
318
|
+
def is_classifier(self):
|
319
|
+
"""
|
320
|
+
Returns True if ADS believes that the model is a classifier
|
321
|
+
|
322
|
+
Returns
|
323
|
+
-------
|
324
|
+
Boolean: True if the model is a classifier, False otherwise.
|
325
|
+
"""
|
326
|
+
return hasattr(self, "classes_") and self.classes_ is not None
|
327
|
+
|
328
|
+
@deprecated(
|
329
|
+
"2.6.6",
|
330
|
+
details="Use framework specific Model utility class for saving and deploying model. Check https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_registration/quick_start.html",
|
331
|
+
)
|
332
|
+
def feature_names(self, X=None):
|
333
|
+
model_type = self._underlying_model
|
334
|
+
if model_type == "sklearn":
|
335
|
+
return X.columns
|
336
|
+
elif model_type == "automl":
|
337
|
+
return self.est.selected_features_names_
|
338
|
+
elif model_type == "lightgbm":
|
339
|
+
try:
|
340
|
+
return self.est.feature_name()
|
341
|
+
except AttributeError:
|
342
|
+
return X.columns
|
343
|
+
elif model_type == "torch":
|
344
|
+
return []
|
345
|
+
elif model_type == "xgboost":
|
346
|
+
try:
|
347
|
+
return self.est.feature_name()
|
348
|
+
except AttributeError:
|
349
|
+
return X.columns
|
350
|
+
elif model_type == "tensorflow":
|
351
|
+
return []
|
352
|
+
elif model_type == "keras":
|
353
|
+
return []
|
354
|
+
elif model_type == "mxnet":
|
355
|
+
return []
|
356
|
+
else:
|
357
|
+
try:
|
358
|
+
return self.est.feature_names()
|
359
|
+
except:
|
360
|
+
logger.warning(
|
361
|
+
f"Could not find a model of type {model_type}. Therefore, "
|
362
|
+
f"there are no `feature_names`."
|
363
|
+
)
|
364
|
+
return []
|
365
|
+
|
366
|
+
def _onnx_data_transformer(self, X, impute_values={}, **kwargs):
|
367
|
+
if self._underlying_model in NoTransformModels:
|
368
|
+
return X
|
369
|
+
try:
|
370
|
+
if hasattr(self, "onnx_data_preprocessor") and isinstance(
|
371
|
+
self.onnx_data_preprocessor, ONNXTransformer
|
372
|
+
):
|
373
|
+
return self.onnx_data_preprocessor.transform(X=X)
|
374
|
+
|
375
|
+
self.onnx_data_preprocessor = ONNXTransformer()
|
376
|
+
return self.onnx_data_preprocessor.fit_transform(
|
377
|
+
X=X, impute_values=impute_values
|
378
|
+
)
|
379
|
+
except Exception as e:
|
380
|
+
print(f"Warning: Onnx Data Transformation was unsuccessful with error: {e}")
|
381
|
+
raise e
|
382
|
+
|
383
|
+
def __getstate__(self):
|
384
|
+
return self.__dict__
|
385
|
+
|
386
|
+
def __setstate__(self, state):
|
387
|
+
self.__dict__ = state
|
388
|
+
|
389
|
+
@deprecated(
|
390
|
+
"2.6.6",
|
391
|
+
details="Use framework specific Model utility class for saving and deploying model. Check https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_registration/quick_start.html",
|
392
|
+
)
|
393
|
+
def prepare(
|
394
|
+
self,
|
395
|
+
target_dir=None,
|
396
|
+
data_sample=None,
|
397
|
+
X_sample=None,
|
398
|
+
y_sample=None,
|
399
|
+
include_data_sample=False,
|
400
|
+
force_overwrite=False,
|
401
|
+
fn_artifact_files_included=False,
|
402
|
+
fn_name="model_api",
|
403
|
+
inference_conda_env=None,
|
404
|
+
data_science_env=False,
|
405
|
+
ignore_deployment_error=False,
|
406
|
+
use_case_type=None,
|
407
|
+
inference_python_version=None,
|
408
|
+
imputed_values={},
|
409
|
+
**kwargs,
|
410
|
+
):
|
411
|
+
"""
|
412
|
+
Prepare model artifact directory to be published to model catalog
|
413
|
+
|
414
|
+
Parameters
|
415
|
+
----------
|
416
|
+
target_dir : str, default: model.name[:12]
|
417
|
+
Target directory under which the model artifact files need to be added
|
418
|
+
data_sample : ADSData
|
419
|
+
Note: This format is preferable to X_sample and y_sample.
|
420
|
+
A sample of the test data that will be provided to predict() API of scoring script
|
421
|
+
Used to generate schema_input.json and schema_output.json which defines the input and output formats
|
422
|
+
X_sample : pandas.DataFrame
|
423
|
+
A sample of input data that will be provided to predict() API of scoring script
|
424
|
+
Used to generate schema.json which defines the input formats
|
425
|
+
y_sample : pandas.Series
|
426
|
+
A sample of output data that is expected to be returned by predict() API of scoring script,
|
427
|
+
corresponding to X_sample
|
428
|
+
Used to generate schema_output.json which defines the output formats
|
429
|
+
force_overwrite : bool, default: False
|
430
|
+
If True, overwrites the target directory if exists already
|
431
|
+
fn_artifact_files_included : bool, default: True
|
432
|
+
If True, generates artifacts to export a model as a function without ads dependency
|
433
|
+
fn_name : str, default: 'model_api'
|
434
|
+
Required parameter if fn_artifact_files_included parameter is setup.
|
435
|
+
inference_conda_env : str, default: None
|
436
|
+
Conda environment to use within the model deployment service for inferencing
|
437
|
+
data_science_env : bool, default: False
|
438
|
+
If set to True, datascience environment represented by the slug in the training conda environment will be used.
|
439
|
+
ignore_deployment_error : bool, default: False
|
440
|
+
If set to True, the prepare will ignore all the errors that may impact model deployment
|
441
|
+
use_case_type: str
|
442
|
+
The use case type of the model. Use it through UserCaseType class or string provided in UseCaseType. For
|
443
|
+
example, use_case_type=UseCaseType.BINARY_CLASSIFICATION or use_case_type="binary_classification". Check
|
444
|
+
with UseCaseType class to see all supported types.
|
445
|
+
inference_python_version: str, default:None.
|
446
|
+
If provided will be added to the generated runtime yaml
|
447
|
+
|
448
|
+
**kwargs
|
449
|
+
--------
|
450
|
+
max_col_num: (int, optional). Defaults to utils.DATA_SCHEMA_MAX_COL_NUM.
|
451
|
+
The maximum column size of the data that allows to auto generate schema.
|
452
|
+
|
453
|
+
Returns
|
454
|
+
-------
|
455
|
+
model_artifact: an instance of `ModelArtifact` that can be used to test the generated scoring script
|
456
|
+
"""
|
457
|
+
if include_data_sample:
|
458
|
+
logger.warning(
|
459
|
+
f"Parameter `include_data_sample` is deprecated and removed in future releases. "
|
460
|
+
f"Data sample is not saved. You can manually save the data sample to {target_dir}."
|
461
|
+
)
|
462
|
+
# Add 2 for model and schema (Artifact Directory gets skipped in prepare_generic when progress is passed in).
|
463
|
+
ProgressStepsWFn = Progress_Steps_W_Fn + 1
|
464
|
+
ProgressStepsWoFn = Progress_Steps_Wo_Fn + 1
|
465
|
+
if target_dir is None:
|
466
|
+
logger.info(
|
467
|
+
f"Using the default directory {self.name[:12]} "
|
468
|
+
f"to create the model artifact. Use `target_dir` to specify a directory."
|
469
|
+
)
|
470
|
+
can_generate_fn_files = (
|
471
|
+
fn_artifact_files_included
|
472
|
+
and self._underlying_model not in Unsupported_Model_Types
|
473
|
+
)
|
474
|
+
assert data_sample is not None or X_sample is not None, (
|
475
|
+
"You must provide a data sample to infer the input and output data types"
|
476
|
+
" which are used when converting the the model to an equivalent onnx model. "
|
477
|
+
"This can be done as an ADSData object with "
|
478
|
+
"the parameter `data_sample`, or as X and y samples "
|
479
|
+
"to X_sample and y_sample respectively. "
|
480
|
+
)
|
481
|
+
with utils.get_progress_bar(
|
482
|
+
ProgressStepsWFn if can_generate_fn_files else ProgressStepsWoFn
|
483
|
+
) as progress:
|
484
|
+
progress.update("Preparing Model Artifact Directory")
|
485
|
+
if os.path.exists(target_dir):
|
486
|
+
if not force_overwrite:
|
487
|
+
raise ValueError("Directory already exists, set force to overwrite")
|
488
|
+
os.makedirs(target_dir, exist_ok=True)
|
489
|
+
|
490
|
+
# Bring in model-ignore file
|
491
|
+
shutil.copyfile(
|
492
|
+
os.path.join(
|
493
|
+
os.path.dirname(os.path.realpath(__file__)),
|
494
|
+
"artifact/.model-ignore",
|
495
|
+
),
|
496
|
+
os.path.join(target_dir, ".model-ignore"),
|
497
|
+
)
|
498
|
+
dir_util._path_created = {}
|
499
|
+
|
500
|
+
progress.update("Serializing model")
|
501
|
+
# Transform the data to be onnx-ready
|
502
|
+
X_sample = (
|
503
|
+
data_sample.X
|
504
|
+
if X_sample is None and data_sample is not None
|
505
|
+
else X_sample
|
506
|
+
)
|
507
|
+
y_sample = (
|
508
|
+
data_sample.y
|
509
|
+
if y_sample is None and data_sample is not None
|
510
|
+
else y_sample
|
511
|
+
)
|
512
|
+
|
513
|
+
X_trans = self._onnx_data_transformer(
|
514
|
+
X=X_sample, imputed_values=imputed_values
|
515
|
+
)
|
516
|
+
|
517
|
+
model_kwargs = serialize_model(
|
518
|
+
model=self,
|
519
|
+
target_dir=target_dir,
|
520
|
+
X=X_trans,
|
521
|
+
y=y_sample,
|
522
|
+
model_type=self._underlying_model,
|
523
|
+
)
|
524
|
+
max_col_num = kwargs.get("max_col_num", utils.DATA_SCHEMA_MAX_COL_NUM)
|
525
|
+
|
526
|
+
if self._underlying_model not in NoTransformModels:
|
527
|
+
try:
|
528
|
+
self.onnx_data_preprocessor.save(
|
529
|
+
os.path.join(target_dir, "onnx_data_transformer.json")
|
530
|
+
)
|
531
|
+
except Exception as e:
|
532
|
+
logger.error(
|
533
|
+
f"Unable to serialize the data transformer due to: {e}."
|
534
|
+
)
|
535
|
+
raise e
|
536
|
+
|
537
|
+
if model_kwargs.get("serializer", "") != "onnx":
|
538
|
+
model_kwargs["model_libs"] = utils.extract_lib_dependencies_from_model(
|
539
|
+
self.est
|
540
|
+
)
|
541
|
+
model_kwargs["underlying_model"] = self._underlying_model
|
542
|
+
model_kwargs["progress"] = progress
|
543
|
+
model_kwargs["inference_conda_env"] = inference_conda_env
|
544
|
+
model_kwargs["data_science_env"] = data_science_env
|
545
|
+
model_kwargs["ignore_deployment_error"] = ignore_deployment_error
|
546
|
+
model_kwargs["use_case_type"] = use_case_type
|
547
|
+
model_kwargs["max_col_num"] = max_col_num
|
548
|
+
model_artifact = prepare_generic_model(
|
549
|
+
target_dir,
|
550
|
+
model=self.est,
|
551
|
+
data_sample=data_sample,
|
552
|
+
X_sample=X_sample,
|
553
|
+
y_sample=y_sample,
|
554
|
+
fn_artifact_files_included=fn_artifact_files_included,
|
555
|
+
fn_name=fn_name,
|
556
|
+
force_overwrite=force_overwrite,
|
557
|
+
inference_python_version=inference_python_version,
|
558
|
+
**model_kwargs,
|
559
|
+
)
|
560
|
+
try:
|
561
|
+
model_file_name = (
|
562
|
+
"model.pkl" if self._underlying_model == "automl" else "model.onnx"
|
563
|
+
)
|
564
|
+
model_artifact.reload(model_file_name=model_file_name)
|
565
|
+
except Exception as e:
|
566
|
+
print(str(e))
|
567
|
+
msg = (
|
568
|
+
"\nWARNING: Validation using scoring script failed. Update the inference script("
|
569
|
+
"score.py) as required. "
|
570
|
+
)
|
571
|
+
print("\033[93m" + msg + "\033[0m")
|
572
|
+
|
573
|
+
# __pycache__ was created during model_artifact.reload() above
|
574
|
+
if os.path.exists(os.path.join(target_dir, "__pycache__")):
|
575
|
+
shutil.rmtree(
|
576
|
+
os.path.join(target_dir, "__pycache__"), ignore_errors=True
|
577
|
+
)
|
578
|
+
|
579
|
+
logger.info(model_artifact.__repr__())
|
580
|
+
return model_artifact
|
581
|
+
|
582
|
+
def visualize_transforms(self):
|
583
|
+
"""
|
584
|
+
A graph of the ADSModel transformer pipeline.
|
585
|
+
It is only supported in JupyterLabs Notebooks.
|
586
|
+
"""
|
587
|
+
self.transformer_pipeline.visualize()
|
588
|
+
|
589
|
+
@runtime_dependency(module="IPython", install_from=OptionalDependency.NOTEBOOK)
|
590
|
+
def show_in_notebook(self):
|
591
|
+
"""
|
592
|
+
Describe the model by showing it's properties
|
593
|
+
"""
|
594
|
+
# ['Is Regression', self.est.is_regression],
|
595
|
+
if self._underlying_model == "automl":
|
596
|
+
info = [
|
597
|
+
["Model Name", self.name],
|
598
|
+
["Target Variable", self.target],
|
599
|
+
["Selected Algorithm", self.est.selected_model_],
|
600
|
+
["Task", self.est.task],
|
601
|
+
["Training Dataset Size", self.est.train_shape_],
|
602
|
+
["CV", self.est.cv_],
|
603
|
+
["Optimization Metric", self.est.score_metric],
|
604
|
+
["Selected Hyperparameters", self.est.selected_model_params_],
|
605
|
+
["Initial Number of Features", self.est.train_shape_[1]],
|
606
|
+
["Initial Features", self.est.pipeline.orig_feature_names],
|
607
|
+
["Selected Number of Features", len(self.est.selected_features_names_)],
|
608
|
+
["Selected Features", self.est.selected_features_names_],
|
609
|
+
]
|
610
|
+
else:
|
611
|
+
info = [
|
612
|
+
["Model Name", self.name],
|
613
|
+
[
|
614
|
+
"Target Variable",
|
615
|
+
self.target
|
616
|
+
if self.target is not None
|
617
|
+
else "not available from estimator",
|
618
|
+
],
|
619
|
+
[
|
620
|
+
"Selected Hyperparameters",
|
621
|
+
self.est.get_params() if hasattr(self.est, "get_params") else None,
|
622
|
+
],
|
623
|
+
["Framework", self.est.__class__.__module__],
|
624
|
+
["Estimator Class", self.est.__class__.__name__],
|
625
|
+
[
|
626
|
+
"Contained Estimator",
|
627
|
+
self.est.est.__class__.__name__
|
628
|
+
if hasattr(self.est, "est")
|
629
|
+
else None,
|
630
|
+
],
|
631
|
+
]
|
632
|
+
info_df = pd.DataFrame(info)
|
633
|
+
|
634
|
+
if is_notebook():
|
635
|
+
with pd.option_context(
|
636
|
+
"display.max_colwidth",
|
637
|
+
1000,
|
638
|
+
"display.width",
|
639
|
+
None,
|
640
|
+
"display.precision",
|
641
|
+
4,
|
642
|
+
):
|
643
|
+
from IPython.core.display import HTML, display
|
644
|
+
|
645
|
+
display(HTML(info_df.to_html(index=False, header=False)))
|
646
|
+
return info
|
647
|
+
|
648
|
+
@staticmethod
|
649
|
+
@runtime_dependency(module="skl2onnx", install_from=OptionalDependency.ONNX)
|
650
|
+
def get_init_types(df, underlying_model=None):
|
651
|
+
|
652
|
+
from skl2onnx.common.data_types import FloatTensorType
|
653
|
+
|
654
|
+
if underlying_model == "sklearn":
|
655
|
+
n_cols = len(df.columns)
|
656
|
+
return [("input", FloatTensorType([None, n_cols]))], {"type": np.float32}
|
657
|
+
return [], {}
|
658
|
+
|
659
|
+
@staticmethod
|
660
|
+
@runtime_dependency(module="skl2onnx", install_from=OptionalDependency.ONNX)
|
661
|
+
def convert_dataframe_schema(df, drop=None):
|
662
|
+
from skl2onnx.common.data_types import (
|
663
|
+
FloatTensorType,
|
664
|
+
Int64TensorType,
|
665
|
+
StringTensorType,
|
666
|
+
)
|
667
|
+
|
668
|
+
inputs = []
|
669
|
+
for k, v in zip(df.columns, df.dtypes):
|
670
|
+
if drop is not None and k in drop:
|
671
|
+
continue
|
672
|
+
if v == "int64":
|
673
|
+
t = Int64TensorType([1, 1])
|
674
|
+
elif v == "float64":
|
675
|
+
t = FloatTensorType([1, 1])
|
676
|
+
else:
|
677
|
+
t = StringTensorType([1, 1])
|
678
|
+
inputs.append((k, t))
|
679
|
+
return inputs
|