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,653 @@
|
|
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 Any, Dict, List, Optional, Union
|
6
|
+
|
7
|
+
from oci.data_science.models import ModelDeployment, ModelDeploymentSummary
|
8
|
+
from pydantic import BaseModel, Field, model_validator
|
9
|
+
|
10
|
+
from ads.aqua import logger
|
11
|
+
from ads.aqua.common.entities import AquaMultiModelRef
|
12
|
+
from ads.aqua.common.enums import Tags
|
13
|
+
from ads.aqua.config.utils.serializer import Serializable
|
14
|
+
from ads.aqua.constants import UNKNOWN_DICT
|
15
|
+
from ads.aqua.data import AquaResourceIdentifier
|
16
|
+
from ads.common.serializer import DataClassSerializable
|
17
|
+
from ads.common.utils import UNKNOWN, get_console_link
|
18
|
+
|
19
|
+
|
20
|
+
class ConfigValidationError(Exception):
|
21
|
+
"""Exception raised for config validation."""
|
22
|
+
|
23
|
+
def __init__(
|
24
|
+
self,
|
25
|
+
message: str = (
|
26
|
+
"Validation failed: The provided model group configuration is incompatible "
|
27
|
+
"with the selected instance shape. Please verify the GPU count per model and ensure "
|
28
|
+
"multi-model deployment is supported for the chosen instance shape."
|
29
|
+
),
|
30
|
+
):
|
31
|
+
super().__init__(message)
|
32
|
+
|
33
|
+
|
34
|
+
class ShapeInfo(Serializable):
|
35
|
+
"""
|
36
|
+
Represents the configuration details for a compute instance shape.
|
37
|
+
"""
|
38
|
+
|
39
|
+
instance_shape: Optional[str] = Field(
|
40
|
+
default=None,
|
41
|
+
description="The identifier of the compute instance shape (e.g., VM.Standard2.1)",
|
42
|
+
)
|
43
|
+
instance_count: Optional[int] = Field(
|
44
|
+
default=None, description="The number of instances for the given shape."
|
45
|
+
)
|
46
|
+
ocpus: Optional[float] = Field(
|
47
|
+
default=None,
|
48
|
+
description="The number of Oracle CPUs allocated for the instance.",
|
49
|
+
)
|
50
|
+
memory_in_gbs: Optional[float] = Field(
|
51
|
+
default=None,
|
52
|
+
description="The total memory allocated for the instance, in gigabytes.",
|
53
|
+
)
|
54
|
+
|
55
|
+
|
56
|
+
class ModelParams(Serializable):
|
57
|
+
max_tokens: Optional[int] = None
|
58
|
+
temperature: Optional[float] = None
|
59
|
+
top_k: Optional[float] = None
|
60
|
+
top_p: Optional[float] = None
|
61
|
+
model: Optional[str] = None
|
62
|
+
|
63
|
+
class Config:
|
64
|
+
extra = "allow"
|
65
|
+
protected_namespaces = ()
|
66
|
+
|
67
|
+
|
68
|
+
class AquaDeployment(Serializable):
|
69
|
+
"""Represents an Aqua Model Deployment"""
|
70
|
+
|
71
|
+
id: Optional[str] = Field(None, description="The model deployment OCID.")
|
72
|
+
display_name: Optional[str] = Field(
|
73
|
+
None, description="The name of the model deployment."
|
74
|
+
)
|
75
|
+
aqua_service_model: Optional[bool] = Field(
|
76
|
+
False, description="The bool value to indicate if it's aqua service model."
|
77
|
+
)
|
78
|
+
model_id: str = Field(..., description="The model OCID to deploy.")
|
79
|
+
models: Optional[List[AquaMultiModelRef]] = Field(
|
80
|
+
default_factory=list, description="List of models for multi model deployment."
|
81
|
+
)
|
82
|
+
aqua_model_name: Optional[str] = Field(
|
83
|
+
None, description="The name of the aqua model."
|
84
|
+
)
|
85
|
+
state: Optional[str] = Field(None, description="The state of the model deployment.")
|
86
|
+
description: Optional[str] = Field(
|
87
|
+
None, description="The description of the model deployment."
|
88
|
+
)
|
89
|
+
created_on: Optional[str] = Field(
|
90
|
+
None, description="The creation time of the model deployment."
|
91
|
+
)
|
92
|
+
created_by: Optional[str] = Field(
|
93
|
+
None, description="The OCID that creates the model deployment."
|
94
|
+
)
|
95
|
+
endpoint: Optional[str] = Field(
|
96
|
+
None, description="The endpoint of the model deployment."
|
97
|
+
)
|
98
|
+
private_endpoint_id: Optional[str] = Field(
|
99
|
+
None, description="The private endpoint id of the model deployment."
|
100
|
+
)
|
101
|
+
console_link: Optional[str] = Field(
|
102
|
+
None, description="The console link of the model deployment."
|
103
|
+
)
|
104
|
+
lifecycle_details: Optional[str] = Field(
|
105
|
+
None, description="The lifecycle details of the model deployment."
|
106
|
+
)
|
107
|
+
shape_info: Optional[ShapeInfo] = Field(
|
108
|
+
default_factory=ShapeInfo,
|
109
|
+
description="The shape information of the model deployment.",
|
110
|
+
)
|
111
|
+
tags: Optional[dict] = Field(
|
112
|
+
default_factory=dict, description="The tags of the model deployment."
|
113
|
+
)
|
114
|
+
environment_variables: Optional[dict] = Field(
|
115
|
+
default_factory=dict,
|
116
|
+
description="The environment variables of the model deployment.",
|
117
|
+
)
|
118
|
+
cmd: Optional[List[str]] = Field(
|
119
|
+
default_factory=list, description="The cmd of the model deployment."
|
120
|
+
)
|
121
|
+
|
122
|
+
@classmethod
|
123
|
+
def from_oci_model_deployment(
|
124
|
+
cls,
|
125
|
+
oci_model_deployment: Union[ModelDeploymentSummary, ModelDeployment],
|
126
|
+
region: str,
|
127
|
+
) -> "AquaDeployment":
|
128
|
+
"""Converts oci model deployment response to AquaDeployment instance.
|
129
|
+
|
130
|
+
Parameters
|
131
|
+
----------
|
132
|
+
oci_model_deployment: Union[ModelDeploymentSummary, ModelDeployment]
|
133
|
+
The instance of either oci.data_science.models.ModelDeployment or
|
134
|
+
oci.data_science.models.ModelDeploymentSummary class.
|
135
|
+
region: str
|
136
|
+
The region of this model deployment.
|
137
|
+
|
138
|
+
Returns
|
139
|
+
-------
|
140
|
+
AquaDeployment:
|
141
|
+
The instance of the Aqua model deployment.
|
142
|
+
"""
|
143
|
+
instance_configuration = oci_model_deployment.model_deployment_configuration_details.model_configuration_details.instance_configuration
|
144
|
+
instance_shape_config_details = (
|
145
|
+
instance_configuration.model_deployment_instance_shape_config_details
|
146
|
+
)
|
147
|
+
instance_count = oci_model_deployment.model_deployment_configuration_details.model_configuration_details.scaling_policy.instance_count
|
148
|
+
environment_variables = oci_model_deployment.model_deployment_configuration_details.environment_configuration_details.environment_variables
|
149
|
+
cmd = oci_model_deployment.model_deployment_configuration_details.environment_configuration_details.cmd
|
150
|
+
shape_info = ShapeInfo(
|
151
|
+
instance_shape=instance_configuration.instance_shape_name,
|
152
|
+
instance_count=instance_count,
|
153
|
+
ocpus=(
|
154
|
+
instance_shape_config_details.ocpus
|
155
|
+
if instance_shape_config_details
|
156
|
+
else None
|
157
|
+
),
|
158
|
+
memory_in_gbs=(
|
159
|
+
instance_shape_config_details.memory_in_gbs
|
160
|
+
if instance_shape_config_details
|
161
|
+
else None
|
162
|
+
),
|
163
|
+
)
|
164
|
+
model_id = oci_model_deployment._model_deployment_configuration_details.model_configuration_details.model_id
|
165
|
+
tags = {}
|
166
|
+
tags.update(oci_model_deployment.freeform_tags or UNKNOWN_DICT)
|
167
|
+
tags.update(oci_model_deployment.defined_tags or UNKNOWN_DICT)
|
168
|
+
|
169
|
+
aqua_service_model_tag = tags.get(Tags.AQUA_SERVICE_MODEL_TAG, None)
|
170
|
+
aqua_model_name = tags.get(Tags.AQUA_MODEL_NAME_TAG, UNKNOWN)
|
171
|
+
private_endpoint_id = getattr(
|
172
|
+
instance_configuration, "private_endpoint_id", UNKNOWN
|
173
|
+
)
|
174
|
+
|
175
|
+
return AquaDeployment(
|
176
|
+
id=oci_model_deployment.id,
|
177
|
+
model_id=model_id,
|
178
|
+
display_name=oci_model_deployment.display_name,
|
179
|
+
aqua_service_model=aqua_service_model_tag is not None,
|
180
|
+
aqua_model_name=aqua_model_name,
|
181
|
+
shape_info=shape_info,
|
182
|
+
state=oci_model_deployment.lifecycle_state,
|
183
|
+
lifecycle_details=getattr(
|
184
|
+
oci_model_deployment, "lifecycle_details", UNKNOWN
|
185
|
+
),
|
186
|
+
description=oci_model_deployment.description,
|
187
|
+
created_on=str(oci_model_deployment.time_created),
|
188
|
+
created_by=oci_model_deployment.created_by,
|
189
|
+
endpoint=oci_model_deployment.model_deployment_url,
|
190
|
+
private_endpoint_id=private_endpoint_id,
|
191
|
+
console_link=get_console_link(
|
192
|
+
resource="model-deployments",
|
193
|
+
ocid=oci_model_deployment.id,
|
194
|
+
region=region,
|
195
|
+
),
|
196
|
+
tags=tags,
|
197
|
+
environment_variables=environment_variables,
|
198
|
+
cmd=cmd,
|
199
|
+
)
|
200
|
+
|
201
|
+
class Config:
|
202
|
+
extra = "ignore"
|
203
|
+
protected_namespaces = ()
|
204
|
+
|
205
|
+
|
206
|
+
class AquaDeploymentDetail(AquaDeployment, DataClassSerializable):
|
207
|
+
"""Represents a details of Aqua deployment."""
|
208
|
+
|
209
|
+
log_group: AquaResourceIdentifier = Field(default_factory=AquaResourceIdentifier)
|
210
|
+
log: AquaResourceIdentifier = Field(default_factory=AquaResourceIdentifier)
|
211
|
+
|
212
|
+
class Config:
|
213
|
+
extra = "allow"
|
214
|
+
|
215
|
+
|
216
|
+
class ShapeInfoConfig(Serializable):
|
217
|
+
"""Describes how many memory and cpu to this model for specific shape.
|
218
|
+
|
219
|
+
Attributes:
|
220
|
+
memory_in_gbs (float, optional): The number of memory in gbs to this model of the shape.
|
221
|
+
ocpu (float, optional): The number of ocpus to this model of the shape.
|
222
|
+
"""
|
223
|
+
|
224
|
+
memory_in_gbs: Optional[float] = Field(
|
225
|
+
None,
|
226
|
+
description="The number of memory in gbs to this model of the shape.",
|
227
|
+
)
|
228
|
+
ocpu: Optional[float] = Field(
|
229
|
+
None,
|
230
|
+
description="The number of ocpus to this model of the shape.",
|
231
|
+
)
|
232
|
+
|
233
|
+
class Config:
|
234
|
+
extra = "allow"
|
235
|
+
|
236
|
+
|
237
|
+
class DeploymentShapeInfo(Serializable):
|
238
|
+
"""Describes the shape information to this model for specific shape.
|
239
|
+
|
240
|
+
Attributes:
|
241
|
+
configs (List[ShapeInfoConfig], optional): A list of memory and cpu number details to this model of the shape.
|
242
|
+
type (str, optional): The type of the shape.
|
243
|
+
"""
|
244
|
+
|
245
|
+
configs: Optional[List[ShapeInfoConfig]] = Field(
|
246
|
+
default_factory=list,
|
247
|
+
description="A list of memory and cpu number details to this model of the shape.",
|
248
|
+
)
|
249
|
+
type: Optional[str] = Field(
|
250
|
+
default_factory=str, description="The type of the shape."
|
251
|
+
)
|
252
|
+
|
253
|
+
class Config:
|
254
|
+
extra = "allow"
|
255
|
+
|
256
|
+
|
257
|
+
class MultiModelConfig(Serializable):
|
258
|
+
"""Describes how many GPUs and the parameters of specific shape for multi model deployment.
|
259
|
+
|
260
|
+
Attributes:
|
261
|
+
gpu_count (int, optional): Number of GPUs count to this model of this shape.
|
262
|
+
parameters (Dict[str, str], optional): A dictionary of parameters (e.g., VLLM_PARAMS) to
|
263
|
+
configure the behavior of a particular GPU shape.
|
264
|
+
"""
|
265
|
+
|
266
|
+
gpu_count: Optional[int] = Field(
|
267
|
+
default_factory=int, description="The number of GPUs allocated to the model."
|
268
|
+
)
|
269
|
+
parameters: Optional[Dict[str, str]] = Field(
|
270
|
+
default_factory=dict,
|
271
|
+
description="Key-value pairs for GPU shape parameters (e.g., VLLM_PARAMS).",
|
272
|
+
)
|
273
|
+
|
274
|
+
class Config:
|
275
|
+
extra = "allow"
|
276
|
+
|
277
|
+
|
278
|
+
class ConfigurationItem(Serializable):
|
279
|
+
"""Holds key-value parameter pairs for a specific GPU or CPU shape.
|
280
|
+
|
281
|
+
Attributes:
|
282
|
+
parameters (Dict[str, str], optional): A dictionary of parameters (e.g., VLLM_PARAMS) to
|
283
|
+
configure the behavior of a particular GPU shape.
|
284
|
+
multi_model_deployment (List[MultiModelConfig], optional): A list of multi model configuration details.
|
285
|
+
shape_info (DeploymentShapeInfo, optional): The shape information to this model for specific CPU shape.
|
286
|
+
"""
|
287
|
+
|
288
|
+
parameters: Optional[Dict[str, str]] = Field(
|
289
|
+
default_factory=dict,
|
290
|
+
description="Key-value pairs for shape parameters.",
|
291
|
+
)
|
292
|
+
multi_model_deployment: Optional[List[MultiModelConfig]] = Field(
|
293
|
+
default_factory=list, description="A list of multi model configuration details."
|
294
|
+
)
|
295
|
+
shape_info: Optional[DeploymentShapeInfo] = Field(
|
296
|
+
default_factory=DeploymentShapeInfo,
|
297
|
+
description="The shape information to this model for specific shape",
|
298
|
+
)
|
299
|
+
|
300
|
+
class Config:
|
301
|
+
extra = "allow"
|
302
|
+
|
303
|
+
|
304
|
+
class AquaDeploymentConfig(Serializable):
|
305
|
+
"""Represents multi model's shape list and detailed configuration.
|
306
|
+
|
307
|
+
Attributes:
|
308
|
+
shape (List[str], optional): A list of shape names (e.g., BM.GPU.A10.4).
|
309
|
+
configuration (Dict[str, ConfigurationItem], optional): Maps each shape to its configuration details.
|
310
|
+
"""
|
311
|
+
|
312
|
+
shape: Optional[List[str]] = Field(
|
313
|
+
default_factory=list, description="List of supported shapes for the model."
|
314
|
+
)
|
315
|
+
configuration: Optional[Dict[str, ConfigurationItem]] = Field(
|
316
|
+
default_factory=dict, description="Configuration details keyed by shape."
|
317
|
+
)
|
318
|
+
|
319
|
+
class Config:
|
320
|
+
extra = "allow"
|
321
|
+
|
322
|
+
|
323
|
+
class GPUModelAllocation(Serializable):
|
324
|
+
"""Describes how many GPUs are allocated to a particular model.
|
325
|
+
|
326
|
+
Attributes:
|
327
|
+
ocid (str, optional): The unique identifier of the model.
|
328
|
+
gpu_count (int, optional): Number of GPUs allocated to this model.
|
329
|
+
"""
|
330
|
+
|
331
|
+
ocid: Optional[str] = Field(
|
332
|
+
default_factory=str, description="The unique model OCID."
|
333
|
+
)
|
334
|
+
gpu_count: Optional[int] = Field(
|
335
|
+
default_factory=int, description="The number of GPUs allocated to the model."
|
336
|
+
)
|
337
|
+
|
338
|
+
class Config:
|
339
|
+
extra = "allow"
|
340
|
+
|
341
|
+
|
342
|
+
class GPUShapeAllocation(Serializable):
|
343
|
+
"""
|
344
|
+
Allocation details for a specific GPU shape.
|
345
|
+
|
346
|
+
Attributes:
|
347
|
+
models (List[GPUModelAllocation], optional): List of model GPU allocations for this shape.
|
348
|
+
total_gpus_available (int, optional): The total number of GPUs available for this shape.
|
349
|
+
"""
|
350
|
+
|
351
|
+
models: Optional[List[GPUModelAllocation]] = Field(
|
352
|
+
default_factory=list, description="List of model allocations for this shape."
|
353
|
+
)
|
354
|
+
total_gpus_available: Optional[int] = Field(
|
355
|
+
default_factory=int, description="Total GPUs available for this shape."
|
356
|
+
)
|
357
|
+
|
358
|
+
class Config:
|
359
|
+
extra = "allow"
|
360
|
+
|
361
|
+
|
362
|
+
class ModelDeploymentConfigSummary(Serializable):
|
363
|
+
"""Top-level configuration model for OCI-based deployments.
|
364
|
+
|
365
|
+
Attributes:
|
366
|
+
deployment_config (Dict[str, AquaDeploymentConfig], optional): Deployment configurations
|
367
|
+
keyed by model OCID.
|
368
|
+
gpu_allocation (Dict[str, GPUShapeAllocation], optional): GPU allocations keyed by GPU shape.
|
369
|
+
error_message (str, optional): Error message if GPU allocation is not possible.
|
370
|
+
"""
|
371
|
+
|
372
|
+
deployment_config: Optional[Dict[str, AquaDeploymentConfig]] = Field(
|
373
|
+
default_factory=dict,
|
374
|
+
description=(
|
375
|
+
"Deployment configuration details for each model, including supported shapes "
|
376
|
+
"and shape-specific parameters."
|
377
|
+
),
|
378
|
+
)
|
379
|
+
gpu_allocation: Optional[Dict[str, GPUShapeAllocation]] = Field(
|
380
|
+
default_factory=dict,
|
381
|
+
description=(
|
382
|
+
"Details on how GPUs are allocated per shape, including the total "
|
383
|
+
"GPUs available for each shape."
|
384
|
+
),
|
385
|
+
)
|
386
|
+
error_message: Optional[str] = Field(
|
387
|
+
default=None, description="Error message if GPU allocation is not possible."
|
388
|
+
)
|
389
|
+
|
390
|
+
class Config:
|
391
|
+
extra = "allow"
|
392
|
+
|
393
|
+
|
394
|
+
class CreateModelDeploymentDetails(BaseModel):
|
395
|
+
"""Class for creating Aqua model deployments."""
|
396
|
+
|
397
|
+
instance_shape: str = Field(
|
398
|
+
..., description="The instance shape used for deployment."
|
399
|
+
)
|
400
|
+
display_name: str = Field(..., description="The name of the model deployment.")
|
401
|
+
compartment_id: Optional[str] = Field(None, description="The compartment OCID.")
|
402
|
+
project_id: Optional[str] = Field(None, description="The project OCID.")
|
403
|
+
description: Optional[str] = Field(
|
404
|
+
None, description="The description of the deployment."
|
405
|
+
)
|
406
|
+
model_id: Optional[str] = Field(None, description="The model OCID to deploy.")
|
407
|
+
models: Optional[List[AquaMultiModelRef]] = Field(
|
408
|
+
None, description="List of models for multimodel deployment."
|
409
|
+
)
|
410
|
+
instance_count: int = Field(
|
411
|
+
None, description="Number of instances used for deployment."
|
412
|
+
)
|
413
|
+
log_group_id: Optional[str] = Field(
|
414
|
+
None, description="OCI logging group ID for logs."
|
415
|
+
)
|
416
|
+
access_log_id: Optional[str] = Field(
|
417
|
+
None,
|
418
|
+
description="OCID for access logs. "
|
419
|
+
"https://docs.oracle.com/en-us/iaas/data-science/using/model_dep_using_logging.htm",
|
420
|
+
)
|
421
|
+
predict_log_id: Optional[str] = Field(
|
422
|
+
None,
|
423
|
+
description="OCID for prediction logs."
|
424
|
+
"https://docs.oracle.com/en-us/iaas/data-science/using/model_dep_using_logging.htm",
|
425
|
+
)
|
426
|
+
bandwidth_mbps: Optional[int] = Field(
|
427
|
+
None, description="Bandwidth limit on the load balancer in Mbps."
|
428
|
+
)
|
429
|
+
web_concurrency: Optional[int] = Field(
|
430
|
+
None, description="Number of worker processes/threads for handling requests."
|
431
|
+
)
|
432
|
+
server_port: Optional[int] = Field(
|
433
|
+
None, description="Server port for the Docker container image."
|
434
|
+
)
|
435
|
+
health_check_port: Optional[int] = Field(
|
436
|
+
None, description="Health check port for the Docker container image."
|
437
|
+
)
|
438
|
+
env_var: Optional[Dict[str, str]] = Field(
|
439
|
+
default_factory=dict, description="Environment variables for deployment."
|
440
|
+
)
|
441
|
+
container_family: Optional[str] = Field(
|
442
|
+
None, description="Image family of the model deployment container runtime."
|
443
|
+
)
|
444
|
+
memory_in_gbs: Optional[float] = Field(
|
445
|
+
None, description="Memory (in GB) for the selected shape."
|
446
|
+
)
|
447
|
+
ocpus: Optional[float] = Field(
|
448
|
+
None, description="OCPU count for the selected shape."
|
449
|
+
)
|
450
|
+
model_file: Optional[str] = Field(
|
451
|
+
None, description="File used for model deployment."
|
452
|
+
)
|
453
|
+
private_endpoint_id: Optional[str] = Field(
|
454
|
+
None, description="Private endpoint ID for model deployment."
|
455
|
+
)
|
456
|
+
container_image_uri: Optional[str] = Field(
|
457
|
+
None,
|
458
|
+
description="Image URI for model deployment container runtime "
|
459
|
+
"(ignored for service-managed containers). "
|
460
|
+
"Required parameter for BYOC based deployments if this parameter was not set during "
|
461
|
+
"model registration.",
|
462
|
+
)
|
463
|
+
cmd_var: Optional[List[str]] = Field(
|
464
|
+
None, description="Command variables for the container runtime."
|
465
|
+
)
|
466
|
+
freeform_tags: Optional[Dict] = Field(
|
467
|
+
None, description="Freeform tags for model deployment."
|
468
|
+
)
|
469
|
+
defined_tags: Optional[Dict] = Field(
|
470
|
+
None, description="Defined tags for model deployment."
|
471
|
+
)
|
472
|
+
|
473
|
+
@model_validator(mode="before")
|
474
|
+
@classmethod
|
475
|
+
def validate(cls, values: Any) -> Any:
|
476
|
+
"""Ensures exactly one of `model_id` or `models` is provided."""
|
477
|
+
model_id = values.get("model_id")
|
478
|
+
models = values.get("models")
|
479
|
+
if bool(model_id) == bool(models): # Both set or both unset
|
480
|
+
raise ValueError(
|
481
|
+
"Exactly one of `model_id` or `models` must be provided to create a model deployment."
|
482
|
+
)
|
483
|
+
return values
|
484
|
+
|
485
|
+
def validate_multimodel_deployment_feasibility(
|
486
|
+
self, models_config_summary: ModelDeploymentConfigSummary
|
487
|
+
) -> None:
|
488
|
+
"""
|
489
|
+
Validates whether the selected model group is feasible for a multi-model deployment
|
490
|
+
on the chosen instance shape.
|
491
|
+
|
492
|
+
Validation Criteria:
|
493
|
+
- Ensures that the model group is not empty.
|
494
|
+
- Verifies that the selected instance shape is supported by the GPU allocation.
|
495
|
+
- Confirms that each model in the group has a corresponding deployment configuration.
|
496
|
+
- Ensures that each model's user-specified GPU allocation is allowed by its deployment configuration.
|
497
|
+
- Checks that the total GPUs requested by the model group does not exceed the available GPU capacity
|
498
|
+
for the selected instance shape.
|
499
|
+
|
500
|
+
Parameters
|
501
|
+
----------
|
502
|
+
models_config_summary : ModelDeploymentConfigSummary
|
503
|
+
Contains GPU allocations and deployment configuration for models.
|
504
|
+
|
505
|
+
Raises
|
506
|
+
------
|
507
|
+
ConfigValidationError:
|
508
|
+
- If the model group is empty.
|
509
|
+
- If the selected instance shape is not supported.
|
510
|
+
- If any model is missing from the deployment configuration.
|
511
|
+
- If a model's GPU allocation does not match any valid configuration.
|
512
|
+
- If the total requested GPUs exceed the instance shape’s capacity.
|
513
|
+
"""
|
514
|
+
# Ensure that at least one model is provided.
|
515
|
+
if not self.models:
|
516
|
+
logger.error("No models provided in the model group.")
|
517
|
+
raise ConfigValidationError(
|
518
|
+
"Multi-model deployment requires at least one model. Please provide one or more models."
|
519
|
+
)
|
520
|
+
|
521
|
+
selected_shape = self.instance_shape
|
522
|
+
|
523
|
+
if models_config_summary.error_message:
|
524
|
+
logger.error(models_config_summary.error_message)
|
525
|
+
raise ConfigValidationError(models_config_summary.error_message)
|
526
|
+
|
527
|
+
# Verify that the selected shape is supported by the GPU allocation.
|
528
|
+
if selected_shape not in models_config_summary.gpu_allocation:
|
529
|
+
supported_shapes = list(models_config_summary.gpu_allocation.keys())
|
530
|
+
error_message = (
|
531
|
+
f"The model group is not compatible with the selected instance shape `{selected_shape}`. "
|
532
|
+
f"Supported shapes: {supported_shapes}."
|
533
|
+
)
|
534
|
+
logger.error(error_message)
|
535
|
+
raise ConfigValidationError(error_message)
|
536
|
+
|
537
|
+
total_available_gpus: int = models_config_summary.gpu_allocation[
|
538
|
+
selected_shape
|
539
|
+
].total_gpus_available
|
540
|
+
model_deployment_config = models_config_summary.deployment_config
|
541
|
+
|
542
|
+
# Verify that every model in the group has a corresponding deployment configuration.
|
543
|
+
required_model_ids = {model.model_id for model in self.models}
|
544
|
+
missing_model_ids = required_model_ids - set(model_deployment_config.keys())
|
545
|
+
if missing_model_ids:
|
546
|
+
error_message = (
|
547
|
+
f"Missing deployment configuration for models: {list(missing_model_ids)}. "
|
548
|
+
"Ensure all selected models are properly configured. If you are deploying custom "
|
549
|
+
"models that lack AQUA service configuration, refer to the deployment guidelines here: "
|
550
|
+
"https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/multimodel-deployment-tips.md#custom_models"
|
551
|
+
)
|
552
|
+
logger.error(error_message)
|
553
|
+
raise ConfigValidationError(error_message)
|
554
|
+
|
555
|
+
sum_model_gpus = 0
|
556
|
+
is_single_model = len(self.models) == 1
|
557
|
+
|
558
|
+
# Validate each model's GPU allocation against its deployment configuration.
|
559
|
+
for model in self.models:
|
560
|
+
sum_model_gpus += model.gpu_count
|
561
|
+
aqua_deployment_config = model_deployment_config[model.model_id]
|
562
|
+
|
563
|
+
# Skip validation for models without deployment configuration details.
|
564
|
+
if not aqua_deployment_config.configuration:
|
565
|
+
error_message = (
|
566
|
+
f"Missing deployment configuration for model `{model.model_id}`. "
|
567
|
+
"Please verify that the model is correctly configured. If you are deploying custom models without AQUA service configuration, "
|
568
|
+
"refer to the guidelines at: "
|
569
|
+
"https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/multimodel-deployment-tips.md#custom_models"
|
570
|
+
)
|
571
|
+
|
572
|
+
logger.error(error_message)
|
573
|
+
raise ConfigValidationError(error_message)
|
574
|
+
|
575
|
+
allowed_shapes = (
|
576
|
+
list(
|
577
|
+
set(aqua_deployment_config.configuration.keys()).union(
|
578
|
+
set(aqua_deployment_config.shape or [])
|
579
|
+
)
|
580
|
+
)
|
581
|
+
if is_single_model
|
582
|
+
else list(aqua_deployment_config.configuration.keys())
|
583
|
+
)
|
584
|
+
|
585
|
+
if selected_shape not in allowed_shapes:
|
586
|
+
error_message = (
|
587
|
+
f"Model `{model.model_id}` is not compatible with the selected instance shape `{selected_shape}`. "
|
588
|
+
f"Select a different instance shape from allowed shapes {allowed_shapes}."
|
589
|
+
)
|
590
|
+
logger.error(error_message)
|
591
|
+
raise ConfigValidationError(error_message)
|
592
|
+
|
593
|
+
# Retrieve valid GPU counts for the selected shape.
|
594
|
+
multi_model_configs = aqua_deployment_config.configuration.get(
|
595
|
+
selected_shape, ConfigurationItem()
|
596
|
+
).multi_model_deployment
|
597
|
+
|
598
|
+
valid_gpu_configurations = [cfg.gpu_count for cfg in multi_model_configs]
|
599
|
+
|
600
|
+
if model.gpu_count not in valid_gpu_configurations:
|
601
|
+
valid_gpu_str = valid_gpu_configurations or []
|
602
|
+
|
603
|
+
if is_single_model:
|
604
|
+
# If total GPU allocation is not supported by selected model
|
605
|
+
if selected_shape not in aqua_deployment_config.shape:
|
606
|
+
error_message = (
|
607
|
+
f"Model `{model.model_id}` is configured with {model.gpu_count} GPU(s), "
|
608
|
+
f"which is invalid. The allowed GPU configurations are: {valid_gpu_str}."
|
609
|
+
)
|
610
|
+
logger.error(error_message)
|
611
|
+
raise ConfigValidationError(error_message)
|
612
|
+
|
613
|
+
if model.gpu_count != total_available_gpus:
|
614
|
+
error_message = (
|
615
|
+
f"Model '{model.model_id}' is configured to use {model.gpu_count} GPU(s), "
|
616
|
+
f"which not fully utilize the selected instance shape with {total_available_gpus} available GPU(s). "
|
617
|
+
"Consider adjusting the GPU allocation to better utilize the available resources and maximize performance."
|
618
|
+
)
|
619
|
+
logger.error(error_message)
|
620
|
+
raise ConfigValidationError(error_message)
|
621
|
+
|
622
|
+
else:
|
623
|
+
error_message = (
|
624
|
+
f"Model `{model.model_id}` is configured with {model.gpu_count} GPU(s), which is invalid. "
|
625
|
+
f"Valid GPU configurations are: {valid_gpu_str}. Please adjust the GPU allocation "
|
626
|
+
f"or choose an instance shape that supports a higher GPU count."
|
627
|
+
)
|
628
|
+
logger.error(error_message)
|
629
|
+
raise ConfigValidationError(error_message)
|
630
|
+
|
631
|
+
if sum_model_gpus < total_available_gpus:
|
632
|
+
error_message = (
|
633
|
+
f"Selected models are configured to use {sum_model_gpus} GPU(s), "
|
634
|
+
f"which not fully utilize the selected instance shape with {total_available_gpus} available GPU(s). "
|
635
|
+
"This configuration may lead to suboptimal performance for a multi-model deployment. "
|
636
|
+
"Consider adjusting the GPU allocation to better utilize the available resources and maximize performance."
|
637
|
+
)
|
638
|
+
logger.warning(error_message)
|
639
|
+
# raise ConfigValidationError(error_message)
|
640
|
+
|
641
|
+
# Check that the total GPU count for the model group does not exceed the instance capacity.
|
642
|
+
if sum_model_gpus > total_available_gpus:
|
643
|
+
error_message = (
|
644
|
+
f"The selected instance shape `{selected_shape}` provides `{total_available_gpus}` GPU(s), "
|
645
|
+
f"but the total GPU allocation required by the model group is `{sum_model_gpus}` GPU(s). "
|
646
|
+
"Please adjust the GPU allocation per model or choose an instance shape with greater GPU capacity."
|
647
|
+
)
|
648
|
+
logger.error(error_message)
|
649
|
+
raise ConfigValidationError(error_message)
|
650
|
+
|
651
|
+
class Config:
|
652
|
+
extra = "allow"
|
653
|
+
protected_namespaces = ()
|