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.
Files changed (858) hide show
  1. ads/aqua/__init__.py +40 -0
  2. ads/aqua/app.py +507 -0
  3. ads/aqua/cli.py +96 -0
  4. ads/aqua/client/__init__.py +3 -0
  5. ads/aqua/client/client.py +836 -0
  6. ads/aqua/client/openai_client.py +305 -0
  7. ads/aqua/common/__init__.py +5 -0
  8. ads/aqua/common/decorator.py +125 -0
  9. ads/aqua/common/entities.py +274 -0
  10. ads/aqua/common/enums.py +134 -0
  11. ads/aqua/common/errors.py +109 -0
  12. ads/aqua/common/utils.py +1295 -0
  13. ads/aqua/config/__init__.py +4 -0
  14. ads/aqua/config/container_config.py +246 -0
  15. ads/aqua/config/evaluation/__init__.py +4 -0
  16. ads/aqua/config/evaluation/evaluation_service_config.py +147 -0
  17. ads/aqua/config/utils/__init__.py +4 -0
  18. ads/aqua/config/utils/serializer.py +339 -0
  19. ads/aqua/constants.py +116 -0
  20. ads/aqua/data.py +14 -0
  21. ads/aqua/dummy_data/icon.txt +1 -0
  22. ads/aqua/dummy_data/oci_model_deployments.json +56 -0
  23. ads/aqua/dummy_data/oci_models.json +1 -0
  24. ads/aqua/dummy_data/readme.md +26 -0
  25. ads/aqua/evaluation/__init__.py +8 -0
  26. ads/aqua/evaluation/constants.py +53 -0
  27. ads/aqua/evaluation/entities.py +186 -0
  28. ads/aqua/evaluation/errors.py +70 -0
  29. ads/aqua/evaluation/evaluation.py +1814 -0
  30. ads/aqua/extension/__init__.py +42 -0
  31. ads/aqua/extension/aqua_ws_msg_handler.py +76 -0
  32. ads/aqua/extension/base_handler.py +90 -0
  33. ads/aqua/extension/common_handler.py +121 -0
  34. ads/aqua/extension/common_ws_msg_handler.py +36 -0
  35. ads/aqua/extension/deployment_handler.py +381 -0
  36. ads/aqua/extension/deployment_ws_msg_handler.py +54 -0
  37. ads/aqua/extension/errors.py +30 -0
  38. ads/aqua/extension/evaluation_handler.py +129 -0
  39. ads/aqua/extension/evaluation_ws_msg_handler.py +61 -0
  40. ads/aqua/extension/finetune_handler.py +96 -0
  41. ads/aqua/extension/model_handler.py +390 -0
  42. ads/aqua/extension/models/__init__.py +0 -0
  43. ads/aqua/extension/models/ws_models.py +145 -0
  44. ads/aqua/extension/models_ws_msg_handler.py +50 -0
  45. ads/aqua/extension/ui_handler.py +300 -0
  46. ads/aqua/extension/ui_websocket_handler.py +130 -0
  47. ads/aqua/extension/utils.py +133 -0
  48. ads/aqua/finetuning/__init__.py +7 -0
  49. ads/aqua/finetuning/constants.py +23 -0
  50. ads/aqua/finetuning/entities.py +181 -0
  51. ads/aqua/finetuning/finetuning.py +749 -0
  52. ads/aqua/model/__init__.py +8 -0
  53. ads/aqua/model/constants.py +60 -0
  54. ads/aqua/model/entities.py +385 -0
  55. ads/aqua/model/enums.py +32 -0
  56. ads/aqua/model/model.py +2134 -0
  57. ads/aqua/model/utils.py +52 -0
  58. ads/aqua/modeldeployment/__init__.py +6 -0
  59. ads/aqua/modeldeployment/constants.py +10 -0
  60. ads/aqua/modeldeployment/deployment.py +1315 -0
  61. ads/aqua/modeldeployment/entities.py +653 -0
  62. ads/aqua/modeldeployment/utils.py +543 -0
  63. ads/aqua/resources/gpu_shapes_index.json +94 -0
  64. ads/aqua/server/__init__.py +4 -0
  65. ads/aqua/server/__main__.py +24 -0
  66. ads/aqua/server/app.py +47 -0
  67. ads/aqua/server/aqua_spec.yml +1291 -0
  68. ads/aqua/training/__init__.py +4 -0
  69. ads/aqua/training/exceptions.py +476 -0
  70. ads/aqua/ui.py +519 -0
  71. ads/automl/__init__.py +9 -0
  72. ads/automl/driver.py +330 -0
  73. ads/automl/provider.py +975 -0
  74. ads/bds/__init__.py +5 -0
  75. ads/bds/auth.py +127 -0
  76. ads/bds/big_data_service.py +255 -0
  77. ads/catalog/__init__.py +19 -0
  78. ads/catalog/model.py +1576 -0
  79. ads/catalog/notebook.py +461 -0
  80. ads/catalog/project.py +468 -0
  81. ads/catalog/summary.py +178 -0
  82. ads/common/__init__.py +11 -0
  83. ads/common/analyzer.py +65 -0
  84. ads/common/artifact/.model-ignore +63 -0
  85. ads/common/artifact/__init__.py +10 -0
  86. ads/common/auth.py +1122 -0
  87. ads/common/card_identifier.py +83 -0
  88. ads/common/config.py +647 -0
  89. ads/common/data.py +165 -0
  90. ads/common/decorator/__init__.py +9 -0
  91. ads/common/decorator/argument_to_case.py +88 -0
  92. ads/common/decorator/deprecate.py +69 -0
  93. ads/common/decorator/require_nonempty_arg.py +65 -0
  94. ads/common/decorator/runtime_dependency.py +178 -0
  95. ads/common/decorator/threaded.py +97 -0
  96. ads/common/decorator/utils.py +35 -0
  97. ads/common/dsc_file_system.py +303 -0
  98. ads/common/error.py +14 -0
  99. ads/common/extended_enum.py +81 -0
  100. ads/common/function/__init__.py +5 -0
  101. ads/common/function/fn_util.py +142 -0
  102. ads/common/function/func_conf.yaml +25 -0
  103. ads/common/ipython.py +76 -0
  104. ads/common/model.py +679 -0
  105. ads/common/model_artifact.py +1759 -0
  106. ads/common/model_artifact_schema.json +107 -0
  107. ads/common/model_export_util.py +664 -0
  108. ads/common/model_metadata.py +24 -0
  109. ads/common/object_storage_details.py +296 -0
  110. ads/common/oci_client.py +179 -0
  111. ads/common/oci_datascience.py +46 -0
  112. ads/common/oci_logging.py +1144 -0
  113. ads/common/oci_mixin.py +957 -0
  114. ads/common/oci_resource.py +136 -0
  115. ads/common/serializer.py +559 -0
  116. ads/common/utils.py +1852 -0
  117. ads/common/word_lists.py +1491 -0
  118. ads/common/work_request.py +189 -0
  119. ads/config.py +1 -0
  120. ads/data_labeling/__init__.py +13 -0
  121. ads/data_labeling/boundingbox.py +253 -0
  122. ads/data_labeling/constants.py +47 -0
  123. ads/data_labeling/data_labeling_service.py +244 -0
  124. ads/data_labeling/interface/__init__.py +5 -0
  125. ads/data_labeling/interface/loader.py +16 -0
  126. ads/data_labeling/interface/parser.py +16 -0
  127. ads/data_labeling/interface/reader.py +23 -0
  128. ads/data_labeling/loader/__init__.py +5 -0
  129. ads/data_labeling/loader/file_loader.py +241 -0
  130. ads/data_labeling/metadata.py +110 -0
  131. ads/data_labeling/mixin/__init__.py +5 -0
  132. ads/data_labeling/mixin/data_labeling.py +232 -0
  133. ads/data_labeling/ner.py +129 -0
  134. ads/data_labeling/parser/__init__.py +5 -0
  135. ads/data_labeling/parser/dls_record_parser.py +388 -0
  136. ads/data_labeling/parser/export_metadata_parser.py +94 -0
  137. ads/data_labeling/parser/export_record_parser.py +473 -0
  138. ads/data_labeling/reader/__init__.py +5 -0
  139. ads/data_labeling/reader/dataset_reader.py +574 -0
  140. ads/data_labeling/reader/dls_record_reader.py +121 -0
  141. ads/data_labeling/reader/export_record_reader.py +62 -0
  142. ads/data_labeling/reader/jsonl_reader.py +75 -0
  143. ads/data_labeling/reader/metadata_reader.py +203 -0
  144. ads/data_labeling/reader/record_reader.py +263 -0
  145. ads/data_labeling/record.py +52 -0
  146. ads/data_labeling/visualizer/__init__.py +5 -0
  147. ads/data_labeling/visualizer/image_visualizer.py +525 -0
  148. ads/data_labeling/visualizer/text_visualizer.py +357 -0
  149. ads/database/__init__.py +5 -0
  150. ads/database/connection.py +338 -0
  151. ads/dataset/__init__.py +10 -0
  152. ads/dataset/capabilities.md +51 -0
  153. ads/dataset/classification_dataset.py +339 -0
  154. ads/dataset/correlation.py +226 -0
  155. ads/dataset/correlation_plot.py +563 -0
  156. ads/dataset/dask_series.py +173 -0
  157. ads/dataset/dataframe_transformer.py +110 -0
  158. ads/dataset/dataset.py +1979 -0
  159. ads/dataset/dataset_browser.py +360 -0
  160. ads/dataset/dataset_with_target.py +995 -0
  161. ads/dataset/exception.py +25 -0
  162. ads/dataset/factory.py +987 -0
  163. ads/dataset/feature_engineering_transformer.py +35 -0
  164. ads/dataset/feature_selection.py +107 -0
  165. ads/dataset/forecasting_dataset.py +26 -0
  166. ads/dataset/helper.py +1450 -0
  167. ads/dataset/label_encoder.py +99 -0
  168. ads/dataset/mixin/__init__.py +5 -0
  169. ads/dataset/mixin/dataset_accessor.py +134 -0
  170. ads/dataset/pipeline.py +58 -0
  171. ads/dataset/plot.py +710 -0
  172. ads/dataset/progress.py +86 -0
  173. ads/dataset/recommendation.py +297 -0
  174. ads/dataset/recommendation_transformer.py +502 -0
  175. ads/dataset/regression_dataset.py +14 -0
  176. ads/dataset/sampled_dataset.py +1050 -0
  177. ads/dataset/target.py +98 -0
  178. ads/dataset/timeseries.py +18 -0
  179. ads/dbmixin/__init__.py +5 -0
  180. ads/dbmixin/db_pandas_accessor.py +153 -0
  181. ads/environment/__init__.py +9 -0
  182. ads/environment/ml_runtime.py +66 -0
  183. ads/evaluations/README.md +14 -0
  184. ads/evaluations/__init__.py +109 -0
  185. ads/evaluations/evaluation_plot.py +983 -0
  186. ads/evaluations/evaluator.py +1334 -0
  187. ads/evaluations/statistical_metrics.py +543 -0
  188. ads/experiments/__init__.py +9 -0
  189. ads/experiments/capabilities.md +0 -0
  190. ads/explanations/__init__.py +21 -0
  191. ads/explanations/base_explainer.py +142 -0
  192. ads/explanations/capabilities.md +83 -0
  193. ads/explanations/explainer.py +190 -0
  194. ads/explanations/mlx_global_explainer.py +1050 -0
  195. ads/explanations/mlx_interface.py +386 -0
  196. ads/explanations/mlx_local_explainer.py +287 -0
  197. ads/explanations/mlx_whatif_explainer.py +201 -0
  198. ads/feature_engineering/__init__.py +20 -0
  199. ads/feature_engineering/accessor/__init__.py +5 -0
  200. ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
  201. ads/feature_engineering/accessor/mixin/__init__.py +5 -0
  202. ads/feature_engineering/accessor/mixin/correlation.py +166 -0
  203. ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
  204. ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
  205. ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
  206. ads/feature_engineering/accessor/mixin/utils.py +65 -0
  207. ads/feature_engineering/accessor/series_accessor.py +431 -0
  208. ads/feature_engineering/adsimage/__init__.py +5 -0
  209. ads/feature_engineering/adsimage/image.py +192 -0
  210. ads/feature_engineering/adsimage/image_reader.py +170 -0
  211. ads/feature_engineering/adsimage/interface/__init__.py +5 -0
  212. ads/feature_engineering/adsimage/interface/reader.py +19 -0
  213. ads/feature_engineering/adsstring/__init__.py +7 -0
  214. ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
  215. ads/feature_engineering/adsstring/string/__init__.py +8 -0
  216. ads/feature_engineering/data_schema.json +57 -0
  217. ads/feature_engineering/dataset/__init__.py +5 -0
  218. ads/feature_engineering/dataset/zip_code_data.py +42062 -0
  219. ads/feature_engineering/exceptions.py +40 -0
  220. ads/feature_engineering/feature_type/__init__.py +133 -0
  221. ads/feature_engineering/feature_type/address.py +184 -0
  222. ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
  223. ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
  224. ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
  225. ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
  226. ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
  227. ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
  228. ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
  229. ads/feature_engineering/feature_type/adsstring/string.py +258 -0
  230. ads/feature_engineering/feature_type/base.py +58 -0
  231. ads/feature_engineering/feature_type/boolean.py +183 -0
  232. ads/feature_engineering/feature_type/category.py +146 -0
  233. ads/feature_engineering/feature_type/constant.py +137 -0
  234. ads/feature_engineering/feature_type/continuous.py +151 -0
  235. ads/feature_engineering/feature_type/creditcard.py +314 -0
  236. ads/feature_engineering/feature_type/datetime.py +190 -0
  237. ads/feature_engineering/feature_type/discrete.py +134 -0
  238. ads/feature_engineering/feature_type/document.py +43 -0
  239. ads/feature_engineering/feature_type/gis.py +251 -0
  240. ads/feature_engineering/feature_type/handler/__init__.py +5 -0
  241. ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
  242. ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
  243. ads/feature_engineering/feature_type/handler/warnings.py +128 -0
  244. ads/feature_engineering/feature_type/integer.py +142 -0
  245. ads/feature_engineering/feature_type/ip_address.py +144 -0
  246. ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
  247. ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
  248. ads/feature_engineering/feature_type/lat_long.py +256 -0
  249. ads/feature_engineering/feature_type/object.py +43 -0
  250. ads/feature_engineering/feature_type/ordinal.py +132 -0
  251. ads/feature_engineering/feature_type/phone_number.py +135 -0
  252. ads/feature_engineering/feature_type/string.py +171 -0
  253. ads/feature_engineering/feature_type/text.py +93 -0
  254. ads/feature_engineering/feature_type/unknown.py +43 -0
  255. ads/feature_engineering/feature_type/zip_code.py +164 -0
  256. ads/feature_engineering/feature_type_manager.py +406 -0
  257. ads/feature_engineering/schema.py +795 -0
  258. ads/feature_engineering/utils.py +245 -0
  259. ads/feature_store/.readthedocs.yaml +19 -0
  260. ads/feature_store/README.md +65 -0
  261. ads/feature_store/__init__.py +9 -0
  262. ads/feature_store/common/__init__.py +0 -0
  263. ads/feature_store/common/enums.py +339 -0
  264. ads/feature_store/common/exceptions.py +18 -0
  265. ads/feature_store/common/spark_session_singleton.py +125 -0
  266. ads/feature_store/common/utils/__init__.py +0 -0
  267. ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
  268. ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
  269. ads/feature_store/common/utils/transformation_utils.py +82 -0
  270. ads/feature_store/common/utils/utility.py +403 -0
  271. ads/feature_store/data_validation/__init__.py +0 -0
  272. ads/feature_store/data_validation/great_expectation.py +129 -0
  273. ads/feature_store/dataset.py +1230 -0
  274. ads/feature_store/dataset_job.py +530 -0
  275. ads/feature_store/docs/Dockerfile +7 -0
  276. ads/feature_store/docs/Makefile +44 -0
  277. ads/feature_store/docs/conf.py +28 -0
  278. ads/feature_store/docs/requirements.txt +14 -0
  279. ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
  280. ads/feature_store/docs/source/cicd.rst +137 -0
  281. ads/feature_store/docs/source/conf.py +86 -0
  282. ads/feature_store/docs/source/data_versioning.rst +33 -0
  283. ads/feature_store/docs/source/dataset.rst +388 -0
  284. ads/feature_store/docs/source/dataset_job.rst +27 -0
  285. ads/feature_store/docs/source/demo.rst +70 -0
  286. ads/feature_store/docs/source/entity.rst +78 -0
  287. ads/feature_store/docs/source/feature_group.rst +624 -0
  288. ads/feature_store/docs/source/feature_group_job.rst +29 -0
  289. ads/feature_store/docs/source/feature_store.rst +122 -0
  290. ads/feature_store/docs/source/feature_store_class.rst +123 -0
  291. ads/feature_store/docs/source/feature_validation.rst +66 -0
  292. ads/feature_store/docs/source/figures/cicd.png +0 -0
  293. ads/feature_store/docs/source/figures/data_validation.png +0 -0
  294. ads/feature_store/docs/source/figures/data_versioning.png +0 -0
  295. ads/feature_store/docs/source/figures/dataset.gif +0 -0
  296. ads/feature_store/docs/source/figures/dataset.png +0 -0
  297. ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
  298. ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
  299. ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
  300. ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
  301. ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
  302. ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
  303. ads/feature_store/docs/source/figures/entity.png +0 -0
  304. ads/feature_store/docs/source/figures/feature_group.png +0 -0
  305. ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
  306. ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
  307. ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
  308. ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
  309. ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
  310. ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
  311. ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
  312. ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
  313. ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
  314. ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
  315. ads/feature_store/docs/source/figures/overview.png +0 -0
  316. ads/feature_store/docs/source/figures/resource_manager.png +0 -0
  317. ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
  318. ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
  319. ads/feature_store/docs/source/figures/stats_1.png +0 -0
  320. ads/feature_store/docs/source/figures/stats_2.png +0 -0
  321. ads/feature_store/docs/source/figures/stats_d.png +0 -0
  322. ads/feature_store/docs/source/figures/stats_fg.png +0 -0
  323. ads/feature_store/docs/source/figures/transformation.png +0 -0
  324. ads/feature_store/docs/source/figures/transformations.gif +0 -0
  325. ads/feature_store/docs/source/figures/validation.png +0 -0
  326. ads/feature_store/docs/source/figures/validation_fg.png +0 -0
  327. ads/feature_store/docs/source/figures/validation_results.png +0 -0
  328. ads/feature_store/docs/source/figures/validation_summary.png +0 -0
  329. ads/feature_store/docs/source/index.rst +81 -0
  330. ads/feature_store/docs/source/module.rst +8 -0
  331. ads/feature_store/docs/source/notebook.rst +94 -0
  332. ads/feature_store/docs/source/overview.rst +47 -0
  333. ads/feature_store/docs/source/quickstart.rst +176 -0
  334. ads/feature_store/docs/source/release_notes.rst +194 -0
  335. ads/feature_store/docs/source/setup_feature_store.rst +81 -0
  336. ads/feature_store/docs/source/statistics.rst +58 -0
  337. ads/feature_store/docs/source/transformation.rst +199 -0
  338. ads/feature_store/docs/source/ui.rst +65 -0
  339. ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
  340. ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
  341. ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
  342. ads/feature_store/entity.py +718 -0
  343. ads/feature_store/execution_strategy/__init__.py +0 -0
  344. ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
  345. ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
  346. ads/feature_store/execution_strategy/engine/__init__.py +0 -0
  347. ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
  348. ads/feature_store/execution_strategy/execution_strategy.py +113 -0
  349. ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
  350. ads/feature_store/execution_strategy/spark/__init__.py +0 -0
  351. ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
  352. ads/feature_store/feature.py +192 -0
  353. ads/feature_store/feature_group.py +1494 -0
  354. ads/feature_store/feature_group_expectation.py +346 -0
  355. ads/feature_store/feature_group_job.py +602 -0
  356. ads/feature_store/feature_lineage/__init__.py +0 -0
  357. ads/feature_store/feature_lineage/graphviz_service.py +180 -0
  358. ads/feature_store/feature_option_details.py +50 -0
  359. ads/feature_store/feature_statistics/__init__.py +0 -0
  360. ads/feature_store/feature_statistics/statistics_service.py +99 -0
  361. ads/feature_store/feature_store.py +699 -0
  362. ads/feature_store/feature_store_registrar.py +518 -0
  363. ads/feature_store/input_feature_detail.py +149 -0
  364. ads/feature_store/mixin/__init__.py +4 -0
  365. ads/feature_store/mixin/oci_feature_store.py +145 -0
  366. ads/feature_store/model_details.py +73 -0
  367. ads/feature_store/query/__init__.py +0 -0
  368. ads/feature_store/query/filter.py +266 -0
  369. ads/feature_store/query/generator/__init__.py +0 -0
  370. ads/feature_store/query/generator/query_generator.py +298 -0
  371. ads/feature_store/query/join.py +161 -0
  372. ads/feature_store/query/query.py +403 -0
  373. ads/feature_store/query/validator/__init__.py +0 -0
  374. ads/feature_store/query/validator/query_validator.py +57 -0
  375. ads/feature_store/response/__init__.py +0 -0
  376. ads/feature_store/response/response_builder.py +68 -0
  377. ads/feature_store/service/__init__.py +0 -0
  378. ads/feature_store/service/oci_dataset.py +139 -0
  379. ads/feature_store/service/oci_dataset_job.py +199 -0
  380. ads/feature_store/service/oci_entity.py +125 -0
  381. ads/feature_store/service/oci_feature_group.py +164 -0
  382. ads/feature_store/service/oci_feature_group_job.py +214 -0
  383. ads/feature_store/service/oci_feature_store.py +182 -0
  384. ads/feature_store/service/oci_lineage.py +87 -0
  385. ads/feature_store/service/oci_transformation.py +104 -0
  386. ads/feature_store/statistics/__init__.py +0 -0
  387. ads/feature_store/statistics/abs_feature_value.py +49 -0
  388. ads/feature_store/statistics/charts/__init__.py +0 -0
  389. ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
  390. ads/feature_store/statistics/charts/box_plot.py +148 -0
  391. ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
  392. ads/feature_store/statistics/charts/probability_distribution.py +68 -0
  393. ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
  394. ads/feature_store/statistics/feature_stat.py +126 -0
  395. ads/feature_store/statistics/generic_feature_value.py +33 -0
  396. ads/feature_store/statistics/statistics.py +41 -0
  397. ads/feature_store/statistics_config.py +101 -0
  398. ads/feature_store/templates/feature_store_template.yaml +45 -0
  399. ads/feature_store/transformation.py +499 -0
  400. ads/feature_store/validation_output.py +57 -0
  401. ads/hpo/__init__.py +9 -0
  402. ads/hpo/_imports.py +91 -0
  403. ads/hpo/ads_search_space.py +439 -0
  404. ads/hpo/distributions.py +325 -0
  405. ads/hpo/objective.py +280 -0
  406. ads/hpo/search_cv.py +1657 -0
  407. ads/hpo/stopping_criterion.py +75 -0
  408. ads/hpo/tuner_artifact.py +413 -0
  409. ads/hpo/utils.py +91 -0
  410. ads/hpo/validation.py +140 -0
  411. ads/hpo/visualization/__init__.py +5 -0
  412. ads/hpo/visualization/_contour.py +23 -0
  413. ads/hpo/visualization/_edf.py +20 -0
  414. ads/hpo/visualization/_intermediate_values.py +21 -0
  415. ads/hpo/visualization/_optimization_history.py +25 -0
  416. ads/hpo/visualization/_parallel_coordinate.py +169 -0
  417. ads/hpo/visualization/_param_importances.py +26 -0
  418. ads/jobs/__init__.py +53 -0
  419. ads/jobs/ads_job.py +663 -0
  420. ads/jobs/builders/__init__.py +5 -0
  421. ads/jobs/builders/base.py +156 -0
  422. ads/jobs/builders/infrastructure/__init__.py +6 -0
  423. ads/jobs/builders/infrastructure/base.py +165 -0
  424. ads/jobs/builders/infrastructure/dataflow.py +1252 -0
  425. ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
  426. ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
  427. ads/jobs/builders/infrastructure/utils.py +65 -0
  428. ads/jobs/builders/runtimes/__init__.py +5 -0
  429. ads/jobs/builders/runtimes/artifact.py +338 -0
  430. ads/jobs/builders/runtimes/base.py +325 -0
  431. ads/jobs/builders/runtimes/container_runtime.py +242 -0
  432. ads/jobs/builders/runtimes/python_runtime.py +1016 -0
  433. ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
  434. ads/jobs/cli.py +104 -0
  435. ads/jobs/env_var_parser.py +131 -0
  436. ads/jobs/extension.py +160 -0
  437. ads/jobs/schema/__init__.py +5 -0
  438. ads/jobs/schema/infrastructure_schema.json +116 -0
  439. ads/jobs/schema/job_schema.json +42 -0
  440. ads/jobs/schema/runtime_schema.json +183 -0
  441. ads/jobs/schema/validator.py +141 -0
  442. ads/jobs/serializer.py +296 -0
  443. ads/jobs/templates/__init__.py +5 -0
  444. ads/jobs/templates/container.py +6 -0
  445. ads/jobs/templates/driver_notebook.py +177 -0
  446. ads/jobs/templates/driver_oci.py +500 -0
  447. ads/jobs/templates/driver_python.py +48 -0
  448. ads/jobs/templates/driver_pytorch.py +852 -0
  449. ads/jobs/templates/driver_utils.py +615 -0
  450. ads/jobs/templates/hostname_from_env.c +55 -0
  451. ads/jobs/templates/oci_metrics.py +181 -0
  452. ads/jobs/utils.py +104 -0
  453. ads/llm/__init__.py +28 -0
  454. ads/llm/autogen/__init__.py +2 -0
  455. ads/llm/autogen/constants.py +15 -0
  456. ads/llm/autogen/reports/__init__.py +2 -0
  457. ads/llm/autogen/reports/base.py +67 -0
  458. ads/llm/autogen/reports/data.py +103 -0
  459. ads/llm/autogen/reports/session.py +526 -0
  460. ads/llm/autogen/reports/templates/chat_box.html +13 -0
  461. ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
  462. ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
  463. ads/llm/autogen/reports/utils.py +56 -0
  464. ads/llm/autogen/v02/__init__.py +4 -0
  465. ads/llm/autogen/v02/client.py +295 -0
  466. ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
  467. ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
  468. ads/llm/autogen/v02/loggers/__init__.py +6 -0
  469. ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
  470. ads/llm/autogen/v02/loggers/session_logger.py +580 -0
  471. ads/llm/autogen/v02/loggers/utils.py +86 -0
  472. ads/llm/autogen/v02/runtime_logging.py +163 -0
  473. ads/llm/chain.py +268 -0
  474. ads/llm/chat_template.py +31 -0
  475. ads/llm/deploy.py +63 -0
  476. ads/llm/guardrails/__init__.py +5 -0
  477. ads/llm/guardrails/base.py +442 -0
  478. ads/llm/guardrails/huggingface.py +44 -0
  479. ads/llm/langchain/__init__.py +5 -0
  480. ads/llm/langchain/plugins/__init__.py +5 -0
  481. ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
  482. ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
  483. ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
  484. ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
  485. ads/llm/langchain/plugins/llms/__init__.py +5 -0
  486. ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
  487. ads/llm/requirements.txt +3 -0
  488. ads/llm/serialize.py +219 -0
  489. ads/llm/serializers/__init__.py +0 -0
  490. ads/llm/serializers/retrieval_qa.py +153 -0
  491. ads/llm/serializers/runnable_parallel.py +27 -0
  492. ads/llm/templates/score_chain.jinja2 +155 -0
  493. ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
  494. ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
  495. ads/model/__init__.py +52 -0
  496. ads/model/artifact.py +573 -0
  497. ads/model/artifact_downloader.py +254 -0
  498. ads/model/artifact_uploader.py +267 -0
  499. ads/model/base_properties.py +238 -0
  500. ads/model/common/.model-ignore +66 -0
  501. ads/model/common/__init__.py +5 -0
  502. ads/model/common/utils.py +142 -0
  503. ads/model/datascience_model.py +2635 -0
  504. ads/model/deployment/__init__.py +20 -0
  505. ads/model/deployment/common/__init__.py +5 -0
  506. ads/model/deployment/common/utils.py +308 -0
  507. ads/model/deployment/model_deployer.py +466 -0
  508. ads/model/deployment/model_deployment.py +1846 -0
  509. ads/model/deployment/model_deployment_infrastructure.py +671 -0
  510. ads/model/deployment/model_deployment_properties.py +493 -0
  511. ads/model/deployment/model_deployment_runtime.py +838 -0
  512. ads/model/extractor/__init__.py +5 -0
  513. ads/model/extractor/automl_extractor.py +74 -0
  514. ads/model/extractor/embedding_onnx_extractor.py +80 -0
  515. ads/model/extractor/huggingface_extractor.py +88 -0
  516. ads/model/extractor/keras_extractor.py +84 -0
  517. ads/model/extractor/lightgbm_extractor.py +93 -0
  518. ads/model/extractor/model_info_extractor.py +114 -0
  519. ads/model/extractor/model_info_extractor_factory.py +105 -0
  520. ads/model/extractor/pytorch_extractor.py +87 -0
  521. ads/model/extractor/sklearn_extractor.py +112 -0
  522. ads/model/extractor/spark_extractor.py +89 -0
  523. ads/model/extractor/tensorflow_extractor.py +85 -0
  524. ads/model/extractor/xgboost_extractor.py +94 -0
  525. ads/model/framework/__init__.py +5 -0
  526. ads/model/framework/automl_model.py +178 -0
  527. ads/model/framework/embedding_onnx_model.py +438 -0
  528. ads/model/framework/huggingface_model.py +399 -0
  529. ads/model/framework/lightgbm_model.py +266 -0
  530. ads/model/framework/pytorch_model.py +266 -0
  531. ads/model/framework/sklearn_model.py +250 -0
  532. ads/model/framework/spark_model.py +326 -0
  533. ads/model/framework/tensorflow_model.py +254 -0
  534. ads/model/framework/xgboost_model.py +258 -0
  535. ads/model/generic_model.py +3518 -0
  536. ads/model/model_artifact_boilerplate/README.md +381 -0
  537. ads/model/model_artifact_boilerplate/__init__.py +5 -0
  538. ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
  539. ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
  540. ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
  541. ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
  542. ads/model/model_artifact_boilerplate/score.py +61 -0
  543. ads/model/model_file_description_schema.json +68 -0
  544. ads/model/model_introspect.py +331 -0
  545. ads/model/model_metadata.py +1810 -0
  546. ads/model/model_metadata_mixin.py +460 -0
  547. ads/model/model_properties.py +63 -0
  548. ads/model/model_version_set.py +739 -0
  549. ads/model/runtime/__init__.py +5 -0
  550. ads/model/runtime/env_info.py +306 -0
  551. ads/model/runtime/model_deployment_details.py +37 -0
  552. ads/model/runtime/model_provenance_details.py +58 -0
  553. ads/model/runtime/runtime_info.py +81 -0
  554. ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
  555. ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
  556. ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
  557. ads/model/runtime/utils.py +201 -0
  558. ads/model/serde/__init__.py +5 -0
  559. ads/model/serde/common.py +40 -0
  560. ads/model/serde/model_input.py +547 -0
  561. ads/model/serde/model_serializer.py +1184 -0
  562. ads/model/service/__init__.py +5 -0
  563. ads/model/service/oci_datascience_model.py +1076 -0
  564. ads/model/service/oci_datascience_model_deployment.py +500 -0
  565. ads/model/service/oci_datascience_model_version_set.py +176 -0
  566. ads/model/transformer/__init__.py +5 -0
  567. ads/model/transformer/onnx_transformer.py +324 -0
  568. ads/mysqldb/__init__.py +5 -0
  569. ads/mysqldb/mysql_db.py +227 -0
  570. ads/opctl/__init__.py +18 -0
  571. ads/opctl/anomaly_detection.py +11 -0
  572. ads/opctl/backend/__init__.py +5 -0
  573. ads/opctl/backend/ads_dataflow.py +353 -0
  574. ads/opctl/backend/ads_ml_job.py +710 -0
  575. ads/opctl/backend/ads_ml_pipeline.py +164 -0
  576. ads/opctl/backend/ads_model_deployment.py +209 -0
  577. ads/opctl/backend/base.py +146 -0
  578. ads/opctl/backend/local.py +1053 -0
  579. ads/opctl/backend/marketplace/__init__.py +9 -0
  580. ads/opctl/backend/marketplace/helm_helper.py +173 -0
  581. ads/opctl/backend/marketplace/local_marketplace.py +271 -0
  582. ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
  583. ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
  584. ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
  585. ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
  586. ads/opctl/backend/marketplace/models/__init__.py +5 -0
  587. ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
  588. ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
  589. ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
  590. ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
  591. ads/opctl/cli.py +707 -0
  592. ads/opctl/cmds.py +869 -0
  593. ads/opctl/conda/__init__.py +5 -0
  594. ads/opctl/conda/cli.py +193 -0
  595. ads/opctl/conda/cmds.py +749 -0
  596. ads/opctl/conda/config.yaml +34 -0
  597. ads/opctl/conda/manifest_template.yaml +13 -0
  598. ads/opctl/conda/multipart_uploader.py +188 -0
  599. ads/opctl/conda/pack.py +89 -0
  600. ads/opctl/config/__init__.py +5 -0
  601. ads/opctl/config/base.py +57 -0
  602. ads/opctl/config/diagnostics/__init__.py +5 -0
  603. ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
  604. ads/opctl/config/merger.py +255 -0
  605. ads/opctl/config/resolver.py +297 -0
  606. ads/opctl/config/utils.py +79 -0
  607. ads/opctl/config/validator.py +17 -0
  608. ads/opctl/config/versioner.py +68 -0
  609. ads/opctl/config/yaml_parsers/__init__.py +7 -0
  610. ads/opctl/config/yaml_parsers/base.py +58 -0
  611. ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
  612. ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
  613. ads/opctl/constants.py +66 -0
  614. ads/opctl/decorator/__init__.py +5 -0
  615. ads/opctl/decorator/common.py +129 -0
  616. ads/opctl/diagnostics/__init__.py +5 -0
  617. ads/opctl/diagnostics/__main__.py +25 -0
  618. ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
  619. ads/opctl/diagnostics/check_requirements.py +144 -0
  620. ads/opctl/diagnostics/requirement_exception.py +9 -0
  621. ads/opctl/distributed/README.md +109 -0
  622. ads/opctl/distributed/__init__.py +5 -0
  623. ads/opctl/distributed/certificates.py +32 -0
  624. ads/opctl/distributed/cli.py +207 -0
  625. ads/opctl/distributed/cmds.py +731 -0
  626. ads/opctl/distributed/common/__init__.py +5 -0
  627. ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
  628. ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
  629. ads/opctl/distributed/common/cluster_config_helper.py +103 -0
  630. ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
  631. ads/opctl/distributed/common/cluster_runner.py +54 -0
  632. ads/opctl/distributed/common/framework_factory.py +29 -0
  633. ads/opctl/docker/Dockerfile.job +103 -0
  634. ads/opctl/docker/Dockerfile.job.arm +107 -0
  635. ads/opctl/docker/Dockerfile.job.gpu +175 -0
  636. ads/opctl/docker/base-env.yaml +13 -0
  637. ads/opctl/docker/cuda.repo +6 -0
  638. ads/opctl/docker/operator/.dockerignore +0 -0
  639. ads/opctl/docker/operator/Dockerfile +41 -0
  640. ads/opctl/docker/operator/Dockerfile.gpu +85 -0
  641. ads/opctl/docker/operator/cuda.repo +6 -0
  642. ads/opctl/docker/operator/environment.yaml +8 -0
  643. ads/opctl/forecast.py +11 -0
  644. ads/opctl/index.yaml +3 -0
  645. ads/opctl/model/__init__.py +5 -0
  646. ads/opctl/model/cli.py +65 -0
  647. ads/opctl/model/cmds.py +73 -0
  648. ads/opctl/operator/README.md +4 -0
  649. ads/opctl/operator/__init__.py +31 -0
  650. ads/opctl/operator/cli.py +344 -0
  651. ads/opctl/operator/cmd.py +596 -0
  652. ads/opctl/operator/common/__init__.py +5 -0
  653. ads/opctl/operator/common/backend_factory.py +460 -0
  654. ads/opctl/operator/common/const.py +27 -0
  655. ads/opctl/operator/common/data/synthetic.csv +16001 -0
  656. ads/opctl/operator/common/dictionary_merger.py +148 -0
  657. ads/opctl/operator/common/errors.py +42 -0
  658. ads/opctl/operator/common/operator_config.py +99 -0
  659. ads/opctl/operator/common/operator_loader.py +811 -0
  660. ads/opctl/operator/common/operator_schema.yaml +130 -0
  661. ads/opctl/operator/common/operator_yaml_generator.py +152 -0
  662. ads/opctl/operator/common/utils.py +208 -0
  663. ads/opctl/operator/lowcode/__init__.py +5 -0
  664. ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
  665. ads/opctl/operator/lowcode/anomaly/README.md +207 -0
  666. ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
  667. ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
  668. ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
  669. ads/opctl/operator/lowcode/anomaly/const.py +167 -0
  670. ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
  671. ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
  672. ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
  673. ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
  674. ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
  675. ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
  676. ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
  677. ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
  678. ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
  679. ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
  680. ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
  681. ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
  682. ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
  683. ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
  684. ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
  685. ads/opctl/operator/lowcode/common/__init__.py +5 -0
  686. ads/opctl/operator/lowcode/common/const.py +10 -0
  687. ads/opctl/operator/lowcode/common/data.py +116 -0
  688. ads/opctl/operator/lowcode/common/errors.py +47 -0
  689. ads/opctl/operator/lowcode/common/transformations.py +296 -0
  690. ads/opctl/operator/lowcode/common/utils.py +384 -0
  691. ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
  692. ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
  693. ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
  694. ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
  695. ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
  696. ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
  697. ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
  698. ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
  699. ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
  700. ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
  701. ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
  702. ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
  703. ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
  704. ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
  705. ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
  706. ads/opctl/operator/lowcode/forecast/README.md +209 -0
  707. ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
  708. ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
  709. ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
  710. ads/opctl/operator/lowcode/forecast/const.py +92 -0
  711. ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
  712. ads/opctl/operator/lowcode/forecast/errors.py +26 -0
  713. ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
  714. ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
  715. ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
  716. ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
  717. ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
  718. ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
  719. ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
  720. ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
  721. ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
  722. ads/opctl/operator/lowcode/forecast/model/prophet.py +450 -0
  723. ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
  724. ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
  725. ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
  726. ads/opctl/operator/lowcode/forecast/utils.py +397 -0
  727. ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
  728. ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
  729. ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
  730. ads/opctl/operator/lowcode/pii/MLoperator +17 -0
  731. ads/opctl/operator/lowcode/pii/README.md +208 -0
  732. ads/opctl/operator/lowcode/pii/__init__.py +5 -0
  733. ads/opctl/operator/lowcode/pii/__main__.py +78 -0
  734. ads/opctl/operator/lowcode/pii/cmd.py +39 -0
  735. ads/opctl/operator/lowcode/pii/constant.py +84 -0
  736. ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
  737. ads/opctl/operator/lowcode/pii/errors.py +27 -0
  738. ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
  739. ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
  740. ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
  741. ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
  742. ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
  743. ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
  744. ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
  745. ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
  746. ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
  747. ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
  748. ads/opctl/operator/lowcode/pii/model/report.py +487 -0
  749. ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
  750. ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
  751. ads/opctl/operator/lowcode/pii/utils.py +43 -0
  752. ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
  753. ads/opctl/operator/lowcode/recommender/README.md +206 -0
  754. ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
  755. ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
  756. ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
  757. ads/opctl/operator/lowcode/recommender/constant.py +30 -0
  758. ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
  759. ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
  760. ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
  761. ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
  762. ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
  763. ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
  764. ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
  765. ads/opctl/operator/lowcode/recommender/utils.py +13 -0
  766. ads/opctl/operator/runtime/__init__.py +5 -0
  767. ads/opctl/operator/runtime/const.py +17 -0
  768. ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
  769. ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
  770. ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
  771. ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
  772. ads/opctl/operator/runtime/runtime.py +115 -0
  773. ads/opctl/schema.yaml.yml +36 -0
  774. ads/opctl/script.py +40 -0
  775. ads/opctl/spark/__init__.py +5 -0
  776. ads/opctl/spark/cli.py +43 -0
  777. ads/opctl/spark/cmds.py +147 -0
  778. ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
  779. ads/opctl/utils.py +344 -0
  780. ads/oracledb/__init__.py +5 -0
  781. ads/oracledb/oracle_db.py +346 -0
  782. ads/pipeline/__init__.py +39 -0
  783. ads/pipeline/ads_pipeline.py +2279 -0
  784. ads/pipeline/ads_pipeline_run.py +772 -0
  785. ads/pipeline/ads_pipeline_step.py +605 -0
  786. ads/pipeline/builders/__init__.py +5 -0
  787. ads/pipeline/builders/infrastructure/__init__.py +5 -0
  788. ads/pipeline/builders/infrastructure/custom_script.py +32 -0
  789. ads/pipeline/cli.py +119 -0
  790. ads/pipeline/extension.py +291 -0
  791. ads/pipeline/schema/__init__.py +5 -0
  792. ads/pipeline/schema/cs_step_schema.json +35 -0
  793. ads/pipeline/schema/ml_step_schema.json +31 -0
  794. ads/pipeline/schema/pipeline_schema.json +71 -0
  795. ads/pipeline/visualizer/__init__.py +5 -0
  796. ads/pipeline/visualizer/base.py +570 -0
  797. ads/pipeline/visualizer/graph_renderer.py +272 -0
  798. ads/pipeline/visualizer/text_renderer.py +84 -0
  799. ads/secrets/__init__.py +11 -0
  800. ads/secrets/adb.py +386 -0
  801. ads/secrets/auth_token.py +86 -0
  802. ads/secrets/big_data_service.py +365 -0
  803. ads/secrets/mysqldb.py +149 -0
  804. ads/secrets/oracledb.py +160 -0
  805. ads/secrets/secrets.py +407 -0
  806. ads/telemetry/__init__.py +7 -0
  807. ads/telemetry/base.py +69 -0
  808. ads/telemetry/client.py +122 -0
  809. ads/telemetry/telemetry.py +257 -0
  810. ads/templates/dataflow_pyspark.jinja2 +13 -0
  811. ads/templates/dataflow_sparksql.jinja2 +22 -0
  812. ads/templates/func.jinja2 +20 -0
  813. ads/templates/schemas/openapi.json +1740 -0
  814. ads/templates/score-pkl.jinja2 +173 -0
  815. ads/templates/score.jinja2 +322 -0
  816. ads/templates/score_embedding_onnx.jinja2 +202 -0
  817. ads/templates/score_generic.jinja2 +165 -0
  818. ads/templates/score_huggingface_pipeline.jinja2 +217 -0
  819. ads/templates/score_lightgbm.jinja2 +185 -0
  820. ads/templates/score_onnx.jinja2 +407 -0
  821. ads/templates/score_onnx_new.jinja2 +473 -0
  822. ads/templates/score_oracle_automl.jinja2 +185 -0
  823. ads/templates/score_pyspark.jinja2 +154 -0
  824. ads/templates/score_pytorch.jinja2 +219 -0
  825. ads/templates/score_scikit-learn.jinja2 +184 -0
  826. ads/templates/score_tensorflow.jinja2 +184 -0
  827. ads/templates/score_xgboost.jinja2 +178 -0
  828. ads/text_dataset/__init__.py +5 -0
  829. ads/text_dataset/backends.py +211 -0
  830. ads/text_dataset/dataset.py +445 -0
  831. ads/text_dataset/extractor.py +207 -0
  832. ads/text_dataset/options.py +53 -0
  833. ads/text_dataset/udfs.py +22 -0
  834. ads/text_dataset/utils.py +49 -0
  835. ads/type_discovery/__init__.py +9 -0
  836. ads/type_discovery/abstract_detector.py +21 -0
  837. ads/type_discovery/constant_detector.py +41 -0
  838. ads/type_discovery/continuous_detector.py +54 -0
  839. ads/type_discovery/credit_card_detector.py +99 -0
  840. ads/type_discovery/datetime_detector.py +92 -0
  841. ads/type_discovery/discrete_detector.py +118 -0
  842. ads/type_discovery/document_detector.py +146 -0
  843. ads/type_discovery/ip_detector.py +68 -0
  844. ads/type_discovery/latlon_detector.py +90 -0
  845. ads/type_discovery/phone_number_detector.py +63 -0
  846. ads/type_discovery/type_discovery_driver.py +87 -0
  847. ads/type_discovery/typed_feature.py +594 -0
  848. ads/type_discovery/unknown_detector.py +41 -0
  849. ads/type_discovery/zipcode_detector.py +48 -0
  850. ads/vault/__init__.py +7 -0
  851. ads/vault/vault.py +237 -0
  852. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/METADATA +150 -149
  853. oracle_ads-2.13.10.dist-info/RECORD +858 -0
  854. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/WHEEL +1 -2
  855. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/entry_points.txt +2 -1
  856. oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
  857. oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
  858. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,1076 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Copyright (c) 2022, 2025 Oracle and/or its affiliates.
4
+ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5
+
6
+ import logging
7
+ from dataclasses import dataclass
8
+ from functools import wraps
9
+ from io import BytesIO
10
+ from typing import Callable, Dict, List, Optional, Union
11
+
12
+ import oci.data_science
13
+ from oci.data_science.models import (
14
+ ArtifactExportDetailsObjectStorage,
15
+ ArtifactImportDetailsObjectStorage,
16
+ CreateModelDetails,
17
+ ExportModelArtifactDetails,
18
+ ImportModelArtifactDetails,
19
+ UpdateModelDetails,
20
+ )
21
+ from oci.exceptions import ServiceError
22
+ from requests.structures import CaseInsensitiveDict
23
+
24
+ from ads.common import utils
25
+ from ads.common.auth import default_signer
26
+ from ads.common.object_storage_details import ObjectStorageDetails
27
+ from ads.common.oci_datascience import OCIDataScienceMixin
28
+ from ads.common.oci_mixin import OCIWorkRequestMixin
29
+ from ads.common.oci_resource import SEARCH_TYPE, OCIResource
30
+ from ads.common.serializer import DataClassSerializable
31
+ from ads.common.utils import extract_region, read_file
32
+ from ads.common.work_request import DataScienceWorkRequest
33
+ from ads.model.common.utils import MetadataArtifactPathType
34
+ from ads.model.deployment import ModelDeployment
35
+
36
+ logger = logging.getLogger(__name__)
37
+
38
+ _REQUEST_INTERVAL_IN_SEC = 3
39
+
40
+ MODEL_NEEDS_TO_BE_SAVED = (
41
+ "Model needs to be saved to the Model Catalog before it can be accessed."
42
+ )
43
+
44
+ MODEL_BY_REFERENCE_DESC = "modelDescription"
45
+
46
+
47
+ class ModelProvenanceNotFoundError(Exception): # pragma: no cover
48
+ pass
49
+
50
+
51
+ class ModelArtifactNotFoundError(Exception): # pragma: no cover
52
+ pass
53
+
54
+
55
+ class ModelNotSavedError(Exception): # pragma: no cover
56
+ pass
57
+
58
+
59
+ class ModelWithActiveDeploymentError(Exception): # pragma: no cover
60
+ pass
61
+
62
+
63
+ class ModelMetadataArtifactNotFoundError(Exception): # pragma: no cover
64
+ def __init__(self, model_ocid, metadata_key: str):
65
+ super().__init__(
66
+ f"The model {model_ocid} does not contain the metadata with key {metadata_key}."
67
+ )
68
+
69
+
70
+ @dataclass(repr=False)
71
+ class ModelMetadataArtifactDetails(DataClassSerializable):
72
+ """Represents a details of Model Metadata ."""
73
+
74
+ headers: Union[Dict, CaseInsensitiveDict]
75
+ status: str
76
+
77
+
78
+ def check_for_model_id(msg: str = MODEL_NEEDS_TO_BE_SAVED):
79
+ """The decorator helping to check if the ID attribute sepcified for a datascience model.
80
+
81
+ Parameters
82
+ ----------
83
+ msg: str
84
+ The message that will be thrown.
85
+
86
+ Raises
87
+ ------
88
+ ModelNotSavedError
89
+ In case if the ID attribute not specified.
90
+
91
+ Examples
92
+ --------
93
+ >>> @check_for_id(msg="Some message.")
94
+ ... def test_function(self, name: str, last_name: str)
95
+ ... pass
96
+ """
97
+
98
+ def decorator(func: Callable):
99
+ @wraps(func)
100
+ def wrapper(self, *args, **kwargs):
101
+ if not self.id:
102
+ raise ModelNotSavedError(msg)
103
+ return func(self, *args, **kwargs)
104
+
105
+ return wrapper
106
+
107
+ return decorator
108
+
109
+
110
+ def convert_model_metadata_response(
111
+ headers: Union[Dict, CaseInsensitiveDict], status: int
112
+ ) -> ModelMetadataArtifactDetails:
113
+ return ModelMetadataArtifactDetails(headers=dict(headers), status=str(status))
114
+
115
+
116
+ class OCIDataScienceModel(
117
+ OCIDataScienceMixin,
118
+ OCIWorkRequestMixin,
119
+ oci.data_science.models.Model,
120
+ ):
121
+ """Represents an OCI Data Science Model.
122
+ This class contains all attributes of the `oci.data_science.models.Model`.
123
+ The main purpose of this class is to link the `oci.data_science.models.Model`
124
+ and the related client methods.
125
+ Linking the `Model` (payload) to Create/Update/Get/List/Delete methods.
126
+
127
+ The `OCIDataScienceModel` can be initialized by unpacking the properties stored in a dictionary:
128
+
129
+ .. code-block:: python
130
+
131
+ properties = {
132
+ "compartment_id": "<compartment_ocid>",
133
+ "name": "<model_name>",
134
+ "description": "<model_description>",
135
+ }
136
+ ds_model = OCIDataScienceModel(**properties)
137
+
138
+ The properties can also be OCI REST API payload, in which the keys are in camel format.
139
+
140
+ .. code-block:: python
141
+
142
+ payload = {
143
+ "compartmentId": "<compartment_ocid>",
144
+ "name": "<model_name>",
145
+ "description": "<model_description>",
146
+ }
147
+ ds_model = OCIDataScienceModel(**payload)
148
+
149
+ Methods
150
+ -------
151
+ create(self) -> "OCIDataScienceModel"
152
+ Creates datascience model in model catalog.
153
+ create_model_provenance(self, model_provenance: ModelProvenance) -> oci.data_science.models.ModelProvenance:
154
+ Creates model provenance metadata.
155
+ def update_model_provenance(self, ModelProvenance) -> oci.data_science.models.ModelProvenance:
156
+ Updates model provenance metadata.
157
+ get_model_provenance(self) -> oci.data_science.models.ModelProvenance:
158
+ Gets model provenance metadata.
159
+ get_artifact_info(self) -> Dict:
160
+ Gets model artifact attachment information.
161
+ def get_model_artifact_content(self) -> BytesIO:
162
+ Gets model artifact content.
163
+ create_model_artifact(self, bytes_content: BytesIO) -> None:
164
+ Creates model artifact for specified model.
165
+ import_model_artifact(self, bucket_uri: str, region: str = None) -> None:
166
+ Imports model artifact content from the model catalog.
167
+ export_model_artifact(self, bucket_uri: str, region: str = None):
168
+ Exports model artifact to the model catalog.
169
+ update(self) -> "OCIDataScienceModel":
170
+ Updates datascience Model.
171
+ delete(self, delete_associated_model_deployment: Optional[bool] = False) -> "OCIDataScienceModel":
172
+ Deletes detascience Model.
173
+ model_deployment(self, ...) -> List:
174
+ Gets the list of model deployments by model ID across the compartments.
175
+ from_id(cls, ocid: str) -> "OCIDataScienceModel":
176
+ Gets model by OCID.
177
+
178
+ Examples
179
+ --------
180
+ >>> oci_model = OCIDataScienceModel.from_id(<model_ocid>)
181
+ >>> oci_model.model_deployment()
182
+ >>> oci_model.get_model_provenance()
183
+ >>> oci_model.description = "A brand new description"
184
+ ... oci_model.update()
185
+ >>> oci_model.sync()
186
+ >>> oci_model.get_artifact_info()
187
+ """
188
+
189
+ def create(self) -> "OCIDataScienceModel":
190
+ """Creates datascience model in model catalog.
191
+
192
+ Returns
193
+ -------
194
+ OCIDataScienceModel
195
+ The `OCIDataScienceModel` instance (self), which allows chaining additional method.
196
+ """
197
+ if not self.compartment_id:
198
+ raise ValueError("The `compartment_id` must be specified.")
199
+
200
+ if not self.project_id:
201
+ raise ValueError("The `project_id` must be specified.")
202
+
203
+ return self.update_from_oci_model(
204
+ self.client.create_model(self.to_oci_model(CreateModelDetails)).data
205
+ )
206
+
207
+ @check_for_model_id(
208
+ msg="Model needs to be saved to the Model Catalog before the provenance metadata can be created."
209
+ )
210
+ def create_model_provenance(
211
+ self, model_provenance: oci.data_science.models.ModelProvenance
212
+ ) -> oci.data_science.models.ModelProvenance:
213
+ """Creates model provenance metadata.
214
+
215
+ Parameters
216
+ ----------
217
+ model_provenance: oci.data_science.models.ModelProvenance
218
+ OCI model provenance metadata.
219
+
220
+ Returns
221
+ -------
222
+ oci.data_science.models.ModelProvenance
223
+ The OCI model provenance object.
224
+ """
225
+ return self.client.create_model_provenance(self.id, model_provenance).data
226
+
227
+ @check_for_model_id(
228
+ msg="Model needs to be saved to the Model Catalog before the provenance metadata can be updated."
229
+ )
230
+ def update_model_provenance(
231
+ self, model_provenance: oci.data_science.models.ModelProvenance
232
+ ) -> oci.data_science.models.ModelProvenance:
233
+ """Updates model provenance metadata.
234
+
235
+ Parameters
236
+ ----------
237
+ model_provenance: oci.data_science.models.ModelProvenance
238
+ OCI model provenance metadata.
239
+
240
+ Returns
241
+ -------
242
+ oci.data_science.models.ModelProvenance
243
+ The OCI model provenance object.
244
+ """
245
+ return self.client.update_model_provenance(self.id, model_provenance).data
246
+
247
+ @check_for_model_id(
248
+ msg="Model needs to be saved to the Model Catalog before the provenance metadata can be read."
249
+ )
250
+ def get_model_provenance(self) -> oci.data_science.models.ModelProvenance:
251
+ """Gets model provenance metadata.
252
+
253
+ Returns
254
+ -------
255
+ oci.data_science.models.ModelProvenance
256
+ OCI model provenance metadata.
257
+
258
+ Raises
259
+ ------
260
+ ModelProvenanceNotFoundError
261
+ If model provenance not found.
262
+ """
263
+ try:
264
+ return self.client.get_model_provenance(self.id).data
265
+ except ServiceError as ex:
266
+ if ex.status == 404:
267
+ raise ModelProvenanceNotFoundError()
268
+ raise
269
+
270
+ @check_for_model_id(
271
+ msg="Model needs to be saved to the Model Catalog before the artifact information can be read."
272
+ )
273
+ def get_artifact_info(self) -> Dict:
274
+ """Gets model artifact attachment information.
275
+
276
+ Returns
277
+ -------
278
+ Dict
279
+ The model artifact attachement info.
280
+ Example:
281
+ {
282
+ 'Date': 'Sun, 13 Nov 2022 06:01:27 GMT',
283
+ 'opc-request-id': 'E4F7',
284
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
285
+ 'Content-Disposition': 'attachment; filename=artifact.zip',
286
+ 'Last-Modified': 'Sun, 09 Oct 2022 16:50:14 GMT',
287
+ 'Content-Type': 'application/json',
288
+ 'Content-MD5': 'orMy3Gs386GZLjYWATJWuA==',
289
+ 'X-Content-Type-Options': 'nosniff',
290
+ 'Content-Length': '4029958'
291
+ }
292
+
293
+ Raises
294
+ ------
295
+ ModelArtifactNotFoundError
296
+ If model artifact attchment not found.
297
+ """
298
+ try:
299
+ return self.client.head_model_artifact(model_id=self.id).headers
300
+ except ServiceError as ex:
301
+ if ex.status == 404:
302
+ raise ModelArtifactNotFoundError()
303
+ return {}
304
+
305
+ @check_for_model_id(
306
+ msg="Model needs to be restored before the archived artifact content can be accessed."
307
+ )
308
+ def restore_archived_model_artifact(
309
+ self, restore_model_for_hours_specified: Optional[int] = None
310
+ ) -> None:
311
+ """Restores the archived model artifact.
312
+
313
+ Parameters
314
+ ----------
315
+ model_id : str
316
+ The unique identifier of the model to restore.
317
+ restore_model_for_hours_specified : Optional[int]
318
+ The duration (in hours) for which the model should be restored.
319
+
320
+ Returns
321
+ -------
322
+ None
323
+
324
+ Raises
325
+ ------
326
+ ModelArtifactNotFoundError
327
+ If model artifact not found.
328
+ """
329
+ return self.client.restore_archived_model_artifact(
330
+ model_id=self.id,
331
+ restore_model_for_hours_specified=restore_model_for_hours_specified,
332
+ ).headers["opc-work-request-id"]
333
+
334
+ @check_for_model_id(
335
+ msg="Model needs to be saved to the Model Catalog before the artifact content can be read."
336
+ )
337
+ def get_model_artifact_content(self) -> BytesIO:
338
+ """Gets model artifact content.
339
+ Can only be used to the small artifacts, which size is less than 2GB.
340
+ For the large artifacts needs to be used a `import_model_artifact` method.
341
+
342
+ Returns
343
+ -------
344
+ BytesIO
345
+ Object with data of type stream.
346
+
347
+ Raises
348
+ ------
349
+ ModelArtifactNotFoundError
350
+ If model artifact not found.
351
+
352
+ """
353
+ try:
354
+ return self.client.get_model_artifact_content(model_id=self.id).data.content
355
+ except ServiceError as ex:
356
+ if ex.status == 404:
357
+ raise ModelArtifactNotFoundError()
358
+
359
+ @check_for_model_id(
360
+ msg="Model needs to be saved to the Model Catalog before the artifact can be created."
361
+ )
362
+ def create_model_artifact(
363
+ self,
364
+ bytes_content: BytesIO,
365
+ extension: str = None,
366
+ ) -> None:
367
+ """Creates model artifact for specified model.
368
+
369
+ Parameters
370
+ ----------
371
+ bytes_content: BytesIO
372
+ Model artifacts to upload.
373
+ extension: str
374
+ File extension, defaults to zip
375
+ """
376
+ ext = ".json" if extension and extension.lower() == ".json" else ".zip"
377
+ self.client.create_model_artifact(
378
+ self.id,
379
+ bytes_content,
380
+ content_disposition=f'attachment; filename="{self.id}{ext}"',
381
+ )
382
+
383
+ @check_for_model_id(
384
+ msg="Model needs to be saved to the Model Catalog before the artifact can be created."
385
+ )
386
+ def import_model_artifact(self, bucket_uri: str, region: str = None) -> None:
387
+ """Imports model artifact content from the model catalog.
388
+ Requires to provide an Object Storage bucket for transitional saving artifacts.
389
+ This method can be used either for small or large artifacts.
390
+
391
+ Parameters
392
+ ----------
393
+ bucket_uri: str
394
+ The OCI Object Storage URI where model artifacts will be copied to.
395
+ The `bucket_uri` is only necessary for downloading large artifacts which
396
+ size is greater than 2GB.
397
+ Example: `oci://<bucket_name>@<namespace>/prefix/`.
398
+ region: (str, optional). Defaults to `None`.
399
+ The destination Object Storage bucket region.
400
+ By default the value will be extracted from the `OCI_REGION_METADATA` environment variable.
401
+
402
+ Returns
403
+ -------
404
+ None
405
+
406
+ Raises
407
+ ------
408
+ ModelArtifactNotFoundError
409
+ If model artifact not found.
410
+ """
411
+ bucket_details = ObjectStorageDetails.from_path(bucket_uri)
412
+ region = region or extract_region(self.auth)
413
+ try:
414
+ work_request_id = self.client.import_model_artifact(
415
+ model_id=self.id,
416
+ import_model_artifact_details=ImportModelArtifactDetails(
417
+ artifact_import_details=ArtifactImportDetailsObjectStorage(
418
+ namespace=bucket_details.namespace,
419
+ destination_bucket=bucket_details.bucket,
420
+ destination_object_name=bucket_details.filepath,
421
+ destination_region=region,
422
+ )
423
+ ),
424
+ ).headers["opc-work-request-id"]
425
+
426
+ # Show progress of importing artifacts
427
+ DataScienceWorkRequest(work_request_id).wait_work_request(
428
+ progress_bar_description="Importing model artifacts."
429
+ )
430
+ except ServiceError as ex:
431
+ if ex.status == 404:
432
+ raise ModelArtifactNotFoundError()
433
+
434
+ @check_for_model_id(
435
+ msg="Model needs to be saved to the Model Catalog before the artifact can be exported."
436
+ )
437
+ def export_model_artifact(self, bucket_uri: str, region: str = None):
438
+ """Exports model artifact to the model catalog.
439
+ Can be used for any model artifact. Requires to provide an Object Storage bucket,
440
+ for transitional saving artifacts. For the small artifacts use `create_model_artifact` method.
441
+
442
+ Parameters
443
+ ----------
444
+ bucket_uri: str
445
+ The OCI Object Storage URI where model artifacts will be copied to.
446
+ The `bucket_uri` is only necessary for downloading large artifacts which
447
+ size is greater than 2GB.
448
+ Example: `oci://<bucket_name>@<namespace>/prefix/`.
449
+ region: (str, optional). Defaults to `None`.
450
+ The destination Object Storage bucket region.
451
+ By default the value will be extracted from the `OCI_REGION_METADATA` environment variables.
452
+
453
+ Returns
454
+ -------
455
+ None
456
+ """
457
+ bucket_details = ObjectStorageDetails.from_path(bucket_uri)
458
+ region = region or extract_region(self.auth)
459
+
460
+ work_request_id = self.client.export_model_artifact(
461
+ model_id=self.id,
462
+ export_model_artifact_details=ExportModelArtifactDetails(
463
+ artifact_export_details=ArtifactExportDetailsObjectStorage(
464
+ namespace=bucket_details.namespace,
465
+ source_bucket=bucket_details.bucket,
466
+ source_object_name=bucket_details.filepath,
467
+ source_region=region,
468
+ )
469
+ ),
470
+ ).headers["opc-work-request-id"]
471
+
472
+ # Show progress of exporting model artifacts
473
+ DataScienceWorkRequest(work_request_id).wait_work_request(
474
+ progress_bar_description="Exporting model artifacts."
475
+ )
476
+
477
+ @check_for_model_id(
478
+ msg="Model needs to be saved to the Model Catalog before it can be updated."
479
+ )
480
+ def update(self) -> "OCIDataScienceModel":
481
+ """Updates datascience Model.
482
+
483
+ Returns
484
+ -------
485
+ OCIDataScienceModel
486
+ The `OCIDataScienceModel` instance (self).
487
+ """
488
+
489
+ model_details = self.to_oci_model(UpdateModelDetails)
490
+
491
+ # Clean up the model version set, otherwise it throws an error that model is already
492
+ # associated with the model version set.
493
+ model_details.model_version_set_id = None
494
+ return self.update_from_oci_model(
495
+ self.client.update_model(self.id, model_details).data
496
+ )
497
+
498
+ @check_for_model_id(
499
+ msg="Model needs to be saved to the Model Catalog before it can be deleted."
500
+ )
501
+ def delete(
502
+ self,
503
+ delete_associated_model_deployment: Optional[bool] = False,
504
+ ) -> "OCIDataScienceModel":
505
+ """Deletes detascience Model.
506
+
507
+ Parameters
508
+ ----------
509
+ delete_associated_model_deployment: (bool, optional). Defaults to `False`.
510
+ Whether associated model deployments need to be deleted or not.
511
+
512
+ Returns
513
+ -------
514
+ OCIDataScienceModel
515
+ The `OCIDataScienceModel` instance (self).
516
+
517
+ Raises
518
+ ------
519
+ ModelWithActiveDeploymentError
520
+ If model has active deployments and `delete_associated_model_deployment` set to `False`.
521
+ """
522
+ active_deployments = tuple(
523
+ item for item in self.model_deployment() if item.lifecycle_state == "ACTIVE"
524
+ )
525
+
526
+ if len(active_deployments) > 0:
527
+ if not delete_associated_model_deployment:
528
+ raise ModelWithActiveDeploymentError()
529
+
530
+ logger.info(
531
+ f"Deleting model deployments associated with the model `{self.id}`."
532
+ )
533
+ for oci_model_deployment in active_deployments:
534
+ logger.info(
535
+ f"Deleting model deployment `{oci_model_deployment.identifier}`."
536
+ )
537
+ ModelDeployment.from_id(oci_model_deployment.identifier).delete()
538
+
539
+ logger.info(f"Deleting model `{self.id}`.")
540
+ self.client.delete_model(self.id)
541
+ return self.sync()
542
+
543
+ @check_for_model_id(
544
+ msg="Model needs to be saved to the Model Catalog before the associated model deployments can be read."
545
+ )
546
+ def model_deployment(
547
+ self,
548
+ config: Optional[Dict] = None,
549
+ tenant_id: Optional[str] = None,
550
+ limit: Optional[int] = 500,
551
+ page: Optional[str] = None,
552
+ **kwargs: Dict,
553
+ ) -> List:
554
+ """
555
+ Gets the list of model deployments by model ID across the compartments.
556
+
557
+ Parameters
558
+ ----------
559
+ config: (Dict, optional). Defaults to `None`.
560
+ Configuration keys and values as per SDK and Tool Configuration.
561
+ The from_file() method can be used to load configuration from a file.
562
+ Alternatively, a dict can be passed. You can validate_config the dict
563
+ using validate_config(). Defaults to None.
564
+ tenant_id: (str, optional). Defaults to `None`.
565
+ The tenancy ID, which can be used to specify a different tenancy
566
+ (for cross-tenancy authorization) when searching for resources in
567
+ a different tenancy. Defaults to None.
568
+ limit: (int, optional). Defaults to `None`.
569
+ The maximum number of items to return. The value must be between
570
+ 1 and 1000. Defaults to 500.
571
+ page: (str, optional). Defaults to `None`.
572
+ The page at which to start retrieving results.
573
+
574
+ Returns
575
+ -------
576
+ The list of model deployments associated with given model ID.
577
+ """
578
+ query = f"query datasciencemodeldeployment resources where ModelId='{self.id}'"
579
+ return OCIResource.search(
580
+ query,
581
+ type=SEARCH_TYPE.STRUCTURED,
582
+ config=config,
583
+ tenant_id=tenant_id,
584
+ limit=limit,
585
+ page=page,
586
+ **kwargs,
587
+ )
588
+
589
+ @classmethod
590
+ def from_id(cls, ocid: str) -> "OCIDataScienceModel":
591
+ """Gets model by OCID.
592
+
593
+ Parameters
594
+ ----------
595
+ ocid: str
596
+ The OCID of the datascience model.
597
+
598
+ Returns
599
+ -------
600
+ OCIDataScienceModel
601
+ An instance of `OCIDataScienceModel`.
602
+ """
603
+ if not ocid:
604
+ raise ValueError("Model OCID not provided.")
605
+ return super().from_ocid(ocid)
606
+
607
+ def is_model_created_by_reference(self):
608
+ """Checks if model is created by reference
609
+ Returns
610
+ -------
611
+ bool flag denoting whether model was created by reference.
612
+
613
+ """
614
+ if self.custom_metadata_list:
615
+ for metadata in self.custom_metadata_list:
616
+ if (
617
+ metadata.key == MODEL_BY_REFERENCE_DESC
618
+ and metadata.value.lower() == "true"
619
+ ):
620
+ return True
621
+ return False
622
+
623
+ def get_metadata_content(
624
+ self,
625
+ artifact_path_or_content: Union[str, bytes],
626
+ path_type: MetadataArtifactPathType,
627
+ ) -> bytes:
628
+ """
629
+ returns the content of the metadata artifact
630
+
631
+ Parameters
632
+ ----------
633
+ artifact_path_or_content: Union[str,bytes]
634
+ The path of the file (local or oss) containing metadata artifact or content.
635
+ The type is string when it represents local path or oss path.
636
+ The type is bytes when it represents content itself
637
+ path_type: str
638
+ can be one of local , oss or actual content itself
639
+
640
+ Returns
641
+ -------
642
+ bytes
643
+ metadata artifact content in bytes
644
+ """
645
+
646
+ if path_type == MetadataArtifactPathType.CONTENT:
647
+ return artifact_path_or_content
648
+
649
+ elif (
650
+ path_type == MetadataArtifactPathType.LOCAL
651
+ or path_type == MetadataArtifactPathType.OSS
652
+ ):
653
+ if not utils.is_path_exists(artifact_path_or_content):
654
+ raise FileNotFoundError(f"File not found: {artifact_path_or_content}")
655
+ signer = (
656
+ default_signer() if path_type == MetadataArtifactPathType.OSS else {}
657
+ )
658
+ contents = read_file(
659
+ file_path=artifact_path_or_content, auth=signer
660
+ ).encode()
661
+ logger.debug(f"The metadata artifact content - {contents}")
662
+
663
+ return contents
664
+
665
+ @check_for_model_id(
666
+ msg="Model needs to be saved to the Model Catalog before the creating custom metadata artifact corresponding to that model"
667
+ )
668
+ def create_custom_metadata_artifact(
669
+ self,
670
+ metadata_key_name: str,
671
+ artifact_path_or_content: Union[str, bytes],
672
+ path_type: MetadataArtifactPathType,
673
+ ) -> ModelMetadataArtifactDetails:
674
+ """Creates model custom metadata artifact for specified model.
675
+
676
+ Parameters
677
+ ----------
678
+ metadata_key_name: str
679
+ The name of the model metadatum in the metadata.
680
+
681
+ artifact_path_or_content: Union[str,bytes]
682
+ The path of the file (local or oss) containing metadata artifact or content.
683
+ The type is string when it represents local path or oss path.
684
+ The type is bytes when it represents content itself
685
+
686
+ path_type: MetadataArtifactPathType
687
+ can be one of local , oss or actual content itself
688
+
689
+ Returns
690
+ -------
691
+ ModelMetadataArtifactDetails
692
+ The model custom metadata artifact creation info.
693
+ Example:
694
+ {
695
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
696
+ 'opc-request-id': 'E4F7',
697
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
698
+ 'X-Content-Type-Options': 'nosniff',
699
+ 'Content-Length': '4029958',
700
+ 'Vary': 'Origin',
701
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
702
+ 'status': 204
703
+ }
704
+
705
+ """
706
+ contents = self.get_metadata_content(
707
+ artifact_path_or_content=artifact_path_or_content, path_type=path_type
708
+ )
709
+
710
+ response = self.client.create_model_custom_metadatum_artifact(
711
+ self.id,
712
+ metadata_key_name,
713
+ contents,
714
+ content_disposition="form" '-data; name="file"; filename="readme.*"',
715
+ )
716
+ response_data = convert_model_metadata_response(
717
+ response.headers, response.status
718
+ )
719
+ return response_data
720
+
721
+ @check_for_model_id(
722
+ msg="Model needs to be saved to the Model Catalog before creating defined metadata artifact corresponding to that model"
723
+ )
724
+ def create_defined_metadata_artifact(
725
+ self,
726
+ metadata_key_name: str,
727
+ artifact_path_or_content: Union[str, bytes],
728
+ path_type: MetadataArtifactPathType,
729
+ ) -> ModelMetadataArtifactDetails:
730
+ """Creates model defined metadata artifact for specified model.
731
+
732
+ Parameters
733
+ ----------
734
+ metadata_key_name: str
735
+ The name of the model metadatum in the metadata.
736
+
737
+ artifact_path_or_content: Union[str,bytes]
738
+ The path of the file (local or oss) containing metadata artifact or content.
739
+ The type is string when it represents local path or oss path.
740
+ The type is bytes when it represents content itself
741
+
742
+ path_type: MetadataArtifactPathType
743
+ can be one of local , oss or actual content itself.
744
+
745
+ Returns
746
+ -------
747
+ ModelMetadataArtifactDetails
748
+ The model defined metadata artifact creation info.
749
+ Example:
750
+ {
751
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
752
+ 'opc-request-id': 'E4F7',
753
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
754
+ 'X-Content-Type-Options': 'nosniff',
755
+ 'Content-Length': '4029958',
756
+ 'Vary': 'Origin',
757
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
758
+ 'status': 204
759
+ }
760
+
761
+ """
762
+ contents = self.get_metadata_content(
763
+ artifact_path_or_content=artifact_path_or_content, path_type=path_type
764
+ )
765
+
766
+ response = self.client.create_model_defined_metadatum_artifact(
767
+ self.id,
768
+ metadata_key_name,
769
+ contents,
770
+ content_disposition='form-data; name="file"; filename="readme.*"',
771
+ )
772
+ response_data = convert_model_metadata_response(
773
+ response.headers, response.status
774
+ )
775
+ return response_data
776
+
777
+ @check_for_model_id(
778
+ msg="Model needs to be saved to the Model Catalog before updating defined metadata artifact corresponding to that model"
779
+ )
780
+ def update_defined_metadata_artifact(
781
+ self,
782
+ metadata_key_name: str,
783
+ artifact_path_or_content: Union[str, bytes],
784
+ path_type: MetadataArtifactPathType,
785
+ ) -> ModelMetadataArtifactDetails:
786
+ """Update model defined metadata artifact for specified model.
787
+
788
+ Parameters
789
+ ----------
790
+ metadata_key_name: str
791
+ The name of the model metadatum in the metadata.
792
+
793
+ artifact_path_or_content: Union[str,bytes]
794
+ The path of the file (local or oss) containing metadata artifact or content.
795
+ The type is string when it represents local path or oss path.
796
+ The type is bytes when it represents content itself
797
+
798
+ path_type:MetadataArtifactPathType
799
+ can be one of local , oss or actual content itself.
800
+ Returns
801
+ -------
802
+ ModelMetadataArtifactDetails
803
+ The model defined metadata artifact update info.
804
+ Example:
805
+ {
806
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
807
+ 'opc-request-id': 'E4F7',
808
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
809
+ 'X-Content-Type-Options': 'nosniff',
810
+ 'Content-Length': '4029958',
811
+ 'Vary': 'Origin',
812
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
813
+ 'status': 204
814
+ }
815
+
816
+ """
817
+ contents = self.get_metadata_content(
818
+ artifact_path_or_content=artifact_path_or_content, path_type=path_type
819
+ )
820
+ response = self.client.update_model_defined_metadatum_artifact(
821
+ self.id,
822
+ metadata_key_name,
823
+ contents,
824
+ content_disposition='form-data; name="file"; filename="readme.*"',
825
+ )
826
+ response_data = convert_model_metadata_response(
827
+ response.headers, response.status
828
+ )
829
+ return response_data
830
+
831
+ @check_for_model_id(
832
+ msg="Model needs to be saved to the Model Catalog before updating custom metadata artifact corresponding to that model"
833
+ )
834
+ def update_custom_metadata_artifact(
835
+ self,
836
+ metadata_key_name: str,
837
+ artifact_path_or_content: Union[str, bytes],
838
+ path_type: MetadataArtifactPathType,
839
+ ) -> ModelMetadataArtifactDetails:
840
+ """Update model custom metadata artifact for specified model.
841
+
842
+ Parameters
843
+ ----------
844
+ metadata_key_name: str
845
+ The name of the model metadatum in the metadata.
846
+
847
+ artifact_path_or_content: Union[str,bytes]
848
+ The path of the file (local or oss) containing metadata artifact or content.
849
+ The type is string when it represents local path or oss path.
850
+ The type is bytes when it represents content itself
851
+
852
+ path_type: MetadataArtifactPathType
853
+ can be one of local , oss or actual content itself.
854
+
855
+ Returns
856
+ -------
857
+ ModelMetadataArtifactDetails
858
+ The model custom metadata artifact update info.
859
+ Example:
860
+ {
861
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
862
+ 'opc-request-id': 'E4F7',
863
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
864
+ 'X-Content-Type-Options': 'nosniff',
865
+ 'Content-Length': '4029958',
866
+ 'Vary': 'Origin',
867
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
868
+ 'status': 204
869
+ }
870
+
871
+ """
872
+ contents = self.get_metadata_content(
873
+ artifact_path_or_content=artifact_path_or_content, path_type=path_type
874
+ )
875
+ response = self.client.update_model_custom_metadatum_artifact(
876
+ self.id,
877
+ metadata_key_name,
878
+ contents,
879
+ content_disposition="form" '-data; name="file"; filename="readme.*"',
880
+ )
881
+ response_data = convert_model_metadata_response(
882
+ response.headers, response.status
883
+ )
884
+ return response_data
885
+
886
+ @check_for_model_id(
887
+ msg="Model needs to be saved to the Model Catalog before fetching custom metadata artifact corresponding to that model"
888
+ )
889
+ def get_custom_metadata_artifact(self, metadata_key_name: str) -> bytes:
890
+ """Downloads model custom metadata artifact content for specified model metadata key.
891
+
892
+ Parameters
893
+ ----------
894
+ metadata_key_name: str
895
+ The name of the model metadatum in the metadata.
896
+ Returns
897
+ -------
898
+ bytes
899
+ custom metadata artifact content
900
+
901
+ """
902
+ try:
903
+ return self.client.get_model_custom_metadatum_artifact_content(
904
+ self.id, metadata_key_name
905
+ ).data.content
906
+ except ServiceError as ex:
907
+ if ex.status == 404:
908
+ raise ModelMetadataArtifactNotFoundError(self.id, metadata_key_name)
909
+
910
+ @check_for_model_id(
911
+ msg="Model needs to be saved to the Model Catalog before fetching defined metadata artifact corresponding to that model"
912
+ )
913
+ def get_defined_metadata_artifact(self, metadata_key_name: str) -> bytes:
914
+ """Downloads model defined metadata artifact content for specified model metadata key.
915
+
916
+ Parameters
917
+ ----------
918
+ metadata_key_name: str
919
+ The name of the model metadatum in the metadata.
920
+ Returns
921
+ -------
922
+ bytes
923
+ Defined metadata artifact content
924
+
925
+ """
926
+ try:
927
+ return self.client.get_model_defined_metadatum_artifact_content(
928
+ self.id, metadata_key_name
929
+ ).data.content
930
+ except ServiceError as ex:
931
+ if ex.status == 404 or ex.status == 400:
932
+ raise ModelMetadataArtifactNotFoundError(self.id, metadata_key_name)
933
+
934
+ @check_for_model_id(
935
+ msg="Model needs to be saved to the Model Catalog before fetching custom metadata artifact corresponding to that model"
936
+ )
937
+ def head_custom_metadata_artifact(
938
+ self, metadata_key_name: str
939
+ ) -> ModelMetadataArtifactDetails:
940
+ """Gets custom metadata artifact metadata for specified model metadata key.
941
+
942
+ Parameters
943
+ ----------
944
+ metadata_key_name: str
945
+ The name of the model metadatum in the metadata.
946
+ Returns
947
+ -------
948
+ ModelMetadataArtifactDetails
949
+ The model custom metadata artifact head call info.
950
+ Example:
951
+ {
952
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
953
+ 'opc-request-id': 'E4F7',
954
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
955
+ 'X-Content-Type-Options': 'nosniff',
956
+ 'Content-Length': '4029958',
957
+ 'Vary': 'Origin',
958
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
959
+ 'status': 204
960
+ }
961
+
962
+ """
963
+ response = self.client.head_model_custom_metadatum_artifact(
964
+ self.id, metadata_key_name
965
+ )
966
+ response_data = convert_model_metadata_response(
967
+ response.headers, response.status
968
+ )
969
+ return response_data
970
+
971
+ @check_for_model_id(
972
+ msg="Model needs to be saved to the Model Catalog before fetching defined metadata artifact corresponding to that model"
973
+ )
974
+ def head_defined_metadata_artifact(
975
+ self, metadata_key_name: str
976
+ ) -> ModelMetadataArtifactDetails:
977
+ """Gets defined metadata artifact metadata for specified model metadata key.
978
+
979
+ Parameters
980
+ ----------
981
+ metadata_key_name: str
982
+ The name of the model metadatum in the metadata.
983
+ Returns
984
+ -------
985
+ ModelMetadataArtifactDetails
986
+ The model defined metadata artifact head call info.
987
+ Example:
988
+ {
989
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
990
+ 'opc-request-id': 'E4F7',
991
+ 'ETag': '77156317-8bb9-4c4a-882b-0d85f8140d93',
992
+ 'X-Content-Type-Options': 'nosniff',
993
+ 'Content-Length': '4029958',
994
+ 'Vary': 'Origin',
995
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
996
+ 'status': 204
997
+ }
998
+
999
+ """
1000
+ response = self.client.head_model_defined_metadatum_artifact(
1001
+ self.id, metadata_key_name
1002
+ )
1003
+ response_data = convert_model_metadata_response(
1004
+ response.headers, response.status
1005
+ )
1006
+ return response_data
1007
+
1008
+ @check_for_model_id(
1009
+ msg="Model needs to be saved to the Model Catalog before the deleting custom metadata artifact corresponding to that model"
1010
+ )
1011
+ def delete_custom_metadata_artifact(
1012
+ self, metadata_key_name: str
1013
+ ) -> ModelMetadataArtifactDetails:
1014
+ """Deletes model custom metadata artifact for specified model metadata key.
1015
+
1016
+ Parameters
1017
+ ----------
1018
+ metadata_key_name: str
1019
+ The name of the model metadatum in the metadata.
1020
+ Returns
1021
+ -------
1022
+ ModelMetadataArtifactDetails
1023
+ The model custom metadata artifact delete call info.
1024
+ Example:
1025
+ {
1026
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
1027
+ 'opc-request-id': 'E4F7',
1028
+ 'X-Content-Type-Options': 'nosniff',
1029
+ 'Vary': 'Origin',
1030
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
1031
+ 'status': 204
1032
+ }
1033
+
1034
+ """
1035
+ response = self.client.delete_model_custom_metadatum_artifact(
1036
+ self.id, metadata_key_name
1037
+ )
1038
+ response_data = convert_model_metadata_response(
1039
+ response.headers, response.status
1040
+ )
1041
+ return response_data
1042
+
1043
+ @check_for_model_id(
1044
+ msg="Model needs to be saved to the Model Catalog before the deleting defined metadata artifact corresponding to that model"
1045
+ )
1046
+ def delete_defined_metadata_artifact(
1047
+ self, metadata_key_name: str
1048
+ ) -> ModelMetadataArtifactDetails:
1049
+ """Deletes model defined metadata artifact for specified model metadata key.
1050
+
1051
+ Parameters
1052
+ ----------
1053
+ metadata_key_name: str
1054
+ The name of the model metadatum in the metadata.
1055
+ Returns
1056
+ -------
1057
+ ModelMetadataArtifactDetails
1058
+ The model defined metadata artifact delete call info.
1059
+ Example:
1060
+ {
1061
+ 'Date': 'Mon, 02 Dec 2024 06:38:24 GMT',
1062
+ 'opc-request-id': 'E4F7',
1063
+ 'X-Content-Type-Options': 'nosniff',
1064
+ 'Vary': 'Origin',
1065
+ 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
1066
+ 'status': 204
1067
+ }
1068
+
1069
+ """
1070
+ response = self.client.delete_model_defined_metadatum_artifact(
1071
+ self.id, metadata_key_name
1072
+ )
1073
+ response_data = convert_model_metadata_response(
1074
+ response.headers, response.status
1075
+ )
1076
+ return response_data