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,381 @@
|
|
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, Optional, Union
|
6
|
+
from urllib.parse import urlparse
|
7
|
+
|
8
|
+
from tornado.web import HTTPError
|
9
|
+
|
10
|
+
from ads.aqua.app import logger
|
11
|
+
from ads.aqua.client.client import Client, ExtendedRequestError
|
12
|
+
from ads.aqua.common.decorator import handle_exceptions
|
13
|
+
from ads.aqua.common.enums import PredictEndpoints
|
14
|
+
from ads.aqua.extension.base_handler import AquaAPIhandler
|
15
|
+
from ads.aqua.extension.errors import Errors
|
16
|
+
from ads.aqua.modeldeployment import AquaDeploymentApp
|
17
|
+
from ads.config import COMPARTMENT_OCID
|
18
|
+
|
19
|
+
|
20
|
+
class AquaDeploymentHandler(AquaAPIhandler):
|
21
|
+
"""
|
22
|
+
Handler for Aqua Deployment REST APIs.
|
23
|
+
|
24
|
+
Methods
|
25
|
+
-------
|
26
|
+
get(self, id: Union[str, List[str]])
|
27
|
+
Retrieves a list of AQUA deployments or model info or logs by ID.
|
28
|
+
post(self, *args, **kwargs)
|
29
|
+
Creates a new AQUA deployment.
|
30
|
+
read(self, id: str)
|
31
|
+
Reads the AQUA deployment information.
|
32
|
+
list(self)
|
33
|
+
Lists all the AQUA deployments.
|
34
|
+
get_deployment_config(self, model_id)
|
35
|
+
Gets the deployment config for Aqua model.
|
36
|
+
list_shapes(self)
|
37
|
+
Lists the valid model deployment shapes.
|
38
|
+
|
39
|
+
Raises
|
40
|
+
------
|
41
|
+
HTTPError: For various failure scenarios such as invalid input format, missing data, etc.
|
42
|
+
"""
|
43
|
+
|
44
|
+
@handle_exceptions
|
45
|
+
def get(self, id: Union[str, List[str]] = None):
|
46
|
+
"""Handle GET request."""
|
47
|
+
url_parse = urlparse(self.request.path)
|
48
|
+
paths = url_parse.path.strip("/")
|
49
|
+
if paths.startswith("aqua/deployments/config"):
|
50
|
+
if not id or not isinstance(id, str):
|
51
|
+
raise HTTPError(
|
52
|
+
400,
|
53
|
+
f"Invalid request format for {self.request.path}. "
|
54
|
+
"Expected a single model ID or a comma-separated list of model IDs.",
|
55
|
+
)
|
56
|
+
id = id.replace(" ", "")
|
57
|
+
return self.get_deployment_config(
|
58
|
+
model_id=id.split(",") if "," in id else id
|
59
|
+
)
|
60
|
+
elif paths.startswith("aqua/deployments/shapes"):
|
61
|
+
return self.list_shapes()
|
62
|
+
elif paths.startswith("aqua/deployments"):
|
63
|
+
if not id:
|
64
|
+
return self.list()
|
65
|
+
return self.read(id)
|
66
|
+
else:
|
67
|
+
raise HTTPError(400, f"The request {self.request.path} is invalid.")
|
68
|
+
|
69
|
+
@handle_exceptions
|
70
|
+
def delete(self, model_deployment_id):
|
71
|
+
return self.finish(AquaDeploymentApp().delete(model_deployment_id))
|
72
|
+
|
73
|
+
@handle_exceptions
|
74
|
+
def put(self, *args, **kwargs): # noqa: ARG002
|
75
|
+
"""
|
76
|
+
Handles put request for the activating and deactivating OCI datascience model deployments
|
77
|
+
Raises
|
78
|
+
------
|
79
|
+
HTTPError
|
80
|
+
Raises HTTPError if inputs are missing or are invalid
|
81
|
+
"""
|
82
|
+
url_parse = urlparse(self.request.path)
|
83
|
+
paths = url_parse.path.strip("/").split("/")
|
84
|
+
if len(paths) != 4 or paths[0] != "aqua" or paths[1] != "deployments":
|
85
|
+
raise HTTPError(400, f"The request {self.request.path} is invalid.")
|
86
|
+
|
87
|
+
model_deployment_id = paths[2]
|
88
|
+
action = paths[3]
|
89
|
+
if action == "activate":
|
90
|
+
return self.finish(AquaDeploymentApp().activate(model_deployment_id))
|
91
|
+
elif action == "deactivate":
|
92
|
+
return self.finish(AquaDeploymentApp().deactivate(model_deployment_id))
|
93
|
+
else:
|
94
|
+
raise HTTPError(400, f"The request {self.request.path} is invalid.")
|
95
|
+
|
96
|
+
@handle_exceptions
|
97
|
+
def post(self, *args, **kwargs): # noqa: ARG002
|
98
|
+
"""
|
99
|
+
Handles post request for the deployment APIs
|
100
|
+
Raises
|
101
|
+
------
|
102
|
+
HTTPError
|
103
|
+
Raises HTTPError if inputs are missing or are invalid
|
104
|
+
"""
|
105
|
+
try:
|
106
|
+
input_data = self.get_json_body()
|
107
|
+
except Exception as ex:
|
108
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
109
|
+
|
110
|
+
if not input_data:
|
111
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
112
|
+
|
113
|
+
self.finish(AquaDeploymentApp().create(**input_data))
|
114
|
+
|
115
|
+
def read(self, id):
|
116
|
+
"""Read the information of an Aqua model deployment."""
|
117
|
+
return self.finish(AquaDeploymentApp().get(model_deployment_id=id))
|
118
|
+
|
119
|
+
def list(self):
|
120
|
+
"""List Aqua models."""
|
121
|
+
# If default is not specified,
|
122
|
+
# jupyterlab will raise 400 error when argument is not provided by the HTTP request.
|
123
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
124
|
+
# project_id is optional.
|
125
|
+
project_id = self.get_argument("project_id", default=None)
|
126
|
+
return self.finish(
|
127
|
+
AquaDeploymentApp().list(
|
128
|
+
compartment_id=compartment_id, project_id=project_id
|
129
|
+
)
|
130
|
+
)
|
131
|
+
|
132
|
+
def get_deployment_config(self, model_id: Union[str, List[str]]):
|
133
|
+
"""
|
134
|
+
Retrieves the deployment configuration for one or more Aqua models.
|
135
|
+
|
136
|
+
Parameters
|
137
|
+
----------
|
138
|
+
model_id : Union[str, List[str]]
|
139
|
+
A single model ID (str) or a list of model IDs (List[str]).
|
140
|
+
|
141
|
+
Returns
|
142
|
+
-------
|
143
|
+
None
|
144
|
+
The function sends the deployment configuration as a response.
|
145
|
+
"""
|
146
|
+
app = AquaDeploymentApp()
|
147
|
+
|
148
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
149
|
+
|
150
|
+
if isinstance(model_id, list):
|
151
|
+
# Handle multiple model deployment
|
152
|
+
primary_model_id = self.get_argument("primary_model_id", default=None)
|
153
|
+
deployment_config = app.get_multimodel_deployment_config(
|
154
|
+
model_ids=model_id,
|
155
|
+
primary_model_id=primary_model_id,
|
156
|
+
compartment_id=compartment_id,
|
157
|
+
)
|
158
|
+
else:
|
159
|
+
# Handle single model deployment
|
160
|
+
deployment_config = app.get_deployment_config(model_id=model_id)
|
161
|
+
|
162
|
+
return self.finish(deployment_config)
|
163
|
+
|
164
|
+
def list_shapes(self):
|
165
|
+
"""
|
166
|
+
Lists the valid model deployment shapes.
|
167
|
+
|
168
|
+
Returns
|
169
|
+
-------
|
170
|
+
List[ComputeShapeSummary]:
|
171
|
+
The list of the model deployment shapes.
|
172
|
+
"""
|
173
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
174
|
+
|
175
|
+
return self.finish(
|
176
|
+
AquaDeploymentApp().list_shapes(compartment_id=compartment_id)
|
177
|
+
)
|
178
|
+
|
179
|
+
|
180
|
+
class AquaDeploymentStreamingInferenceHandler(AquaAPIhandler):
|
181
|
+
def _get_model_deployment_response(
|
182
|
+
self,
|
183
|
+
model_deployment_id: str,
|
184
|
+
payload: dict,
|
185
|
+
route_override_header: Optional[str],
|
186
|
+
):
|
187
|
+
"""
|
188
|
+
Returns the model deployment inference response in a streaming fashion.
|
189
|
+
|
190
|
+
This method connects to the specified model deployment endpoint and
|
191
|
+
streams the inference output back to the caller, handling both text
|
192
|
+
and chat completion endpoints depending on the route override.
|
193
|
+
|
194
|
+
Parameters
|
195
|
+
----------
|
196
|
+
model_deployment_id : str
|
197
|
+
The OCID of the model deployment to invoke.
|
198
|
+
Example: 'ocid1.datasciencemodeldeployment.iad.oc1.xxxyz'
|
199
|
+
|
200
|
+
payload : dict
|
201
|
+
Dictionary containing the model inference parameters.
|
202
|
+
Same example for text completions:
|
203
|
+
{
|
204
|
+
"max_tokens": 1024,
|
205
|
+
"temperature": 0.5,
|
206
|
+
"prompt": "what are some good skills deep learning expert. Give us some tips on how to structure interview with some coding example?",
|
207
|
+
"top_p": 0.4,
|
208
|
+
"top_k": 100,
|
209
|
+
"model": "odsc-llm",
|
210
|
+
"frequency_penalty": 1,
|
211
|
+
"presence_penalty": 1,
|
212
|
+
"stream": true
|
213
|
+
}
|
214
|
+
|
215
|
+
route_override_header : Optional[str]
|
216
|
+
Optional override for the inference route, used for routing between
|
217
|
+
different endpoint types (e.g., chat vs. text completions).
|
218
|
+
Example: '/v1/chat/completions'
|
219
|
+
|
220
|
+
Returns
|
221
|
+
-------
|
222
|
+
Generator[str]
|
223
|
+
A generator that yields strings of the model's output as they are received.
|
224
|
+
|
225
|
+
Raises
|
226
|
+
------
|
227
|
+
HTTPError
|
228
|
+
If the request to the model deployment fails or if streaming cannot be established.
|
229
|
+
"""
|
230
|
+
|
231
|
+
model_deployment = AquaDeploymentApp().get(model_deployment_id)
|
232
|
+
endpoint = model_deployment.endpoint + "/predictWithResponseStream"
|
233
|
+
endpoint_type = model_deployment.environment_variables.get(
|
234
|
+
"MODEL_DEPLOY_PREDICT_ENDPOINT", PredictEndpoints.TEXT_COMPLETIONS_ENDPOINT
|
235
|
+
)
|
236
|
+
aqua_client = Client(endpoint=endpoint)
|
237
|
+
|
238
|
+
if PredictEndpoints.CHAT_COMPLETIONS_ENDPOINT in (
|
239
|
+
endpoint_type,
|
240
|
+
route_override_header,
|
241
|
+
):
|
242
|
+
try:
|
243
|
+
for chunk in aqua_client.chat(
|
244
|
+
messages=payload.pop("messages"),
|
245
|
+
payload=payload,
|
246
|
+
stream=True,
|
247
|
+
):
|
248
|
+
try:
|
249
|
+
yield chunk["choices"][0]["delta"]["content"]
|
250
|
+
except Exception as e:
|
251
|
+
logger.debug(
|
252
|
+
f"Exception occurred while parsing streaming response: {e}"
|
253
|
+
)
|
254
|
+
except ExtendedRequestError as ex:
|
255
|
+
raise HTTPError(400, str(ex))
|
256
|
+
except Exception as ex:
|
257
|
+
raise HTTPError(500, str(ex))
|
258
|
+
|
259
|
+
elif endpoint_type == PredictEndpoints.TEXT_COMPLETIONS_ENDPOINT:
|
260
|
+
try:
|
261
|
+
for chunk in aqua_client.generate(
|
262
|
+
prompt=payload.pop("prompt"),
|
263
|
+
payload=payload,
|
264
|
+
stream=True,
|
265
|
+
):
|
266
|
+
try:
|
267
|
+
yield chunk["choices"][0]["text"]
|
268
|
+
except Exception as e:
|
269
|
+
logger.debug(
|
270
|
+
f"Exception occurred while parsing streaming response: {e}"
|
271
|
+
)
|
272
|
+
except ExtendedRequestError as ex:
|
273
|
+
raise HTTPError(400, str(ex))
|
274
|
+
except Exception as ex:
|
275
|
+
raise HTTPError(500, str(ex))
|
276
|
+
|
277
|
+
@handle_exceptions
|
278
|
+
def post(self, model_deployment_id):
|
279
|
+
"""
|
280
|
+
Handles streaming inference request for the Active Model Deployments
|
281
|
+
Raises
|
282
|
+
------
|
283
|
+
HTTPError
|
284
|
+
Raises HTTPError if inputs are missing or are invalid
|
285
|
+
"""
|
286
|
+
try:
|
287
|
+
input_data = self.get_json_body()
|
288
|
+
except Exception as ex:
|
289
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
290
|
+
|
291
|
+
if not input_data:
|
292
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
293
|
+
|
294
|
+
prompt = input_data.get("prompt")
|
295
|
+
messages = input_data.get("messages")
|
296
|
+
|
297
|
+
if not prompt and not messages:
|
298
|
+
raise HTTPError(
|
299
|
+
400, Errors.MISSING_REQUIRED_PARAMETER.format("prompt/messages")
|
300
|
+
)
|
301
|
+
if not input_data.get("model"):
|
302
|
+
raise HTTPError(400, Errors.MISSING_REQUIRED_PARAMETER.format("model"))
|
303
|
+
route_override_header = self.request.headers.get("route", None)
|
304
|
+
self.set_header("Content-Type", "text/event-stream")
|
305
|
+
response_gen = self._get_model_deployment_response(
|
306
|
+
model_deployment_id, input_data, route_override_header
|
307
|
+
)
|
308
|
+
try:
|
309
|
+
for chunk in response_gen:
|
310
|
+
self.write(chunk)
|
311
|
+
self.flush()
|
312
|
+
self.finish()
|
313
|
+
except Exception as ex:
|
314
|
+
self.set_status(ex.status_code)
|
315
|
+
self.write({"message": "Error occurred", "reason": str(ex)})
|
316
|
+
self.finish()
|
317
|
+
|
318
|
+
|
319
|
+
class AquaDeploymentParamsHandler(AquaAPIhandler):
|
320
|
+
"""Handler for Aqua deployment params REST APIs.
|
321
|
+
|
322
|
+
Methods
|
323
|
+
-------
|
324
|
+
get(self, model_id)
|
325
|
+
Retrieves a list of model deployment parameters.
|
326
|
+
post(self, *args, **kwargs)
|
327
|
+
Validates parameters for the given model id.
|
328
|
+
"""
|
329
|
+
|
330
|
+
@handle_exceptions
|
331
|
+
def get(self, model_id):
|
332
|
+
"""Handle GET request."""
|
333
|
+
instance_shape = self.get_argument("instance_shape")
|
334
|
+
gpu_count = self.get_argument("gpu_count", default=None)
|
335
|
+
return self.finish(
|
336
|
+
AquaDeploymentApp().get_deployment_default_params(
|
337
|
+
model_id=model_id, instance_shape=instance_shape, gpu_count=gpu_count
|
338
|
+
)
|
339
|
+
)
|
340
|
+
|
341
|
+
@handle_exceptions
|
342
|
+
def post(self, *args, **kwargs): # noqa: ARG002
|
343
|
+
"""Handles post request for the deployment param handler API.
|
344
|
+
|
345
|
+
Raises
|
346
|
+
------
|
347
|
+
HTTPError
|
348
|
+
Raises HTTPError if inputs are missing or are invalid.
|
349
|
+
"""
|
350
|
+
try:
|
351
|
+
input_data = self.get_json_body()
|
352
|
+
except Exception as ex:
|
353
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
354
|
+
|
355
|
+
if not input_data:
|
356
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
357
|
+
|
358
|
+
model_id = input_data.get("model_id")
|
359
|
+
if not model_id:
|
360
|
+
raise HTTPError(400, Errors.MISSING_REQUIRED_PARAMETER.format("model_id"))
|
361
|
+
|
362
|
+
params = input_data.get("params")
|
363
|
+
container_family = input_data.get("container_family")
|
364
|
+
return self.finish(
|
365
|
+
AquaDeploymentApp().validate_deployment_params(
|
366
|
+
model_id=model_id,
|
367
|
+
params=params,
|
368
|
+
container_family=container_family,
|
369
|
+
)
|
370
|
+
)
|
371
|
+
|
372
|
+
|
373
|
+
__handlers__ = [
|
374
|
+
("deployments/?([^/]*)/params", AquaDeploymentParamsHandler),
|
375
|
+
("deployments/config/?([^/]*)", AquaDeploymentHandler),
|
376
|
+
("deployments/shapes/?([^/]*)", AquaDeploymentHandler),
|
377
|
+
("deployments/?([^/]*)", AquaDeploymentHandler),
|
378
|
+
("deployments/?([^/]*)/activate", AquaDeploymentHandler),
|
379
|
+
("deployments/?([^/]*)/deactivate", AquaDeploymentHandler),
|
380
|
+
("inference/stream/?([^/]*)", AquaDeploymentStreamingInferenceHandler),
|
381
|
+
]
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2024 Oracle and/or its affiliates.
|
4
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
|
6
|
+
import json
|
7
|
+
from typing import List, Union
|
8
|
+
|
9
|
+
from ads.aqua.common.decorator import handle_exceptions
|
10
|
+
from ads.aqua.extension.aqua_ws_msg_handler import AquaWSMsgHandler
|
11
|
+
from ads.aqua.extension.models.ws_models import (
|
12
|
+
ListDeploymentResponse,
|
13
|
+
ModelDeploymentDetailsResponse,
|
14
|
+
RequestResponseType,
|
15
|
+
)
|
16
|
+
from ads.aqua.modeldeployment import AquaDeploymentApp
|
17
|
+
from ads.config import COMPARTMENT_OCID
|
18
|
+
|
19
|
+
|
20
|
+
class AquaDeploymentWSMsgHandler(AquaWSMsgHandler):
|
21
|
+
def __init__(self, message: Union[str, bytes]):
|
22
|
+
super().__init__(message)
|
23
|
+
|
24
|
+
@staticmethod
|
25
|
+
def get_message_types() -> List[RequestResponseType]:
|
26
|
+
return [
|
27
|
+
RequestResponseType.ListDeployments,
|
28
|
+
RequestResponseType.DeploymentDetails,
|
29
|
+
]
|
30
|
+
|
31
|
+
@handle_exceptions
|
32
|
+
def process(self) -> Union[ListDeploymentResponse, ModelDeploymentDetailsResponse]:
|
33
|
+
request = json.loads(self.message)
|
34
|
+
if request.get("kind") == "ListDeployments":
|
35
|
+
deployment_list = AquaDeploymentApp().list(
|
36
|
+
compartment_id=request.get("compartment_id") or COMPARTMENT_OCID,
|
37
|
+
project_id=request.get("project_id"),
|
38
|
+
)
|
39
|
+
response = ListDeploymentResponse(
|
40
|
+
message_id=request.get("message_id"),
|
41
|
+
kind=RequestResponseType.ListDeployments,
|
42
|
+
data=deployment_list,
|
43
|
+
)
|
44
|
+
return response
|
45
|
+
elif request.get("kind") == "DeploymentDetails":
|
46
|
+
deployment_details = AquaDeploymentApp().get(
|
47
|
+
request.get("model_deployment_id")
|
48
|
+
)
|
49
|
+
response = ModelDeploymentDetailsResponse(
|
50
|
+
message_id=request.get("message_id"),
|
51
|
+
kind=RequestResponseType.DeploymentDetails,
|
52
|
+
data=deployment_details,
|
53
|
+
)
|
54
|
+
return response
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2024 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
|
+
import uuid
|
5
|
+
from typing import Any, Dict, List, Optional
|
6
|
+
|
7
|
+
from pydantic import Field
|
8
|
+
|
9
|
+
from ads.aqua.config.utils.serializer import Serializable
|
10
|
+
|
11
|
+
from ads.aqua.constants import (
|
12
|
+
AQUA_TROUBLESHOOTING_LINK
|
13
|
+
)
|
14
|
+
|
15
|
+
class Errors(str):
|
16
|
+
INVALID_INPUT_DATA_FORMAT = "Invalid format of input data."
|
17
|
+
NO_INPUT_DATA = "No input data provided."
|
18
|
+
MISSING_REQUIRED_PARAMETER = "Missing required parameter: '{}'"
|
19
|
+
MISSING_ONEOF_REQUIRED_PARAMETER = "Either '{}' or '{}' is required."
|
20
|
+
INVALID_VALUE_OF_PARAMETER = "Invalid value of parameter: '{}'"
|
21
|
+
|
22
|
+
class ReplyDetails(Serializable):
|
23
|
+
"""Structured reply to be returned to the client."""
|
24
|
+
status: int
|
25
|
+
troubleshooting_tips: str = Field(f"For general tips on troubleshooting: {AQUA_TROUBLESHOOTING_LINK}",
|
26
|
+
description="GitHub Link for troubleshooting documentation")
|
27
|
+
message: str = Field("Unknown HTTP Error.", description="GitHub Link for troubleshooting documentation")
|
28
|
+
service_payload: Optional[Dict[str, Any]] = Field(default_factory=dict)
|
29
|
+
reason: str = Field("Unknown error", description="Reason for Error")
|
30
|
+
request_id: str = Field(str(uuid.uuid4()), description="Unique ID for tracking the error.")
|
@@ -0,0 +1,129 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2024 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 Optional
|
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.evaluation import AquaEvaluationApp
|
12
|
+
from ads.aqua.evaluation.entities import CreateAquaEvaluationDetails
|
13
|
+
from ads.aqua.extension.base_handler import AquaAPIhandler
|
14
|
+
from ads.aqua.extension.errors import Errors
|
15
|
+
from ads.config import COMPARTMENT_OCID
|
16
|
+
|
17
|
+
|
18
|
+
class AquaEvaluationHandler(AquaAPIhandler):
|
19
|
+
"""Handler for Aqua Model Evaluation REST APIs."""
|
20
|
+
|
21
|
+
@handle_exceptions
|
22
|
+
def get(self, eval_id=""):
|
23
|
+
"""Handle GET request."""
|
24
|
+
url_parse = urlparse(self.request.path)
|
25
|
+
paths = url_parse.path.strip("/")
|
26
|
+
if paths.startswith("aqua/evaluation/metrics"):
|
27
|
+
return self.get_default_metrics()
|
28
|
+
if not eval_id:
|
29
|
+
return self.list()
|
30
|
+
return self.read(eval_id)
|
31
|
+
|
32
|
+
@handle_exceptions
|
33
|
+
def post(self, *args, **kwargs): # noqa
|
34
|
+
"""Handles post request for the evaluation APIs
|
35
|
+
|
36
|
+
Raises
|
37
|
+
------
|
38
|
+
HTTPError
|
39
|
+
Raises HTTPError if inputs are missing or are invalid.
|
40
|
+
"""
|
41
|
+
try:
|
42
|
+
input_data = self.get_json_body()
|
43
|
+
except Exception as ex:
|
44
|
+
raise HTTPError(400, Errors.INVALID_INPUT_DATA_FORMAT) from ex
|
45
|
+
|
46
|
+
if not input_data:
|
47
|
+
raise HTTPError(400, Errors.NO_INPUT_DATA)
|
48
|
+
|
49
|
+
self.finish(
|
50
|
+
# TODO: decide what other kwargs will be needed for create aqua evaluation.
|
51
|
+
AquaEvaluationApp().create(
|
52
|
+
create_aqua_evaluation_details=(
|
53
|
+
CreateAquaEvaluationDetails(**input_data)
|
54
|
+
)
|
55
|
+
)
|
56
|
+
)
|
57
|
+
|
58
|
+
@handle_exceptions
|
59
|
+
def put(self, eval_id):
|
60
|
+
"""Handles PUT request for the evaluation APIs"""
|
61
|
+
eval_id = eval_id.split("/")[0]
|
62
|
+
return self.finish(AquaEvaluationApp().cancel(eval_id))
|
63
|
+
|
64
|
+
@handle_exceptions
|
65
|
+
def delete(self, eval_id):
|
66
|
+
return self.finish(AquaEvaluationApp().delete(eval_id))
|
67
|
+
|
68
|
+
def read(self, eval_id):
|
69
|
+
"""Read the information of an Aqua model."""
|
70
|
+
return self.finish(AquaEvaluationApp().get(eval_id))
|
71
|
+
|
72
|
+
def list(self):
|
73
|
+
"""List Aqua models."""
|
74
|
+
compartment_id = self.get_argument("compartment_id", default=COMPARTMENT_OCID)
|
75
|
+
return self.finish(AquaEvaluationApp().list(compartment_id))
|
76
|
+
|
77
|
+
def get_default_metrics(self):
|
78
|
+
"""Lists supported metrics for evaluation."""
|
79
|
+
return self.finish(AquaEvaluationApp().get_supported_metrics())
|
80
|
+
|
81
|
+
|
82
|
+
class AquaEvaluationStatusHandler(AquaAPIhandler):
|
83
|
+
"""Handler for Aqua Evaluation status REST APIs."""
|
84
|
+
|
85
|
+
@handle_exceptions
|
86
|
+
def get(self, eval_id):
|
87
|
+
"""Handle GET request."""
|
88
|
+
eval_id = eval_id.split("/")[0]
|
89
|
+
return self.finish(AquaEvaluationApp().get_status(eval_id))
|
90
|
+
|
91
|
+
|
92
|
+
class AquaEvaluationReportHandler(AquaAPIhandler):
|
93
|
+
"""Handler for Aqua Evaluation report REST APIs."""
|
94
|
+
|
95
|
+
@handle_exceptions
|
96
|
+
def get(self, eval_id):
|
97
|
+
"""Handle GET request."""
|
98
|
+
eval_id = eval_id.split("/")[0]
|
99
|
+
return self.finish(AquaEvaluationApp().download_report(eval_id))
|
100
|
+
|
101
|
+
|
102
|
+
class AquaEvaluationMetricsHandler(AquaAPIhandler):
|
103
|
+
"""Handler for Aqua Evaluation metrics REST APIs."""
|
104
|
+
|
105
|
+
@handle_exceptions
|
106
|
+
def get(self, eval_id):
|
107
|
+
"""Handle GET request."""
|
108
|
+
eval_id = eval_id.split("/")[0]
|
109
|
+
return self.finish(AquaEvaluationApp().load_metrics(eval_id))
|
110
|
+
|
111
|
+
|
112
|
+
class AquaEvaluationConfigHandler(AquaAPIhandler):
|
113
|
+
"""Handler for Aqua Evaluation Config REST APIs."""
|
114
|
+
|
115
|
+
@handle_exceptions
|
116
|
+
def get(self, container: Optional[str] = None, **kwargs): # noqa
|
117
|
+
"""Handle GET request."""
|
118
|
+
|
119
|
+
return self.finish(AquaEvaluationApp().load_evaluation_config(container))
|
120
|
+
|
121
|
+
|
122
|
+
__handlers__ = [
|
123
|
+
("evaluation/config/?([^/]*)", AquaEvaluationConfigHandler),
|
124
|
+
("evaluation/?([^/]*)", AquaEvaluationHandler),
|
125
|
+
("evaluation/?([^/]*/report)", AquaEvaluationReportHandler),
|
126
|
+
("evaluation/?([^/]*/metrics)", AquaEvaluationMetricsHandler),
|
127
|
+
("evaluation/?([^/]*/status)", AquaEvaluationStatusHandler),
|
128
|
+
("evaluation/?([^/]*/cancel)", AquaEvaluationHandler),
|
129
|
+
]
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2024 Oracle and/or its affiliates.
|
4
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
|
6
|
+
import json
|
7
|
+
from typing import List, Union
|
8
|
+
|
9
|
+
from ads.aqua.common.decorator import handle_exceptions
|
10
|
+
from ads.aqua.evaluation import AquaEvaluationApp
|
11
|
+
from ads.aqua.extension.aqua_ws_msg_handler import AquaWSMsgHandler
|
12
|
+
from ads.aqua.extension.models.ws_models import (
|
13
|
+
EvaluationDetailsResponse,
|
14
|
+
ListEvaluationsResponse,
|
15
|
+
RequestResponseType,
|
16
|
+
)
|
17
|
+
from ads.config import COMPARTMENT_OCID
|
18
|
+
|
19
|
+
|
20
|
+
class AquaEvaluationWSMsgHandler(AquaWSMsgHandler):
|
21
|
+
@staticmethod
|
22
|
+
def get_message_types() -> List[RequestResponseType]:
|
23
|
+
return [
|
24
|
+
RequestResponseType.ListEvaluations,
|
25
|
+
RequestResponseType.EvaluationDetails,
|
26
|
+
]
|
27
|
+
|
28
|
+
def __init__(self, message: Union[str, bytes]):
|
29
|
+
super().__init__(message)
|
30
|
+
|
31
|
+
@handle_exceptions
|
32
|
+
def process(self) -> Union[ListEvaluationsResponse, EvaluationDetailsResponse]:
|
33
|
+
request = json.loads(self.message)
|
34
|
+
if request["kind"] == "ListEvaluations":
|
35
|
+
return self.list_evaluations(request)
|
36
|
+
if request["kind"] == "EvaluationDetails":
|
37
|
+
return self.evaluation_details(request)
|
38
|
+
|
39
|
+
@staticmethod
|
40
|
+
def list_evaluations(request) -> ListEvaluationsResponse:
|
41
|
+
eval_list = AquaEvaluationApp().list(
|
42
|
+
request.get("compartment_id") or COMPARTMENT_OCID
|
43
|
+
)
|
44
|
+
response = ListEvaluationsResponse(
|
45
|
+
message_id=request["message_id"],
|
46
|
+
kind=RequestResponseType.ListEvaluations,
|
47
|
+
data=eval_list,
|
48
|
+
)
|
49
|
+
return response
|
50
|
+
|
51
|
+
@staticmethod
|
52
|
+
def evaluation_details(request) -> EvaluationDetailsResponse:
|
53
|
+
evaluation_details = AquaEvaluationApp().get(
|
54
|
+
eval_id=request.get("evaluation_id")
|
55
|
+
)
|
56
|
+
response = EvaluationDetailsResponse(
|
57
|
+
message_id=request.get("message_id"),
|
58
|
+
kind=RequestResponseType.EvaluationDetails,
|
59
|
+
data=evaluation_details,
|
60
|
+
)
|
61
|
+
return response
|