oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.9rc1__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 +506 -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 +269 -0
- ads/aqua/common/enums.py +122 -0
- ads/aqua/common/errors.py +109 -0
- ads/aqua/common/utils.py +1285 -0
- ads/aqua/config/__init__.py +4 -0
- ads/aqua/config/container_config.py +248 -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 +298 -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 +282 -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 +2114 -0
- ads/aqua/modeldeployment/__init__.py +8 -0
- ads/aqua/modeldeployment/constants.py +10 -0
- ads/aqua/modeldeployment/deployment.py +1326 -0
- ads/aqua/modeldeployment/entities.py +653 -0
- ads/aqua/modeldeployment/inference.py +74 -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 +499 -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 +175 -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/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 +445 -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 +125 -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.9rc1.dist-info}/METADATA +150 -150
- oracle_ads-2.13.9rc1.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.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.9rc1.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2024 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 jupyter_server.utils import url_path_join
|
8
|
+
|
9
|
+
from ads.aqua.extension.common_handler import __handlers__ as __common_handlers__
|
10
|
+
from ads.aqua.extension.deployment_handler import (
|
11
|
+
__handlers__ as __deployment_handlers__,
|
12
|
+
)
|
13
|
+
from ads.aqua.extension.evaluation_handler import __handlers__ as __eval_handlers__
|
14
|
+
from ads.aqua.extension.finetune_handler import __handlers__ as __finetune_handlers__
|
15
|
+
from ads.aqua.extension.model_handler import __handlers__ as __model_handlers__
|
16
|
+
from ads.aqua.extension.ui_handler import __handlers__ as __ui_handlers__
|
17
|
+
from ads.aqua.extension.ui_websocket_handler import __handlers__ as __ws_handlers__
|
18
|
+
|
19
|
+
__handlers__ = (
|
20
|
+
__finetune_handlers__
|
21
|
+
+ __model_handlers__
|
22
|
+
+ __common_handlers__
|
23
|
+
+ __deployment_handlers__
|
24
|
+
+ __ui_handlers__
|
25
|
+
+ __eval_handlers__
|
26
|
+
+ __ws_handlers__
|
27
|
+
)
|
28
|
+
|
29
|
+
|
30
|
+
def load_jupyter_server_extension(nb_server_app):
|
31
|
+
web_app = nb_server_app.web_app
|
32
|
+
host_pattern = ".*$"
|
33
|
+
route_pattern = url_path_join(web_app.settings["base_url"], "aqua")
|
34
|
+
|
35
|
+
web_app.add_handlers(
|
36
|
+
host_pattern,
|
37
|
+
[(url_path_join(route_pattern, url), handler) for url, handler in __handlers__],
|
38
|
+
)
|
39
|
+
|
40
|
+
|
41
|
+
def _jupyter_server_extension_paths():
|
42
|
+
return [{"module": "ads.aqua.extension"}]
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2024, 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
|
+
from abc import abstractmethod
|
7
|
+
from typing import List
|
8
|
+
|
9
|
+
from ads.aqua.common.decorator import handle_exceptions
|
10
|
+
from ads.aqua.extension.models.ws_models import (
|
11
|
+
AquaWsError,
|
12
|
+
BaseRequest,
|
13
|
+
BaseResponse,
|
14
|
+
ErrorResponse,
|
15
|
+
RequestResponseType,
|
16
|
+
)
|
17
|
+
from ads.aqua.extension.utils import construct_error
|
18
|
+
from ads.config import AQUA_TELEMETRY_BUCKET, AQUA_TELEMETRY_BUCKET_NS
|
19
|
+
from ads.telemetry.client import TelemetryClient
|
20
|
+
|
21
|
+
|
22
|
+
class AquaWSMsgHandler:
|
23
|
+
message: str
|
24
|
+
|
25
|
+
def __init__(self, message: str):
|
26
|
+
self.message = message
|
27
|
+
try:
|
28
|
+
self.telemetry = TelemetryClient(
|
29
|
+
bucket=AQUA_TELEMETRY_BUCKET, namespace=AQUA_TELEMETRY_BUCKET_NS
|
30
|
+
)
|
31
|
+
except Exception:
|
32
|
+
pass
|
33
|
+
|
34
|
+
@staticmethod
|
35
|
+
@abstractmethod
|
36
|
+
def get_message_types() -> List[RequestResponseType]:
|
37
|
+
"""This method should be implemented by the child class.
|
38
|
+
This method should return a list of RequestResponseType that the child class can handle
|
39
|
+
"""
|
40
|
+
pass
|
41
|
+
|
42
|
+
@abstractmethod
|
43
|
+
@handle_exceptions
|
44
|
+
def process(self) -> BaseResponse:
|
45
|
+
"""This method should be implemented by the child class.
|
46
|
+
This method will contain the core logic to be executed for handling the message
|
47
|
+
"""
|
48
|
+
pass
|
49
|
+
|
50
|
+
def write_error(self, status_code, **kwargs):
|
51
|
+
"""AquaWSMSGhandler errors are JSON, not human pages."""
|
52
|
+
|
53
|
+
service_payload = kwargs.get("service_payload", {})
|
54
|
+
reply_details = construct_error(status_code, **kwargs)
|
55
|
+
|
56
|
+
# telemetry may not be present if there is an error while initializing
|
57
|
+
if hasattr(self, "telemetry"):
|
58
|
+
aqua_api_details = kwargs.get("aqua_api_details", {})
|
59
|
+
self.telemetry.record_event_async(
|
60
|
+
category="aqua/error",
|
61
|
+
action=str(status_code),
|
62
|
+
value=reply_details.reason,
|
63
|
+
**aqua_api_details,
|
64
|
+
)
|
65
|
+
response = AquaWsError(
|
66
|
+
status=status_code,
|
67
|
+
message=reply_details.message,
|
68
|
+
service_payload=service_payload,
|
69
|
+
reason=reply_details.reason,
|
70
|
+
)
|
71
|
+
base_message = BaseRequest.from_json(self.message, ignore_unknown=True)
|
72
|
+
return ErrorResponse(
|
73
|
+
message_id=base_message.message_id,
|
74
|
+
kind=RequestResponseType.Error,
|
75
|
+
data=response,
|
76
|
+
)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2024, 2025 Oracle and/or its affiliates.
|
3
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
|
+
|
5
|
+
import json
|
6
|
+
from dataclasses import asdict, is_dataclass
|
7
|
+
from typing import Any
|
8
|
+
|
9
|
+
from notebook.base.handlers import APIHandler
|
10
|
+
from tornado import httputil
|
11
|
+
from tornado.web import Application
|
12
|
+
|
13
|
+
from ads.aqua.common.utils import is_pydantic_model
|
14
|
+
from ads.aqua.extension.utils import construct_error
|
15
|
+
from ads.config import AQUA_TELEMETRY_BUCKET, AQUA_TELEMETRY_BUCKET_NS
|
16
|
+
from ads.telemetry.client import TelemetryClient
|
17
|
+
|
18
|
+
|
19
|
+
class AquaAPIhandler(APIHandler):
|
20
|
+
"""Base handler for Aqua REST APIs."""
|
21
|
+
|
22
|
+
def __init__(
|
23
|
+
self,
|
24
|
+
application: "Application",
|
25
|
+
request: httputil.HTTPServerRequest,
|
26
|
+
**kwargs: Any,
|
27
|
+
):
|
28
|
+
super().__init__(application, request, **kwargs)
|
29
|
+
|
30
|
+
try:
|
31
|
+
self.telemetry = TelemetryClient(
|
32
|
+
bucket=AQUA_TELEMETRY_BUCKET, namespace=AQUA_TELEMETRY_BUCKET_NS
|
33
|
+
)
|
34
|
+
except Exception:
|
35
|
+
pass
|
36
|
+
|
37
|
+
def prepare(self, *args, **kwargs):
|
38
|
+
"""The base class prepare is not required for Aqua"""
|
39
|
+
pass
|
40
|
+
|
41
|
+
@staticmethod
|
42
|
+
def serialize(obj: Any):
|
43
|
+
"""Serialize the object.
|
44
|
+
If the object is a dataclass, convert it to dictionary. Otherwise, convert it to string.
|
45
|
+
"""
|
46
|
+
if hasattr(obj, "to_dict") and callable(obj.to_dict):
|
47
|
+
return obj.to_dict()
|
48
|
+
|
49
|
+
if is_dataclass(obj):
|
50
|
+
return asdict(obj)
|
51
|
+
|
52
|
+
if is_pydantic_model(obj):
|
53
|
+
return obj.model_dump()
|
54
|
+
|
55
|
+
return str(obj)
|
56
|
+
|
57
|
+
def finish(self, payload=None): # pylint: disable=W0221
|
58
|
+
"""Ending the HTTP request by returning a payload and status code.
|
59
|
+
|
60
|
+
Tornado finish() only takes one argument.
|
61
|
+
Calling finish() with more than one arguments will cause error.
|
62
|
+
"""
|
63
|
+
if payload is None:
|
64
|
+
return super().finish()
|
65
|
+
# If the payload is a list, put into a dictionary with key=data
|
66
|
+
if isinstance(payload, list):
|
67
|
+
payload = {"data": payload}
|
68
|
+
# Convert the payload to a JSON serializable object
|
69
|
+
payload = json.loads(json.dumps(payload, default=self.serialize))
|
70
|
+
return super().finish(payload)
|
71
|
+
|
72
|
+
def write_error(self, status_code, **kwargs):
|
73
|
+
"""AquaAPIhandler errors are JSON, not human pages."""
|
74
|
+
|
75
|
+
reply_details = construct_error(status_code, **kwargs)
|
76
|
+
|
77
|
+
self.set_header("Content-Type", "application/json")
|
78
|
+
self.set_status(status_code, reason=reply_details.reason)
|
79
|
+
|
80
|
+
# telemetry may not be present if there is an error while initializing
|
81
|
+
if hasattr(self, "telemetry"):
|
82
|
+
aqua_api_details = kwargs.get("aqua_api_details", {})
|
83
|
+
self.telemetry.record_event_async(
|
84
|
+
category="aqua/error",
|
85
|
+
action=str(status_code),
|
86
|
+
value=reply_details.reason,
|
87
|
+
**aqua_api_details,
|
88
|
+
)
|
89
|
+
|
90
|
+
self.finish(reply_details)
|
@@ -0,0 +1,121 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2025 Oracle and/or its affiliates.
|
3
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
|
+
|
5
|
+
|
6
|
+
from importlib import metadata
|
7
|
+
|
8
|
+
import huggingface_hub
|
9
|
+
import requests
|
10
|
+
from huggingface_hub import HfApi
|
11
|
+
from huggingface_hub.utils import LocalTokenNotFoundError
|
12
|
+
from tornado.web import HTTPError
|
13
|
+
|
14
|
+
from ads.aqua.common.decorator import handle_exceptions
|
15
|
+
from ads.aqua.common.errors import AquaRuntimeError
|
16
|
+
from ads.aqua.common.utils import (
|
17
|
+
get_huggingface_login_timeout,
|
18
|
+
)
|
19
|
+
from ads.aqua.extension.base_handler import AquaAPIhandler
|
20
|
+
from ads.aqua.extension.errors import Errors
|
21
|
+
|
22
|
+
|
23
|
+
class ADSVersionHandler(AquaAPIhandler):
|
24
|
+
"""The handler to get the current version of the ADS."""
|
25
|
+
|
26
|
+
@handle_exceptions
|
27
|
+
def get(self):
|
28
|
+
self.finish({"data": metadata.version("oracle_ads")})
|
29
|
+
|
30
|
+
|
31
|
+
class CompatibilityCheckHandler(AquaAPIhandler):
|
32
|
+
"""The handler to check if the extension is compatible."""
|
33
|
+
|
34
|
+
@handle_exceptions
|
35
|
+
def get(self):
|
36
|
+
"""This method provides the availability status of Aqua. If ODSC_MODEL_COMPARTMENT_OCID environment variable
|
37
|
+
is set, then status `ok` is returned. For regions where Aqua is available but the environment variable is not
|
38
|
+
set due to accesses/policies, we return the `compatible` status to indicate that the extension can be enabled
|
39
|
+
for the selected notebook session.
|
40
|
+
|
41
|
+
Returns
|
42
|
+
-------
|
43
|
+
status dict:
|
44
|
+
ok or compatible
|
45
|
+
|
46
|
+
Raises
|
47
|
+
------
|
48
|
+
AquaResourceAccessError: raised when aqua is not accessible in the given session/region.
|
49
|
+
|
50
|
+
"""
|
51
|
+
return self.finish({"status": "ok"})
|
52
|
+
|
53
|
+
|
54
|
+
class NetworkStatusHandler(AquaAPIhandler):
|
55
|
+
"""Handler to check internet connection."""
|
56
|
+
|
57
|
+
@handle_exceptions
|
58
|
+
def get(self):
|
59
|
+
requests.get("https://huggingface.com", timeout=get_huggingface_login_timeout())
|
60
|
+
return self.finish({"status": 200, "message": "success"})
|
61
|
+
|
62
|
+
|
63
|
+
class HFLoginHandler(AquaAPIhandler):
|
64
|
+
"""Handler to login to HF."""
|
65
|
+
|
66
|
+
@handle_exceptions
|
67
|
+
def post(self, *args, **kwargs):
|
68
|
+
"""Handles post request for the HF login.
|
69
|
+
|
70
|
+
Raises
|
71
|
+
------
|
72
|
+
HTTPError
|
73
|
+
Raises HTTPError if inputs are missing or are invalid.
|
74
|
+
"""
|
75
|
+
try:
|
76
|
+
input_data = self.get_json_body()
|
77
|
+
except Exception as ex:
|
78
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
79
|
+
|
80
|
+
if not input_data:
|
81
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
82
|
+
|
83
|
+
token = input_data.get("token")
|
84
|
+
|
85
|
+
if not token:
|
86
|
+
raise HTTPError(400, Errors.MISSING_REQUIRED_PARAMETER.format("token"))
|
87
|
+
|
88
|
+
# Login to HF
|
89
|
+
try:
|
90
|
+
huggingface_hub.login(token=token, new_session=False)
|
91
|
+
except Exception as ex:
|
92
|
+
raise AquaRuntimeError(
|
93
|
+
reason=str(ex), service_payload={"error": type(ex).__name__}
|
94
|
+
) from ex
|
95
|
+
|
96
|
+
return self.finish({"status": 200, "message": "login successful"})
|
97
|
+
|
98
|
+
|
99
|
+
class HFUserStatusHandler(AquaAPIhandler):
|
100
|
+
"""Handler to check if user logged in to the HF."""
|
101
|
+
|
102
|
+
@handle_exceptions
|
103
|
+
def get(self):
|
104
|
+
try:
|
105
|
+
HfApi().whoami()
|
106
|
+
except LocalTokenNotFoundError as err:
|
107
|
+
raise AquaRuntimeError(
|
108
|
+
"You are not logged in. Please log in to Hugging Face using the `huggingface-cli login` command."
|
109
|
+
"See https://huggingface.co/settings/tokens.",
|
110
|
+
) from err
|
111
|
+
|
112
|
+
return self.finish({"status": 200, "message": "logged in"})
|
113
|
+
|
114
|
+
|
115
|
+
__handlers__ = [
|
116
|
+
("ads_version", ADSVersionHandler),
|
117
|
+
("hello", CompatibilityCheckHandler),
|
118
|
+
("network_status", NetworkStatusHandler),
|
119
|
+
("hf_login", HFLoginHandler),
|
120
|
+
("hf_logged_in", HFUserStatusHandler),
|
121
|
+
]
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2024, 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
|
+
import json
|
7
|
+
from importlib import metadata
|
8
|
+
from typing import List, Optional, Union
|
9
|
+
|
10
|
+
from ads.aqua.common.decorator import handle_exceptions
|
11
|
+
from ads.aqua.extension.aqua_ws_msg_handler import AquaWSMsgHandler
|
12
|
+
from ads.aqua.extension.models.ws_models import (
|
13
|
+
AdsVersionResponse,
|
14
|
+
RequestResponseType,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
class AquaCommonWsMsgHandler(AquaWSMsgHandler):
|
19
|
+
@staticmethod
|
20
|
+
def get_message_types() -> List[RequestResponseType]:
|
21
|
+
return [RequestResponseType.AdsVersion, RequestResponseType.CompatibilityCheck]
|
22
|
+
|
23
|
+
def __init__(self, message: Union[str, bytes]):
|
24
|
+
super().__init__(message)
|
25
|
+
|
26
|
+
@handle_exceptions
|
27
|
+
def process(self) -> Optional[AdsVersionResponse]:
|
28
|
+
request = json.loads(self.message)
|
29
|
+
if request.get("kind") == "AdsVersion":
|
30
|
+
version = metadata.version("oracle_ads")
|
31
|
+
response = AdsVersionResponse(
|
32
|
+
message_id=request.get("message_id"),
|
33
|
+
kind=RequestResponseType.AdsVersion,
|
34
|
+
data=version,
|
35
|
+
)
|
36
|
+
return response
|
@@ -0,0 +1,298 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2024, 2025 Oracle and/or its affiliates.
|
3
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
|
+
|
5
|
+
from typing import List, Union
|
6
|
+
from urllib.parse import urlparse
|
7
|
+
|
8
|
+
from tornado.web import HTTPError
|
9
|
+
|
10
|
+
from ads.aqua.common.decorator import handle_exceptions
|
11
|
+
from ads.aqua.extension.base_handler import AquaAPIhandler
|
12
|
+
from ads.aqua.extension.errors import Errors
|
13
|
+
from ads.aqua.modeldeployment import AquaDeploymentApp, MDInferenceResponse
|
14
|
+
from ads.aqua.modeldeployment.entities import ModelParams
|
15
|
+
from ads.config import COMPARTMENT_OCID
|
16
|
+
|
17
|
+
|
18
|
+
class AquaDeploymentHandler(AquaAPIhandler):
|
19
|
+
"""
|
20
|
+
Handler for Aqua Deployment REST APIs.
|
21
|
+
|
22
|
+
Methods
|
23
|
+
-------
|
24
|
+
get(self, id: Union[str, List[str]])
|
25
|
+
Retrieves a list of AQUA deployments or model info or logs by ID.
|
26
|
+
post(self, *args, **kwargs)
|
27
|
+
Creates a new AQUA deployment.
|
28
|
+
read(self, id: str)
|
29
|
+
Reads the AQUA deployment information.
|
30
|
+
list(self)
|
31
|
+
Lists all the AQUA deployments.
|
32
|
+
get_deployment_config(self, model_id)
|
33
|
+
Gets the deployment config for Aqua model.
|
34
|
+
list_shapes(self)
|
35
|
+
Lists the valid model deployment shapes.
|
36
|
+
|
37
|
+
Raises
|
38
|
+
------
|
39
|
+
HTTPError: For various failure scenarios such as invalid input format, missing data, etc.
|
40
|
+
"""
|
41
|
+
|
42
|
+
@handle_exceptions
|
43
|
+
def get(self, id: Union[str, List[str]] = None):
|
44
|
+
"""Handle GET request."""
|
45
|
+
url_parse = urlparse(self.request.path)
|
46
|
+
paths = url_parse.path.strip("/")
|
47
|
+
if paths.startswith("aqua/deployments/config"):
|
48
|
+
if not id or not isinstance(id, str):
|
49
|
+
raise HTTPError(
|
50
|
+
400,
|
51
|
+
f"Invalid request format for {self.request.path}. "
|
52
|
+
"Expected a single model ID or a comma-separated list of model IDs.",
|
53
|
+
)
|
54
|
+
id = id.replace(" ", "")
|
55
|
+
return self.get_deployment_config(
|
56
|
+
model_id=id.split(",") if "," in id else id
|
57
|
+
)
|
58
|
+
elif paths.startswith("aqua/deployments/shapes"):
|
59
|
+
return self.list_shapes()
|
60
|
+
elif paths.startswith("aqua/deployments"):
|
61
|
+
if not id:
|
62
|
+
return self.list()
|
63
|
+
return self.read(id)
|
64
|
+
else:
|
65
|
+
raise HTTPError(400, f"The request {self.request.path} is invalid.")
|
66
|
+
|
67
|
+
@handle_exceptions
|
68
|
+
def delete(self, model_deployment_id):
|
69
|
+
return self.finish(AquaDeploymentApp().delete(model_deployment_id))
|
70
|
+
|
71
|
+
@handle_exceptions
|
72
|
+
def put(self, *args, **kwargs): # noqa: ARG002
|
73
|
+
"""
|
74
|
+
Handles put request for the activating and deactivating OCI datascience model deployments
|
75
|
+
Raises
|
76
|
+
------
|
77
|
+
HTTPError
|
78
|
+
Raises HTTPError if inputs are missing or are invalid
|
79
|
+
"""
|
80
|
+
url_parse = urlparse(self.request.path)
|
81
|
+
paths = url_parse.path.strip("/").split("/")
|
82
|
+
if len(paths) != 4 or paths[0] != "aqua" or paths[1] != "deployments":
|
83
|
+
raise HTTPError(400, f"The request {self.request.path} is invalid.")
|
84
|
+
|
85
|
+
model_deployment_id = paths[2]
|
86
|
+
action = paths[3]
|
87
|
+
if action == "activate":
|
88
|
+
return self.finish(AquaDeploymentApp().activate(model_deployment_id))
|
89
|
+
elif action == "deactivate":
|
90
|
+
return self.finish(AquaDeploymentApp().deactivate(model_deployment_id))
|
91
|
+
else:
|
92
|
+
raise HTTPError(400, f"The request {self.request.path} is invalid.")
|
93
|
+
|
94
|
+
@handle_exceptions
|
95
|
+
def post(self, *args, **kwargs): # noqa: ARG002
|
96
|
+
"""
|
97
|
+
Handles post request for the deployment APIs
|
98
|
+
Raises
|
99
|
+
------
|
100
|
+
HTTPError
|
101
|
+
Raises HTTPError if inputs are missing or are invalid
|
102
|
+
"""
|
103
|
+
try:
|
104
|
+
input_data = self.get_json_body()
|
105
|
+
except Exception as ex:
|
106
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
107
|
+
|
108
|
+
if not input_data:
|
109
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
110
|
+
|
111
|
+
self.finish(AquaDeploymentApp().create(**input_data))
|
112
|
+
|
113
|
+
def read(self, id):
|
114
|
+
"""Read the information of an Aqua model deployment."""
|
115
|
+
return self.finish(AquaDeploymentApp().get(model_deployment_id=id))
|
116
|
+
|
117
|
+
def list(self):
|
118
|
+
"""List Aqua models."""
|
119
|
+
# If default is not specified,
|
120
|
+
# jupyterlab will raise 400 error when argument is not provided by the HTTP request.
|
121
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
122
|
+
# project_id is optional.
|
123
|
+
project_id = self.get_argument("project_id", default=None)
|
124
|
+
return self.finish(
|
125
|
+
AquaDeploymentApp().list(
|
126
|
+
compartment_id=compartment_id, project_id=project_id
|
127
|
+
)
|
128
|
+
)
|
129
|
+
|
130
|
+
def get_deployment_config(self, model_id: Union[str, List[str]]):
|
131
|
+
"""
|
132
|
+
Retrieves the deployment configuration for one or more Aqua models.
|
133
|
+
|
134
|
+
Parameters
|
135
|
+
----------
|
136
|
+
model_id : Union[str, List[str]]
|
137
|
+
A single model ID (str) or a list of model IDs (List[str]).
|
138
|
+
|
139
|
+
Returns
|
140
|
+
-------
|
141
|
+
None
|
142
|
+
The function sends the deployment configuration as a response.
|
143
|
+
"""
|
144
|
+
app = AquaDeploymentApp()
|
145
|
+
|
146
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
147
|
+
|
148
|
+
if isinstance(model_id, list):
|
149
|
+
# Handle multiple model deployment
|
150
|
+
primary_model_id = self.get_argument("primary_model_id", default=None)
|
151
|
+
deployment_config = app.get_multimodel_deployment_config(
|
152
|
+
model_ids=model_id,
|
153
|
+
primary_model_id=primary_model_id,
|
154
|
+
compartment_id=compartment_id,
|
155
|
+
)
|
156
|
+
else:
|
157
|
+
# Handle single model deployment
|
158
|
+
deployment_config = app.get_deployment_config(model_id=model_id)
|
159
|
+
|
160
|
+
return self.finish(deployment_config)
|
161
|
+
|
162
|
+
def list_shapes(self):
|
163
|
+
"""
|
164
|
+
Lists the valid model deployment shapes.
|
165
|
+
|
166
|
+
Returns
|
167
|
+
-------
|
168
|
+
List[ComputeShapeSummary]:
|
169
|
+
The list of the model deployment shapes.
|
170
|
+
"""
|
171
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
172
|
+
|
173
|
+
return self.finish(
|
174
|
+
AquaDeploymentApp().list_shapes(compartment_id=compartment_id)
|
175
|
+
)
|
176
|
+
|
177
|
+
|
178
|
+
class AquaDeploymentInferenceHandler(AquaAPIhandler):
|
179
|
+
@staticmethod
|
180
|
+
def validate_predict_url(endpoint):
|
181
|
+
try:
|
182
|
+
url = urlparse(endpoint)
|
183
|
+
if url.scheme != "https":
|
184
|
+
return False
|
185
|
+
if not url.netloc:
|
186
|
+
return False
|
187
|
+
return url.path.endswith("/predict")
|
188
|
+
except Exception:
|
189
|
+
return False
|
190
|
+
|
191
|
+
@handle_exceptions
|
192
|
+
def post(self, *args, **kwargs): # noqa: ARG002
|
193
|
+
"""
|
194
|
+
Handles inference request for the Active Model Deployments
|
195
|
+
Raises
|
196
|
+
------
|
197
|
+
HTTPError
|
198
|
+
Raises HTTPError if inputs are missing or are invalid
|
199
|
+
"""
|
200
|
+
try:
|
201
|
+
input_data = self.get_json_body()
|
202
|
+
except Exception as ex:
|
203
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
204
|
+
|
205
|
+
if not input_data:
|
206
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
207
|
+
|
208
|
+
endpoint = input_data.get("endpoint")
|
209
|
+
if not endpoint:
|
210
|
+
raise HTTPError(400, Errors.MISSING_REQUIRED_PARAMETER.format("endpoint"))
|
211
|
+
|
212
|
+
if not self.validate_predict_url(endpoint):
|
213
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT.format("endpoint"))
|
214
|
+
|
215
|
+
prompt = input_data.get("prompt")
|
216
|
+
if not prompt:
|
217
|
+
raise HTTPError(400, Errors.MISSING_REQUIRED_PARAMETER.format("prompt"))
|
218
|
+
|
219
|
+
model_params = (
|
220
|
+
input_data.get("model_params") if input_data.get("model_params") else {}
|
221
|
+
)
|
222
|
+
try:
|
223
|
+
model_params_obj = ModelParams(**model_params)
|
224
|
+
except Exception as ex:
|
225
|
+
raise HTTPError(
|
226
|
+
400, Errors.INVALID_INPUT_DATA_FORMAT.format("model_params")
|
227
|
+
) from ex
|
228
|
+
|
229
|
+
return self.finish(
|
230
|
+
MDInferenceResponse(prompt, model_params_obj).get_model_deployment_response(
|
231
|
+
endpoint
|
232
|
+
)
|
233
|
+
)
|
234
|
+
|
235
|
+
|
236
|
+
class AquaDeploymentParamsHandler(AquaAPIhandler):
|
237
|
+
"""Handler for Aqua deployment params REST APIs.
|
238
|
+
|
239
|
+
Methods
|
240
|
+
-------
|
241
|
+
get(self, model_id)
|
242
|
+
Retrieves a list of model deployment parameters.
|
243
|
+
post(self, *args, **kwargs)
|
244
|
+
Validates parameters for the given model id.
|
245
|
+
"""
|
246
|
+
|
247
|
+
@handle_exceptions
|
248
|
+
def get(self, model_id):
|
249
|
+
"""Handle GET request."""
|
250
|
+
instance_shape = self.get_argument("instance_shape")
|
251
|
+
gpu_count = self.get_argument("gpu_count", default=None)
|
252
|
+
return self.finish(
|
253
|
+
AquaDeploymentApp().get_deployment_default_params(
|
254
|
+
model_id=model_id, instance_shape=instance_shape, gpu_count=gpu_count
|
255
|
+
)
|
256
|
+
)
|
257
|
+
|
258
|
+
@handle_exceptions
|
259
|
+
def post(self, *args, **kwargs): # noqa: ARG002
|
260
|
+
"""Handles post request for the deployment param handler API.
|
261
|
+
|
262
|
+
Raises
|
263
|
+
------
|
264
|
+
HTTPError
|
265
|
+
Raises HTTPError if inputs are missing or are invalid.
|
266
|
+
"""
|
267
|
+
try:
|
268
|
+
input_data = self.get_json_body()
|
269
|
+
except Exception as ex:
|
270
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
271
|
+
|
272
|
+
if not input_data:
|
273
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
274
|
+
|
275
|
+
model_id = input_data.get("model_id")
|
276
|
+
if not model_id:
|
277
|
+
raise HTTPError(400, Errors.MISSING_REQUIRED_PARAMETER.format("model_id"))
|
278
|
+
|
279
|
+
params = input_data.get("params")
|
280
|
+
container_family = input_data.get("container_family")
|
281
|
+
return self.finish(
|
282
|
+
AquaDeploymentApp().validate_deployment_params(
|
283
|
+
model_id=model_id,
|
284
|
+
params=params,
|
285
|
+
container_family=container_family,
|
286
|
+
)
|
287
|
+
)
|
288
|
+
|
289
|
+
|
290
|
+
__handlers__ = [
|
291
|
+
("deployments/?([^/]*)/params", AquaDeploymentParamsHandler),
|
292
|
+
("deployments/config/?([^/]*)", AquaDeploymentHandler),
|
293
|
+
("deployments/shapes/?([^/]*)", AquaDeploymentHandler),
|
294
|
+
("deployments/?([^/]*)", AquaDeploymentHandler),
|
295
|
+
("deployments/?([^/]*)/activate", AquaDeploymentHandler),
|
296
|
+
("deployments/?([^/]*)/deactivate", AquaDeploymentHandler),
|
297
|
+
("inference", AquaDeploymentInferenceHandler),
|
298
|
+
]
|