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
ads/llm/requirements.txt
ADDED
ads/llm/serialize.py
ADDED
@@ -0,0 +1,219 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import json
|
8
|
+
import os
|
9
|
+
import tempfile
|
10
|
+
from typing import Any, Dict, List, Optional
|
11
|
+
|
12
|
+
import fsspec
|
13
|
+
import yaml
|
14
|
+
from langchain import llms
|
15
|
+
from langchain.chains.loading import load_chain_from_config
|
16
|
+
from langchain.llms import loading
|
17
|
+
from langchain.load.load import Reviver
|
18
|
+
from langchain.load.serializable import Serializable
|
19
|
+
from langchain.schema.runnable import RunnableParallel
|
20
|
+
|
21
|
+
from ads.common.auth import default_signer
|
22
|
+
from ads.common.object_storage_details import ObjectStorageDetails
|
23
|
+
from ads.llm import OCIModelDeploymentVLLM, OCIModelDeploymentTGI
|
24
|
+
from ads.llm.chain import GuardrailSequence
|
25
|
+
from ads.llm.guardrails.base import CustomGuardrailBase
|
26
|
+
from ads.llm.serializers.runnable_parallel import RunnableParallelSerializer
|
27
|
+
from ads.llm.serializers.retrieval_qa import RetrievalQASerializer
|
28
|
+
|
29
|
+
# This is a temp solution for supporting custom LLM in legacy load_chain
|
30
|
+
__lc_llm_dict = llms.get_type_to_cls_dict()
|
31
|
+
__lc_llm_dict[OCIModelDeploymentTGI.__name__] = lambda: OCIModelDeploymentTGI
|
32
|
+
__lc_llm_dict[OCIModelDeploymentVLLM.__name__] = lambda: OCIModelDeploymentVLLM
|
33
|
+
|
34
|
+
|
35
|
+
def __new_type_to_cls_dict():
|
36
|
+
return __lc_llm_dict
|
37
|
+
|
38
|
+
|
39
|
+
llms.get_type_to_cls_dict = __new_type_to_cls_dict
|
40
|
+
loading.get_type_to_cls_dict = __new_type_to_cls_dict
|
41
|
+
|
42
|
+
|
43
|
+
# Mapping class to custom serialization functions
|
44
|
+
custom_serialization = {
|
45
|
+
GuardrailSequence: GuardrailSequence.save,
|
46
|
+
CustomGuardrailBase: CustomGuardrailBase.save,
|
47
|
+
RunnableParallel: RunnableParallelSerializer.save,
|
48
|
+
}
|
49
|
+
|
50
|
+
# Mapping _type to custom deserialization functions
|
51
|
+
# Note that the load function should take **kwargs
|
52
|
+
custom_deserialization = {
|
53
|
+
GuardrailSequence.type(): GuardrailSequence.load,
|
54
|
+
CustomGuardrailBase.type(): CustomGuardrailBase.load,
|
55
|
+
RunnableParallelSerializer.type(): RunnableParallelSerializer.load,
|
56
|
+
RetrievalQASerializer.type(): RetrievalQASerializer.load,
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
def load(
|
61
|
+
obj: Any,
|
62
|
+
*,
|
63
|
+
secrets_map: Optional[Dict[str, str]] = None,
|
64
|
+
valid_namespaces: Optional[List[str]] = None,
|
65
|
+
**kwargs,
|
66
|
+
) -> Any:
|
67
|
+
"""Revive an ADS/LangChain class from a JSON object. Use this if you already
|
68
|
+
have a parsed JSON object, eg. from `json.load` or `json.loads`.
|
69
|
+
|
70
|
+
This is a drop in replacement for load() in langchain.load.load to support loading compatible class from ADS.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
obj: The object to load.
|
74
|
+
secrets_map: A map of secrets to load.
|
75
|
+
valid_namespaces: A list of additional namespaces (modules)
|
76
|
+
to allow to be deserialized.
|
77
|
+
|
78
|
+
Returns:
|
79
|
+
Revived LangChain objects.
|
80
|
+
"""
|
81
|
+
# Add ADS as valid namespace
|
82
|
+
if not valid_namespaces:
|
83
|
+
valid_namespaces = []
|
84
|
+
if "ads" not in valid_namespaces:
|
85
|
+
valid_namespaces.append("ads")
|
86
|
+
|
87
|
+
reviver = Reviver(secrets_map, valid_namespaces)
|
88
|
+
|
89
|
+
def _load(obj: Any) -> Any:
|
90
|
+
if isinstance(obj, dict):
|
91
|
+
if "_type" in obj and obj["_type"] in custom_deserialization:
|
92
|
+
if valid_namespaces:
|
93
|
+
kwargs["valid_namespaces"] = valid_namespaces
|
94
|
+
if secrets_map:
|
95
|
+
kwargs["secret_map"] = secrets_map
|
96
|
+
return custom_deserialization[obj["_type"]](obj, **kwargs)
|
97
|
+
# Need to revive leaf nodes before reviving this node
|
98
|
+
loaded_obj = {k: _load(v) for k, v in obj.items()}
|
99
|
+
return reviver(loaded_obj)
|
100
|
+
if isinstance(obj, list):
|
101
|
+
return [_load(o) for o in obj]
|
102
|
+
return obj
|
103
|
+
|
104
|
+
if isinstance(obj, dict) and "_type" in obj:
|
105
|
+
obj_type = obj["_type"]
|
106
|
+
# Check if the object has custom load function.
|
107
|
+
if obj_type in custom_deserialization:
|
108
|
+
if valid_namespaces:
|
109
|
+
kwargs["valid_namespaces"] = valid_namespaces
|
110
|
+
if secrets_map:
|
111
|
+
kwargs["secret_map"] = secrets_map
|
112
|
+
return custom_deserialization[obj_type](obj, **kwargs)
|
113
|
+
# Legacy chain
|
114
|
+
return load_chain_from_config(obj, **kwargs)
|
115
|
+
|
116
|
+
return _load(obj)
|
117
|
+
|
118
|
+
|
119
|
+
def load_from_yaml(
|
120
|
+
uri: str,
|
121
|
+
*,
|
122
|
+
secrets_map: Optional[Dict[str, str]] = None,
|
123
|
+
valid_namespaces: Optional[List[str]] = None,
|
124
|
+
**kwargs,
|
125
|
+
):
|
126
|
+
"""Revive an ADS/LangChain class from a YAML file."""
|
127
|
+
|
128
|
+
class _SafeLoaderIgnoreUnknown(yaml.SafeLoader):
|
129
|
+
"""Loader ignoring unknown tags in YAML"""
|
130
|
+
|
131
|
+
def ignore_unknown(self, node):
|
132
|
+
"""Ignores unknown tags in YAML"""
|
133
|
+
return node.value[0].value
|
134
|
+
|
135
|
+
_SafeLoaderIgnoreUnknown.add_constructor(
|
136
|
+
None, _SafeLoaderIgnoreUnknown.ignore_unknown
|
137
|
+
)
|
138
|
+
|
139
|
+
storage_options = default_signer() if ObjectStorageDetails.is_oci_path(uri) else {}
|
140
|
+
|
141
|
+
with fsspec.open(uri, **storage_options) as f:
|
142
|
+
config = yaml.load(f, Loader=_SafeLoaderIgnoreUnknown)
|
143
|
+
|
144
|
+
return load(
|
145
|
+
config, secrets_map=secrets_map, valid_namespaces=valid_namespaces, **kwargs
|
146
|
+
)
|
147
|
+
|
148
|
+
|
149
|
+
def default(obj: Any) -> Any:
|
150
|
+
"""Calls the to_json() method to serialize the object.
|
151
|
+
|
152
|
+
Parameters
|
153
|
+
----------
|
154
|
+
obj : Any
|
155
|
+
The object to be serialized.
|
156
|
+
|
157
|
+
Returns
|
158
|
+
-------
|
159
|
+
Any
|
160
|
+
The serialized representation of the object.
|
161
|
+
|
162
|
+
Raises
|
163
|
+
------
|
164
|
+
TypeError
|
165
|
+
If the object is not LangChain serializable.
|
166
|
+
"""
|
167
|
+
for super_class, save_fn in custom_serialization.items():
|
168
|
+
if isinstance(obj, super_class):
|
169
|
+
return save_fn(obj)
|
170
|
+
if isinstance(obj, Serializable) and obj.is_lc_serializable():
|
171
|
+
return obj.to_json()
|
172
|
+
raise TypeError(f"Serialization of {type(obj)} is not supported.")
|
173
|
+
|
174
|
+
|
175
|
+
def __save(obj):
|
176
|
+
"""Calls the legacy save method to save the object to temp json
|
177
|
+
then load it into a dictionary.
|
178
|
+
"""
|
179
|
+
try:
|
180
|
+
temp_file = tempfile.NamedTemporaryFile(
|
181
|
+
mode="w", encoding="utf-8", suffix=".json", delete=False
|
182
|
+
)
|
183
|
+
temp_file.close()
|
184
|
+
obj.save(temp_file.name)
|
185
|
+
with open(temp_file.name, "r", encoding="utf-8") as f:
|
186
|
+
return json.load(f)
|
187
|
+
finally:
|
188
|
+
os.unlink(temp_file.name)
|
189
|
+
|
190
|
+
|
191
|
+
def dump(obj: Any) -> Dict[str, Any]:
|
192
|
+
"""Return a json dict representation of an object.
|
193
|
+
|
194
|
+
This is a drop in replacement of the dumpd() in langchain.load.dump
|
195
|
+
to support serializing legacy LangChain chain and ADS GuardrailSequence.
|
196
|
+
|
197
|
+
This method will raise TypeError when the object is not serializable.
|
198
|
+
"""
|
199
|
+
for super_class, save_fn in custom_serialization.items():
|
200
|
+
if isinstance(obj, super_class):
|
201
|
+
return save_fn(obj)
|
202
|
+
if (
|
203
|
+
isinstance(obj, Serializable)
|
204
|
+
and not obj.is_lc_serializable()
|
205
|
+
and hasattr(obj, "save")
|
206
|
+
):
|
207
|
+
# The object is not is_lc_serializable.
|
208
|
+
# However, it supports the legacy save() method.
|
209
|
+
return __save(obj)
|
210
|
+
# The object is is_lc_serializable.
|
211
|
+
# However, some properties may not be serializable
|
212
|
+
# Here we try to dump the object and fallback to the save() method
|
213
|
+
# if there is an error.
|
214
|
+
try:
|
215
|
+
return json.loads(json.dumps(obj, default=default))
|
216
|
+
except TypeError as ex:
|
217
|
+
if isinstance(obj, Serializable) and hasattr(obj, "save"):
|
218
|
+
return __save(obj)
|
219
|
+
raise ex
|
File without changes
|
@@ -0,0 +1,153 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import base64
|
8
|
+
import json
|
9
|
+
import os
|
10
|
+
from copy import deepcopy
|
11
|
+
from langchain.load import dumpd
|
12
|
+
from langchain.chains.loading import load_chain_from_config
|
13
|
+
from langchain.vectorstores import FAISS, OpenSearchVectorSearch
|
14
|
+
|
15
|
+
|
16
|
+
class OpenSearchVectorDBSerializer:
|
17
|
+
"""
|
18
|
+
Serializer for OpenSearchVectorSearch class
|
19
|
+
"""
|
20
|
+
|
21
|
+
@staticmethod
|
22
|
+
def type():
|
23
|
+
return OpenSearchVectorSearch.__name__
|
24
|
+
|
25
|
+
@staticmethod
|
26
|
+
def load(config: dict, **kwargs):
|
27
|
+
from ads.llm.serialize import load
|
28
|
+
|
29
|
+
config["kwargs"]["embedding_function"] = load(
|
30
|
+
config["kwargs"]["embedding_function"], **kwargs
|
31
|
+
)
|
32
|
+
return OpenSearchVectorSearch(
|
33
|
+
**config["kwargs"],
|
34
|
+
http_auth=(
|
35
|
+
os.environ.get("OCI_OPENSEARCH_USERNAME", None),
|
36
|
+
os.environ.get("OCI_OPENSEARCH_PASSWORD", None),
|
37
|
+
),
|
38
|
+
verify_certs=True
|
39
|
+
if os.environ.get("OCI_OPENSEARCH_VERIFY_CERTS", None) == "True"
|
40
|
+
else False,
|
41
|
+
ca_certs=os.environ.get("OCI_OPENSEARCH_CA_CERTS", None),
|
42
|
+
)
|
43
|
+
|
44
|
+
@staticmethod
|
45
|
+
def save(obj):
|
46
|
+
from ads.llm.serialize import dump
|
47
|
+
from opensearchpy.client import OpenSearch
|
48
|
+
|
49
|
+
serialized = dumpd(obj)
|
50
|
+
serialized["type"] = "constructor"
|
51
|
+
serialized["_type"] = OpenSearchVectorDBSerializer.type()
|
52
|
+
kwargs = {}
|
53
|
+
for component_name, component in obj.__dict__.items():
|
54
|
+
if component_name == "client":
|
55
|
+
if isinstance(component, OpenSearch):
|
56
|
+
client_info = component.transport.hosts[0]
|
57
|
+
opensearch_url = (
|
58
|
+
f"https://{client_info['host']}:{client_info['port']}"
|
59
|
+
)
|
60
|
+
kwargs.update({"opensearch_url": opensearch_url})
|
61
|
+
else:
|
62
|
+
raise NotImplementedError("Only support OpenSearch client.")
|
63
|
+
continue
|
64
|
+
kwargs[component_name] = dump(component)
|
65
|
+
serialized["kwargs"] = kwargs
|
66
|
+
return serialized
|
67
|
+
|
68
|
+
|
69
|
+
class FaissSerializer:
|
70
|
+
"""
|
71
|
+
Serializer for OpenSearchVectorSearch class
|
72
|
+
"""
|
73
|
+
|
74
|
+
@staticmethod
|
75
|
+
def type():
|
76
|
+
return FAISS.__name__
|
77
|
+
|
78
|
+
@staticmethod
|
79
|
+
def load(config: dict, **kwargs):
|
80
|
+
from ads.llm.serialize import load
|
81
|
+
|
82
|
+
embedding_function = load(config["embedding_function"], **kwargs)
|
83
|
+
decoded_pkl = base64.b64decode(json.loads(config["vectordb"]))
|
84
|
+
return FAISS.deserialize_from_bytes(
|
85
|
+
embeddings=embedding_function, serialized=decoded_pkl
|
86
|
+
) # Load the index
|
87
|
+
|
88
|
+
@staticmethod
|
89
|
+
def save(obj):
|
90
|
+
from ads.llm.serialize import dump
|
91
|
+
|
92
|
+
serialized = {}
|
93
|
+
serialized["_type"] = FaissSerializer.type()
|
94
|
+
pkl = obj.serialize_to_bytes()
|
95
|
+
# Encoding bytes to a base64 string
|
96
|
+
encoded_pkl = base64.b64encode(pkl).decode("utf-8")
|
97
|
+
# Serializing the base64 string
|
98
|
+
serialized["vectordb"] = json.dumps(encoded_pkl)
|
99
|
+
serialized["embedding_function"] = dump(obj.__dict__["embedding_function"])
|
100
|
+
return serialized
|
101
|
+
|
102
|
+
|
103
|
+
class RetrievalQASerializer:
|
104
|
+
"""
|
105
|
+
Serializer for RetrieverQA class
|
106
|
+
"""
|
107
|
+
|
108
|
+
# Mapping class to vector store serialization functions
|
109
|
+
vectordb_serialization = {
|
110
|
+
"OpenSearchVectorSearch": OpenSearchVectorDBSerializer,
|
111
|
+
"FAISS": FaissSerializer,
|
112
|
+
}
|
113
|
+
|
114
|
+
@staticmethod
|
115
|
+
def type():
|
116
|
+
return "retrieval_qa"
|
117
|
+
|
118
|
+
@staticmethod
|
119
|
+
def load(config: dict, **kwargs):
|
120
|
+
config_param = deepcopy(config)
|
121
|
+
retriever_kwargs = config_param.pop("retriever_kwargs")
|
122
|
+
vectordb_serializer = RetrievalQASerializer.vectordb_serialization[
|
123
|
+
config_param["vectordb"]["class"]
|
124
|
+
]
|
125
|
+
vectordb = vectordb_serializer.load(config_param.pop("vectordb"), **kwargs)
|
126
|
+
retriever = vectordb.as_retriever(**retriever_kwargs)
|
127
|
+
return load_chain_from_config(config=config_param, retriever=retriever)
|
128
|
+
|
129
|
+
@staticmethod
|
130
|
+
def save(obj):
|
131
|
+
serialized = obj.dict()
|
132
|
+
retriever_kwargs = {}
|
133
|
+
for key, val in obj.retriever.__dict__.items():
|
134
|
+
if key not in ["tags", "metadata", "vectorstore"]:
|
135
|
+
retriever_kwargs[key] = val
|
136
|
+
serialized["retriever_kwargs"] = retriever_kwargs
|
137
|
+
serialized["vectordb"] = {"class": obj.retriever.vectorstore.__class__.__name__}
|
138
|
+
|
139
|
+
vectordb_serializer = RetrievalQASerializer.vectordb_serialization[
|
140
|
+
serialized["vectordb"]["class"]
|
141
|
+
]
|
142
|
+
serialized["vectordb"].update(
|
143
|
+
vectordb_serializer.save(obj.retriever.vectorstore)
|
144
|
+
)
|
145
|
+
|
146
|
+
if (
|
147
|
+
serialized["vectordb"]["class"]
|
148
|
+
not in RetrievalQASerializer.vectordb_serialization
|
149
|
+
):
|
150
|
+
raise NotImplementedError(
|
151
|
+
f"VectorDBSerializer for {serialized['vectordb']['class']} is not implemented."
|
152
|
+
)
|
153
|
+
return serialized
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2024 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
from langchain.schema.runnable import RunnableParallel
|
8
|
+
from langchain.load.dump import dumpd
|
9
|
+
from langchain.load.load import load
|
10
|
+
|
11
|
+
|
12
|
+
class RunnableParallelSerializer:
|
13
|
+
@staticmethod
|
14
|
+
def type():
|
15
|
+
return RunnableParallel.__name__
|
16
|
+
|
17
|
+
@staticmethod
|
18
|
+
def load(config: dict, **kwargs):
|
19
|
+
steps = config.get("kwargs", dict()).get("steps", dict())
|
20
|
+
steps = {k: load(v, **kwargs) for k, v in steps.items()}
|
21
|
+
return RunnableParallel(**steps)
|
22
|
+
|
23
|
+
@staticmethod
|
24
|
+
def save(obj):
|
25
|
+
serialized = dumpd(obj)
|
26
|
+
serialized["_type"] = RunnableParallelSerializer.type()
|
27
|
+
return serialized
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# score.py {{SCORE_VERSION}} generated by ADS {{ADS_VERSION}} on {{time_created}}
|
2
|
+
import os
|
3
|
+
import sys
|
4
|
+
import json
|
5
|
+
from functools import lru_cache
|
6
|
+
from ads import set_auth
|
7
|
+
from ads.llm.deploy import ChainDeployment
|
8
|
+
from ads.llm.chain import LOG_ADS_GUARDRAIL_INFO
|
9
|
+
from ads.config import OCI_RESOURCE_PRINCIPAL_VERSION
|
10
|
+
|
11
|
+
if OCI_RESOURCE_PRINCIPAL_VERSION:
|
12
|
+
set_auth("resource_principal")
|
13
|
+
|
14
|
+
if LOG_ADS_GUARDRAIL_INFO not in os.environ:
|
15
|
+
os.environ[LOG_ADS_GUARDRAIL_INFO] = "1"
|
16
|
+
|
17
|
+
|
18
|
+
"""
|
19
|
+
Inference script. This script is used for prediction by scoring server when schema is known.
|
20
|
+
"""
|
21
|
+
|
22
|
+
|
23
|
+
@lru_cache(maxsize=10)
|
24
|
+
def load_model():
|
25
|
+
"""
|
26
|
+
Loads model from the yaml
|
27
|
+
|
28
|
+
Returns
|
29
|
+
-------
|
30
|
+
model: a model instance on which predict API can be invoked
|
31
|
+
"""
|
32
|
+
chain_yaml_path = os.path.join(
|
33
|
+
os.path.dirname(os.path.abspath(__file__)),
|
34
|
+
"chain.yaml"
|
35
|
+
)
|
36
|
+
return ChainDeployment.load_chain(chain_yaml_path)
|
37
|
+
|
38
|
+
@lru_cache(maxsize=1)
|
39
|
+
def fetch_data_type_from_schema(input_schema_path=os.path.join(os.path.dirname(os.path.realpath(__file__)), "input_schema.json")):
|
40
|
+
"""
|
41
|
+
Returns data type information fetch from input_schema.json.
|
42
|
+
|
43
|
+
Parameters
|
44
|
+
----------
|
45
|
+
input_schema_path: path of input schema.
|
46
|
+
|
47
|
+
Returns
|
48
|
+
-------
|
49
|
+
data_type: data type fetch from input_schema.json.
|
50
|
+
|
51
|
+
"""
|
52
|
+
data_type = {}
|
53
|
+
if os.path.exists(input_schema_path):
|
54
|
+
schema = json.load(open(input_schema_path))
|
55
|
+
for col in schema['schema']:
|
56
|
+
data_type[col['name']] = col['dtype']
|
57
|
+
else:
|
58
|
+
print("input_schema has to be passed in in order to recover the same data type. pass `X_sample` in `ads.model.framework.sklearn_model.SklearnModel.prepare` function to generate the input_schema. Otherwise, the data type might be changed after serialization/deserialization.")
|
59
|
+
return data_type
|
60
|
+
|
61
|
+
def deserialize(data, input_schema_path):
|
62
|
+
"""
|
63
|
+
Deserialize json serialization data to data in original type when sent to predict.
|
64
|
+
|
65
|
+
Parameters
|
66
|
+
----------
|
67
|
+
data: serialized input data.
|
68
|
+
input_schema_path: path of input schema.
|
69
|
+
|
70
|
+
Returns
|
71
|
+
-------
|
72
|
+
data: deserialized input data.
|
73
|
+
|
74
|
+
"""
|
75
|
+
{% if data_deserializer == "json" %}
|
76
|
+
import pandas as pd
|
77
|
+
import numpy as np
|
78
|
+
import base64
|
79
|
+
from io import BytesIO
|
80
|
+
if isinstance(data, bytes):
|
81
|
+
return data
|
82
|
+
|
83
|
+
data_type = data.get('data_type', '') if isinstance(data, dict) else ''
|
84
|
+
json_data = data.get('data', data) if isinstance(data, dict) else data
|
85
|
+
|
86
|
+
if "numpy.ndarray" in data_type:
|
87
|
+
load_bytes = BytesIO(base64.b64decode(json_data.encode('utf-8')))
|
88
|
+
return np.load(load_bytes, allow_pickle=True)
|
89
|
+
if "pandas.core.series.Series" in data_type:
|
90
|
+
return pd.Series(json_data)
|
91
|
+
if "pandas.core.frame.DataFrame" in data_type or isinstance(json_data, str):
|
92
|
+
return pd.read_json(json_data, dtype=fetch_data_type_from_schema(input_schema_path))
|
93
|
+
if isinstance(json_data, dict):
|
94
|
+
return pd.DataFrame.from_dict(json_data)
|
95
|
+
|
96
|
+
return json_data
|
97
|
+
|
98
|
+
{% elif data_deserializer == "cloudpickle" %}
|
99
|
+
import cloudpickle
|
100
|
+
from pickle import UnpicklingError
|
101
|
+
deserialized_data = data
|
102
|
+
try:
|
103
|
+
deserialized_data = cloudpickle.loads(data)
|
104
|
+
except TypeError:
|
105
|
+
pass
|
106
|
+
except UnpicklingError:
|
107
|
+
logger.warning(
|
108
|
+
"bytes are passed directly to the model. If the model expects a specific data format, you need to write the conversion logic in `deserialize()` yourself."
|
109
|
+
)
|
110
|
+
|
111
|
+
return deserialized_data
|
112
|
+
|
113
|
+
{% else %}
|
114
|
+
# Add further data deserialization if needed
|
115
|
+
return data
|
116
|
+
{% endif %}
|
117
|
+
|
118
|
+
def pre_inference(data, input_schema_path):
|
119
|
+
"""
|
120
|
+
Preprocess data
|
121
|
+
|
122
|
+
Parameters
|
123
|
+
----------
|
124
|
+
data: Data format as expected by the predict API of the core estimator.
|
125
|
+
input_schema_path: path of input schema.
|
126
|
+
|
127
|
+
Returns
|
128
|
+
-------
|
129
|
+
data: Data format after any processing.
|
130
|
+
|
131
|
+
"""
|
132
|
+
return deserialize(data, input_schema_path)
|
133
|
+
|
134
|
+
def predict(data, model=load_model(), input_schema_path=os.path.join(os.path.dirname(os.path.realpath(__file__)), "input_schema.json")):
|
135
|
+
"""
|
136
|
+
Returns prediction given the model and data to predict
|
137
|
+
|
138
|
+
Parameters
|
139
|
+
----------
|
140
|
+
model: Model instance returned by load_model API.
|
141
|
+
data: Data format as expected by the predict API of the core estimator. For eg. in case of sckit models it could be numpy array/List of list/Pandas DataFrame.
|
142
|
+
input_schema_path: path of input schema.
|
143
|
+
|
144
|
+
Returns
|
145
|
+
-------
|
146
|
+
predictions: Output from scoring server
|
147
|
+
Format: {'prediction': output from model.predict method}
|
148
|
+
|
149
|
+
"""
|
150
|
+
features = pre_inference(data, input_schema_path)
|
151
|
+
output = model.invoke(features)
|
152
|
+
# Return the output as is if the output is a dictionary
|
153
|
+
if isinstance(output, dict):
|
154
|
+
return output
|
155
|
+
return {'output': output}
|
@@ -0,0 +1,130 @@
|
|
1
|
+
{%- macro json_to_python_type(json_spec) %}
|
2
|
+
{%- set basic_type_map = {
|
3
|
+
"string": "str",
|
4
|
+
"number": "float",
|
5
|
+
"integer": "int",
|
6
|
+
"boolean": "bool"
|
7
|
+
} %}
|
8
|
+
|
9
|
+
{%- if basic_type_map[json_spec.type] is defined %}
|
10
|
+
{{- basic_type_map[json_spec.type] }}
|
11
|
+
{%- elif json_spec.type == "array" %}
|
12
|
+
{{- "list[" + json_to_python_type(json_spec|items) + "]" }}
|
13
|
+
{%- elif json_spec.type == "object" %}
|
14
|
+
{%- if json_spec.additionalProperties is defined %}
|
15
|
+
{{- "dict[str, " + json_to_python_type(json_spec.additionalProperties) + ']' }}
|
16
|
+
{%- else %}
|
17
|
+
{{- "dict" }}
|
18
|
+
{%- endif %}
|
19
|
+
{%- elif json_spec.type is iterable %}
|
20
|
+
{{- "Union[" }}
|
21
|
+
{%- for t in json_spec.type %}
|
22
|
+
{{- json_to_python_type({"type": t}) }}
|
23
|
+
{%- if not loop.last %}
|
24
|
+
{{- "," }}
|
25
|
+
{%- endif %}
|
26
|
+
{%- endfor %}
|
27
|
+
{{- "]" }}
|
28
|
+
{%- else %}
|
29
|
+
{{- "Any" }}
|
30
|
+
{%- endif %}
|
31
|
+
{%- endmacro %}
|
32
|
+
|
33
|
+
|
34
|
+
{{- bos_token }}
|
35
|
+
{{- "<|im_start|>system\nYou are a function calling AI model. You are provided with function signatures within <tools></tools> XML tags. You may call one or more functions to assist with the user query. Don't make assumptions about what values to plug into functions. Here are the available tools: <tools> " }}
|
36
|
+
{%- if tools is iterable and tools | length > 0 %}
|
37
|
+
{%- for tool in tools %}
|
38
|
+
{%- if tool.function is defined %}
|
39
|
+
{%- set tool = tool.function %}
|
40
|
+
{%- endif %}
|
41
|
+
{{- '{"type": "function", "function": ' }}
|
42
|
+
{{- '{"name": "' + tool.name + '", ' }}
|
43
|
+
{{- '"description": "' + tool.name + '(' }}
|
44
|
+
{%- for param_name, param_fields in tool.parameters.properties|items %}
|
45
|
+
{{- param_name + ": " + json_to_python_type(param_fields) }}
|
46
|
+
{%- if not loop.last %}
|
47
|
+
{{- ", " }}
|
48
|
+
{%- endif %}
|
49
|
+
{%- endfor %}
|
50
|
+
{{- ")" }}
|
51
|
+
{%- if tool.return is defined %}
|
52
|
+
{{- " -> " + json_to_python_type(tool.return) }}
|
53
|
+
{%- endif %}
|
54
|
+
{{- " - " + tool.description + "\n\n" }}
|
55
|
+
{%- for param_name, param_fields in tool.parameters.properties|items %}
|
56
|
+
{%- if loop.first %}
|
57
|
+
{{- " Args:\n" }}
|
58
|
+
{%- endif %}
|
59
|
+
{{- " " + param_name + "(" + json_to_python_type(param_fields) + "): " + param_fields.description|trim }}
|
60
|
+
{%- endfor %}
|
61
|
+
{%- if tool.return is defined and tool.return.description is defined %}
|
62
|
+
{{- "\n Returns:\n " + tool.return.description }}
|
63
|
+
{%- endif %}
|
64
|
+
{{- '"' }}
|
65
|
+
{{- ', "parameters": ' }}
|
66
|
+
{%- if tool.parameters.properties | length == 0 %}
|
67
|
+
{{- "{}" }}
|
68
|
+
{%- else %}
|
69
|
+
{{- tool.parameters|tojson }}
|
70
|
+
{%- endif %}
|
71
|
+
{{- "}" }}
|
72
|
+
{%- if not loop.last %}
|
73
|
+
{{- "\n" }}
|
74
|
+
{%- endif %}
|
75
|
+
{%- endfor %}
|
76
|
+
{%- endif %}
|
77
|
+
{{- " </tools>" }}
|
78
|
+
{{- 'Use the following pydantic model json schema for each tool call you will make: {"properties": {"name": {"title": "Name", "type": "string"}, "arguments": {"title": "Arguments", "type": "object"}}, "required": ["name", "arguments"], "title": "FunctionCall", "type": "object"}}
|
79
|
+
' }}
|
80
|
+
{{- "For each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:
|
81
|
+
" }}
|
82
|
+
{{- "<tool_call>
|
83
|
+
" }}
|
84
|
+
{{- '{"name": <function-name>, "arguments": <args-dict>}
|
85
|
+
' }}
|
86
|
+
{{- '</tool_call><|im_end|>' }}
|
87
|
+
{%- for message in messages %}
|
88
|
+
{%- if message.role == "user" or message.role == "system" or (message.role == "assistant" and message.tool_calls is not defined) %}
|
89
|
+
{{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
|
90
|
+
{%- elif message.role == "assistant" and message.tool_calls is defined %}
|
91
|
+
{{- '<|im_start|>' + message.role }}
|
92
|
+
{%- for tool_call in message.tool_calls %}
|
93
|
+
{{- '\n<tool_call>\n' }}
|
94
|
+
{%- if tool_call.function is defined %}
|
95
|
+
{%- set tool_call = tool_call.function %}
|
96
|
+
{%- endif %}
|
97
|
+
{{- '{' }}
|
98
|
+
{{- '"name": "' }}
|
99
|
+
{{- tool_call.name }}
|
100
|
+
{{- '"' }}
|
101
|
+
{%- if tool_call.arguments is defined %}
|
102
|
+
{{- ', ' }}
|
103
|
+
{{- '"arguments": ' }}
|
104
|
+
{{- tool_call.arguments|tojson }}
|
105
|
+
{%- endif %}
|
106
|
+
{{- '}' }}
|
107
|
+
{{- '\n</tool_call>' }}
|
108
|
+
{%- endfor %}
|
109
|
+
{{- '<|im_end|>\n' }}
|
110
|
+
{%- elif message.role == "tool" %}
|
111
|
+
{%- if loop.previtem and loop.previtem.role != "tool" %}
|
112
|
+
{{- '<|im_start|>tool\n' }}
|
113
|
+
{%- endif %}
|
114
|
+
{{- '<tool_response>\n' }}
|
115
|
+
{{- message.content }}
|
116
|
+
{%- if not loop.last %}
|
117
|
+
{{- '\n</tool_response>\n' }}
|
118
|
+
{%- else %}
|
119
|
+
{{- '\n</tool_response>' }}
|
120
|
+
{%- endif %}
|
121
|
+
{%- if not loop.last and loop.nextitem.role != "tool" %}
|
122
|
+
{{- '<|im_end|>' }}
|
123
|
+
{%- elif loop.last %}
|
124
|
+
{{- '<|im_end|>' }}
|
125
|
+
{%- endif %}
|
126
|
+
{%- endif %}
|
127
|
+
{%- endfor %}
|
128
|
+
{%- if add_generation_prompt %}
|
129
|
+
{{- '<|im_start|>assistant\n' }}
|
130
|
+
{%- endif %}
|