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,35 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 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
|
+
|
8
|
+
from typing import Callable
|
9
|
+
|
10
|
+
|
11
|
+
def _get_original_func(func: callable) -> Callable:
|
12
|
+
"""The helper to retrieve the original function from the decorated one."""
|
13
|
+
if func and hasattr(func, "__wrapped__"):
|
14
|
+
return _get_original_func(func.__wrapped__)
|
15
|
+
return func
|
16
|
+
|
17
|
+
|
18
|
+
class class_or_instance_method(classmethod):
|
19
|
+
"""Converts a function to be a class method or an instance depending on how it is called at runtime.
|
20
|
+
|
21
|
+
To declare a class method, use this idiom:
|
22
|
+
|
23
|
+
class C:
|
24
|
+
@classmethod
|
25
|
+
def f(obj, *args, **kwargs):
|
26
|
+
...
|
27
|
+
It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()).
|
28
|
+
If it is called on the class C.f(), the first argument (obj) will be the class (aka. cls).
|
29
|
+
If it is called on the instance C().f(), the first argument (obj) will be the instance (aka. self).
|
30
|
+
|
31
|
+
"""
|
32
|
+
|
33
|
+
def __get__(self, instance, type_):
|
34
|
+
delegate_get = super().__get__ if instance is None else self.__func__.__get__
|
35
|
+
return delegate_get(instance, type_)
|
@@ -0,0 +1,303 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
import ads
|
7
|
+
import oci
|
8
|
+
import os
|
9
|
+
import ipaddress
|
10
|
+
|
11
|
+
from dataclasses import dataclass
|
12
|
+
|
13
|
+
FILE_STORAGE_TYPE = "FILE_STORAGE"
|
14
|
+
OBJECT_STORAGE_TYPE = "OBJECT_STORAGE"
|
15
|
+
|
16
|
+
|
17
|
+
@dataclass
|
18
|
+
class DSCFileSystem:
|
19
|
+
|
20
|
+
src: str = None
|
21
|
+
dest: str = None
|
22
|
+
storage_type: str = None
|
23
|
+
destination_directory_name: str = None
|
24
|
+
destination_path: str = None
|
25
|
+
|
26
|
+
def update_to_dsc_model(self) -> dict:
|
27
|
+
"""Updates arguments to dsc model.
|
28
|
+
|
29
|
+
Returns
|
30
|
+
-------
|
31
|
+
dict:
|
32
|
+
A dictionary of arguments.
|
33
|
+
"""
|
34
|
+
pass
|
35
|
+
|
36
|
+
@classmethod
|
37
|
+
def update_from_dsc_model(cls, dsc_model) -> dict:
|
38
|
+
"""Updates arguments from dsc model.
|
39
|
+
|
40
|
+
Parameters
|
41
|
+
----------
|
42
|
+
dsc_model: oci.data_science.models.JobStorageMountConfigurationDetails
|
43
|
+
An instance of oci.data_science.models.JobStorageMountConfigurationDetails.
|
44
|
+
|
45
|
+
Returns
|
46
|
+
-------
|
47
|
+
dict
|
48
|
+
A dictionary of arguments.
|
49
|
+
"""
|
50
|
+
pass
|
51
|
+
|
52
|
+
@staticmethod
|
53
|
+
def get_destination_path_and_name(dest: str) -> (str, str):
|
54
|
+
"""Gets the destination path and destination directory name from dest.
|
55
|
+
Example:
|
56
|
+
dir - "fss" & path - "/opc" : mount happens under "/opc/fss"
|
57
|
+
dir - "fss" & path - "/" : mount happens under "/fss"
|
58
|
+
dir - "fss" & path - omitted : mount happens under "/mnt/fss" (for backward compatibility)
|
59
|
+
|
60
|
+
Parameters
|
61
|
+
----------
|
62
|
+
dest: str
|
63
|
+
The dest path to which to mount the file system.
|
64
|
+
|
65
|
+
Returns
|
66
|
+
-------
|
67
|
+
tuple
|
68
|
+
A tuple of destination path and destination directory name.
|
69
|
+
"""
|
70
|
+
return (
|
71
|
+
os.path.dirname(dest.rstrip("/")) or None, # when destination path is omitted, oci api requires it to be None
|
72
|
+
os.path.basename(dest.rstrip("/"))
|
73
|
+
)
|
74
|
+
|
75
|
+
|
76
|
+
@dataclass
|
77
|
+
class OCIFileStorage(DSCFileSystem):
|
78
|
+
|
79
|
+
mount_target_id: str = None
|
80
|
+
mount_target: str = None
|
81
|
+
export_id: str = None
|
82
|
+
export_path: str = None
|
83
|
+
storage_type: str = FILE_STORAGE_TYPE
|
84
|
+
|
85
|
+
def update_to_dsc_model(self) -> dict:
|
86
|
+
"""Updates arguments to dsc model.
|
87
|
+
|
88
|
+
Returns
|
89
|
+
-------
|
90
|
+
dict:
|
91
|
+
A dictionary of arguments.
|
92
|
+
"""
|
93
|
+
path, directory_name = self.get_destination_path_and_name(self.dest)
|
94
|
+
arguments = {
|
95
|
+
"destinationDirectoryName" : directory_name,
|
96
|
+
"destinationPath" : path,
|
97
|
+
"storageType" : self.storage_type
|
98
|
+
}
|
99
|
+
|
100
|
+
self._get_mount_target_and_export_ids(arguments)
|
101
|
+
|
102
|
+
return arguments
|
103
|
+
|
104
|
+
def _get_mount_target_and_export_ids(self, arguments: dict):
|
105
|
+
"""Gets the mount target id and export id from src.
|
106
|
+
|
107
|
+
Parameters
|
108
|
+
----------
|
109
|
+
arguments: dict
|
110
|
+
A dictionary of arguments.
|
111
|
+
"""
|
112
|
+
resource_client = oci.resource_search.ResourceSearchClient(**ads.auth.default_signer())
|
113
|
+
src_list = self.src.split(":")
|
114
|
+
first_segment = src_list[0]
|
115
|
+
second_segment = src_list[1]
|
116
|
+
|
117
|
+
if first_segment.startswith("ocid") and "mounttarget" in first_segment:
|
118
|
+
arguments["mountTargetId"] = first_segment
|
119
|
+
else:
|
120
|
+
ip_resource = resource_client.search_resources(
|
121
|
+
search_details=oci.resource_search.models.FreeTextSearchDetails(
|
122
|
+
text=first_segment,
|
123
|
+
matching_context_type="NONE"
|
124
|
+
)
|
125
|
+
).data.items
|
126
|
+
|
127
|
+
ip_resource = sorted(ip_resource, key=lambda resource_summary: resource_summary.time_created)
|
128
|
+
|
129
|
+
if not ip_resource or not hasattr(ip_resource[-1], "identifier"):
|
130
|
+
raise ValueError(f"Can't find the identifier from ip {first_segment}. Specify a valid `src`.")
|
131
|
+
|
132
|
+
mount_target_resource = resource_client.search_resources(
|
133
|
+
search_details=oci.resource_search.models.FreeTextSearchDetails(
|
134
|
+
text=ip_resource[-1].identifier,
|
135
|
+
matching_context_type="NONE"
|
136
|
+
)
|
137
|
+
).data.items
|
138
|
+
|
139
|
+
mount_targets = [
|
140
|
+
mount_target.identifier
|
141
|
+
for mount_target in mount_target_resource
|
142
|
+
if mount_target.resource_type == "MountTarget"
|
143
|
+
]
|
144
|
+
if len(mount_targets) == 0:
|
145
|
+
raise ValueError(
|
146
|
+
f"No `mount_target_id` found under ip {first_segment}. Specify a valid `src`."
|
147
|
+
)
|
148
|
+
if len(mount_targets) > 1:
|
149
|
+
raise ValueError(
|
150
|
+
f"Multiple `mount_target_id` found under ip {first_segment}. Specify the `mount_target_id` in `src` instead."
|
151
|
+
)
|
152
|
+
|
153
|
+
arguments["mountTargetId"] = mount_targets[0]
|
154
|
+
|
155
|
+
if second_segment.startswith("ocid") and "export" in second_segment:
|
156
|
+
arguments["exportId"] = second_segment
|
157
|
+
else:
|
158
|
+
export_resource = resource_client.search_resources(
|
159
|
+
search_details=oci.resource_search.models.FreeTextSearchDetails(
|
160
|
+
text=second_segment,
|
161
|
+
matching_context_type="NONE"
|
162
|
+
)
|
163
|
+
).data.items
|
164
|
+
|
165
|
+
exports = [
|
166
|
+
export.identifier
|
167
|
+
for export in export_resource
|
168
|
+
if export.resource_type == "Export"
|
169
|
+
]
|
170
|
+
if len(exports) == 0:
|
171
|
+
raise ValueError(
|
172
|
+
f"No `export_id` found with `export_path` {second_segment}. Specify a valid `src`."
|
173
|
+
)
|
174
|
+
if len(exports) > 1:
|
175
|
+
raise ValueError(
|
176
|
+
f"Multiple `export_id` found with `export_path` {second_segment}. Specify the `export_id` in `src` instead."
|
177
|
+
)
|
178
|
+
|
179
|
+
arguments["exportId"] = exports[0]
|
180
|
+
|
181
|
+
@classmethod
|
182
|
+
def update_from_dsc_model(cls, dsc_model) -> dict:
|
183
|
+
"""Updates arguments from dsc model.
|
184
|
+
|
185
|
+
Parameters
|
186
|
+
----------
|
187
|
+
dsc_model: oci.data_science.models.JobStorageMountConfigurationDetails
|
188
|
+
An instance of oci.data_science.models.JobStorageMountConfigurationDetails.
|
189
|
+
|
190
|
+
Returns
|
191
|
+
-------
|
192
|
+
dict
|
193
|
+
A dictionary of arguments.
|
194
|
+
"""
|
195
|
+
if not dsc_model.mount_target_id:
|
196
|
+
raise ValueError(
|
197
|
+
"Missing parameter `mount_target_id` from service. Check service log to see the error."
|
198
|
+
)
|
199
|
+
if not dsc_model.export_id:
|
200
|
+
raise ValueError(
|
201
|
+
"Missing parameter `export_id` from service. Check service log to see the error."
|
202
|
+
)
|
203
|
+
if not dsc_model.destination_directory_name:
|
204
|
+
raise ValueError(
|
205
|
+
"Missing parameter `destination_directory_name` from service. Check service log to see the error."
|
206
|
+
)
|
207
|
+
|
208
|
+
dest = dsc_model.destination_directory_name
|
209
|
+
if dsc_model.destination_path:
|
210
|
+
dest = f"{dsc_model.destination_path.rstrip('/')}/{dsc_model.destination_directory_name}"
|
211
|
+
|
212
|
+
return {
|
213
|
+
"src" : f"{dsc_model.mount_target_id}:{dsc_model.export_id}",
|
214
|
+
"dest" : dest
|
215
|
+
}
|
216
|
+
|
217
|
+
@dataclass
|
218
|
+
class OCIObjectStorage(DSCFileSystem):
|
219
|
+
|
220
|
+
storage_type: str = OBJECT_STORAGE_TYPE
|
221
|
+
|
222
|
+
def update_to_dsc_model(self) -> dict:
|
223
|
+
path, directory_name = self.get_destination_path_and_name(self.dest)
|
224
|
+
arguments = {
|
225
|
+
"destinationDirectoryName" : directory_name,
|
226
|
+
"destinationPath" : path,
|
227
|
+
"storageType" : self.storage_type
|
228
|
+
}
|
229
|
+
src_list = self.src.split("@")
|
230
|
+
bucket_segment = src_list[0]
|
231
|
+
namespace_segment = src_list[1].strip("/")
|
232
|
+
arguments["bucket"] = bucket_segment[6:]
|
233
|
+
if "/" in namespace_segment:
|
234
|
+
first_slash_index = namespace_segment.index("/")
|
235
|
+
arguments["namespace"] = namespace_segment[:first_slash_index]
|
236
|
+
arguments["prefix"] = namespace_segment[first_slash_index+1:]
|
237
|
+
else:
|
238
|
+
arguments["namespace"] = namespace_segment
|
239
|
+
return arguments
|
240
|
+
|
241
|
+
@classmethod
|
242
|
+
def update_from_dsc_model(cls, dsc_model) -> dict:
|
243
|
+
if not dsc_model.namespace:
|
244
|
+
raise ValueError(
|
245
|
+
"Missing parameter `namespace` from service. Check service log to see the error."
|
246
|
+
)
|
247
|
+
if not dsc_model.bucket:
|
248
|
+
raise ValueError(
|
249
|
+
"Missing parameter `bucket` from service. Check service log to see the error."
|
250
|
+
)
|
251
|
+
if not dsc_model.destination_directory_name:
|
252
|
+
raise ValueError(
|
253
|
+
"Missing parameter `destination_directory_name` from service. Check service log to see the error."
|
254
|
+
)
|
255
|
+
|
256
|
+
dest = dsc_model.destination_directory_name
|
257
|
+
if dsc_model.destination_path:
|
258
|
+
dest = f"{dsc_model.destination_path.rstrip('/')}/{dsc_model.destination_directory_name}"
|
259
|
+
|
260
|
+
return {
|
261
|
+
"src" : f"oci://{dsc_model.bucket}@{dsc_model.namespace}/{dsc_model.prefix or ''}",
|
262
|
+
"dest" : dest
|
263
|
+
}
|
264
|
+
|
265
|
+
|
266
|
+
class DSCFileSystemManager:
|
267
|
+
|
268
|
+
@classmethod
|
269
|
+
def initialize(cls, arguments: dict) -> dict:
|
270
|
+
"""Initialize and update arguments to dsc model.
|
271
|
+
|
272
|
+
Parameters
|
273
|
+
----------
|
274
|
+
arguments: dict
|
275
|
+
A dictionary of arguments.
|
276
|
+
"""
|
277
|
+
if "src" not in arguments:
|
278
|
+
raise ValueError(
|
279
|
+
"Parameter `src` is required for mounting file storage system."
|
280
|
+
)
|
281
|
+
|
282
|
+
if "dest" not in arguments:
|
283
|
+
raise ValueError(
|
284
|
+
"Parameter `dest` is required for mounting file storage system."
|
285
|
+
)
|
286
|
+
|
287
|
+
# case oci://bucket@namespace/prefix
|
288
|
+
if arguments["src"].startswith("oci://") and "@" in arguments["src"]:
|
289
|
+
return OCIObjectStorage(**arguments).update_to_dsc_model()
|
290
|
+
|
291
|
+
first_segment = arguments["src"].split(":")[0]
|
292
|
+
# case <mount_target_id>:<export_id>
|
293
|
+
if first_segment.startswith("ocid"):
|
294
|
+
return OCIFileStorage(**arguments).update_to_dsc_model()
|
295
|
+
|
296
|
+
# case <ip_address>:<export_path>
|
297
|
+
try:
|
298
|
+
ipaddress.IPv4Network(first_segment)
|
299
|
+
return OCIFileStorage(**arguments).update_to_dsc_model()
|
300
|
+
except:
|
301
|
+
pass
|
302
|
+
|
303
|
+
raise ValueError("Invalid dict for mounting file systems. Specify a valid one.")
|
ads/common/error.py
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 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
|
+
|
8
|
+
class ChangesNotCommitted(Exception): # pragma: no cover
|
9
|
+
def __init__(self, path):
|
10
|
+
msg = f"""
|
11
|
+
File(s) at {path} are either dirty or untracked.
|
12
|
+
Please commit changes and then save the model, or set `ignore_pending_changes=True`.
|
13
|
+
"""
|
14
|
+
super().__init__(msg)
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2022, 2025 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
|
+
|
7
|
+
from abc import ABCMeta
|
8
|
+
|
9
|
+
|
10
|
+
class ExtendedEnumMeta(ABCMeta):
|
11
|
+
"""
|
12
|
+
A helper metaclass to extend functionality of a generic "Enum-like" class.
|
13
|
+
|
14
|
+
Methods
|
15
|
+
-------
|
16
|
+
__contains__(cls, item) -> bool:
|
17
|
+
Checks if `item` is among the attribute values of the class.
|
18
|
+
Case-insensitive if `item` is a string.
|
19
|
+
values(cls) -> tuple:
|
20
|
+
Returns the tuple of class attribute values.
|
21
|
+
keys(cls) -> tuple:
|
22
|
+
Returns the tuple of class attribute names.
|
23
|
+
"""
|
24
|
+
|
25
|
+
def __contains__(cls, item: object) -> bool:
|
26
|
+
"""
|
27
|
+
Checks if `item` is a member of the class's values.
|
28
|
+
|
29
|
+
- If `item` is a string, does a case-insensitive match against any string
|
30
|
+
values stored in the class.
|
31
|
+
- Otherwise, does a direct membership test.
|
32
|
+
"""
|
33
|
+
# Gather the attribute values
|
34
|
+
attr_values = cls.values()
|
35
|
+
|
36
|
+
# If item is a string, compare case-insensitively to any str-type values
|
37
|
+
if isinstance(item, str):
|
38
|
+
return any(
|
39
|
+
isinstance(val, str) and val.lower() == item.lower()
|
40
|
+
for val in attr_values
|
41
|
+
)
|
42
|
+
else:
|
43
|
+
# For non-string items (e.g., int), do a direct membership check
|
44
|
+
return item in attr_values
|
45
|
+
|
46
|
+
def __iter__(cls):
|
47
|
+
# Make the class iterable by returning an iterator over its values
|
48
|
+
return iter(cls.values())
|
49
|
+
|
50
|
+
def values(cls) -> tuple:
|
51
|
+
"""
|
52
|
+
Gets the tuple of class attribute values, excluding private or special
|
53
|
+
attributes and any callables (methods, etc.).
|
54
|
+
"""
|
55
|
+
return tuple(
|
56
|
+
value
|
57
|
+
for key, value in cls.__dict__.items()
|
58
|
+
if not key.startswith("_") and not callable(value)
|
59
|
+
)
|
60
|
+
|
61
|
+
def keys(cls) -> tuple:
|
62
|
+
"""
|
63
|
+
Gets the tuple of class attribute names, excluding private or special
|
64
|
+
attributes and any callables (methods, etc.).
|
65
|
+
"""
|
66
|
+
return tuple(
|
67
|
+
key
|
68
|
+
for key, value in cls.__dict__.items()
|
69
|
+
if not key.startswith("_") and not callable(value)
|
70
|
+
)
|
71
|
+
|
72
|
+
|
73
|
+
class ExtendedEnum(metaclass=ExtendedEnumMeta):
|
74
|
+
"""The base class to extend functionality of a generic Enum.
|
75
|
+
|
76
|
+
Examples
|
77
|
+
--------
|
78
|
+
>>> class TestEnum(ExtendedEnum):
|
79
|
+
... KEY1 = "v1"
|
80
|
+
... KEY2 = "v2"
|
81
|
+
"""
|
@@ -0,0 +1,142 @@
|
|
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
|
+
import yaml
|
8
|
+
import os
|
9
|
+
from jinja2 import Environment, PackageLoader
|
10
|
+
|
11
|
+
# FunctionAttributes = namedtuple('FunctionAttributes',['schema_version','name','version','runtime','entrypoint','memory'])
|
12
|
+
fn_config = None
|
13
|
+
env = Environment(loader=PackageLoader("ads", "templates"))
|
14
|
+
|
15
|
+
|
16
|
+
def prepare_fn_attributes(
|
17
|
+
func_name: str,
|
18
|
+
schema_version=20180708,
|
19
|
+
version=None,
|
20
|
+
python_runtime=None,
|
21
|
+
entry_point=None,
|
22
|
+
memory=None,
|
23
|
+
) -> dict:
|
24
|
+
"""
|
25
|
+
Workaround for collections.namedtuples. The defaults are not supported.
|
26
|
+
"""
|
27
|
+
function_attributes = {}
|
28
|
+
function_attributes["schema_version"] = schema_version
|
29
|
+
function_attributes["name"] = func_name
|
30
|
+
function_attributes["version"] = (
|
31
|
+
version if version else get_function_config()["fn_conf"]["version"]
|
32
|
+
)
|
33
|
+
function_attributes["runtime"] = (
|
34
|
+
python_runtime
|
35
|
+
if python_runtime
|
36
|
+
else get_function_config()["fn_conf"]["runtime"]
|
37
|
+
)
|
38
|
+
function_attributes["entrypoint"] = (
|
39
|
+
entry_point if entry_point else get_function_config()["fn_conf"]["entrypoint"]
|
40
|
+
)
|
41
|
+
function_attributes["memory"] = (
|
42
|
+
memory if memory else get_function_config()["fn_conf"]["memory"]
|
43
|
+
)
|
44
|
+
|
45
|
+
return function_attributes
|
46
|
+
|
47
|
+
|
48
|
+
def get_function_config() -> dict:
|
49
|
+
"""
|
50
|
+
Returns dictionary loaded from func_conf.yaml
|
51
|
+
"""
|
52
|
+
global fn_config
|
53
|
+
if fn_config:
|
54
|
+
return fn_config
|
55
|
+
with open(
|
56
|
+
os.path.join(os.path.dirname(os.path.abspath(__file__)), "func_conf.yaml")
|
57
|
+
) as fn_config_file:
|
58
|
+
func_config = yaml.load(fn_config_file, Loader=yaml.FullLoader)
|
59
|
+
return func_config
|
60
|
+
|
61
|
+
|
62
|
+
def generate_fn_artifacts(
|
63
|
+
path: str,
|
64
|
+
fn_name: str = None,
|
65
|
+
fn_attributes=None,
|
66
|
+
artifact_type_generic=False,
|
67
|
+
**kwargs,
|
68
|
+
):
|
69
|
+
"""
|
70
|
+
Generates artifacts for fn (https://fnproject.io) at the provided path -
|
71
|
+
* func.py
|
72
|
+
* func.yaml
|
73
|
+
* requirements.txt if not there. If exists appends fdk to the file.
|
74
|
+
* score.py
|
75
|
+
|
76
|
+
Parameters
|
77
|
+
----------
|
78
|
+
path: str
|
79
|
+
Target folder where the artifacts are placed.
|
80
|
+
fn_attributes: dict
|
81
|
+
dictionary specifying all the function attributes as described in https://github.com/fnproject/docs/blob/master/fn/develop/func-file.md
|
82
|
+
artifact_type_generic: bool
|
83
|
+
default is False. This attribute decides which template to pick for score.py. If True, it is assumed that the code to load is provided by the user.
|
84
|
+
|
85
|
+
"""
|
86
|
+
assert fn_name or fn_attributes, (
|
87
|
+
"Must provide either fn_name or fn_attributes. You may use "
|
88
|
+
"ads.common.artifact.fn_util.prepare_fn_attributes for creating fn_attributes "
|
89
|
+
)
|
90
|
+
function_attributes = prepare_fn_attributes(fn_name) if fn_name else fn_attributes
|
91
|
+
|
92
|
+
progress = kwargs.get("progress", None)
|
93
|
+
if progress:
|
94
|
+
progress.update("Writing func.yaml")
|
95
|
+
with open(os.path.join(path, "func.yaml"), "w") as fnyaml_file:
|
96
|
+
yaml.dump(function_attributes, fnyaml_file)
|
97
|
+
|
98
|
+
if progress:
|
99
|
+
progress.update("Writing func.py")
|
100
|
+
func_template = env.get_template("func.jinja2")
|
101
|
+
with open(os.path.join(path, "func.py"), "w") as func_fl:
|
102
|
+
func_fl.write(func_template.render(score_module="score"))
|
103
|
+
|
104
|
+
|
105
|
+
def write_score(path, **kwargs):
|
106
|
+
serializer = kwargs.get("serializer", "default")
|
107
|
+
if serializer not in get_function_config()["models"]:
|
108
|
+
serializer = "default"
|
109
|
+
|
110
|
+
model_name = kwargs.get(
|
111
|
+
"model_name", get_function_config()["models"][serializer]["file_name"]
|
112
|
+
)
|
113
|
+
transformer_name = (
|
114
|
+
get_function_config()["models"][serializer]["transformer_name"]
|
115
|
+
if serializer in get_function_config()["models"]
|
116
|
+
else "onnx_data_transformer.json"
|
117
|
+
)
|
118
|
+
misc_imports = (
|
119
|
+
kwargs.get("misc_imports", list())
|
120
|
+
+ get_function_config()["models"][serializer]["misc_imports"]
|
121
|
+
)
|
122
|
+
underlying_model = kwargs.get("underlying_model", "NOTFOUND")
|
123
|
+
sklearn_model = underlying_model in ["sklearn", "xgboost"]
|
124
|
+
|
125
|
+
if underlying_model == "automl":
|
126
|
+
jinja_template_filename = "score_oracle_automl"
|
127
|
+
else:
|
128
|
+
jinja_template_filename = kwargs.get(
|
129
|
+
"input_file",
|
130
|
+
get_function_config()["models"][serializer].get("input_file", "score"),
|
131
|
+
)
|
132
|
+
scorefn_template = env.get_template(f"{jinja_template_filename}.jinja2")
|
133
|
+
with open(os.path.join(path, "score.py"), "w") as sfl:
|
134
|
+
sfl.write(
|
135
|
+
scorefn_template.render(
|
136
|
+
model_file_name=model_name,
|
137
|
+
transfromer_file_name=transformer_name,
|
138
|
+
misc_imports=misc_imports,
|
139
|
+
sklearn_model=sklearn_model,
|
140
|
+
underlying_model_type=kwargs.get("_underlying_model", None),
|
141
|
+
)
|
142
|
+
)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
models:
|
2
|
+
onnx:
|
3
|
+
file_name: 'model.onnx'
|
4
|
+
transformer_name: 'onnx_data_transformer.json'
|
5
|
+
input_file: 'score'
|
6
|
+
misc_imports: []
|
7
|
+
default:
|
8
|
+
file_name: 'model.pkl'
|
9
|
+
transformer_name: ''
|
10
|
+
input_file: 'score-pkl'
|
11
|
+
misc_imports: []
|
12
|
+
unknown:
|
13
|
+
file_name: 'model.pkl'
|
14
|
+
transformer_name: ''
|
15
|
+
input_file: 'score-pkl'
|
16
|
+
misc_imports: []
|
17
|
+
requires:
|
18
|
+
onnx: ['numpy', 'pandas', 'scikit-learn', 'onnxruntime']
|
19
|
+
default: ['numpy', 'pandas', 'scikit-learn', 'onnxruntime']
|
20
|
+
functions: ['fdk']
|
21
|
+
fn_conf:
|
22
|
+
version: '0.0.1'
|
23
|
+
runtime: 'python3.6'
|
24
|
+
entrypoint: '/python/bin/fdk /function/func.py handler'
|
25
|
+
memory: 1024
|
ads/common/ipython.py
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 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
|
+
import logging
|
8
|
+
import sys
|
9
|
+
|
10
|
+
# TODO - Revisit this as part of ADS logging changes https://jira.oci.oraclecorp.com/browse/ODSC-36245
|
11
|
+
# Use a unique logger that we can individually configure without impacting other log statements.
|
12
|
+
# We don't want the logger name to mention "ads", since this logger will report any exception that happens in a
|
13
|
+
# notebook cell, and we don't want customers incorrectly assuming that ADS is somehow responsible for every error.
|
14
|
+
logger = logging.getLogger("ipython.traceback")
|
15
|
+
# Set propagate to False so logs aren't passed back up to the root logger handlers. There are some places in ADS
|
16
|
+
# where logging.basicConfig() is called. This changes root logger configurations. The user could import/use code that
|
17
|
+
# invokes the logging.basicConfig() function at any time, making the behavior of the root logger unpredictable.
|
18
|
+
logger.propagate = False
|
19
|
+
logger.handlers.clear()
|
20
|
+
traceback_handler = logging.StreamHandler()
|
21
|
+
traceback_handler.setFormatter(logging.Formatter("%(levelname)s - %(message)s"))
|
22
|
+
logger.addHandler(traceback_handler)
|
23
|
+
|
24
|
+
|
25
|
+
def _log_traceback(self, exc_tuple=None, **kwargs):
|
26
|
+
try:
|
27
|
+
etype, value, tb = self._get_exc_info(exc_tuple)
|
28
|
+
except ValueError:
|
29
|
+
print("No traceback available to show.", file=sys.stderr)
|
30
|
+
return
|
31
|
+
msg = etype.__name__, str(value)
|
32
|
+
# User a generic message that makes no mention of ADS.
|
33
|
+
logger.error("Exception", exc_info=(etype, value, tb))
|
34
|
+
sys.stderr.write("{0}: {1}".format(*msg))
|
35
|
+
|
36
|
+
|
37
|
+
def set_ipython_traceback():
|
38
|
+
pass
|
39
|
+
|
40
|
+
|
41
|
+
def configure_plotting():
|
42
|
+
try:
|
43
|
+
import IPython
|
44
|
+
from IPython import get_ipython
|
45
|
+
from IPython.core.error import UsageError
|
46
|
+
|
47
|
+
ipy = get_ipython()
|
48
|
+
if ipy is not None:
|
49
|
+
try:
|
50
|
+
# show matplotlib plots inline
|
51
|
+
ipy.run_line_magic("matplotlib", "inline")
|
52
|
+
except UsageError:
|
53
|
+
# ignore error and use the default matplotlib mode
|
54
|
+
pass
|
55
|
+
except ModuleNotFoundError:
|
56
|
+
import matplotlib as mpl
|
57
|
+
|
58
|
+
mpl.rcParams["backend"] = "agg"
|
59
|
+
import matplotlib.pyplot as plt
|
60
|
+
|
61
|
+
plt.switch_backend("agg")
|
62
|
+
|
63
|
+
|
64
|
+
try:
|
65
|
+
import IPython
|
66
|
+
|
67
|
+
global orig_ipython_traceback
|
68
|
+
if IPython.core.interactiveshell.InteractiveShell.showtraceback != _log_traceback:
|
69
|
+
orig_ipython_traceback = (
|
70
|
+
IPython.core.interactiveshell.InteractiveShell.showtraceback
|
71
|
+
)
|
72
|
+
|
73
|
+
# Override the default showtraceback behavior of ipython, to show only the error message and log the stacktrace
|
74
|
+
IPython.core.interactiveshell.InteractiveShell.showtraceback = _log_traceback
|
75
|
+
except ModuleNotFoundError:
|
76
|
+
pass
|