oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ads/aqua/__init__.py +40 -0
- ads/aqua/app.py +507 -0
- ads/aqua/cli.py +96 -0
- ads/aqua/client/__init__.py +3 -0
- ads/aqua/client/client.py +836 -0
- ads/aqua/client/openai_client.py +305 -0
- ads/aqua/common/__init__.py +5 -0
- ads/aqua/common/decorator.py +125 -0
- ads/aqua/common/entities.py +274 -0
- ads/aqua/common/enums.py +134 -0
- ads/aqua/common/errors.py +109 -0
- ads/aqua/common/utils.py +1295 -0
- ads/aqua/config/__init__.py +4 -0
- ads/aqua/config/container_config.py +246 -0
- ads/aqua/config/evaluation/__init__.py +4 -0
- ads/aqua/config/evaluation/evaluation_service_config.py +147 -0
- ads/aqua/config/utils/__init__.py +4 -0
- ads/aqua/config/utils/serializer.py +339 -0
- ads/aqua/constants.py +116 -0
- ads/aqua/data.py +14 -0
- ads/aqua/dummy_data/icon.txt +1 -0
- ads/aqua/dummy_data/oci_model_deployments.json +56 -0
- ads/aqua/dummy_data/oci_models.json +1 -0
- ads/aqua/dummy_data/readme.md +26 -0
- ads/aqua/evaluation/__init__.py +8 -0
- ads/aqua/evaluation/constants.py +53 -0
- ads/aqua/evaluation/entities.py +186 -0
- ads/aqua/evaluation/errors.py +70 -0
- ads/aqua/evaluation/evaluation.py +1814 -0
- ads/aqua/extension/__init__.py +42 -0
- ads/aqua/extension/aqua_ws_msg_handler.py +76 -0
- ads/aqua/extension/base_handler.py +90 -0
- ads/aqua/extension/common_handler.py +121 -0
- ads/aqua/extension/common_ws_msg_handler.py +36 -0
- ads/aqua/extension/deployment_handler.py +381 -0
- ads/aqua/extension/deployment_ws_msg_handler.py +54 -0
- ads/aqua/extension/errors.py +30 -0
- ads/aqua/extension/evaluation_handler.py +129 -0
- ads/aqua/extension/evaluation_ws_msg_handler.py +61 -0
- ads/aqua/extension/finetune_handler.py +96 -0
- ads/aqua/extension/model_handler.py +390 -0
- ads/aqua/extension/models/__init__.py +0 -0
- ads/aqua/extension/models/ws_models.py +145 -0
- ads/aqua/extension/models_ws_msg_handler.py +50 -0
- ads/aqua/extension/ui_handler.py +300 -0
- ads/aqua/extension/ui_websocket_handler.py +130 -0
- ads/aqua/extension/utils.py +133 -0
- ads/aqua/finetuning/__init__.py +7 -0
- ads/aqua/finetuning/constants.py +23 -0
- ads/aqua/finetuning/entities.py +181 -0
- ads/aqua/finetuning/finetuning.py +749 -0
- ads/aqua/model/__init__.py +8 -0
- ads/aqua/model/constants.py +60 -0
- ads/aqua/model/entities.py +385 -0
- ads/aqua/model/enums.py +32 -0
- ads/aqua/model/model.py +2134 -0
- ads/aqua/model/utils.py +52 -0
- ads/aqua/modeldeployment/__init__.py +6 -0
- ads/aqua/modeldeployment/constants.py +10 -0
- ads/aqua/modeldeployment/deployment.py +1315 -0
- ads/aqua/modeldeployment/entities.py +653 -0
- ads/aqua/modeldeployment/utils.py +543 -0
- ads/aqua/resources/gpu_shapes_index.json +94 -0
- ads/aqua/server/__init__.py +4 -0
- ads/aqua/server/__main__.py +24 -0
- ads/aqua/server/app.py +47 -0
- ads/aqua/server/aqua_spec.yml +1291 -0
- ads/aqua/training/__init__.py +4 -0
- ads/aqua/training/exceptions.py +476 -0
- ads/aqua/ui.py +519 -0
- ads/automl/__init__.py +9 -0
- ads/automl/driver.py +330 -0
- ads/automl/provider.py +975 -0
- ads/bds/__init__.py +5 -0
- ads/bds/auth.py +127 -0
- ads/bds/big_data_service.py +255 -0
- ads/catalog/__init__.py +19 -0
- ads/catalog/model.py +1576 -0
- ads/catalog/notebook.py +461 -0
- ads/catalog/project.py +468 -0
- ads/catalog/summary.py +178 -0
- ads/common/__init__.py +11 -0
- ads/common/analyzer.py +65 -0
- ads/common/artifact/.model-ignore +63 -0
- ads/common/artifact/__init__.py +10 -0
- ads/common/auth.py +1122 -0
- ads/common/card_identifier.py +83 -0
- ads/common/config.py +647 -0
- ads/common/data.py +165 -0
- ads/common/decorator/__init__.py +9 -0
- ads/common/decorator/argument_to_case.py +88 -0
- ads/common/decorator/deprecate.py +69 -0
- ads/common/decorator/require_nonempty_arg.py +65 -0
- ads/common/decorator/runtime_dependency.py +178 -0
- ads/common/decorator/threaded.py +97 -0
- ads/common/decorator/utils.py +35 -0
- ads/common/dsc_file_system.py +303 -0
- ads/common/error.py +14 -0
- ads/common/extended_enum.py +81 -0
- ads/common/function/__init__.py +5 -0
- ads/common/function/fn_util.py +142 -0
- ads/common/function/func_conf.yaml +25 -0
- ads/common/ipython.py +76 -0
- ads/common/model.py +679 -0
- ads/common/model_artifact.py +1759 -0
- ads/common/model_artifact_schema.json +107 -0
- ads/common/model_export_util.py +664 -0
- ads/common/model_metadata.py +24 -0
- ads/common/object_storage_details.py +296 -0
- ads/common/oci_client.py +179 -0
- ads/common/oci_datascience.py +46 -0
- ads/common/oci_logging.py +1144 -0
- ads/common/oci_mixin.py +957 -0
- ads/common/oci_resource.py +136 -0
- ads/common/serializer.py +559 -0
- ads/common/utils.py +1852 -0
- ads/common/word_lists.py +1491 -0
- ads/common/work_request.py +189 -0
- ads/config.py +1 -0
- ads/data_labeling/__init__.py +13 -0
- ads/data_labeling/boundingbox.py +253 -0
- ads/data_labeling/constants.py +47 -0
- ads/data_labeling/data_labeling_service.py +244 -0
- ads/data_labeling/interface/__init__.py +5 -0
- ads/data_labeling/interface/loader.py +16 -0
- ads/data_labeling/interface/parser.py +16 -0
- ads/data_labeling/interface/reader.py +23 -0
- ads/data_labeling/loader/__init__.py +5 -0
- ads/data_labeling/loader/file_loader.py +241 -0
- ads/data_labeling/metadata.py +110 -0
- ads/data_labeling/mixin/__init__.py +5 -0
- ads/data_labeling/mixin/data_labeling.py +232 -0
- ads/data_labeling/ner.py +129 -0
- ads/data_labeling/parser/__init__.py +5 -0
- ads/data_labeling/parser/dls_record_parser.py +388 -0
- ads/data_labeling/parser/export_metadata_parser.py +94 -0
- ads/data_labeling/parser/export_record_parser.py +473 -0
- ads/data_labeling/reader/__init__.py +5 -0
- ads/data_labeling/reader/dataset_reader.py +574 -0
- ads/data_labeling/reader/dls_record_reader.py +121 -0
- ads/data_labeling/reader/export_record_reader.py +62 -0
- ads/data_labeling/reader/jsonl_reader.py +75 -0
- ads/data_labeling/reader/metadata_reader.py +203 -0
- ads/data_labeling/reader/record_reader.py +263 -0
- ads/data_labeling/record.py +52 -0
- ads/data_labeling/visualizer/__init__.py +5 -0
- ads/data_labeling/visualizer/image_visualizer.py +525 -0
- ads/data_labeling/visualizer/text_visualizer.py +357 -0
- ads/database/__init__.py +5 -0
- ads/database/connection.py +338 -0
- ads/dataset/__init__.py +10 -0
- ads/dataset/capabilities.md +51 -0
- ads/dataset/classification_dataset.py +339 -0
- ads/dataset/correlation.py +226 -0
- ads/dataset/correlation_plot.py +563 -0
- ads/dataset/dask_series.py +173 -0
- ads/dataset/dataframe_transformer.py +110 -0
- ads/dataset/dataset.py +1979 -0
- ads/dataset/dataset_browser.py +360 -0
- ads/dataset/dataset_with_target.py +995 -0
- ads/dataset/exception.py +25 -0
- ads/dataset/factory.py +987 -0
- ads/dataset/feature_engineering_transformer.py +35 -0
- ads/dataset/feature_selection.py +107 -0
- ads/dataset/forecasting_dataset.py +26 -0
- ads/dataset/helper.py +1450 -0
- ads/dataset/label_encoder.py +99 -0
- ads/dataset/mixin/__init__.py +5 -0
- ads/dataset/mixin/dataset_accessor.py +134 -0
- ads/dataset/pipeline.py +58 -0
- ads/dataset/plot.py +710 -0
- ads/dataset/progress.py +86 -0
- ads/dataset/recommendation.py +297 -0
- ads/dataset/recommendation_transformer.py +502 -0
- ads/dataset/regression_dataset.py +14 -0
- ads/dataset/sampled_dataset.py +1050 -0
- ads/dataset/target.py +98 -0
- ads/dataset/timeseries.py +18 -0
- ads/dbmixin/__init__.py +5 -0
- ads/dbmixin/db_pandas_accessor.py +153 -0
- ads/environment/__init__.py +9 -0
- ads/environment/ml_runtime.py +66 -0
- ads/evaluations/README.md +14 -0
- ads/evaluations/__init__.py +109 -0
- ads/evaluations/evaluation_plot.py +983 -0
- ads/evaluations/evaluator.py +1334 -0
- ads/evaluations/statistical_metrics.py +543 -0
- ads/experiments/__init__.py +9 -0
- ads/experiments/capabilities.md +0 -0
- ads/explanations/__init__.py +21 -0
- ads/explanations/base_explainer.py +142 -0
- ads/explanations/capabilities.md +83 -0
- ads/explanations/explainer.py +190 -0
- ads/explanations/mlx_global_explainer.py +1050 -0
- ads/explanations/mlx_interface.py +386 -0
- ads/explanations/mlx_local_explainer.py +287 -0
- ads/explanations/mlx_whatif_explainer.py +201 -0
- ads/feature_engineering/__init__.py +20 -0
- ads/feature_engineering/accessor/__init__.py +5 -0
- ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
- ads/feature_engineering/accessor/mixin/__init__.py +5 -0
- ads/feature_engineering/accessor/mixin/correlation.py +166 -0
- ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
- ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
- ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
- ads/feature_engineering/accessor/mixin/utils.py +65 -0
- ads/feature_engineering/accessor/series_accessor.py +431 -0
- ads/feature_engineering/adsimage/__init__.py +5 -0
- ads/feature_engineering/adsimage/image.py +192 -0
- ads/feature_engineering/adsimage/image_reader.py +170 -0
- ads/feature_engineering/adsimage/interface/__init__.py +5 -0
- ads/feature_engineering/adsimage/interface/reader.py +19 -0
- ads/feature_engineering/adsstring/__init__.py +7 -0
- ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
- ads/feature_engineering/adsstring/string/__init__.py +8 -0
- ads/feature_engineering/data_schema.json +57 -0
- ads/feature_engineering/dataset/__init__.py +5 -0
- ads/feature_engineering/dataset/zip_code_data.py +42062 -0
- ads/feature_engineering/exceptions.py +40 -0
- ads/feature_engineering/feature_type/__init__.py +133 -0
- ads/feature_engineering/feature_type/address.py +184 -0
- ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
- ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
- ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
- ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
- ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
- ads/feature_engineering/feature_type/adsstring/string.py +258 -0
- ads/feature_engineering/feature_type/base.py +58 -0
- ads/feature_engineering/feature_type/boolean.py +183 -0
- ads/feature_engineering/feature_type/category.py +146 -0
- ads/feature_engineering/feature_type/constant.py +137 -0
- ads/feature_engineering/feature_type/continuous.py +151 -0
- ads/feature_engineering/feature_type/creditcard.py +314 -0
- ads/feature_engineering/feature_type/datetime.py +190 -0
- ads/feature_engineering/feature_type/discrete.py +134 -0
- ads/feature_engineering/feature_type/document.py +43 -0
- ads/feature_engineering/feature_type/gis.py +251 -0
- ads/feature_engineering/feature_type/handler/__init__.py +5 -0
- ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
- ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
- ads/feature_engineering/feature_type/handler/warnings.py +128 -0
- ads/feature_engineering/feature_type/integer.py +142 -0
- ads/feature_engineering/feature_type/ip_address.py +144 -0
- ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
- ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
- ads/feature_engineering/feature_type/lat_long.py +256 -0
- ads/feature_engineering/feature_type/object.py +43 -0
- ads/feature_engineering/feature_type/ordinal.py +132 -0
- ads/feature_engineering/feature_type/phone_number.py +135 -0
- ads/feature_engineering/feature_type/string.py +171 -0
- ads/feature_engineering/feature_type/text.py +93 -0
- ads/feature_engineering/feature_type/unknown.py +43 -0
- ads/feature_engineering/feature_type/zip_code.py +164 -0
- ads/feature_engineering/feature_type_manager.py +406 -0
- ads/feature_engineering/schema.py +795 -0
- ads/feature_engineering/utils.py +245 -0
- ads/feature_store/.readthedocs.yaml +19 -0
- ads/feature_store/README.md +65 -0
- ads/feature_store/__init__.py +9 -0
- ads/feature_store/common/__init__.py +0 -0
- ads/feature_store/common/enums.py +339 -0
- ads/feature_store/common/exceptions.py +18 -0
- ads/feature_store/common/spark_session_singleton.py +125 -0
- ads/feature_store/common/utils/__init__.py +0 -0
- ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
- ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
- ads/feature_store/common/utils/transformation_utils.py +82 -0
- ads/feature_store/common/utils/utility.py +403 -0
- ads/feature_store/data_validation/__init__.py +0 -0
- ads/feature_store/data_validation/great_expectation.py +129 -0
- ads/feature_store/dataset.py +1230 -0
- ads/feature_store/dataset_job.py +530 -0
- ads/feature_store/docs/Dockerfile +7 -0
- ads/feature_store/docs/Makefile +44 -0
- ads/feature_store/docs/conf.py +28 -0
- ads/feature_store/docs/requirements.txt +14 -0
- ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
- ads/feature_store/docs/source/cicd.rst +137 -0
- ads/feature_store/docs/source/conf.py +86 -0
- ads/feature_store/docs/source/data_versioning.rst +33 -0
- ads/feature_store/docs/source/dataset.rst +388 -0
- ads/feature_store/docs/source/dataset_job.rst +27 -0
- ads/feature_store/docs/source/demo.rst +70 -0
- ads/feature_store/docs/source/entity.rst +78 -0
- ads/feature_store/docs/source/feature_group.rst +624 -0
- ads/feature_store/docs/source/feature_group_job.rst +29 -0
- ads/feature_store/docs/source/feature_store.rst +122 -0
- ads/feature_store/docs/source/feature_store_class.rst +123 -0
- ads/feature_store/docs/source/feature_validation.rst +66 -0
- ads/feature_store/docs/source/figures/cicd.png +0 -0
- ads/feature_store/docs/source/figures/data_validation.png +0 -0
- ads/feature_store/docs/source/figures/data_versioning.png +0 -0
- ads/feature_store/docs/source/figures/dataset.gif +0 -0
- ads/feature_store/docs/source/figures/dataset.png +0 -0
- ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
- ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
- ads/feature_store/docs/source/figures/entity.png +0 -0
- ads/feature_store/docs/source/figures/feature_group.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
- ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
- ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
- ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
- ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
- ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
- ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
- ads/feature_store/docs/source/figures/overview.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
- ads/feature_store/docs/source/figures/stats_1.png +0 -0
- ads/feature_store/docs/source/figures/stats_2.png +0 -0
- ads/feature_store/docs/source/figures/stats_d.png +0 -0
- ads/feature_store/docs/source/figures/stats_fg.png +0 -0
- ads/feature_store/docs/source/figures/transformation.png +0 -0
- ads/feature_store/docs/source/figures/transformations.gif +0 -0
- ads/feature_store/docs/source/figures/validation.png +0 -0
- ads/feature_store/docs/source/figures/validation_fg.png +0 -0
- ads/feature_store/docs/source/figures/validation_results.png +0 -0
- ads/feature_store/docs/source/figures/validation_summary.png +0 -0
- ads/feature_store/docs/source/index.rst +81 -0
- ads/feature_store/docs/source/module.rst +8 -0
- ads/feature_store/docs/source/notebook.rst +94 -0
- ads/feature_store/docs/source/overview.rst +47 -0
- ads/feature_store/docs/source/quickstart.rst +176 -0
- ads/feature_store/docs/source/release_notes.rst +194 -0
- ads/feature_store/docs/source/setup_feature_store.rst +81 -0
- ads/feature_store/docs/source/statistics.rst +58 -0
- ads/feature_store/docs/source/transformation.rst +199 -0
- ads/feature_store/docs/source/ui.rst +65 -0
- ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
- ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
- ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
- ads/feature_store/entity.py +718 -0
- ads/feature_store/execution_strategy/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
- ads/feature_store/execution_strategy/engine/__init__.py +0 -0
- ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
- ads/feature_store/execution_strategy/execution_strategy.py +113 -0
- ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
- ads/feature_store/execution_strategy/spark/__init__.py +0 -0
- ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
- ads/feature_store/feature.py +192 -0
- ads/feature_store/feature_group.py +1494 -0
- ads/feature_store/feature_group_expectation.py +346 -0
- ads/feature_store/feature_group_job.py +602 -0
- ads/feature_store/feature_lineage/__init__.py +0 -0
- ads/feature_store/feature_lineage/graphviz_service.py +180 -0
- ads/feature_store/feature_option_details.py +50 -0
- ads/feature_store/feature_statistics/__init__.py +0 -0
- ads/feature_store/feature_statistics/statistics_service.py +99 -0
- ads/feature_store/feature_store.py +699 -0
- ads/feature_store/feature_store_registrar.py +518 -0
- ads/feature_store/input_feature_detail.py +149 -0
- ads/feature_store/mixin/__init__.py +4 -0
- ads/feature_store/mixin/oci_feature_store.py +145 -0
- ads/feature_store/model_details.py +73 -0
- ads/feature_store/query/__init__.py +0 -0
- ads/feature_store/query/filter.py +266 -0
- ads/feature_store/query/generator/__init__.py +0 -0
- ads/feature_store/query/generator/query_generator.py +298 -0
- ads/feature_store/query/join.py +161 -0
- ads/feature_store/query/query.py +403 -0
- ads/feature_store/query/validator/__init__.py +0 -0
- ads/feature_store/query/validator/query_validator.py +57 -0
- ads/feature_store/response/__init__.py +0 -0
- ads/feature_store/response/response_builder.py +68 -0
- ads/feature_store/service/__init__.py +0 -0
- ads/feature_store/service/oci_dataset.py +139 -0
- ads/feature_store/service/oci_dataset_job.py +199 -0
- ads/feature_store/service/oci_entity.py +125 -0
- ads/feature_store/service/oci_feature_group.py +164 -0
- ads/feature_store/service/oci_feature_group_job.py +214 -0
- ads/feature_store/service/oci_feature_store.py +182 -0
- ads/feature_store/service/oci_lineage.py +87 -0
- ads/feature_store/service/oci_transformation.py +104 -0
- ads/feature_store/statistics/__init__.py +0 -0
- ads/feature_store/statistics/abs_feature_value.py +49 -0
- ads/feature_store/statistics/charts/__init__.py +0 -0
- ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
- ads/feature_store/statistics/charts/box_plot.py +148 -0
- ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
- ads/feature_store/statistics/charts/probability_distribution.py +68 -0
- ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
- ads/feature_store/statistics/feature_stat.py +126 -0
- ads/feature_store/statistics/generic_feature_value.py +33 -0
- ads/feature_store/statistics/statistics.py +41 -0
- ads/feature_store/statistics_config.py +101 -0
- ads/feature_store/templates/feature_store_template.yaml +45 -0
- ads/feature_store/transformation.py +499 -0
- ads/feature_store/validation_output.py +57 -0
- ads/hpo/__init__.py +9 -0
- ads/hpo/_imports.py +91 -0
- ads/hpo/ads_search_space.py +439 -0
- ads/hpo/distributions.py +325 -0
- ads/hpo/objective.py +280 -0
- ads/hpo/search_cv.py +1657 -0
- ads/hpo/stopping_criterion.py +75 -0
- ads/hpo/tuner_artifact.py +413 -0
- ads/hpo/utils.py +91 -0
- ads/hpo/validation.py +140 -0
- ads/hpo/visualization/__init__.py +5 -0
- ads/hpo/visualization/_contour.py +23 -0
- ads/hpo/visualization/_edf.py +20 -0
- ads/hpo/visualization/_intermediate_values.py +21 -0
- ads/hpo/visualization/_optimization_history.py +25 -0
- ads/hpo/visualization/_parallel_coordinate.py +169 -0
- ads/hpo/visualization/_param_importances.py +26 -0
- ads/jobs/__init__.py +53 -0
- ads/jobs/ads_job.py +663 -0
- ads/jobs/builders/__init__.py +5 -0
- ads/jobs/builders/base.py +156 -0
- ads/jobs/builders/infrastructure/__init__.py +6 -0
- ads/jobs/builders/infrastructure/base.py +165 -0
- ads/jobs/builders/infrastructure/dataflow.py +1252 -0
- ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
- ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
- ads/jobs/builders/infrastructure/utils.py +65 -0
- ads/jobs/builders/runtimes/__init__.py +5 -0
- ads/jobs/builders/runtimes/artifact.py +338 -0
- ads/jobs/builders/runtimes/base.py +325 -0
- ads/jobs/builders/runtimes/container_runtime.py +242 -0
- ads/jobs/builders/runtimes/python_runtime.py +1016 -0
- ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
- ads/jobs/cli.py +104 -0
- ads/jobs/env_var_parser.py +131 -0
- ads/jobs/extension.py +160 -0
- ads/jobs/schema/__init__.py +5 -0
- ads/jobs/schema/infrastructure_schema.json +116 -0
- ads/jobs/schema/job_schema.json +42 -0
- ads/jobs/schema/runtime_schema.json +183 -0
- ads/jobs/schema/validator.py +141 -0
- ads/jobs/serializer.py +296 -0
- ads/jobs/templates/__init__.py +5 -0
- ads/jobs/templates/container.py +6 -0
- ads/jobs/templates/driver_notebook.py +177 -0
- ads/jobs/templates/driver_oci.py +500 -0
- ads/jobs/templates/driver_python.py +48 -0
- ads/jobs/templates/driver_pytorch.py +852 -0
- ads/jobs/templates/driver_utils.py +615 -0
- ads/jobs/templates/hostname_from_env.c +55 -0
- ads/jobs/templates/oci_metrics.py +181 -0
- ads/jobs/utils.py +104 -0
- ads/llm/__init__.py +28 -0
- ads/llm/autogen/__init__.py +2 -0
- ads/llm/autogen/constants.py +15 -0
- ads/llm/autogen/reports/__init__.py +2 -0
- ads/llm/autogen/reports/base.py +67 -0
- ads/llm/autogen/reports/data.py +103 -0
- ads/llm/autogen/reports/session.py +526 -0
- ads/llm/autogen/reports/templates/chat_box.html +13 -0
- ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
- ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
- ads/llm/autogen/reports/utils.py +56 -0
- ads/llm/autogen/v02/__init__.py +4 -0
- ads/llm/autogen/v02/client.py +295 -0
- ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
- ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
- ads/llm/autogen/v02/loggers/__init__.py +6 -0
- ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
- ads/llm/autogen/v02/loggers/session_logger.py +580 -0
- ads/llm/autogen/v02/loggers/utils.py +86 -0
- ads/llm/autogen/v02/runtime_logging.py +163 -0
- ads/llm/chain.py +268 -0
- ads/llm/chat_template.py +31 -0
- ads/llm/deploy.py +63 -0
- ads/llm/guardrails/__init__.py +5 -0
- ads/llm/guardrails/base.py +442 -0
- ads/llm/guardrails/huggingface.py +44 -0
- ads/llm/langchain/__init__.py +5 -0
- ads/llm/langchain/plugins/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
- ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
- ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
- ads/llm/langchain/plugins/llms/__init__.py +5 -0
- ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
- ads/llm/requirements.txt +3 -0
- ads/llm/serialize.py +219 -0
- ads/llm/serializers/__init__.py +0 -0
- ads/llm/serializers/retrieval_qa.py +153 -0
- ads/llm/serializers/runnable_parallel.py +27 -0
- ads/llm/templates/score_chain.jinja2 +155 -0
- ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
- ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
- ads/model/__init__.py +52 -0
- ads/model/artifact.py +573 -0
- ads/model/artifact_downloader.py +254 -0
- ads/model/artifact_uploader.py +267 -0
- ads/model/base_properties.py +238 -0
- ads/model/common/.model-ignore +66 -0
- ads/model/common/__init__.py +5 -0
- ads/model/common/utils.py +142 -0
- ads/model/datascience_model.py +2635 -0
- ads/model/deployment/__init__.py +20 -0
- ads/model/deployment/common/__init__.py +5 -0
- ads/model/deployment/common/utils.py +308 -0
- ads/model/deployment/model_deployer.py +466 -0
- ads/model/deployment/model_deployment.py +1846 -0
- ads/model/deployment/model_deployment_infrastructure.py +671 -0
- ads/model/deployment/model_deployment_properties.py +493 -0
- ads/model/deployment/model_deployment_runtime.py +838 -0
- ads/model/extractor/__init__.py +5 -0
- ads/model/extractor/automl_extractor.py +74 -0
- ads/model/extractor/embedding_onnx_extractor.py +80 -0
- ads/model/extractor/huggingface_extractor.py +88 -0
- ads/model/extractor/keras_extractor.py +84 -0
- ads/model/extractor/lightgbm_extractor.py +93 -0
- ads/model/extractor/model_info_extractor.py +114 -0
- ads/model/extractor/model_info_extractor_factory.py +105 -0
- ads/model/extractor/pytorch_extractor.py +87 -0
- ads/model/extractor/sklearn_extractor.py +112 -0
- ads/model/extractor/spark_extractor.py +89 -0
- ads/model/extractor/tensorflow_extractor.py +85 -0
- ads/model/extractor/xgboost_extractor.py +94 -0
- ads/model/framework/__init__.py +5 -0
- ads/model/framework/automl_model.py +178 -0
- ads/model/framework/embedding_onnx_model.py +438 -0
- ads/model/framework/huggingface_model.py +399 -0
- ads/model/framework/lightgbm_model.py +266 -0
- ads/model/framework/pytorch_model.py +266 -0
- ads/model/framework/sklearn_model.py +250 -0
- ads/model/framework/spark_model.py +326 -0
- ads/model/framework/tensorflow_model.py +254 -0
- ads/model/framework/xgboost_model.py +258 -0
- ads/model/generic_model.py +3518 -0
- ads/model/model_artifact_boilerplate/README.md +381 -0
- ads/model/model_artifact_boilerplate/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
- ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
- ads/model/model_artifact_boilerplate/score.py +61 -0
- ads/model/model_file_description_schema.json +68 -0
- ads/model/model_introspect.py +331 -0
- ads/model/model_metadata.py +1810 -0
- ads/model/model_metadata_mixin.py +460 -0
- ads/model/model_properties.py +63 -0
- ads/model/model_version_set.py +739 -0
- ads/model/runtime/__init__.py +5 -0
- ads/model/runtime/env_info.py +306 -0
- ads/model/runtime/model_deployment_details.py +37 -0
- ads/model/runtime/model_provenance_details.py +58 -0
- ads/model/runtime/runtime_info.py +81 -0
- ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
- ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
- ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
- ads/model/runtime/utils.py +201 -0
- ads/model/serde/__init__.py +5 -0
- ads/model/serde/common.py +40 -0
- ads/model/serde/model_input.py +547 -0
- ads/model/serde/model_serializer.py +1184 -0
- ads/model/service/__init__.py +5 -0
- ads/model/service/oci_datascience_model.py +1076 -0
- ads/model/service/oci_datascience_model_deployment.py +500 -0
- ads/model/service/oci_datascience_model_version_set.py +176 -0
- ads/model/transformer/__init__.py +5 -0
- ads/model/transformer/onnx_transformer.py +324 -0
- ads/mysqldb/__init__.py +5 -0
- ads/mysqldb/mysql_db.py +227 -0
- ads/opctl/__init__.py +18 -0
- ads/opctl/anomaly_detection.py +11 -0
- ads/opctl/backend/__init__.py +5 -0
- ads/opctl/backend/ads_dataflow.py +353 -0
- ads/opctl/backend/ads_ml_job.py +710 -0
- ads/opctl/backend/ads_ml_pipeline.py +164 -0
- ads/opctl/backend/ads_model_deployment.py +209 -0
- ads/opctl/backend/base.py +146 -0
- ads/opctl/backend/local.py +1053 -0
- ads/opctl/backend/marketplace/__init__.py +9 -0
- ads/opctl/backend/marketplace/helm_helper.py +173 -0
- ads/opctl/backend/marketplace/local_marketplace.py +271 -0
- ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
- ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
- ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
- ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
- ads/opctl/backend/marketplace/models/__init__.py +5 -0
- ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
- ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
- ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
- ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
- ads/opctl/cli.py +707 -0
- ads/opctl/cmds.py +869 -0
- ads/opctl/conda/__init__.py +5 -0
- ads/opctl/conda/cli.py +193 -0
- ads/opctl/conda/cmds.py +749 -0
- ads/opctl/conda/config.yaml +34 -0
- ads/opctl/conda/manifest_template.yaml +13 -0
- ads/opctl/conda/multipart_uploader.py +188 -0
- ads/opctl/conda/pack.py +89 -0
- ads/opctl/config/__init__.py +5 -0
- ads/opctl/config/base.py +57 -0
- ads/opctl/config/diagnostics/__init__.py +5 -0
- ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
- ads/opctl/config/merger.py +255 -0
- ads/opctl/config/resolver.py +297 -0
- ads/opctl/config/utils.py +79 -0
- ads/opctl/config/validator.py +17 -0
- ads/opctl/config/versioner.py +68 -0
- ads/opctl/config/yaml_parsers/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/base.py +58 -0
- ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
- ads/opctl/constants.py +66 -0
- ads/opctl/decorator/__init__.py +5 -0
- ads/opctl/decorator/common.py +129 -0
- ads/opctl/diagnostics/__init__.py +5 -0
- ads/opctl/diagnostics/__main__.py +25 -0
- ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
- ads/opctl/diagnostics/check_requirements.py +144 -0
- ads/opctl/diagnostics/requirement_exception.py +9 -0
- ads/opctl/distributed/README.md +109 -0
- ads/opctl/distributed/__init__.py +5 -0
- ads/opctl/distributed/certificates.py +32 -0
- ads/opctl/distributed/cli.py +207 -0
- ads/opctl/distributed/cmds.py +731 -0
- ads/opctl/distributed/common/__init__.py +5 -0
- ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
- ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
- ads/opctl/distributed/common/cluster_config_helper.py +103 -0
- ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
- ads/opctl/distributed/common/cluster_runner.py +54 -0
- ads/opctl/distributed/common/framework_factory.py +29 -0
- ads/opctl/docker/Dockerfile.job +103 -0
- ads/opctl/docker/Dockerfile.job.arm +107 -0
- ads/opctl/docker/Dockerfile.job.gpu +175 -0
- ads/opctl/docker/base-env.yaml +13 -0
- ads/opctl/docker/cuda.repo +6 -0
- ads/opctl/docker/operator/.dockerignore +0 -0
- ads/opctl/docker/operator/Dockerfile +41 -0
- ads/opctl/docker/operator/Dockerfile.gpu +85 -0
- ads/opctl/docker/operator/cuda.repo +6 -0
- ads/opctl/docker/operator/environment.yaml +8 -0
- ads/opctl/forecast.py +11 -0
- ads/opctl/index.yaml +3 -0
- ads/opctl/model/__init__.py +5 -0
- ads/opctl/model/cli.py +65 -0
- ads/opctl/model/cmds.py +73 -0
- ads/opctl/operator/README.md +4 -0
- ads/opctl/operator/__init__.py +31 -0
- ads/opctl/operator/cli.py +344 -0
- ads/opctl/operator/cmd.py +596 -0
- ads/opctl/operator/common/__init__.py +5 -0
- ads/opctl/operator/common/backend_factory.py +460 -0
- ads/opctl/operator/common/const.py +27 -0
- ads/opctl/operator/common/data/synthetic.csv +16001 -0
- ads/opctl/operator/common/dictionary_merger.py +148 -0
- ads/opctl/operator/common/errors.py +42 -0
- ads/opctl/operator/common/operator_config.py +99 -0
- ads/opctl/operator/common/operator_loader.py +811 -0
- ads/opctl/operator/common/operator_schema.yaml +130 -0
- ads/opctl/operator/common/operator_yaml_generator.py +152 -0
- ads/opctl/operator/common/utils.py +208 -0
- ads/opctl/operator/lowcode/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
- ads/opctl/operator/lowcode/anomaly/README.md +207 -0
- ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
- ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
- ads/opctl/operator/lowcode/anomaly/const.py +167 -0
- ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
- ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
- ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
- ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
- ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
- ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
- ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
- ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
- ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
- ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
- ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
- ads/opctl/operator/lowcode/common/__init__.py +5 -0
- ads/opctl/operator/lowcode/common/const.py +10 -0
- ads/opctl/operator/lowcode/common/data.py +116 -0
- ads/opctl/operator/lowcode/common/errors.py +47 -0
- ads/opctl/operator/lowcode/common/transformations.py +296 -0
- ads/opctl/operator/lowcode/common/utils.py +384 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
- ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
- ads/opctl/operator/lowcode/forecast/README.md +209 -0
- ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
- ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
- ads/opctl/operator/lowcode/forecast/const.py +92 -0
- ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
- ads/opctl/operator/lowcode/forecast/errors.py +26 -0
- ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
- ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
- ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
- ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
- ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
- ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
- ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
- ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
- ads/opctl/operator/lowcode/forecast/model/prophet.py +450 -0
- ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
- ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
- ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
- ads/opctl/operator/lowcode/forecast/utils.py +397 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
- ads/opctl/operator/lowcode/pii/MLoperator +17 -0
- ads/opctl/operator/lowcode/pii/README.md +208 -0
- ads/opctl/operator/lowcode/pii/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/__main__.py +78 -0
- ads/opctl/operator/lowcode/pii/cmd.py +39 -0
- ads/opctl/operator/lowcode/pii/constant.py +84 -0
- ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
- ads/opctl/operator/lowcode/pii/errors.py +27 -0
- ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
- ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
- ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
- ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
- ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
- ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
- ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
- ads/opctl/operator/lowcode/pii/model/report.py +487 -0
- ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
- ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
- ads/opctl/operator/lowcode/pii/utils.py +43 -0
- ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
- ads/opctl/operator/lowcode/recommender/README.md +206 -0
- ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
- ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
- ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
- ads/opctl/operator/lowcode/recommender/constant.py +30 -0
- ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
- ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
- ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
- ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
- ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
- ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
- ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
- ads/opctl/operator/lowcode/recommender/utils.py +13 -0
- ads/opctl/operator/runtime/__init__.py +5 -0
- ads/opctl/operator/runtime/const.py +17 -0
- ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
- ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
- ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/runtime.py +115 -0
- ads/opctl/schema.yaml.yml +36 -0
- ads/opctl/script.py +40 -0
- ads/opctl/spark/__init__.py +5 -0
- ads/opctl/spark/cli.py +43 -0
- ads/opctl/spark/cmds.py +147 -0
- ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
- ads/opctl/utils.py +344 -0
- ads/oracledb/__init__.py +5 -0
- ads/oracledb/oracle_db.py +346 -0
- ads/pipeline/__init__.py +39 -0
- ads/pipeline/ads_pipeline.py +2279 -0
- ads/pipeline/ads_pipeline_run.py +772 -0
- ads/pipeline/ads_pipeline_step.py +605 -0
- ads/pipeline/builders/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/custom_script.py +32 -0
- ads/pipeline/cli.py +119 -0
- ads/pipeline/extension.py +291 -0
- ads/pipeline/schema/__init__.py +5 -0
- ads/pipeline/schema/cs_step_schema.json +35 -0
- ads/pipeline/schema/ml_step_schema.json +31 -0
- ads/pipeline/schema/pipeline_schema.json +71 -0
- ads/pipeline/visualizer/__init__.py +5 -0
- ads/pipeline/visualizer/base.py +570 -0
- ads/pipeline/visualizer/graph_renderer.py +272 -0
- ads/pipeline/visualizer/text_renderer.py +84 -0
- ads/secrets/__init__.py +11 -0
- ads/secrets/adb.py +386 -0
- ads/secrets/auth_token.py +86 -0
- ads/secrets/big_data_service.py +365 -0
- ads/secrets/mysqldb.py +149 -0
- ads/secrets/oracledb.py +160 -0
- ads/secrets/secrets.py +407 -0
- ads/telemetry/__init__.py +7 -0
- ads/telemetry/base.py +69 -0
- ads/telemetry/client.py +122 -0
- ads/telemetry/telemetry.py +257 -0
- ads/templates/dataflow_pyspark.jinja2 +13 -0
- ads/templates/dataflow_sparksql.jinja2 +22 -0
- ads/templates/func.jinja2 +20 -0
- ads/templates/schemas/openapi.json +1740 -0
- ads/templates/score-pkl.jinja2 +173 -0
- ads/templates/score.jinja2 +322 -0
- ads/templates/score_embedding_onnx.jinja2 +202 -0
- ads/templates/score_generic.jinja2 +165 -0
- ads/templates/score_huggingface_pipeline.jinja2 +217 -0
- ads/templates/score_lightgbm.jinja2 +185 -0
- ads/templates/score_onnx.jinja2 +407 -0
- ads/templates/score_onnx_new.jinja2 +473 -0
- ads/templates/score_oracle_automl.jinja2 +185 -0
- ads/templates/score_pyspark.jinja2 +154 -0
- ads/templates/score_pytorch.jinja2 +219 -0
- ads/templates/score_scikit-learn.jinja2 +184 -0
- ads/templates/score_tensorflow.jinja2 +184 -0
- ads/templates/score_xgboost.jinja2 +178 -0
- ads/text_dataset/__init__.py +5 -0
- ads/text_dataset/backends.py +211 -0
- ads/text_dataset/dataset.py +445 -0
- ads/text_dataset/extractor.py +207 -0
- ads/text_dataset/options.py +53 -0
- ads/text_dataset/udfs.py +22 -0
- ads/text_dataset/utils.py +49 -0
- ads/type_discovery/__init__.py +9 -0
- ads/type_discovery/abstract_detector.py +21 -0
- ads/type_discovery/constant_detector.py +41 -0
- ads/type_discovery/continuous_detector.py +54 -0
- ads/type_discovery/credit_card_detector.py +99 -0
- ads/type_discovery/datetime_detector.py +92 -0
- ads/type_discovery/discrete_detector.py +118 -0
- ads/type_discovery/document_detector.py +146 -0
- ads/type_discovery/ip_detector.py +68 -0
- ads/type_discovery/latlon_detector.py +90 -0
- ads/type_discovery/phone_number_detector.py +63 -0
- ads/type_discovery/type_discovery_driver.py +87 -0
- ads/type_discovery/typed_feature.py +594 -0
- ads/type_discovery/unknown_detector.py +41 -0
- ads/type_discovery/zipcode_detector.py +48 -0
- ads/vault/__init__.py +7 -0
- ads/vault/vault.py +237 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/METADATA +150 -149
- oracle_ads-2.13.10.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/entry_points.txt +2 -1
- oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
- oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/licenses/LICENSE.txt +0 -0
ads/aqua/__init__.py
ADDED
@@ -0,0 +1,40 @@
|
|
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
|
+
|
6
|
+
import os
|
7
|
+
from logging import getLogger
|
8
|
+
|
9
|
+
from ads import logger, set_auth
|
10
|
+
from ads.aqua.client.client import (
|
11
|
+
AsyncClient,
|
12
|
+
Client,
|
13
|
+
HttpxOCIAuth,
|
14
|
+
get_async_httpx_client,
|
15
|
+
get_httpx_client,
|
16
|
+
)
|
17
|
+
from ads.config import OCI_RESOURCE_PRINCIPAL_VERSION
|
18
|
+
|
19
|
+
ENV_VAR_LOG_LEVEL = "ADS_AQUA_LOG_LEVEL"
|
20
|
+
|
21
|
+
|
22
|
+
def get_logger_level():
|
23
|
+
"""Retrieves logging level from environment variable `ADS_AQUA_LOG_LEVEL`."""
|
24
|
+
level = os.environ.get(ENV_VAR_LOG_LEVEL, "INFO").upper()
|
25
|
+
return level
|
26
|
+
|
27
|
+
|
28
|
+
logger = getLogger(__name__)
|
29
|
+
logger.setLevel(get_logger_level())
|
30
|
+
|
31
|
+
|
32
|
+
def set_log_level(log_level: str):
|
33
|
+
"""Global for setting logging level."""
|
34
|
+
|
35
|
+
log_level = log_level.upper()
|
36
|
+
logger.setLevel(log_level.upper())
|
37
|
+
|
38
|
+
|
39
|
+
if OCI_RESOURCE_PRINCIPAL_VERSION:
|
40
|
+
set_auth("resource_principal")
|
ads/aqua/app.py
ADDED
@@ -0,0 +1,507 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# Copyright (c) 2024, 2025 Oracle and/or its affiliates.
|
3
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
4
|
+
|
5
|
+
import json
|
6
|
+
import os
|
7
|
+
import traceback
|
8
|
+
from dataclasses import fields
|
9
|
+
from datetime import datetime, timedelta
|
10
|
+
from itertools import chain
|
11
|
+
from typing import Any, Dict, List, Optional, Union
|
12
|
+
|
13
|
+
import oci
|
14
|
+
from cachetools import TTLCache, cached
|
15
|
+
from oci.data_science.models import (
|
16
|
+
ContainerSummary,
|
17
|
+
UpdateModelDetails,
|
18
|
+
UpdateModelProvenanceDetails,
|
19
|
+
)
|
20
|
+
|
21
|
+
from ads import set_auth
|
22
|
+
from ads.aqua import logger
|
23
|
+
from ads.aqua.common.entities import ModelConfigResult
|
24
|
+
from ads.aqua.common.enums import ConfigFolder, Tags
|
25
|
+
from ads.aqua.common.errors import AquaRuntimeError, AquaValueError
|
26
|
+
from ads.aqua.common.utils import (
|
27
|
+
_is_valid_mvs,
|
28
|
+
get_artifact_path,
|
29
|
+
is_valid_ocid,
|
30
|
+
load_config,
|
31
|
+
)
|
32
|
+
from ads.aqua.config.container_config import (
|
33
|
+
AquaContainerConfig,
|
34
|
+
AquaContainerConfigItem,
|
35
|
+
)
|
36
|
+
from ads.aqua.constants import SERVICE_MANAGED_CONTAINER_URI_SCHEME
|
37
|
+
from ads.common import oci_client as oc
|
38
|
+
from ads.common.auth import default_signer
|
39
|
+
from ads.common.utils import UNKNOWN, extract_region, is_path_exists
|
40
|
+
from ads.config import (
|
41
|
+
AQUA_TELEMETRY_BUCKET,
|
42
|
+
AQUA_TELEMETRY_BUCKET_NS,
|
43
|
+
OCI_ODSC_SERVICE_ENDPOINT,
|
44
|
+
OCI_RESOURCE_PRINCIPAL_VERSION,
|
45
|
+
)
|
46
|
+
from ads.model.datascience_model import DataScienceModel
|
47
|
+
from ads.model.deployment.model_deployment import ModelDeployment
|
48
|
+
from ads.model.model_metadata import (
|
49
|
+
ModelCustomMetadata,
|
50
|
+
ModelProvenanceMetadata,
|
51
|
+
ModelTaxonomyMetadata,
|
52
|
+
)
|
53
|
+
from ads.model.model_version_set import ModelVersionSet
|
54
|
+
from ads.telemetry import telemetry
|
55
|
+
from ads.telemetry.client import TelemetryClient
|
56
|
+
|
57
|
+
|
58
|
+
class AquaApp:
|
59
|
+
"""Base Aqua App to contain common components."""
|
60
|
+
|
61
|
+
@telemetry(name="aqua")
|
62
|
+
def __init__(self) -> None:
|
63
|
+
if OCI_RESOURCE_PRINCIPAL_VERSION:
|
64
|
+
set_auth("resource_principal")
|
65
|
+
self._auth = default_signer({"service_endpoint": OCI_ODSC_SERVICE_ENDPOINT})
|
66
|
+
self.ds_client = oc.OCIClientFactory(**self._auth).data_science
|
67
|
+
self.compute_client = oc.OCIClientFactory(**default_signer()).compute
|
68
|
+
self.logging_client = oc.OCIClientFactory(**default_signer()).logging_management
|
69
|
+
self.identity_client = oc.OCIClientFactory(**default_signer()).identity
|
70
|
+
self.region = extract_region(self._auth)
|
71
|
+
self._telemetry = None
|
72
|
+
|
73
|
+
def list_resource(
|
74
|
+
self,
|
75
|
+
list_func_ref,
|
76
|
+
**kwargs,
|
77
|
+
) -> list:
|
78
|
+
"""Generic method to list OCI Data Science resources.
|
79
|
+
|
80
|
+
Parameters
|
81
|
+
----------
|
82
|
+
list_func_ref : function
|
83
|
+
A reference to the list operation which will be called.
|
84
|
+
**kwargs :
|
85
|
+
Additional keyword arguments to filter the resource.
|
86
|
+
The kwargs are passed into OCI API.
|
87
|
+
|
88
|
+
Returns
|
89
|
+
-------
|
90
|
+
list
|
91
|
+
A list of OCI Data Science resources.
|
92
|
+
"""
|
93
|
+
return oci.pagination.list_call_get_all_results(
|
94
|
+
list_func_ref,
|
95
|
+
**kwargs,
|
96
|
+
).data
|
97
|
+
|
98
|
+
def update_model(self, model_id: str, update_model_details: UpdateModelDetails):
|
99
|
+
"""Updates model details.
|
100
|
+
|
101
|
+
Parameters
|
102
|
+
----------
|
103
|
+
model_id : str
|
104
|
+
The id of target model.
|
105
|
+
update_model_details: UpdateModelDetails
|
106
|
+
The model details to be updated.
|
107
|
+
"""
|
108
|
+
self.ds_client.update_model(
|
109
|
+
model_id=model_id, update_model_details=update_model_details
|
110
|
+
)
|
111
|
+
|
112
|
+
def update_model_provenance(
|
113
|
+
self,
|
114
|
+
model_id: str,
|
115
|
+
update_model_provenance_details: UpdateModelProvenanceDetails,
|
116
|
+
):
|
117
|
+
"""Updates model provenance details.
|
118
|
+
|
119
|
+
Parameters
|
120
|
+
----------
|
121
|
+
model_id : str
|
122
|
+
The id of target model.
|
123
|
+
update_model_provenance_details: UpdateModelProvenanceDetails
|
124
|
+
The model provenance details to be updated.
|
125
|
+
"""
|
126
|
+
self.ds_client.update_model_provenance(
|
127
|
+
model_id=model_id,
|
128
|
+
update_model_provenance_details=update_model_provenance_details,
|
129
|
+
)
|
130
|
+
|
131
|
+
# TODO: refactor model evaluation implementation to use it.
|
132
|
+
@staticmethod
|
133
|
+
def get_source(source_id: str) -> Union[ModelDeployment, DataScienceModel]:
|
134
|
+
if is_valid_ocid(source_id):
|
135
|
+
if "datasciencemodeldeployment" in source_id:
|
136
|
+
return ModelDeployment.from_id(source_id)
|
137
|
+
elif "datasciencemodel" in source_id:
|
138
|
+
return DataScienceModel.from_id(source_id)
|
139
|
+
|
140
|
+
raise AquaValueError(
|
141
|
+
f"Invalid source {source_id}. "
|
142
|
+
"Specify either a model or model deployment id."
|
143
|
+
)
|
144
|
+
|
145
|
+
# TODO: refactor model evaluation implementation to use it.
|
146
|
+
@staticmethod
|
147
|
+
def create_model_version_set(
|
148
|
+
model_version_set_id: str = None,
|
149
|
+
model_version_set_name: str = None,
|
150
|
+
description: str = None,
|
151
|
+
compartment_id: str = None,
|
152
|
+
project_id: str = None,
|
153
|
+
freeform_tags: dict = None,
|
154
|
+
defined_tags: dict = None,
|
155
|
+
**kwargs,
|
156
|
+
) -> tuple:
|
157
|
+
"""Creates ModelVersionSet from given ID or Name.
|
158
|
+
|
159
|
+
Parameters
|
160
|
+
----------
|
161
|
+
model_version_set_id: (str, optional):
|
162
|
+
ModelVersionSet OCID.
|
163
|
+
model_version_set_name: (str, optional):
|
164
|
+
ModelVersionSet Name.
|
165
|
+
description: (str, optional):
|
166
|
+
TBD
|
167
|
+
compartment_id: (str, optional):
|
168
|
+
Compartment OCID.
|
169
|
+
project_id: (str, optional):
|
170
|
+
Project OCID.
|
171
|
+
tag: (str, optional)
|
172
|
+
calling tag, can be Tags.AQUA_FINE_TUNING or Tags.AQUA_EVALUATION
|
173
|
+
freeform_tags: (dict, optional)
|
174
|
+
Freeform tags for the model version set
|
175
|
+
defined_tags: (dict, optional)
|
176
|
+
Defined tags for the model version set
|
177
|
+
Returns
|
178
|
+
-------
|
179
|
+
tuple: (model_version_set_id, model_version_set_name)
|
180
|
+
"""
|
181
|
+
# TODO: tag should be selected based on which operation (eval/FT) invoke this method
|
182
|
+
# currently only used by fine-tuning flow.
|
183
|
+
tag = Tags.AQUA_FINE_TUNING
|
184
|
+
|
185
|
+
if not model_version_set_id:
|
186
|
+
try:
|
187
|
+
model_version_set = ModelVersionSet.from_name(
|
188
|
+
name=model_version_set_name,
|
189
|
+
compartment_id=compartment_id,
|
190
|
+
)
|
191
|
+
|
192
|
+
if not _is_valid_mvs(model_version_set, tag):
|
193
|
+
raise AquaValueError(
|
194
|
+
f"Invalid model version set name. Please provide a model version set with `{tag}` in tags."
|
195
|
+
)
|
196
|
+
|
197
|
+
except Exception:
|
198
|
+
logger.debug(
|
199
|
+
f"Model version set {model_version_set_name} doesn't exist. "
|
200
|
+
"Creating new model version set."
|
201
|
+
)
|
202
|
+
mvs_freeform_tags = {
|
203
|
+
tag: tag,
|
204
|
+
}
|
205
|
+
mvs_freeform_tags = {**mvs_freeform_tags, **(freeform_tags or {})}
|
206
|
+
model_version_set = (
|
207
|
+
ModelVersionSet()
|
208
|
+
.with_compartment_id(compartment_id)
|
209
|
+
.with_project_id(project_id)
|
210
|
+
.with_name(model_version_set_name)
|
211
|
+
.with_description(description)
|
212
|
+
.with_freeform_tags(**mvs_freeform_tags)
|
213
|
+
.with_defined_tags(**(defined_tags or {}))
|
214
|
+
# TODO: decide what parameters will be needed
|
215
|
+
# when refactor eval to use this method, we need to pass tag here.
|
216
|
+
.create(**kwargs)
|
217
|
+
)
|
218
|
+
logger.debug(
|
219
|
+
f"Successfully created model version set {model_version_set_name} with id {model_version_set.id}."
|
220
|
+
)
|
221
|
+
return (model_version_set.id, model_version_set_name)
|
222
|
+
else:
|
223
|
+
model_version_set = ModelVersionSet.from_id(model_version_set_id)
|
224
|
+
# TODO: tag should be selected based on which operation (eval/FT) invoke this method
|
225
|
+
if not _is_valid_mvs(model_version_set, tag):
|
226
|
+
raise AquaValueError(
|
227
|
+
f"Invalid model version set id. Please provide a model version set with `{tag}` in tags."
|
228
|
+
)
|
229
|
+
return (model_version_set_id, model_version_set.name)
|
230
|
+
|
231
|
+
# TODO: refactor model evaluation implementation to use it.
|
232
|
+
@staticmethod
|
233
|
+
def create_model_catalog(
|
234
|
+
display_name: str,
|
235
|
+
description: str,
|
236
|
+
model_version_set_id: str,
|
237
|
+
model_custom_metadata: Union[ModelCustomMetadata, Dict],
|
238
|
+
model_taxonomy_metadata: Union[ModelTaxonomyMetadata, Dict],
|
239
|
+
compartment_id: str,
|
240
|
+
project_id: str,
|
241
|
+
defined_tags: Dict = None,
|
242
|
+
**kwargs,
|
243
|
+
) -> DataScienceModel:
|
244
|
+
model = (
|
245
|
+
DataScienceModel()
|
246
|
+
.with_compartment_id(compartment_id)
|
247
|
+
.with_project_id(project_id)
|
248
|
+
.with_display_name(display_name)
|
249
|
+
.with_description(description)
|
250
|
+
.with_model_version_set_id(model_version_set_id)
|
251
|
+
.with_custom_metadata_list(model_custom_metadata)
|
252
|
+
.with_defined_metadata_list(model_taxonomy_metadata)
|
253
|
+
.with_provenance_metadata(ModelProvenanceMetadata(training_id=UNKNOWN))
|
254
|
+
.with_defined_tags(
|
255
|
+
**(defined_tags or {})
|
256
|
+
) # Create defined tags when a model is created.
|
257
|
+
.create(
|
258
|
+
**kwargs,
|
259
|
+
)
|
260
|
+
)
|
261
|
+
return model
|
262
|
+
|
263
|
+
def if_artifact_exist(self, model_id: str, **kwargs) -> bool:
|
264
|
+
"""Checks if the artifact exists.
|
265
|
+
|
266
|
+
Parameters
|
267
|
+
----------
|
268
|
+
model_id : str
|
269
|
+
The model OCID.
|
270
|
+
**kwargs :
|
271
|
+
Additional keyword arguments passed in head_model_artifact.
|
272
|
+
|
273
|
+
Returns
|
274
|
+
-------
|
275
|
+
bool
|
276
|
+
Whether the artifact exists.
|
277
|
+
"""
|
278
|
+
|
279
|
+
try:
|
280
|
+
response = self.ds_client.head_model_artifact(model_id=model_id, **kwargs)
|
281
|
+
return response.status == 200
|
282
|
+
except oci.exceptions.ServiceError as ex:
|
283
|
+
if ex.status == 404:
|
284
|
+
logger.info(f"Artifact not found in model {model_id}.")
|
285
|
+
return False
|
286
|
+
|
287
|
+
def get_config_from_metadata(
|
288
|
+
self, model_id: str, metadata_key: str
|
289
|
+
) -> ModelConfigResult:
|
290
|
+
"""Gets the config for the given Aqua model from model catalog metadata content.
|
291
|
+
|
292
|
+
Parameters
|
293
|
+
----------
|
294
|
+
model_id: str
|
295
|
+
The OCID of the Aqua model.
|
296
|
+
metadata_key: str
|
297
|
+
The metadata key name where artifact content is stored
|
298
|
+
Returns
|
299
|
+
-------
|
300
|
+
ModelConfigResult
|
301
|
+
A Pydantic model containing the model_details (extracted from OCI) and the config dictionary.
|
302
|
+
"""
|
303
|
+
config = {}
|
304
|
+
oci_model = self.ds_client.get_model(model_id).data
|
305
|
+
try:
|
306
|
+
config = self.ds_client.get_model_defined_metadatum_artifact_content(
|
307
|
+
model_id, metadata_key
|
308
|
+
).data.content.decode("utf-8")
|
309
|
+
return ModelConfigResult(config=json.loads(config), model_details=oci_model)
|
310
|
+
except UnicodeDecodeError as ex:
|
311
|
+
logger.error(
|
312
|
+
f"Failed to decode content for '{metadata_key}' in defined metadata for model '{model_id}' : {ex}"
|
313
|
+
)
|
314
|
+
except json.JSONDecodeError as ex:
|
315
|
+
logger.error(
|
316
|
+
f"Invalid JSON format for '{metadata_key}' in defined metadata for model '{model_id}' : {ex}"
|
317
|
+
)
|
318
|
+
except Exception as ex:
|
319
|
+
logger.error(
|
320
|
+
f"Failed to retrieve defined metadata key '{metadata_key}' for model '{model_id}': {ex}"
|
321
|
+
)
|
322
|
+
return ModelConfigResult(config=config, model_details=oci_model)
|
323
|
+
|
324
|
+
@cached(cache=TTLCache(maxsize=1, ttl=timedelta(minutes=1), timer=datetime.now))
|
325
|
+
def get_config(
|
326
|
+
self,
|
327
|
+
model_id: str,
|
328
|
+
config_file_name: str,
|
329
|
+
config_folder: Optional[str] = ConfigFolder.CONFIG,
|
330
|
+
) -> ModelConfigResult:
|
331
|
+
"""
|
332
|
+
Gets the configuration for the given Aqua model along with the model details.
|
333
|
+
|
334
|
+
Parameters
|
335
|
+
----------
|
336
|
+
model_id : str
|
337
|
+
The OCID of the Aqua model.
|
338
|
+
config_file_name : str
|
339
|
+
The name of the configuration file.
|
340
|
+
config_folder : Optional[str]
|
341
|
+
The subfolder path where config_file_name is searched.
|
342
|
+
Defaults to ConfigFolder.CONFIG. For model artifact directories, use ConfigFolder.ARTIFACT.
|
343
|
+
|
344
|
+
Returns
|
345
|
+
-------
|
346
|
+
ModelConfigResult
|
347
|
+
A Pydantic model containing the model_details (extracted from OCI) and the config dictionary.
|
348
|
+
"""
|
349
|
+
config_folder = config_folder or ConfigFolder.CONFIG
|
350
|
+
oci_model = self.ds_client.get_model(model_id).data
|
351
|
+
oci_aqua = (
|
352
|
+
(
|
353
|
+
Tags.AQUA_TAG in oci_model.freeform_tags
|
354
|
+
or Tags.AQUA_TAG.lower() in oci_model.freeform_tags
|
355
|
+
)
|
356
|
+
if oci_model.freeform_tags
|
357
|
+
else False
|
358
|
+
)
|
359
|
+
if not oci_aqua:
|
360
|
+
raise AquaRuntimeError(f"Target model {oci_model.id} is not an Aqua model.")
|
361
|
+
|
362
|
+
config: Dict[str, Any] = {}
|
363
|
+
artifact_path = get_artifact_path(oci_model.custom_metadata_list)
|
364
|
+
if not artifact_path:
|
365
|
+
logger.debug(
|
366
|
+
f"Failed to get artifact path from custom metadata for the model: {model_id}"
|
367
|
+
)
|
368
|
+
return ModelConfigResult(config=config, model_details=oci_model)
|
369
|
+
|
370
|
+
config_path = os.path.join(os.path.dirname(artifact_path), config_folder)
|
371
|
+
if not is_path_exists(config_path):
|
372
|
+
config_path = os.path.join(artifact_path.rstrip("/"), config_folder)
|
373
|
+
if not is_path_exists(config_path):
|
374
|
+
config_path = f"{artifact_path.rstrip('/')}/"
|
375
|
+
config_file_path = os.path.join(config_path, config_file_name)
|
376
|
+
if is_path_exists(config_file_path):
|
377
|
+
try:
|
378
|
+
logger.info(
|
379
|
+
f"Loading config: `{config_file_name}` from `{config_path}`"
|
380
|
+
)
|
381
|
+
config = load_config(
|
382
|
+
config_path,
|
383
|
+
config_file_name=config_file_name,
|
384
|
+
)
|
385
|
+
except Exception:
|
386
|
+
logger.debug(
|
387
|
+
f"Error loading the {config_file_name} at path {config_path}.\n"
|
388
|
+
f"{traceback.format_exc()}"
|
389
|
+
)
|
390
|
+
|
391
|
+
if not config:
|
392
|
+
logger.debug(
|
393
|
+
f"{config_file_name} is not available for the model: {model_id}. "
|
394
|
+
f"Check if the custom metadata has the artifact path set."
|
395
|
+
)
|
396
|
+
|
397
|
+
return ModelConfigResult(config=config, model_details=oci_model)
|
398
|
+
|
399
|
+
def get_container_image(self, container_type: str = None) -> str:
|
400
|
+
"""
|
401
|
+
Gets the latest smc container complete image name from the given container type.
|
402
|
+
|
403
|
+
Parameters
|
404
|
+
----------
|
405
|
+
container_type: str
|
406
|
+
type of container, can be either odsc-vllm-serving, odsc-llm-fine-tuning, odsc-llm-evaluate
|
407
|
+
|
408
|
+
Returns
|
409
|
+
-------
|
410
|
+
str:
|
411
|
+
A complete container name along with version. ex: dsmc://odsc-vllm-serving:0.7.4.1
|
412
|
+
"""
|
413
|
+
|
414
|
+
containers = self.list_service_containers()
|
415
|
+
container = next(
|
416
|
+
(c for c in containers if c.is_latest and c.family_name == container_type),
|
417
|
+
None,
|
418
|
+
)
|
419
|
+
if not container:
|
420
|
+
raise AquaValueError(f"Invalid container type : {container_type}")
|
421
|
+
container_image = (
|
422
|
+
SERVICE_MANAGED_CONTAINER_URI_SCHEME
|
423
|
+
+ container.container_name
|
424
|
+
+ ":"
|
425
|
+
+ container.tag
|
426
|
+
)
|
427
|
+
return container_image
|
428
|
+
|
429
|
+
@cached(cache=TTLCache(maxsize=20, ttl=timedelta(minutes=30), timer=datetime.now))
|
430
|
+
def list_service_containers(self) -> List[ContainerSummary]:
|
431
|
+
"""
|
432
|
+
List containers from containers.conf in OCI Datascience control plane
|
433
|
+
"""
|
434
|
+
containers = self.ds_client.list_containers().data
|
435
|
+
return containers
|
436
|
+
|
437
|
+
def get_container_config(self) -> AquaContainerConfig:
|
438
|
+
"""
|
439
|
+
Fetches latest containers from containers.conf in OCI Datascience control plane
|
440
|
+
|
441
|
+
Returns
|
442
|
+
-------
|
443
|
+
AquaContainerConfig
|
444
|
+
An Object that contains latest container info for the given container family
|
445
|
+
|
446
|
+
"""
|
447
|
+
return AquaContainerConfig.from_service_config(
|
448
|
+
service_containers=self.list_service_containers()
|
449
|
+
)
|
450
|
+
|
451
|
+
def get_container_config_item(
|
452
|
+
self, container_family: str
|
453
|
+
) -> AquaContainerConfigItem:
|
454
|
+
"""
|
455
|
+
Fetches latest container for given container_family_name from containers.conf in OCI Datascience control plane
|
456
|
+
|
457
|
+
Returns
|
458
|
+
-------
|
459
|
+
AquaContainerConfigItem
|
460
|
+
An Object that contains latest container info for the given container family
|
461
|
+
|
462
|
+
"""
|
463
|
+
|
464
|
+
aqua_container_config = self.get_container_config()
|
465
|
+
inference_config = aqua_container_config.inference.values()
|
466
|
+
ft_config = aqua_container_config.finetune.values()
|
467
|
+
eval_config = aqua_container_config.evaluate.values()
|
468
|
+
container = next(
|
469
|
+
(
|
470
|
+
container
|
471
|
+
for container in chain(inference_config, ft_config, eval_config)
|
472
|
+
if container.family.lower() == container_family.lower()
|
473
|
+
),
|
474
|
+
None,
|
475
|
+
)
|
476
|
+
return container
|
477
|
+
|
478
|
+
@property
|
479
|
+
def telemetry(self):
|
480
|
+
if not self._telemetry:
|
481
|
+
self._telemetry = TelemetryClient(
|
482
|
+
bucket=AQUA_TELEMETRY_BUCKET, namespace=AQUA_TELEMETRY_BUCKET_NS
|
483
|
+
)
|
484
|
+
return self._telemetry
|
485
|
+
|
486
|
+
|
487
|
+
class CLIBuilderMixin:
|
488
|
+
"""
|
489
|
+
CLI builder from API interface. To be used with the DataClass only.
|
490
|
+
"""
|
491
|
+
|
492
|
+
def build_cli(self) -> str:
|
493
|
+
"""
|
494
|
+
Method to turn the dataclass attributes to CLI
|
495
|
+
"""
|
496
|
+
cmd = f"ads aqua {self._command}"
|
497
|
+
params = [
|
498
|
+
(
|
499
|
+
f"--{field.name} {json.dumps(getattr(self, field.name))}"
|
500
|
+
if isinstance(getattr(self, field.name), dict)
|
501
|
+
else f"--{field.name} {getattr(self, field.name)}"
|
502
|
+
)
|
503
|
+
for field in fields(self.__class__)
|
504
|
+
if getattr(self, field.name) is not None
|
505
|
+
]
|
506
|
+
cmd = f"{cmd} {' '.join(params)}"
|
507
|
+
return cmd
|
ads/aqua/cli.py
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2024, 2025 Oracle and/or its affiliates.
|
4
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
import os
|
6
|
+
|
7
|
+
from ads.aqua import (
|
8
|
+
ENV_VAR_LOG_LEVEL,
|
9
|
+
logger,
|
10
|
+
set_log_level,
|
11
|
+
)
|
12
|
+
from ads.aqua.common.errors import AquaCLIError
|
13
|
+
from ads.aqua.evaluation import AquaEvaluationApp
|
14
|
+
from ads.aqua.finetuning import AquaFineTuningApp
|
15
|
+
from ads.aqua.model import AquaModelApp
|
16
|
+
from ads.aqua.modeldeployment import AquaDeploymentApp
|
17
|
+
from ads.common.utils import LOG_LEVELS
|
18
|
+
|
19
|
+
|
20
|
+
class AquaCommand:
|
21
|
+
"""Contains the command groups for project Aqua.
|
22
|
+
|
23
|
+
Acts as an entry point for managing different components of the Aqua
|
24
|
+
project including model management, fine-tuning, deployment, and
|
25
|
+
evaluation.
|
26
|
+
"""
|
27
|
+
|
28
|
+
model = AquaModelApp
|
29
|
+
fine_tuning = AquaFineTuningApp
|
30
|
+
deployment = AquaDeploymentApp
|
31
|
+
evaluation = AquaEvaluationApp
|
32
|
+
|
33
|
+
def __init__(
|
34
|
+
self,
|
35
|
+
debug: bool = None,
|
36
|
+
verbose: bool = None,
|
37
|
+
log_level: str = os.environ.get(ENV_VAR_LOG_LEVEL, "ERROR").upper(),
|
38
|
+
):
|
39
|
+
"""
|
40
|
+
Initialize the command line interface settings for the Aqua project.
|
41
|
+
|
42
|
+
FLAGS
|
43
|
+
-----
|
44
|
+
log_level (str):
|
45
|
+
Sets the logging level for the application.
|
46
|
+
Default is retrieved from environment variable `ADS_AQUA_LOG_LEVEL`,
|
47
|
+
or 'ERROR' if not set. Example values include 'DEBUG', 'INFO',
|
48
|
+
'WARNING', 'ERROR', and 'CRITICAL'.
|
49
|
+
debug (bool):
|
50
|
+
Sets the logging level for the application to `DEBUG`.
|
51
|
+
verbose (bool):
|
52
|
+
Sets the logging level for the application to `INFO`.
|
53
|
+
|
54
|
+
Raises
|
55
|
+
------
|
56
|
+
AquaCLIError:
|
57
|
+
When `--verbose` and `--debug` being used together.
|
58
|
+
When missing required `ODSC_MODEL_COMPARTMENT_OCID` env var.
|
59
|
+
"""
|
60
|
+
if verbose is not None and debug is not None:
|
61
|
+
raise AquaCLIError(
|
62
|
+
"Cannot use `--debug` and `--verbose` at the same time. "
|
63
|
+
"Please select either `--debug` for `DEBUG` level logging or "
|
64
|
+
"`--verbose` for `INFO` level logging."
|
65
|
+
)
|
66
|
+
elif verbose is not None:
|
67
|
+
self._validate_value("--verbose", verbose)
|
68
|
+
aqua_log_level = "INFO"
|
69
|
+
elif debug is not None:
|
70
|
+
self._validate_value("--debug", debug)
|
71
|
+
aqua_log_level = "DEBUG"
|
72
|
+
else:
|
73
|
+
if log_level.upper() not in LOG_LEVELS:
|
74
|
+
logger.warning(
|
75
|
+
f"Log level should be one of {LOG_LEVELS}. Setting default to ERROR."
|
76
|
+
)
|
77
|
+
log_level = "ERROR"
|
78
|
+
aqua_log_level = log_level.upper()
|
79
|
+
|
80
|
+
set_log_level(aqua_log_level)
|
81
|
+
|
82
|
+
@staticmethod
|
83
|
+
def _validate_value(flag, value):
|
84
|
+
"""Check if the given value for bool flag is valid.
|
85
|
+
|
86
|
+
Raises
|
87
|
+
------
|
88
|
+
AquaCLIError:
|
89
|
+
When the given value for bool flag is invalid.
|
90
|
+
"""
|
91
|
+
if value not in [True, False]:
|
92
|
+
raise AquaCLIError(
|
93
|
+
f"Invalid input `{value}` for flag: {flag}, a boolean value is required. "
|
94
|
+
"If you intend to chain a function call to the result, please separate the "
|
95
|
+
"flag and the subsequent function call with separator `-`."
|
96
|
+
)
|