oracle-ads 2.13.8__py3-none-any.whl → 2.13.9rc0__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 (857) hide show
  1. {oracle_ads-2.13.8.dist-info → oracle_ads-2.13.9rc0.dist-info}/METADATA +151 -151
  2. oracle_ads-2.13.9rc0.dist-info/RECORD +9 -0
  3. {oracle_ads-2.13.8.dist-info → oracle_ads-2.13.9rc0.dist-info}/WHEEL +2 -1
  4. {oracle_ads-2.13.8.dist-info → oracle_ads-2.13.9rc0.dist-info}/entry_points.txt +1 -2
  5. oracle_ads-2.13.9rc0.dist-info/top_level.txt +1 -0
  6. ads/aqua/__init__.py +0 -40
  7. ads/aqua/app.py +0 -506
  8. ads/aqua/cli.py +0 -96
  9. ads/aqua/client/__init__.py +0 -3
  10. ads/aqua/client/client.py +0 -836
  11. ads/aqua/client/openai_client.py +0 -305
  12. ads/aqua/common/__init__.py +0 -5
  13. ads/aqua/common/decorator.py +0 -125
  14. ads/aqua/common/entities.py +0 -266
  15. ads/aqua/common/enums.py +0 -122
  16. ads/aqua/common/errors.py +0 -109
  17. ads/aqua/common/utils.py +0 -1285
  18. ads/aqua/config/__init__.py +0 -4
  19. ads/aqua/config/container_config.py +0 -248
  20. ads/aqua/config/evaluation/__init__.py +0 -4
  21. ads/aqua/config/evaluation/evaluation_service_config.py +0 -147
  22. ads/aqua/config/utils/__init__.py +0 -4
  23. ads/aqua/config/utils/serializer.py +0 -339
  24. ads/aqua/constants.py +0 -114
  25. ads/aqua/data.py +0 -14
  26. ads/aqua/dummy_data/icon.txt +0 -1
  27. ads/aqua/dummy_data/oci_model_deployments.json +0 -56
  28. ads/aqua/dummy_data/oci_models.json +0 -1
  29. ads/aqua/dummy_data/readme.md +0 -26
  30. ads/aqua/evaluation/__init__.py +0 -8
  31. ads/aqua/evaluation/constants.py +0 -53
  32. ads/aqua/evaluation/entities.py +0 -186
  33. ads/aqua/evaluation/errors.py +0 -70
  34. ads/aqua/evaluation/evaluation.py +0 -1814
  35. ads/aqua/extension/__init__.py +0 -42
  36. ads/aqua/extension/aqua_ws_msg_handler.py +0 -76
  37. ads/aqua/extension/base_handler.py +0 -90
  38. ads/aqua/extension/common_handler.py +0 -121
  39. ads/aqua/extension/common_ws_msg_handler.py +0 -36
  40. ads/aqua/extension/deployment_handler.py +0 -298
  41. ads/aqua/extension/deployment_ws_msg_handler.py +0 -54
  42. ads/aqua/extension/errors.py +0 -30
  43. ads/aqua/extension/evaluation_handler.py +0 -129
  44. ads/aqua/extension/evaluation_ws_msg_handler.py +0 -61
  45. ads/aqua/extension/finetune_handler.py +0 -96
  46. ads/aqua/extension/model_handler.py +0 -390
  47. ads/aqua/extension/models/__init__.py +0 -0
  48. ads/aqua/extension/models/ws_models.py +0 -145
  49. ads/aqua/extension/models_ws_msg_handler.py +0 -50
  50. ads/aqua/extension/ui_handler.py +0 -282
  51. ads/aqua/extension/ui_websocket_handler.py +0 -130
  52. ads/aqua/extension/utils.py +0 -133
  53. ads/aqua/finetuning/__init__.py +0 -7
  54. ads/aqua/finetuning/constants.py +0 -23
  55. ads/aqua/finetuning/entities.py +0 -181
  56. ads/aqua/finetuning/finetuning.py +0 -731
  57. ads/aqua/model/__init__.py +0 -8
  58. ads/aqua/model/constants.py +0 -60
  59. ads/aqua/model/entities.py +0 -306
  60. ads/aqua/model/enums.py +0 -30
  61. ads/aqua/model/model.py +0 -2080
  62. ads/aqua/modeldeployment/__init__.py +0 -8
  63. ads/aqua/modeldeployment/constants.py +0 -10
  64. ads/aqua/modeldeployment/deployment.py +0 -1324
  65. ads/aqua/modeldeployment/entities.py +0 -653
  66. ads/aqua/modeldeployment/inference.py +0 -74
  67. ads/aqua/modeldeployment/utils.py +0 -543
  68. ads/aqua/resources/gpu_shapes_index.json +0 -94
  69. ads/aqua/server/__init__.py +0 -4
  70. ads/aqua/server/__main__.py +0 -24
  71. ads/aqua/server/app.py +0 -47
  72. ads/aqua/server/aqua_spec.yml +0 -1291
  73. ads/aqua/training/__init__.py +0 -4
  74. ads/aqua/training/exceptions.py +0 -476
  75. ads/aqua/ui.py +0 -499
  76. ads/automl/__init__.py +0 -9
  77. ads/automl/driver.py +0 -330
  78. ads/automl/provider.py +0 -975
  79. ads/bds/__init__.py +0 -5
  80. ads/bds/auth.py +0 -127
  81. ads/bds/big_data_service.py +0 -255
  82. ads/catalog/__init__.py +0 -19
  83. ads/catalog/model.py +0 -1576
  84. ads/catalog/notebook.py +0 -461
  85. ads/catalog/project.py +0 -468
  86. ads/catalog/summary.py +0 -178
  87. ads/common/__init__.py +0 -11
  88. ads/common/analyzer.py +0 -65
  89. ads/common/artifact/.model-ignore +0 -63
  90. ads/common/artifact/__init__.py +0 -10
  91. ads/common/auth.py +0 -1122
  92. ads/common/card_identifier.py +0 -83
  93. ads/common/config.py +0 -647
  94. ads/common/data.py +0 -165
  95. ads/common/decorator/__init__.py +0 -9
  96. ads/common/decorator/argument_to_case.py +0 -88
  97. ads/common/decorator/deprecate.py +0 -69
  98. ads/common/decorator/require_nonempty_arg.py +0 -65
  99. ads/common/decorator/runtime_dependency.py +0 -178
  100. ads/common/decorator/threaded.py +0 -97
  101. ads/common/decorator/utils.py +0 -35
  102. ads/common/dsc_file_system.py +0 -303
  103. ads/common/error.py +0 -14
  104. ads/common/extended_enum.py +0 -81
  105. ads/common/function/__init__.py +0 -5
  106. ads/common/function/fn_util.py +0 -142
  107. ads/common/function/func_conf.yaml +0 -25
  108. ads/common/ipython.py +0 -76
  109. ads/common/model.py +0 -679
  110. ads/common/model_artifact.py +0 -1759
  111. ads/common/model_artifact_schema.json +0 -107
  112. ads/common/model_export_util.py +0 -664
  113. ads/common/model_metadata.py +0 -24
  114. ads/common/object_storage_details.py +0 -296
  115. ads/common/oci_client.py +0 -175
  116. ads/common/oci_datascience.py +0 -46
  117. ads/common/oci_logging.py +0 -1144
  118. ads/common/oci_mixin.py +0 -957
  119. ads/common/oci_resource.py +0 -136
  120. ads/common/serializer.py +0 -559
  121. ads/common/utils.py +0 -1852
  122. ads/common/word_lists.py +0 -1491
  123. ads/common/work_request.py +0 -189
  124. ads/data_labeling/__init__.py +0 -13
  125. ads/data_labeling/boundingbox.py +0 -253
  126. ads/data_labeling/constants.py +0 -47
  127. ads/data_labeling/data_labeling_service.py +0 -244
  128. ads/data_labeling/interface/__init__.py +0 -5
  129. ads/data_labeling/interface/loader.py +0 -16
  130. ads/data_labeling/interface/parser.py +0 -16
  131. ads/data_labeling/interface/reader.py +0 -23
  132. ads/data_labeling/loader/__init__.py +0 -5
  133. ads/data_labeling/loader/file_loader.py +0 -241
  134. ads/data_labeling/metadata.py +0 -110
  135. ads/data_labeling/mixin/__init__.py +0 -5
  136. ads/data_labeling/mixin/data_labeling.py +0 -232
  137. ads/data_labeling/ner.py +0 -129
  138. ads/data_labeling/parser/__init__.py +0 -5
  139. ads/data_labeling/parser/dls_record_parser.py +0 -388
  140. ads/data_labeling/parser/export_metadata_parser.py +0 -94
  141. ads/data_labeling/parser/export_record_parser.py +0 -473
  142. ads/data_labeling/reader/__init__.py +0 -5
  143. ads/data_labeling/reader/dataset_reader.py +0 -574
  144. ads/data_labeling/reader/dls_record_reader.py +0 -121
  145. ads/data_labeling/reader/export_record_reader.py +0 -62
  146. ads/data_labeling/reader/jsonl_reader.py +0 -75
  147. ads/data_labeling/reader/metadata_reader.py +0 -203
  148. ads/data_labeling/reader/record_reader.py +0 -263
  149. ads/data_labeling/record.py +0 -52
  150. ads/data_labeling/visualizer/__init__.py +0 -5
  151. ads/data_labeling/visualizer/image_visualizer.py +0 -525
  152. ads/data_labeling/visualizer/text_visualizer.py +0 -357
  153. ads/database/__init__.py +0 -5
  154. ads/database/connection.py +0 -338
  155. ads/dataset/__init__.py +0 -10
  156. ads/dataset/capabilities.md +0 -51
  157. ads/dataset/classification_dataset.py +0 -339
  158. ads/dataset/correlation.py +0 -226
  159. ads/dataset/correlation_plot.py +0 -563
  160. ads/dataset/dask_series.py +0 -173
  161. ads/dataset/dataframe_transformer.py +0 -110
  162. ads/dataset/dataset.py +0 -1979
  163. ads/dataset/dataset_browser.py +0 -360
  164. ads/dataset/dataset_with_target.py +0 -995
  165. ads/dataset/exception.py +0 -25
  166. ads/dataset/factory.py +0 -987
  167. ads/dataset/feature_engineering_transformer.py +0 -35
  168. ads/dataset/feature_selection.py +0 -107
  169. ads/dataset/forecasting_dataset.py +0 -26
  170. ads/dataset/helper.py +0 -1450
  171. ads/dataset/label_encoder.py +0 -99
  172. ads/dataset/mixin/__init__.py +0 -5
  173. ads/dataset/mixin/dataset_accessor.py +0 -134
  174. ads/dataset/pipeline.py +0 -58
  175. ads/dataset/plot.py +0 -710
  176. ads/dataset/progress.py +0 -86
  177. ads/dataset/recommendation.py +0 -297
  178. ads/dataset/recommendation_transformer.py +0 -502
  179. ads/dataset/regression_dataset.py +0 -14
  180. ads/dataset/sampled_dataset.py +0 -1050
  181. ads/dataset/target.py +0 -98
  182. ads/dataset/timeseries.py +0 -18
  183. ads/dbmixin/__init__.py +0 -5
  184. ads/dbmixin/db_pandas_accessor.py +0 -153
  185. ads/environment/__init__.py +0 -9
  186. ads/environment/ml_runtime.py +0 -66
  187. ads/evaluations/README.md +0 -14
  188. ads/evaluations/__init__.py +0 -109
  189. ads/evaluations/evaluation_plot.py +0 -983
  190. ads/evaluations/evaluator.py +0 -1334
  191. ads/evaluations/statistical_metrics.py +0 -543
  192. ads/experiments/__init__.py +0 -9
  193. ads/experiments/capabilities.md +0 -0
  194. ads/explanations/__init__.py +0 -21
  195. ads/explanations/base_explainer.py +0 -142
  196. ads/explanations/capabilities.md +0 -83
  197. ads/explanations/explainer.py +0 -190
  198. ads/explanations/mlx_global_explainer.py +0 -1050
  199. ads/explanations/mlx_interface.py +0 -386
  200. ads/explanations/mlx_local_explainer.py +0 -287
  201. ads/explanations/mlx_whatif_explainer.py +0 -201
  202. ads/feature_engineering/__init__.py +0 -20
  203. ads/feature_engineering/accessor/__init__.py +0 -5
  204. ads/feature_engineering/accessor/dataframe_accessor.py +0 -535
  205. ads/feature_engineering/accessor/mixin/__init__.py +0 -5
  206. ads/feature_engineering/accessor/mixin/correlation.py +0 -166
  207. ads/feature_engineering/accessor/mixin/eda_mixin.py +0 -266
  208. ads/feature_engineering/accessor/mixin/eda_mixin_series.py +0 -85
  209. ads/feature_engineering/accessor/mixin/feature_types_mixin.py +0 -211
  210. ads/feature_engineering/accessor/mixin/utils.py +0 -65
  211. ads/feature_engineering/accessor/series_accessor.py +0 -431
  212. ads/feature_engineering/adsimage/__init__.py +0 -5
  213. ads/feature_engineering/adsimage/image.py +0 -192
  214. ads/feature_engineering/adsimage/image_reader.py +0 -170
  215. ads/feature_engineering/adsimage/interface/__init__.py +0 -5
  216. ads/feature_engineering/adsimage/interface/reader.py +0 -19
  217. ads/feature_engineering/adsstring/__init__.py +0 -7
  218. ads/feature_engineering/adsstring/oci_language/__init__.py +0 -8
  219. ads/feature_engineering/adsstring/string/__init__.py +0 -8
  220. ads/feature_engineering/data_schema.json +0 -57
  221. ads/feature_engineering/dataset/__init__.py +0 -5
  222. ads/feature_engineering/dataset/zip_code_data.py +0 -42062
  223. ads/feature_engineering/exceptions.py +0 -40
  224. ads/feature_engineering/feature_type/__init__.py +0 -133
  225. ads/feature_engineering/feature_type/address.py +0 -184
  226. ads/feature_engineering/feature_type/adsstring/__init__.py +0 -5
  227. ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +0 -164
  228. ads/feature_engineering/feature_type/adsstring/oci_language.py +0 -93
  229. ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +0 -5
  230. ads/feature_engineering/feature_type/adsstring/parsers/base.py +0 -47
  231. ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +0 -96
  232. ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +0 -221
  233. ads/feature_engineering/feature_type/adsstring/string.py +0 -258
  234. ads/feature_engineering/feature_type/base.py +0 -58
  235. ads/feature_engineering/feature_type/boolean.py +0 -183
  236. ads/feature_engineering/feature_type/category.py +0 -146
  237. ads/feature_engineering/feature_type/constant.py +0 -137
  238. ads/feature_engineering/feature_type/continuous.py +0 -151
  239. ads/feature_engineering/feature_type/creditcard.py +0 -314
  240. ads/feature_engineering/feature_type/datetime.py +0 -190
  241. ads/feature_engineering/feature_type/discrete.py +0 -134
  242. ads/feature_engineering/feature_type/document.py +0 -43
  243. ads/feature_engineering/feature_type/gis.py +0 -251
  244. ads/feature_engineering/feature_type/handler/__init__.py +0 -5
  245. ads/feature_engineering/feature_type/handler/feature_validator.py +0 -524
  246. ads/feature_engineering/feature_type/handler/feature_warning.py +0 -319
  247. ads/feature_engineering/feature_type/handler/warnings.py +0 -128
  248. ads/feature_engineering/feature_type/integer.py +0 -142
  249. ads/feature_engineering/feature_type/ip_address.py +0 -144
  250. ads/feature_engineering/feature_type/ip_address_v4.py +0 -138
  251. ads/feature_engineering/feature_type/ip_address_v6.py +0 -138
  252. ads/feature_engineering/feature_type/lat_long.py +0 -256
  253. ads/feature_engineering/feature_type/object.py +0 -43
  254. ads/feature_engineering/feature_type/ordinal.py +0 -132
  255. ads/feature_engineering/feature_type/phone_number.py +0 -135
  256. ads/feature_engineering/feature_type/string.py +0 -171
  257. ads/feature_engineering/feature_type/text.py +0 -93
  258. ads/feature_engineering/feature_type/unknown.py +0 -43
  259. ads/feature_engineering/feature_type/zip_code.py +0 -164
  260. ads/feature_engineering/feature_type_manager.py +0 -406
  261. ads/feature_engineering/schema.py +0 -795
  262. ads/feature_engineering/utils.py +0 -245
  263. ads/feature_store/.readthedocs.yaml +0 -19
  264. ads/feature_store/README.md +0 -65
  265. ads/feature_store/__init__.py +0 -9
  266. ads/feature_store/common/__init__.py +0 -0
  267. ads/feature_store/common/enums.py +0 -339
  268. ads/feature_store/common/exceptions.py +0 -18
  269. ads/feature_store/common/spark_session_singleton.py +0 -125
  270. ads/feature_store/common/utils/__init__.py +0 -0
  271. ads/feature_store/common/utils/base64_encoder_decoder.py +0 -72
  272. ads/feature_store/common/utils/feature_schema_mapper.py +0 -283
  273. ads/feature_store/common/utils/transformation_utils.py +0 -82
  274. ads/feature_store/common/utils/utility.py +0 -403
  275. ads/feature_store/data_validation/__init__.py +0 -0
  276. ads/feature_store/data_validation/great_expectation.py +0 -129
  277. ads/feature_store/dataset.py +0 -1230
  278. ads/feature_store/dataset_job.py +0 -530
  279. ads/feature_store/docs/Dockerfile +0 -7
  280. ads/feature_store/docs/Makefile +0 -44
  281. ads/feature_store/docs/conf.py +0 -28
  282. ads/feature_store/docs/requirements.txt +0 -14
  283. ads/feature_store/docs/source/ads.feature_store.query.rst +0 -20
  284. ads/feature_store/docs/source/cicd.rst +0 -137
  285. ads/feature_store/docs/source/conf.py +0 -86
  286. ads/feature_store/docs/source/data_versioning.rst +0 -33
  287. ads/feature_store/docs/source/dataset.rst +0 -388
  288. ads/feature_store/docs/source/dataset_job.rst +0 -27
  289. ads/feature_store/docs/source/demo.rst +0 -70
  290. ads/feature_store/docs/source/entity.rst +0 -78
  291. ads/feature_store/docs/source/feature_group.rst +0 -624
  292. ads/feature_store/docs/source/feature_group_job.rst +0 -29
  293. ads/feature_store/docs/source/feature_store.rst +0 -122
  294. ads/feature_store/docs/source/feature_store_class.rst +0 -123
  295. ads/feature_store/docs/source/feature_validation.rst +0 -66
  296. ads/feature_store/docs/source/figures/cicd.png +0 -0
  297. ads/feature_store/docs/source/figures/data_validation.png +0 -0
  298. ads/feature_store/docs/source/figures/data_versioning.png +0 -0
  299. ads/feature_store/docs/source/figures/dataset.gif +0 -0
  300. ads/feature_store/docs/source/figures/dataset.png +0 -0
  301. ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
  302. ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
  303. ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
  304. ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
  305. ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
  306. ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
  307. ads/feature_store/docs/source/figures/entity.png +0 -0
  308. ads/feature_store/docs/source/figures/feature_group.png +0 -0
  309. ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
  310. ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
  311. ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
  312. ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
  313. ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
  314. ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
  315. ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
  316. ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
  317. ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
  318. ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
  319. ads/feature_store/docs/source/figures/overview.png +0 -0
  320. ads/feature_store/docs/source/figures/resource_manager.png +0 -0
  321. ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
  322. ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
  323. ads/feature_store/docs/source/figures/stats_1.png +0 -0
  324. ads/feature_store/docs/source/figures/stats_2.png +0 -0
  325. ads/feature_store/docs/source/figures/stats_d.png +0 -0
  326. ads/feature_store/docs/source/figures/stats_fg.png +0 -0
  327. ads/feature_store/docs/source/figures/transformation.png +0 -0
  328. ads/feature_store/docs/source/figures/transformations.gif +0 -0
  329. ads/feature_store/docs/source/figures/validation.png +0 -0
  330. ads/feature_store/docs/source/figures/validation_fg.png +0 -0
  331. ads/feature_store/docs/source/figures/validation_results.png +0 -0
  332. ads/feature_store/docs/source/figures/validation_summary.png +0 -0
  333. ads/feature_store/docs/source/index.rst +0 -81
  334. ads/feature_store/docs/source/module.rst +0 -8
  335. ads/feature_store/docs/source/notebook.rst +0 -94
  336. ads/feature_store/docs/source/overview.rst +0 -47
  337. ads/feature_store/docs/source/quickstart.rst +0 -176
  338. ads/feature_store/docs/source/release_notes.rst +0 -194
  339. ads/feature_store/docs/source/setup_feature_store.rst +0 -81
  340. ads/feature_store/docs/source/statistics.rst +0 -58
  341. ads/feature_store/docs/source/transformation.rst +0 -199
  342. ads/feature_store/docs/source/ui.rst +0 -65
  343. ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +0 -66
  344. ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +0 -192
  345. ads/feature_store/docs/source/user_guides.setup.terraform.rst +0 -338
  346. ads/feature_store/entity.py +0 -718
  347. ads/feature_store/execution_strategy/__init__.py +0 -0
  348. ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
  349. ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +0 -375
  350. ads/feature_store/execution_strategy/engine/__init__.py +0 -0
  351. ads/feature_store/execution_strategy/engine/spark_engine.py +0 -316
  352. ads/feature_store/execution_strategy/execution_strategy.py +0 -113
  353. ads/feature_store/execution_strategy/execution_strategy_provider.py +0 -47
  354. ads/feature_store/execution_strategy/spark/__init__.py +0 -0
  355. ads/feature_store/execution_strategy/spark/spark_execution.py +0 -618
  356. ads/feature_store/feature.py +0 -192
  357. ads/feature_store/feature_group.py +0 -1494
  358. ads/feature_store/feature_group_expectation.py +0 -346
  359. ads/feature_store/feature_group_job.py +0 -602
  360. ads/feature_store/feature_lineage/__init__.py +0 -0
  361. ads/feature_store/feature_lineage/graphviz_service.py +0 -180
  362. ads/feature_store/feature_option_details.py +0 -50
  363. ads/feature_store/feature_statistics/__init__.py +0 -0
  364. ads/feature_store/feature_statistics/statistics_service.py +0 -99
  365. ads/feature_store/feature_store.py +0 -699
  366. ads/feature_store/feature_store_registrar.py +0 -518
  367. ads/feature_store/input_feature_detail.py +0 -149
  368. ads/feature_store/mixin/__init__.py +0 -4
  369. ads/feature_store/mixin/oci_feature_store.py +0 -145
  370. ads/feature_store/model_details.py +0 -73
  371. ads/feature_store/query/__init__.py +0 -0
  372. ads/feature_store/query/filter.py +0 -266
  373. ads/feature_store/query/generator/__init__.py +0 -0
  374. ads/feature_store/query/generator/query_generator.py +0 -298
  375. ads/feature_store/query/join.py +0 -161
  376. ads/feature_store/query/query.py +0 -403
  377. ads/feature_store/query/validator/__init__.py +0 -0
  378. ads/feature_store/query/validator/query_validator.py +0 -57
  379. ads/feature_store/response/__init__.py +0 -0
  380. ads/feature_store/response/response_builder.py +0 -68
  381. ads/feature_store/service/__init__.py +0 -0
  382. ads/feature_store/service/oci_dataset.py +0 -139
  383. ads/feature_store/service/oci_dataset_job.py +0 -199
  384. ads/feature_store/service/oci_entity.py +0 -125
  385. ads/feature_store/service/oci_feature_group.py +0 -164
  386. ads/feature_store/service/oci_feature_group_job.py +0 -214
  387. ads/feature_store/service/oci_feature_store.py +0 -182
  388. ads/feature_store/service/oci_lineage.py +0 -87
  389. ads/feature_store/service/oci_transformation.py +0 -104
  390. ads/feature_store/statistics/__init__.py +0 -0
  391. ads/feature_store/statistics/abs_feature_value.py +0 -49
  392. ads/feature_store/statistics/charts/__init__.py +0 -0
  393. ads/feature_store/statistics/charts/abstract_feature_plot.py +0 -37
  394. ads/feature_store/statistics/charts/box_plot.py +0 -148
  395. ads/feature_store/statistics/charts/frequency_distribution.py +0 -65
  396. ads/feature_store/statistics/charts/probability_distribution.py +0 -68
  397. ads/feature_store/statistics/charts/top_k_frequent_elements.py +0 -98
  398. ads/feature_store/statistics/feature_stat.py +0 -126
  399. ads/feature_store/statistics/generic_feature_value.py +0 -33
  400. ads/feature_store/statistics/statistics.py +0 -41
  401. ads/feature_store/statistics_config.py +0 -101
  402. ads/feature_store/templates/feature_store_template.yaml +0 -45
  403. ads/feature_store/transformation.py +0 -499
  404. ads/feature_store/validation_output.py +0 -57
  405. ads/hpo/__init__.py +0 -9
  406. ads/hpo/_imports.py +0 -91
  407. ads/hpo/ads_search_space.py +0 -439
  408. ads/hpo/distributions.py +0 -325
  409. ads/hpo/objective.py +0 -280
  410. ads/hpo/search_cv.py +0 -1657
  411. ads/hpo/stopping_criterion.py +0 -75
  412. ads/hpo/tuner_artifact.py +0 -413
  413. ads/hpo/utils.py +0 -91
  414. ads/hpo/validation.py +0 -140
  415. ads/hpo/visualization/__init__.py +0 -5
  416. ads/hpo/visualization/_contour.py +0 -23
  417. ads/hpo/visualization/_edf.py +0 -20
  418. ads/hpo/visualization/_intermediate_values.py +0 -21
  419. ads/hpo/visualization/_optimization_history.py +0 -25
  420. ads/hpo/visualization/_parallel_coordinate.py +0 -169
  421. ads/hpo/visualization/_param_importances.py +0 -26
  422. ads/jobs/__init__.py +0 -53
  423. ads/jobs/ads_job.py +0 -663
  424. ads/jobs/builders/__init__.py +0 -5
  425. ads/jobs/builders/base.py +0 -156
  426. ads/jobs/builders/infrastructure/__init__.py +0 -6
  427. ads/jobs/builders/infrastructure/base.py +0 -165
  428. ads/jobs/builders/infrastructure/dataflow.py +0 -1252
  429. ads/jobs/builders/infrastructure/dsc_job.py +0 -1894
  430. ads/jobs/builders/infrastructure/dsc_job_runtime.py +0 -1233
  431. ads/jobs/builders/infrastructure/utils.py +0 -65
  432. ads/jobs/builders/runtimes/__init__.py +0 -5
  433. ads/jobs/builders/runtimes/artifact.py +0 -338
  434. ads/jobs/builders/runtimes/base.py +0 -325
  435. ads/jobs/builders/runtimes/container_runtime.py +0 -242
  436. ads/jobs/builders/runtimes/python_runtime.py +0 -1016
  437. ads/jobs/builders/runtimes/pytorch_runtime.py +0 -204
  438. ads/jobs/cli.py +0 -104
  439. ads/jobs/env_var_parser.py +0 -131
  440. ads/jobs/extension.py +0 -160
  441. ads/jobs/schema/__init__.py +0 -5
  442. ads/jobs/schema/infrastructure_schema.json +0 -116
  443. ads/jobs/schema/job_schema.json +0 -42
  444. ads/jobs/schema/runtime_schema.json +0 -183
  445. ads/jobs/schema/validator.py +0 -141
  446. ads/jobs/serializer.py +0 -296
  447. ads/jobs/templates/__init__.py +0 -5
  448. ads/jobs/templates/container.py +0 -6
  449. ads/jobs/templates/driver_notebook.py +0 -177
  450. ads/jobs/templates/driver_oci.py +0 -500
  451. ads/jobs/templates/driver_python.py +0 -48
  452. ads/jobs/templates/driver_pytorch.py +0 -852
  453. ads/jobs/templates/driver_utils.py +0 -615
  454. ads/jobs/templates/hostname_from_env.c +0 -55
  455. ads/jobs/templates/oci_metrics.py +0 -181
  456. ads/jobs/utils.py +0 -104
  457. ads/llm/__init__.py +0 -28
  458. ads/llm/autogen/__init__.py +0 -2
  459. ads/llm/autogen/constants.py +0 -15
  460. ads/llm/autogen/reports/__init__.py +0 -2
  461. ads/llm/autogen/reports/base.py +0 -67
  462. ads/llm/autogen/reports/data.py +0 -103
  463. ads/llm/autogen/reports/session.py +0 -526
  464. ads/llm/autogen/reports/templates/chat_box.html +0 -13
  465. ads/llm/autogen/reports/templates/chat_box_lt.html +0 -5
  466. ads/llm/autogen/reports/templates/chat_box_rt.html +0 -6
  467. ads/llm/autogen/reports/utils.py +0 -56
  468. ads/llm/autogen/v02/__init__.py +0 -4
  469. ads/llm/autogen/v02/client.py +0 -295
  470. ads/llm/autogen/v02/log_handlers/__init__.py +0 -2
  471. ads/llm/autogen/v02/log_handlers/oci_file_handler.py +0 -83
  472. ads/llm/autogen/v02/loggers/__init__.py +0 -6
  473. ads/llm/autogen/v02/loggers/metric_logger.py +0 -320
  474. ads/llm/autogen/v02/loggers/session_logger.py +0 -580
  475. ads/llm/autogen/v02/loggers/utils.py +0 -86
  476. ads/llm/autogen/v02/runtime_logging.py +0 -163
  477. ads/llm/chain.py +0 -268
  478. ads/llm/chat_template.py +0 -31
  479. ads/llm/deploy.py +0 -63
  480. ads/llm/guardrails/__init__.py +0 -5
  481. ads/llm/guardrails/base.py +0 -442
  482. ads/llm/guardrails/huggingface.py +0 -44
  483. ads/llm/langchain/__init__.py +0 -5
  484. ads/llm/langchain/plugins/__init__.py +0 -5
  485. ads/llm/langchain/plugins/chat_models/__init__.py +0 -5
  486. ads/llm/langchain/plugins/chat_models/oci_data_science.py +0 -1027
  487. ads/llm/langchain/plugins/embeddings/__init__.py +0 -4
  488. ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +0 -184
  489. ads/llm/langchain/plugins/llms/__init__.py +0 -5
  490. ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +0 -979
  491. ads/llm/requirements.txt +0 -3
  492. ads/llm/serialize.py +0 -219
  493. ads/llm/serializers/__init__.py +0 -0
  494. ads/llm/serializers/retrieval_qa.py +0 -153
  495. ads/llm/serializers/runnable_parallel.py +0 -27
  496. ads/llm/templates/score_chain.jinja2 +0 -155
  497. ads/llm/templates/tool_chat_template_hermes.jinja +0 -130
  498. ads/llm/templates/tool_chat_template_mistral_parallel.jinja +0 -94
  499. ads/model/__init__.py +0 -52
  500. ads/model/artifact.py +0 -573
  501. ads/model/artifact_downloader.py +0 -254
  502. ads/model/artifact_uploader.py +0 -267
  503. ads/model/base_properties.py +0 -238
  504. ads/model/common/.model-ignore +0 -66
  505. ads/model/common/__init__.py +0 -5
  506. ads/model/common/utils.py +0 -142
  507. ads/model/datascience_model.py +0 -2635
  508. ads/model/deployment/__init__.py +0 -20
  509. ads/model/deployment/common/__init__.py +0 -5
  510. ads/model/deployment/common/utils.py +0 -308
  511. ads/model/deployment/model_deployer.py +0 -466
  512. ads/model/deployment/model_deployment.py +0 -1846
  513. ads/model/deployment/model_deployment_infrastructure.py +0 -671
  514. ads/model/deployment/model_deployment_properties.py +0 -493
  515. ads/model/deployment/model_deployment_runtime.py +0 -838
  516. ads/model/extractor/__init__.py +0 -5
  517. ads/model/extractor/automl_extractor.py +0 -74
  518. ads/model/extractor/embedding_onnx_extractor.py +0 -80
  519. ads/model/extractor/huggingface_extractor.py +0 -88
  520. ads/model/extractor/keras_extractor.py +0 -84
  521. ads/model/extractor/lightgbm_extractor.py +0 -93
  522. ads/model/extractor/model_info_extractor.py +0 -114
  523. ads/model/extractor/model_info_extractor_factory.py +0 -105
  524. ads/model/extractor/pytorch_extractor.py +0 -87
  525. ads/model/extractor/sklearn_extractor.py +0 -112
  526. ads/model/extractor/spark_extractor.py +0 -89
  527. ads/model/extractor/tensorflow_extractor.py +0 -85
  528. ads/model/extractor/xgboost_extractor.py +0 -94
  529. ads/model/framework/__init__.py +0 -5
  530. ads/model/framework/automl_model.py +0 -178
  531. ads/model/framework/embedding_onnx_model.py +0 -438
  532. ads/model/framework/huggingface_model.py +0 -399
  533. ads/model/framework/lightgbm_model.py +0 -266
  534. ads/model/framework/pytorch_model.py +0 -266
  535. ads/model/framework/sklearn_model.py +0 -250
  536. ads/model/framework/spark_model.py +0 -326
  537. ads/model/framework/tensorflow_model.py +0 -254
  538. ads/model/framework/xgboost_model.py +0 -258
  539. ads/model/generic_model.py +0 -3518
  540. ads/model/model_artifact_boilerplate/README.md +0 -381
  541. ads/model/model_artifact_boilerplate/__init__.py +0 -5
  542. ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +0 -5
  543. ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +0 -427
  544. ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +0 -2
  545. ads/model/model_artifact_boilerplate/runtime.yaml +0 -7
  546. ads/model/model_artifact_boilerplate/score.py +0 -61
  547. ads/model/model_file_description_schema.json +0 -68
  548. ads/model/model_introspect.py +0 -331
  549. ads/model/model_metadata.py +0 -1810
  550. ads/model/model_metadata_mixin.py +0 -460
  551. ads/model/model_properties.py +0 -63
  552. ads/model/model_version_set.py +0 -739
  553. ads/model/runtime/__init__.py +0 -5
  554. ads/model/runtime/env_info.py +0 -306
  555. ads/model/runtime/model_deployment_details.py +0 -37
  556. ads/model/runtime/model_provenance_details.py +0 -58
  557. ads/model/runtime/runtime_info.py +0 -81
  558. ads/model/runtime/schemas/inference_env_info_schema.yaml +0 -16
  559. ads/model/runtime/schemas/model_provenance_schema.yaml +0 -36
  560. ads/model/runtime/schemas/training_env_info_schema.yaml +0 -16
  561. ads/model/runtime/utils.py +0 -201
  562. ads/model/serde/__init__.py +0 -5
  563. ads/model/serde/common.py +0 -40
  564. ads/model/serde/model_input.py +0 -547
  565. ads/model/serde/model_serializer.py +0 -1184
  566. ads/model/service/__init__.py +0 -5
  567. ads/model/service/oci_datascience_model.py +0 -1076
  568. ads/model/service/oci_datascience_model_deployment.py +0 -500
  569. ads/model/service/oci_datascience_model_version_set.py +0 -176
  570. ads/model/transformer/__init__.py +0 -5
  571. ads/model/transformer/onnx_transformer.py +0 -324
  572. ads/mysqldb/__init__.py +0 -5
  573. ads/mysqldb/mysql_db.py +0 -227
  574. ads/opctl/__init__.py +0 -18
  575. ads/opctl/anomaly_detection.py +0 -11
  576. ads/opctl/backend/__init__.py +0 -5
  577. ads/opctl/backend/ads_dataflow.py +0 -353
  578. ads/opctl/backend/ads_ml_job.py +0 -710
  579. ads/opctl/backend/ads_ml_pipeline.py +0 -164
  580. ads/opctl/backend/ads_model_deployment.py +0 -209
  581. ads/opctl/backend/base.py +0 -146
  582. ads/opctl/backend/local.py +0 -1053
  583. ads/opctl/backend/marketplace/__init__.py +0 -9
  584. ads/opctl/backend/marketplace/helm_helper.py +0 -173
  585. ads/opctl/backend/marketplace/local_marketplace.py +0 -271
  586. ads/opctl/backend/marketplace/marketplace_backend_runner.py +0 -71
  587. ads/opctl/backend/marketplace/marketplace_operator_interface.py +0 -44
  588. ads/opctl/backend/marketplace/marketplace_operator_runner.py +0 -24
  589. ads/opctl/backend/marketplace/marketplace_utils.py +0 -212
  590. ads/opctl/backend/marketplace/models/__init__.py +0 -5
  591. ads/opctl/backend/marketplace/models/bearer_token.py +0 -94
  592. ads/opctl/backend/marketplace/models/marketplace_type.py +0 -70
  593. ads/opctl/backend/marketplace/models/ocir_details.py +0 -56
  594. ads/opctl/backend/marketplace/prerequisite_checker.py +0 -238
  595. ads/opctl/cli.py +0 -707
  596. ads/opctl/cmds.py +0 -869
  597. ads/opctl/conda/__init__.py +0 -5
  598. ads/opctl/conda/cli.py +0 -193
  599. ads/opctl/conda/cmds.py +0 -749
  600. ads/opctl/conda/config.yaml +0 -34
  601. ads/opctl/conda/manifest_template.yaml +0 -13
  602. ads/opctl/conda/multipart_uploader.py +0 -188
  603. ads/opctl/conda/pack.py +0 -89
  604. ads/opctl/config/__init__.py +0 -5
  605. ads/opctl/config/base.py +0 -57
  606. ads/opctl/config/diagnostics/__init__.py +0 -5
  607. ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +0 -62
  608. ads/opctl/config/merger.py +0 -255
  609. ads/opctl/config/resolver.py +0 -297
  610. ads/opctl/config/utils.py +0 -79
  611. ads/opctl/config/validator.py +0 -17
  612. ads/opctl/config/versioner.py +0 -68
  613. ads/opctl/config/yaml_parsers/__init__.py +0 -7
  614. ads/opctl/config/yaml_parsers/base.py +0 -58
  615. ads/opctl/config/yaml_parsers/distributed/__init__.py +0 -7
  616. ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +0 -201
  617. ads/opctl/constants.py +0 -66
  618. ads/opctl/decorator/__init__.py +0 -5
  619. ads/opctl/decorator/common.py +0 -129
  620. ads/opctl/diagnostics/__init__.py +0 -5
  621. ads/opctl/diagnostics/__main__.py +0 -25
  622. ads/opctl/diagnostics/check_distributed_job_requirements.py +0 -212
  623. ads/opctl/diagnostics/check_requirements.py +0 -144
  624. ads/opctl/diagnostics/requirement_exception.py +0 -9
  625. ads/opctl/distributed/README.md +0 -109
  626. ads/opctl/distributed/__init__.py +0 -5
  627. ads/opctl/distributed/certificates.py +0 -32
  628. ads/opctl/distributed/cli.py +0 -207
  629. ads/opctl/distributed/cmds.py +0 -731
  630. ads/opctl/distributed/common/__init__.py +0 -5
  631. ads/opctl/distributed/common/abstract_cluster_provider.py +0 -449
  632. ads/opctl/distributed/common/abstract_framework_spec_builder.py +0 -88
  633. ads/opctl/distributed/common/cluster_config_helper.py +0 -103
  634. ads/opctl/distributed/common/cluster_provider_factory.py +0 -21
  635. ads/opctl/distributed/common/cluster_runner.py +0 -54
  636. ads/opctl/distributed/common/framework_factory.py +0 -29
  637. ads/opctl/docker/Dockerfile.job +0 -103
  638. ads/opctl/docker/Dockerfile.job.arm +0 -107
  639. ads/opctl/docker/Dockerfile.job.gpu +0 -175
  640. ads/opctl/docker/base-env.yaml +0 -13
  641. ads/opctl/docker/cuda.repo +0 -6
  642. ads/opctl/docker/operator/.dockerignore +0 -0
  643. ads/opctl/docker/operator/Dockerfile +0 -41
  644. ads/opctl/docker/operator/Dockerfile.gpu +0 -85
  645. ads/opctl/docker/operator/cuda.repo +0 -6
  646. ads/opctl/docker/operator/environment.yaml +0 -8
  647. ads/opctl/forecast.py +0 -11
  648. ads/opctl/index.yaml +0 -3
  649. ads/opctl/model/__init__.py +0 -5
  650. ads/opctl/model/cli.py +0 -65
  651. ads/opctl/model/cmds.py +0 -73
  652. ads/opctl/operator/README.md +0 -4
  653. ads/opctl/operator/__init__.py +0 -31
  654. ads/opctl/operator/cli.py +0 -344
  655. ads/opctl/operator/cmd.py +0 -596
  656. ads/opctl/operator/common/__init__.py +0 -5
  657. ads/opctl/operator/common/backend_factory.py +0 -460
  658. ads/opctl/operator/common/const.py +0 -27
  659. ads/opctl/operator/common/data/synthetic.csv +0 -16001
  660. ads/opctl/operator/common/dictionary_merger.py +0 -148
  661. ads/opctl/operator/common/errors.py +0 -42
  662. ads/opctl/operator/common/operator_config.py +0 -99
  663. ads/opctl/operator/common/operator_loader.py +0 -811
  664. ads/opctl/operator/common/operator_schema.yaml +0 -130
  665. ads/opctl/operator/common/operator_yaml_generator.py +0 -152
  666. ads/opctl/operator/common/utils.py +0 -208
  667. ads/opctl/operator/lowcode/__init__.py +0 -5
  668. ads/opctl/operator/lowcode/anomaly/MLoperator +0 -16
  669. ads/opctl/operator/lowcode/anomaly/README.md +0 -207
  670. ads/opctl/operator/lowcode/anomaly/__init__.py +0 -5
  671. ads/opctl/operator/lowcode/anomaly/__main__.py +0 -103
  672. ads/opctl/operator/lowcode/anomaly/cmd.py +0 -35
  673. ads/opctl/operator/lowcode/anomaly/const.py +0 -167
  674. ads/opctl/operator/lowcode/anomaly/environment.yaml +0 -10
  675. ads/opctl/operator/lowcode/anomaly/model/__init__.py +0 -5
  676. ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +0 -146
  677. ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +0 -162
  678. ads/opctl/operator/lowcode/anomaly/model/automlx.py +0 -99
  679. ads/opctl/operator/lowcode/anomaly/model/autots.py +0 -115
  680. ads/opctl/operator/lowcode/anomaly/model/base_model.py +0 -404
  681. ads/opctl/operator/lowcode/anomaly/model/factory.py +0 -110
  682. ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +0 -78
  683. ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +0 -78
  684. ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +0 -120
  685. ads/opctl/operator/lowcode/anomaly/model/tods.py +0 -119
  686. ads/opctl/operator/lowcode/anomaly/operator_config.py +0 -127
  687. ads/opctl/operator/lowcode/anomaly/schema.yaml +0 -401
  688. ads/opctl/operator/lowcode/anomaly/utils.py +0 -88
  689. ads/opctl/operator/lowcode/common/__init__.py +0 -5
  690. ads/opctl/operator/lowcode/common/const.py +0 -10
  691. ads/opctl/operator/lowcode/common/data.py +0 -116
  692. ads/opctl/operator/lowcode/common/errors.py +0 -47
  693. ads/opctl/operator/lowcode/common/transformations.py +0 -296
  694. ads/opctl/operator/lowcode/common/utils.py +0 -293
  695. ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +0 -13
  696. ads/opctl/operator/lowcode/feature_store_marketplace/README.md +0 -30
  697. ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +0 -5
  698. ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +0 -116
  699. ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +0 -85
  700. ads/opctl/operator/lowcode/feature_store_marketplace/const.py +0 -15
  701. ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
  702. ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +0 -4
  703. ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +0 -32
  704. ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +0 -43
  705. ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +0 -120
  706. ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +0 -34
  707. ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +0 -386
  708. ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +0 -160
  709. ads/opctl/operator/lowcode/forecast/MLoperator +0 -25
  710. ads/opctl/operator/lowcode/forecast/README.md +0 -209
  711. ads/opctl/operator/lowcode/forecast/__init__.py +0 -5
  712. ads/opctl/operator/lowcode/forecast/__main__.py +0 -89
  713. ads/opctl/operator/lowcode/forecast/cmd.py +0 -40
  714. ads/opctl/operator/lowcode/forecast/const.py +0 -92
  715. ads/opctl/operator/lowcode/forecast/environment.yaml +0 -20
  716. ads/opctl/operator/lowcode/forecast/errors.py +0 -26
  717. ads/opctl/operator/lowcode/forecast/model/__init__.py +0 -5
  718. ads/opctl/operator/lowcode/forecast/model/arima.py +0 -279
  719. ads/opctl/operator/lowcode/forecast/model/automlx.py +0 -542
  720. ads/opctl/operator/lowcode/forecast/model/autots.py +0 -312
  721. ads/opctl/operator/lowcode/forecast/model/base_model.py +0 -863
  722. ads/opctl/operator/lowcode/forecast/model/factory.py +0 -106
  723. ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +0 -492
  724. ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +0 -243
  725. ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +0 -486
  726. ads/opctl/operator/lowcode/forecast/model/prophet.py +0 -445
  727. ads/opctl/operator/lowcode/forecast/model_evaluator.py +0 -244
  728. ads/opctl/operator/lowcode/forecast/operator_config.py +0 -234
  729. ads/opctl/operator/lowcode/forecast/schema.yaml +0 -506
  730. ads/opctl/operator/lowcode/forecast/utils.py +0 -413
  731. ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +0 -7
  732. ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +0 -285
  733. ads/opctl/operator/lowcode/forecast/whatifserve/score.py +0 -246
  734. ads/opctl/operator/lowcode/pii/MLoperator +0 -17
  735. ads/opctl/operator/lowcode/pii/README.md +0 -208
  736. ads/opctl/operator/lowcode/pii/__init__.py +0 -5
  737. ads/opctl/operator/lowcode/pii/__main__.py +0 -78
  738. ads/opctl/operator/lowcode/pii/cmd.py +0 -39
  739. ads/opctl/operator/lowcode/pii/constant.py +0 -84
  740. ads/opctl/operator/lowcode/pii/environment.yaml +0 -17
  741. ads/opctl/operator/lowcode/pii/errors.py +0 -27
  742. ads/opctl/operator/lowcode/pii/model/__init__.py +0 -5
  743. ads/opctl/operator/lowcode/pii/model/factory.py +0 -82
  744. ads/opctl/operator/lowcode/pii/model/guardrails.py +0 -167
  745. ads/opctl/operator/lowcode/pii/model/pii.py +0 -145
  746. ads/opctl/operator/lowcode/pii/model/processor/__init__.py +0 -34
  747. ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +0 -34
  748. ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +0 -35
  749. ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +0 -225
  750. ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +0 -73
  751. ads/opctl/operator/lowcode/pii/model/processor/remover.py +0 -26
  752. ads/opctl/operator/lowcode/pii/model/report.py +0 -487
  753. ads/opctl/operator/lowcode/pii/operator_config.py +0 -95
  754. ads/opctl/operator/lowcode/pii/schema.yaml +0 -108
  755. ads/opctl/operator/lowcode/pii/utils.py +0 -43
  756. ads/opctl/operator/lowcode/recommender/MLoperator +0 -16
  757. ads/opctl/operator/lowcode/recommender/README.md +0 -206
  758. ads/opctl/operator/lowcode/recommender/__init__.py +0 -5
  759. ads/opctl/operator/lowcode/recommender/__main__.py +0 -82
  760. ads/opctl/operator/lowcode/recommender/cmd.py +0 -33
  761. ads/opctl/operator/lowcode/recommender/constant.py +0 -30
  762. ads/opctl/operator/lowcode/recommender/environment.yaml +0 -11
  763. ads/opctl/operator/lowcode/recommender/model/base_model.py +0 -212
  764. ads/opctl/operator/lowcode/recommender/model/factory.py +0 -56
  765. ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +0 -25
  766. ads/opctl/operator/lowcode/recommender/model/svd.py +0 -106
  767. ads/opctl/operator/lowcode/recommender/operator_config.py +0 -81
  768. ads/opctl/operator/lowcode/recommender/schema.yaml +0 -265
  769. ads/opctl/operator/lowcode/recommender/utils.py +0 -13
  770. ads/opctl/operator/runtime/__init__.py +0 -5
  771. ads/opctl/operator/runtime/const.py +0 -17
  772. ads/opctl/operator/runtime/container_runtime_schema.yaml +0 -50
  773. ads/opctl/operator/runtime/marketplace_runtime.py +0 -50
  774. ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +0 -21
  775. ads/opctl/operator/runtime/python_runtime_schema.yaml +0 -21
  776. ads/opctl/operator/runtime/runtime.py +0 -115
  777. ads/opctl/schema.yaml.yml +0 -36
  778. ads/opctl/script.py +0 -40
  779. ads/opctl/spark/__init__.py +0 -5
  780. ads/opctl/spark/cli.py +0 -43
  781. ads/opctl/spark/cmds.py +0 -147
  782. ads/opctl/templates/diagnostic_report_template.jinja2 +0 -102
  783. ads/opctl/utils.py +0 -344
  784. ads/oracledb/__init__.py +0 -5
  785. ads/oracledb/oracle_db.py +0 -346
  786. ads/pipeline/__init__.py +0 -39
  787. ads/pipeline/ads_pipeline.py +0 -2279
  788. ads/pipeline/ads_pipeline_run.py +0 -772
  789. ads/pipeline/ads_pipeline_step.py +0 -605
  790. ads/pipeline/builders/__init__.py +0 -5
  791. ads/pipeline/builders/infrastructure/__init__.py +0 -5
  792. ads/pipeline/builders/infrastructure/custom_script.py +0 -32
  793. ads/pipeline/cli.py +0 -119
  794. ads/pipeline/extension.py +0 -291
  795. ads/pipeline/schema/__init__.py +0 -5
  796. ads/pipeline/schema/cs_step_schema.json +0 -35
  797. ads/pipeline/schema/ml_step_schema.json +0 -31
  798. ads/pipeline/schema/pipeline_schema.json +0 -71
  799. ads/pipeline/visualizer/__init__.py +0 -5
  800. ads/pipeline/visualizer/base.py +0 -570
  801. ads/pipeline/visualizer/graph_renderer.py +0 -272
  802. ads/pipeline/visualizer/text_renderer.py +0 -84
  803. ads/secrets/__init__.py +0 -11
  804. ads/secrets/adb.py +0 -386
  805. ads/secrets/auth_token.py +0 -86
  806. ads/secrets/big_data_service.py +0 -365
  807. ads/secrets/mysqldb.py +0 -149
  808. ads/secrets/oracledb.py +0 -160
  809. ads/secrets/secrets.py +0 -407
  810. ads/telemetry/__init__.py +0 -7
  811. ads/telemetry/base.py +0 -69
  812. ads/telemetry/client.py +0 -125
  813. ads/telemetry/telemetry.py +0 -257
  814. ads/templates/dataflow_pyspark.jinja2 +0 -13
  815. ads/templates/dataflow_sparksql.jinja2 +0 -22
  816. ads/templates/func.jinja2 +0 -20
  817. ads/templates/schemas/openapi.json +0 -1740
  818. ads/templates/score-pkl.jinja2 +0 -173
  819. ads/templates/score.jinja2 +0 -322
  820. ads/templates/score_embedding_onnx.jinja2 +0 -202
  821. ads/templates/score_generic.jinja2 +0 -165
  822. ads/templates/score_huggingface_pipeline.jinja2 +0 -217
  823. ads/templates/score_lightgbm.jinja2 +0 -185
  824. ads/templates/score_onnx.jinja2 +0 -407
  825. ads/templates/score_onnx_new.jinja2 +0 -473
  826. ads/templates/score_oracle_automl.jinja2 +0 -185
  827. ads/templates/score_pyspark.jinja2 +0 -154
  828. ads/templates/score_pytorch.jinja2 +0 -219
  829. ads/templates/score_scikit-learn.jinja2 +0 -184
  830. ads/templates/score_tensorflow.jinja2 +0 -184
  831. ads/templates/score_xgboost.jinja2 +0 -178
  832. ads/text_dataset/__init__.py +0 -5
  833. ads/text_dataset/backends.py +0 -211
  834. ads/text_dataset/dataset.py +0 -445
  835. ads/text_dataset/extractor.py +0 -207
  836. ads/text_dataset/options.py +0 -53
  837. ads/text_dataset/udfs.py +0 -22
  838. ads/text_dataset/utils.py +0 -49
  839. ads/type_discovery/__init__.py +0 -9
  840. ads/type_discovery/abstract_detector.py +0 -21
  841. ads/type_discovery/constant_detector.py +0 -41
  842. ads/type_discovery/continuous_detector.py +0 -54
  843. ads/type_discovery/credit_card_detector.py +0 -99
  844. ads/type_discovery/datetime_detector.py +0 -92
  845. ads/type_discovery/discrete_detector.py +0 -118
  846. ads/type_discovery/document_detector.py +0 -146
  847. ads/type_discovery/ip_detector.py +0 -68
  848. ads/type_discovery/latlon_detector.py +0 -90
  849. ads/type_discovery/phone_number_detector.py +0 -63
  850. ads/type_discovery/type_discovery_driver.py +0 -87
  851. ads/type_discovery/typed_feature.py +0 -594
  852. ads/type_discovery/unknown_detector.py +0 -41
  853. ads/type_discovery/zipcode_detector.py +0 -48
  854. ads/vault/__init__.py +0 -7
  855. ads/vault/vault.py +0 -237
  856. oracle_ads-2.13.8.dist-info/RECORD +0 -858
  857. {oracle_ads-2.13.8.dist-info → oracle_ads-2.13.9rc0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -1,1324 +0,0 @@
1
- #!/usr/bin/env python
2
- # Copyright (c) 2024, 2025 Oracle and/or its affiliates.
3
- # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
4
-
5
- import json
6
- import shlex
7
- from datetime import datetime, timedelta
8
- from typing import Dict, List, Optional, Union
9
-
10
- from cachetools import TTLCache, cached
11
- from oci.data_science.models import ModelDeploymentShapeSummary
12
- from pydantic import ValidationError
13
-
14
- from ads.aqua.app import AquaApp, logger
15
- from ads.aqua.common.entities import (
16
- AquaMultiModelRef,
17
- ComputeShapeSummary,
18
- ContainerPath,
19
- )
20
- from ads.aqua.common.enums import InferenceContainerTypeFamily, ModelFormat, Tags
21
- from ads.aqua.common.errors import AquaRuntimeError, AquaValueError
22
- from ads.aqua.common.utils import (
23
- DEFINED_METADATA_TO_FILE_MAP,
24
- build_params_string,
25
- build_pydantic_error_message,
26
- get_combined_params,
27
- get_container_params_type,
28
- get_model_by_reference_paths,
29
- get_ocid_substring,
30
- get_params_dict,
31
- get_params_list,
32
- get_resource_name,
33
- get_restricted_params_by_container,
34
- load_gpu_shapes_index,
35
- validate_cmd_var,
36
- )
37
- from ads.aqua.config.container_config import AquaContainerConfig, Usage
38
- from ads.aqua.constants import (
39
- AQUA_MODEL_ARTIFACT_FILE,
40
- AQUA_MODEL_TYPE_CUSTOM,
41
- AQUA_MODEL_TYPE_MULTI,
42
- AQUA_MODEL_TYPE_SERVICE,
43
- AQUA_MULTI_MODEL_CONFIG,
44
- MODEL_BY_REFERENCE_OSS_PATH_KEY,
45
- MODEL_NAME_DELIMITER,
46
- UNKNOWN_DICT,
47
- )
48
- from ads.aqua.data import AquaResourceIdentifier
49
- from ads.aqua.finetuning.finetuning import FineTuneCustomMetadata
50
- from ads.aqua.model import AquaModelApp
51
- from ads.aqua.model.constants import AquaModelMetadataKeys, ModelCustomMetadataFields
52
- from ads.aqua.modeldeployment.entities import (
53
- AquaDeployment,
54
- AquaDeploymentConfig,
55
- AquaDeploymentDetail,
56
- ConfigurationItem,
57
- ConfigValidationError,
58
- CreateModelDeploymentDetails,
59
- ModelDeploymentConfigSummary,
60
- )
61
- from ads.aqua.modeldeployment.utils import MultiModelDeploymentConfigLoader
62
- from ads.common.object_storage_details import ObjectStorageDetails
63
- from ads.common.utils import UNKNOWN, get_log_links
64
- from ads.config import (
65
- AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME,
66
- AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME,
67
- AQUA_DEPLOYMENT_CONTAINER_URI_METADATA_NAME,
68
- COMPARTMENT_OCID,
69
- PROJECT_OCID,
70
- )
71
- from ads.model.datascience_model import DataScienceModel
72
- from ads.model.deployment import (
73
- ModelDeployment,
74
- ModelDeploymentContainerRuntime,
75
- ModelDeploymentInfrastructure,
76
- ModelDeploymentMode,
77
- )
78
- from ads.model.model_metadata import ModelCustomMetadataItem
79
- from ads.telemetry import telemetry
80
-
81
-
82
- class AquaDeploymentApp(AquaApp):
83
- """Provides a suite of APIs to interact with Aqua model deployments within the Oracle
84
- Cloud Infrastructure Data Science service, serving as an interface for deploying
85
- machine learning models.
86
-
87
-
88
- Methods
89
- -------
90
- create(model_id: str, instance_shape: str, display_name: str,...) -> AquaDeployment
91
- Creates a model deployment for Aqua Model.
92
- get(model_deployment_id: str) -> AquaDeployment:
93
- Retrieves details of an Aqua model deployment by its unique identifier.
94
- list(**kwargs) -> List[AquaModelSummary]:
95
- Lists all Aqua deployments within a specified compartment and/or project.
96
- get_deployment_config(self, model_id: str) -> AquaDeploymentConfig:
97
- Gets the deployment config of given Aqua model.
98
- get_multimodel_deployment_config(self, model_ids: List[str],...) -> ModelDeploymentConfigSummary:
99
- Retrieves the deployment configuration for multiple Aqua models and calculates
100
- the GPU allocations for all compatible shapes.
101
- list_shapes(self, **kwargs) -> List[Dict]:
102
- Lists the valid model deployment shapes.
103
-
104
- Note:
105
- Use `ads aqua deployment <method_name> --help` to get more details on the parameters available.
106
- This class is designed to work within the Oracle Cloud Infrastructure
107
- and requires proper configuration and authentication set up to interact
108
- with OCI services.
109
- """
110
-
111
- @telemetry(entry_point="plugin=deployment&action=create", name="aqua")
112
- def create(
113
- self,
114
- create_deployment_details: Optional[CreateModelDeploymentDetails] = None,
115
- **kwargs,
116
- ) -> "AquaDeployment":
117
- """
118
- Creates a new Aqua model deployment.\n
119
- For detailed information about CLI flags see: https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/cli-tips.md#create-model-deployment
120
-
121
- Args:
122
- create_deployment_details : CreateModelDeploymentDetails, optional
123
- An instance of CreateModelDeploymentDetails containing all required and optional
124
- fields for creating a model deployment via Aqua.
125
- kwargs:
126
- instance_shape (str): The instance shape used for deployment.
127
- display_name (str): The name of the model deployment.
128
- compartment_id (Optional[str]): The compartment OCID.
129
- project_id (Optional[str]): The project OCID.
130
- description (Optional[str]): The description of the deployment.
131
- model_id (Optional[str]): The model OCID to deploy.
132
- models (Optional[List[AquaMultiModelRef]]): List of models for multimodel deployment.
133
- instance_count (int): Number of instances used for deployment.
134
- log_group_id (Optional[str]): OCI logging group ID for logs.
135
- access_log_id (Optional[str]): OCID for access logs.
136
- predict_log_id (Optional[str]): OCID for prediction logs.
137
- bandwidth_mbps (Optional[int]): Bandwidth limit on the load balancer in Mbps.
138
- web_concurrency (Optional[int]): Number of worker processes/threads for handling requests.
139
- server_port (Optional[int]): Server port for the Docker container image.
140
- health_check_port (Optional[int]): Health check port for the Docker container image.
141
- env_var (Optional[Dict[str, str]]): Environment variables for deployment.
142
- container_family (Optional[str]): Image family of the model deployment container runtime.
143
- memory_in_gbs (Optional[float]): Memory (in GB) for the selected shape.
144
- ocpus (Optional[float]): OCPU count for the selected shape.
145
- model_file (Optional[str]): File used for model deployment.
146
- private_endpoint_id (Optional[str]): Private endpoint ID for model deployment.
147
- container_image_uri (Optional[str]): Image URI for model deployment container runtime.
148
- cmd_var (Optional[List[str]]): Command variables for the container runtime.
149
- freeform_tags (Optional[Dict]): Freeform tags for model deployment.
150
- defined_tags (Optional[Dict]): Defined tags for model deployment.
151
-
152
- Returns
153
- -------
154
- AquaDeployment
155
- An Aqua deployment instance.
156
- """
157
- # Build deployment details from kwargs if not explicitly provided.
158
- if create_deployment_details is None:
159
- try:
160
- create_deployment_details = CreateModelDeploymentDetails(**kwargs)
161
- except ValidationError as ex:
162
- custom_errors = build_pydantic_error_message(ex)
163
- raise AquaValueError(
164
- f"Invalid parameters for creating a model deployment. Error details: {custom_errors}."
165
- ) from ex
166
-
167
- if not (create_deployment_details.model_id or create_deployment_details.models):
168
- raise AquaValueError(
169
- "Invalid parameters for creating a model deployment. Either `model_id` or `models` must be provided."
170
- )
171
-
172
- # Set defaults for compartment and project if not provided.
173
- compartment_id = create_deployment_details.compartment_id or COMPARTMENT_OCID
174
- project_id = create_deployment_details.project_id or PROJECT_OCID
175
- freeform_tags = create_deployment_details.freeform_tags
176
- defined_tags = create_deployment_details.defined_tags
177
-
178
- # validate instance shape availability in compartment
179
- available_shapes = [
180
- shape.name.lower()
181
- for shape in self.list_shapes(
182
- compartment_id=compartment_id
183
- )
184
- ]
185
-
186
- if create_deployment_details.instance_shape.lower() not in available_shapes:
187
- raise AquaValueError(
188
- f"Invalid Instance Shape. The selected shape '{create_deployment_details.instance_shape}' "
189
- f"is not available in the {self.region} region. Please choose another shape to deploy the model."
190
- )
191
-
192
- # Get container config
193
- container_config = self.get_container_config()
194
-
195
- # Create an AquaModelApp instance once to perform the deployment creation.
196
- model_app = AquaModelApp()
197
- if create_deployment_details.model_id:
198
- logger.debug(
199
- f"Single model ({create_deployment_details.model_id}) provided. "
200
- "Delegating to single model creation method."
201
- )
202
- aqua_model = model_app.create(
203
- model_id=create_deployment_details.model_id,
204
- compartment_id=compartment_id,
205
- project_id=project_id,
206
- freeform_tags=freeform_tags,
207
- defined_tags=defined_tags,
208
- )
209
- return self._create(
210
- aqua_model=aqua_model,
211
- create_deployment_details=create_deployment_details,
212
- container_config=container_config,
213
- )
214
- else:
215
- model_ids = [model.model_id for model in create_deployment_details.models]
216
- try:
217
- model_config_summary = self.get_multimodel_deployment_config(
218
- model_ids=model_ids, compartment_id=compartment_id
219
- )
220
- if not model_config_summary.gpu_allocation:
221
- raise AquaValueError(model_config_summary.error_message)
222
- create_deployment_details.validate_multimodel_deployment_feasibility(
223
- models_config_summary=model_config_summary
224
- )
225
- except ConfigValidationError as err:
226
- raise AquaValueError(f"{err}") from err
227
-
228
- service_inference_containers = container_config.inference.values()
229
-
230
- supported_container_families = [
231
- container_config_item.family
232
- for container_config_item in service_inference_containers
233
- if any(
234
- usage.upper() in container_config_item.usages
235
- for usage in [Usage.MULTI_MODEL, Usage.OTHER]
236
- )
237
- ]
238
-
239
- if not supported_container_families:
240
- raise AquaValueError(
241
- "Currently, there are no containers that support multi-model deployment."
242
- )
243
-
244
- # Check if provided container family supports multi-model deployment
245
- if (
246
- create_deployment_details.container_family
247
- and create_deployment_details.container_family
248
- not in supported_container_families
249
- ):
250
- raise AquaValueError(
251
- f"Unsupported deployment container '{create_deployment_details.container_family}'. "
252
- f"Only {supported_container_families} families are supported for multi-model deployments."
253
- )
254
-
255
- # Verify if it matches one of the registered containers and attempt to
256
- # extract the container family from there.
257
- # If the container is not recognized, we can only issue a warning that
258
- # the provided container may not support multi-model deployment.
259
- if create_deployment_details.container_image_uri:
260
- selected_container_name = ContainerPath(
261
- full_path=create_deployment_details.container_image_uri
262
- ).name
263
-
264
- container_config_item = next(
265
- (
266
- container_config_item
267
- for container_config_item in service_inference_containers
268
- if ContainerPath(
269
- full_path=f"{container_config_item.name}:{container_config_item.version}"
270
- ).name.upper()
271
- == selected_container_name.upper()
272
- ),
273
- None,
274
- )
275
-
276
- if (
277
- container_config_item
278
- and container_config_item.family not in supported_container_families
279
- ):
280
- raise AquaValueError(
281
- f"Unsupported deployment container '{create_deployment_details.container_image_uri}'. "
282
- f"Only {supported_container_families} families are supported for multi-model deployments."
283
- )
284
-
285
- if not container_config_item:
286
- logger.warning(
287
- f"The provided container `{create_deployment_details.container_image_uri}` may not support multi-model deployment. "
288
- f"Only the following container families are supported: {supported_container_families}."
289
- )
290
-
291
- logger.debug(
292
- f"Multi models ({model_ids}) provided. Delegating to multi model creation method."
293
- )
294
-
295
- aqua_model = model_app.create_multi(
296
- models=create_deployment_details.models,
297
- compartment_id=compartment_id,
298
- project_id=project_id,
299
- freeform_tags=freeform_tags,
300
- defined_tags=defined_tags,
301
- )
302
- return self._create_multi(
303
- aqua_model=aqua_model,
304
- model_config_summary=model_config_summary,
305
- create_deployment_details=create_deployment_details,
306
- container_config=container_config,
307
- )
308
-
309
- def _create(
310
- self,
311
- aqua_model: DataScienceModel,
312
- create_deployment_details: CreateModelDeploymentDetails,
313
- container_config: Dict,
314
- ) -> AquaDeployment:
315
- """Builds the configurations required by single model deployment and creates the deployment.
316
-
317
- Parameters
318
- ----------
319
- aqua_model : DataScienceModel
320
- An instance of Aqua data science model.
321
- create_deployment_details : CreateModelDeploymentDetails
322
- An instance of CreateModelDeploymentDetails containing all required and optional
323
- fields for creating a model deployment via Aqua.
324
- container_config: Dict
325
- Container config dictionary.
326
-
327
- Returns
328
- -------
329
- AquaDeployment
330
- An Aqua deployment instance.
331
- """
332
- tags = {}
333
- for tag in [
334
- Tags.AQUA_SERVICE_MODEL_TAG,
335
- Tags.AQUA_FINE_TUNED_MODEL_TAG,
336
- Tags.AQUA_TAG,
337
- ]:
338
- if tag in aqua_model.freeform_tags:
339
- tags[tag] = aqua_model.freeform_tags[tag]
340
-
341
- tags.update({Tags.AQUA_MODEL_NAME_TAG: aqua_model.display_name})
342
- tags.update({Tags.TASK: aqua_model.freeform_tags.get(Tags.TASK, UNKNOWN)})
343
-
344
- # Set up info to get deployment config
345
- config_source_id = create_deployment_details.model_id
346
- model_name = aqua_model.display_name
347
-
348
- is_fine_tuned_model = Tags.AQUA_FINE_TUNED_MODEL_TAG in aqua_model.freeform_tags
349
-
350
- if is_fine_tuned_model:
351
- try:
352
- config_source_id = aqua_model.custom_metadata_list.get(
353
- FineTuneCustomMetadata.FINE_TUNE_SOURCE
354
- ).value
355
- model_name = aqua_model.custom_metadata_list.get(
356
- FineTuneCustomMetadata.FINE_TUNE_SOURCE_NAME
357
- ).value
358
- except ValueError as err:
359
- raise AquaValueError(
360
- f"Either {FineTuneCustomMetadata.FINE_TUNE_SOURCE} or {FineTuneCustomMetadata.FINE_TUNE_SOURCE_NAME} is missing "
361
- f"from custom metadata for the model {config_source_id}"
362
- ) from err
363
-
364
- # set up env and cmd var
365
- env_var = create_deployment_details.env_var or {}
366
- cmd_var = create_deployment_details.cmd_var or []
367
-
368
- try:
369
- model_path_prefix = aqua_model.custom_metadata_list.get(
370
- MODEL_BY_REFERENCE_OSS_PATH_KEY
371
- ).value.rstrip("/")
372
- except ValueError as err:
373
- raise AquaValueError(
374
- f"{MODEL_BY_REFERENCE_OSS_PATH_KEY} key is not available in the custom metadata field."
375
- ) from err
376
-
377
- if ObjectStorageDetails.is_oci_path(model_path_prefix):
378
- os_path = ObjectStorageDetails.from_path(model_path_prefix)
379
- model_path_prefix = os_path.filepath.rstrip("/")
380
-
381
- env_var.update({"BASE_MODEL": f"{model_path_prefix}"})
382
-
383
- if is_fine_tuned_model:
384
- _, fine_tune_output_path = get_model_by_reference_paths(
385
- aqua_model.model_file_description
386
- )
387
-
388
- if not fine_tune_output_path:
389
- raise AquaValueError(
390
- "Fine tuned output path is not available in the model artifact."
391
- )
392
-
393
- os_path = ObjectStorageDetails.from_path(fine_tune_output_path)
394
- fine_tune_output_path = os_path.filepath.rstrip("/")
395
-
396
- env_var.update({"FT_MODEL": f"{fine_tune_output_path}"})
397
-
398
- container_type_key = self._get_container_type_key(
399
- model=aqua_model,
400
- container_family=create_deployment_details.container_family,
401
- )
402
-
403
- container_image_uri = (
404
- create_deployment_details.container_image_uri
405
- or self.get_container_image(container_type=container_type_key)
406
- )
407
- if not container_image_uri:
408
- try:
409
- container_image_uri = aqua_model.custom_metadata_list.get(
410
- AQUA_DEPLOYMENT_CONTAINER_URI_METADATA_NAME
411
- ).value
412
- except ValueError as err:
413
- raise AquaValueError(
414
- f"{AQUA_DEPLOYMENT_CONTAINER_URI_METADATA_NAME} key is not available in the custom metadata "
415
- f"field. Either re-register the model with custom container URI, or set container_image_uri "
416
- f"parameter when creating this deployment."
417
- ) from err
418
- logger.info(
419
- f"Aqua Image used for deploying {aqua_model.id} : {container_image_uri}"
420
- )
421
-
422
- try:
423
- cmd_var_string = aqua_model.custom_metadata_list.get(
424
- AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME
425
- ).value
426
- default_cmd_var = shlex.split(cmd_var_string)
427
- if default_cmd_var:
428
- cmd_var = validate_cmd_var(default_cmd_var, cmd_var)
429
- logger.info(f"CMD used for deploying {aqua_model.id} :{cmd_var}")
430
- except ValueError:
431
- logger.debug(
432
- f"CMD will be ignored for this deployment as {AQUA_DEPLOYMENT_CONTAINER_CMD_VAR_METADATA_NAME} "
433
- f"key is not available in the custom metadata field for this model."
434
- )
435
- except Exception as e:
436
- logger.error(
437
- f"There was an issue processing CMD arguments. Error: {str(e)}"
438
- )
439
-
440
- model_formats_str = aqua_model.freeform_tags.get(
441
- Tags.MODEL_FORMAT, ModelFormat.SAFETENSORS
442
- ).upper()
443
- model_format = model_formats_str.split(",")
444
-
445
- # Figure out a better way to handle this in future release
446
- if (
447
- ModelFormat.GGUF in model_format
448
- and container_type_key.lower()
449
- == InferenceContainerTypeFamily.AQUA_LLAMA_CPP_CONTAINER_FAMILY
450
- ):
451
- model_file = create_deployment_details.model_file
452
- if model_file is not None:
453
- logger.info(
454
- f"Overriding {model_file} as model_file for model {aqua_model.id}."
455
- )
456
- else:
457
- try:
458
- model_file = aqua_model.custom_metadata_list.get(
459
- AQUA_MODEL_ARTIFACT_FILE
460
- ).value
461
- except ValueError as err:
462
- raise AquaValueError(
463
- f"{AQUA_MODEL_ARTIFACT_FILE} key is not available in the custom metadata field "
464
- f"for model {aqua_model.id}. Either register the model with a default model_file or pass "
465
- f"as a parameter when creating a deployment."
466
- ) from err
467
-
468
- env_var.update({"BASE_MODEL_FILE": f"{model_file}"})
469
- tags.update({Tags.MODEL_ARTIFACT_FILE: model_file})
470
-
471
- # Fetch the startup cli command for the container
472
- # container_index.json will have "containerSpec" section which will provide the cli params for
473
- # a given container family
474
- container_config = self.get_container_config_item(container_type_key)
475
-
476
- container_spec = container_config.spec if container_config else UNKNOWN
477
- # these params cannot be overridden for Aqua deployments
478
- params = container_spec.cli_param if container_spec else UNKNOWN
479
- server_port = create_deployment_details.server_port or (
480
- container_spec.server_port if container_spec else None
481
- )
482
- # Give precendece to the input parameter
483
- health_check_port = create_deployment_details.health_check_port or (
484
- container_spec.health_check_port if container_spec else None
485
- )
486
-
487
- deployment_config = self.get_deployment_config(model_id=config_source_id)
488
-
489
- config_params = deployment_config.configuration.get(
490
- create_deployment_details.instance_shape, ConfigurationItem()
491
- ).parameters.get(get_container_params_type(container_type_key), UNKNOWN)
492
-
493
- # validate user provided params
494
- user_params = env_var.get("PARAMS", UNKNOWN)
495
- if user_params:
496
- # todo: remove this check in the future version, logic to be moved to container_index
497
- if (
498
- container_type_key.lower()
499
- == InferenceContainerTypeFamily.AQUA_LLAMA_CPP_CONTAINER_FAMILY
500
- ):
501
- # AQUA_LLAMA_CPP_CONTAINER_FAMILY container uses uvicorn that required model/server params
502
- # to be set as env vars
503
- raise AquaValueError(
504
- f"Currently, parameters cannot be overridden for the container: {container_image_uri}. Please proceed "
505
- f"with deployment without parameter overrides."
506
- )
507
-
508
- restricted_params = self._find_restricted_params(
509
- params, user_params, container_type_key
510
- )
511
- if restricted_params:
512
- raise AquaValueError(
513
- f"Parameters {restricted_params} are set by Aqua "
514
- f"and cannot be overridden or are invalid."
515
- )
516
-
517
- deployment_params = get_combined_params(config_params, user_params)
518
-
519
- params = f"{params} {deployment_params}".strip()
520
- if params:
521
- env_var.update({"PARAMS": params})
522
- env_vars = container_spec.env_vars if container_spec else []
523
- for env in env_vars:
524
- if isinstance(env, dict):
525
- env = {k: v for k, v in env.items() if v}
526
- for key, _ in env.items():
527
- if key not in env_var:
528
- env_var.update(env)
529
-
530
- logger.info(f"Env vars used for deploying {aqua_model.id} :{env_var}")
531
-
532
- tags = {**tags, **(create_deployment_details.freeform_tags or {})}
533
- model_type = (
534
- AQUA_MODEL_TYPE_CUSTOM if is_fine_tuned_model else AQUA_MODEL_TYPE_SERVICE
535
- )
536
-
537
- return self._create_deployment(
538
- create_deployment_details=create_deployment_details,
539
- aqua_model_id=aqua_model.id,
540
- model_name=model_name,
541
- model_type=model_type,
542
- container_image_uri=container_image_uri,
543
- server_port=server_port,
544
- health_check_port=health_check_port,
545
- env_var=env_var,
546
- tags=tags,
547
- cmd_var=cmd_var,
548
- )
549
-
550
- def _create_multi(
551
- self,
552
- aqua_model: DataScienceModel,
553
- model_config_summary: ModelDeploymentConfigSummary,
554
- create_deployment_details: CreateModelDeploymentDetails,
555
- container_config: AquaContainerConfig,
556
- ) -> AquaDeployment:
557
- """Builds the environment variables required by multi deployment container and creates the deployment.
558
-
559
- Parameters
560
- ----------
561
- model_config_summary : model_config_summary
562
- Summary Model Deployment configuration for the group of models.
563
- aqua_model : DataScienceModel
564
- An instance of Aqua data science model.
565
- create_deployment_details : CreateModelDeploymentDetails
566
- An instance of CreateModelDeploymentDetails containing all required and optional
567
- fields for creating a model deployment via Aqua.
568
- container_config: Dict
569
- Container config dictionary.
570
- Returns
571
- -------
572
- AquaDeployment
573
- An Aqua deployment instance.
574
- """
575
- model_config = []
576
- model_name_list = []
577
- env_var = {**(create_deployment_details.env_var or UNKNOWN_DICT)}
578
-
579
- container_type_key = self._get_container_type_key(
580
- model=aqua_model,
581
- container_family=create_deployment_details.container_family,
582
- )
583
- container_config = self.get_container_config_item(container_type_key)
584
- container_spec = container_config.spec if container_config else UNKNOWN
585
-
586
- container_params = container_spec.cli_param if container_spec else UNKNOWN
587
-
588
- for model in create_deployment_details.models:
589
- user_params = build_params_string(model.env_var)
590
- if user_params:
591
- restricted_params = self._find_restricted_params(
592
- container_params, user_params, container_type_key
593
- )
594
- if restricted_params:
595
- selected_model = model.model_name or model.model_id
596
- raise AquaValueError(
597
- f"Parameters {restricted_params} are set by Aqua "
598
- f"and cannot be overridden or are invalid."
599
- f"Select other parameters for model {selected_model}."
600
- )
601
-
602
- # replaces `--served-model-name`` with user's model name
603
- container_params_dict = get_params_dict(container_params)
604
- container_params_dict.update({"--served-model-name": model.model_name})
605
- # replaces `--tensor-parallel-size` with model gpu count
606
- container_params_dict.update({"--tensor-parallel-size": model.gpu_count})
607
- params = build_params_string(container_params_dict)
608
-
609
- deployment_config = model_config_summary.deployment_config.get(
610
- model.model_id, AquaDeploymentConfig()
611
- ).configuration.get(
612
- create_deployment_details.instance_shape, ConfigurationItem()
613
- )
614
-
615
- # finds the corresponding deployment parameters based on the gpu count
616
- # and combines them with user's parameters. Existing deployment parameters
617
- # will be overriden by user's parameters.
618
- params_found = False
619
- for item in deployment_config.multi_model_deployment:
620
- if (
621
- model.gpu_count
622
- and item.gpu_count
623
- and item.gpu_count == model.gpu_count
624
- ):
625
- config_parameters = item.parameters.get(
626
- get_container_params_type(container_type_key), UNKNOWN
627
- )
628
- params = f"{params} {get_combined_params(config_parameters, user_params)}".strip()
629
- params_found = True
630
- break
631
-
632
- if not params_found and deployment_config.parameters:
633
- config_parameters = deployment_config.parameters.get(
634
- get_container_params_type(container_type_key), UNKNOWN
635
- )
636
- params = f"{params} {get_combined_params(config_parameters, user_params)}".strip()
637
- params_found = True
638
-
639
- # if no config parameters found, append user parameters directly.
640
- if not params_found:
641
- params = f"{params} {user_params}".strip()
642
-
643
- artifact_path_prefix = model.artifact_location.rstrip("/")
644
- if ObjectStorageDetails.is_oci_path(artifact_path_prefix):
645
- os_path = ObjectStorageDetails.from_path(artifact_path_prefix)
646
- artifact_path_prefix = os_path.filepath.rstrip("/")
647
-
648
- model_config.append({"params": params, "model_path": artifact_path_prefix})
649
- model_name_list.append(model.model_name)
650
-
651
- env_var.update({AQUA_MULTI_MODEL_CONFIG: json.dumps({"models": model_config})})
652
-
653
- env_vars = container_spec.env_vars if container_spec else []
654
- for env in env_vars:
655
- if isinstance(env, dict):
656
- env = {k: v for k, v in env.items() if v}
657
- for key, _ in env.items():
658
- if key not in env_var:
659
- env_var.update(env)
660
-
661
- logger.info(f"Env vars used for deploying {aqua_model.id} : {env_var}.")
662
-
663
- container_image_uri = (
664
- create_deployment_details.container_image_uri
665
- or self.get_container_image(container_type=container_type_key)
666
- )
667
- server_port = create_deployment_details.server_port or (
668
- container_spec.server_port if container_spec else None
669
- )
670
- health_check_port = create_deployment_details.health_check_port or (
671
- container_spec.health_check_port if container_spec else None
672
- )
673
- tags = {
674
- Tags.AQUA_MODEL_ID_TAG: aqua_model.id,
675
- Tags.MULTIMODEL_TYPE_TAG: "true",
676
- Tags.AQUA_TAG: "active",
677
- **(create_deployment_details.freeform_tags or UNKNOWN_DICT),
678
- }
679
-
680
- model_name = f"{MODEL_NAME_DELIMITER} ".join(model_name_list)
681
-
682
- aqua_deployment = self._create_deployment(
683
- create_deployment_details=create_deployment_details,
684
- aqua_model_id=aqua_model.id,
685
- model_name=model_name,
686
- model_type=AQUA_MODEL_TYPE_MULTI,
687
- container_image_uri=container_image_uri,
688
- server_port=server_port,
689
- health_check_port=health_check_port,
690
- env_var=env_var,
691
- tags=tags,
692
- )
693
- aqua_deployment.models = create_deployment_details.models
694
- return aqua_deployment
695
-
696
- def _create_deployment(
697
- self,
698
- create_deployment_details: CreateModelDeploymentDetails,
699
- aqua_model_id: str,
700
- model_name: str,
701
- model_type: str,
702
- container_image_uri: str,
703
- server_port: str,
704
- health_check_port: str,
705
- env_var: dict,
706
- tags: dict,
707
- cmd_var: Optional[dict] = None,
708
- ):
709
- """Creates data science model deployment.
710
-
711
- Parameters
712
- ----------
713
- create_deployment_details : CreateModelDeploymentDetails
714
- An instance of CreateModelDeploymentDetails containing all required and optional
715
- fields for creating a model deployment via Aqua.
716
- aqua_model_id: str
717
- The id of the aqua model to be deployed.
718
- model_name: str
719
- The name of the aqua model to be deployed. If it's multi model deployment, it is a list of model names.
720
- model_type: str
721
- The type of aqua model to be deployed. Allowed values are: `custom`, `service` and `multi_model`.
722
- container_image_uri: str
723
- The container image uri to deploy the model.
724
- server_port: str
725
- The service port of the container image.
726
- health_check_port: str
727
- The health check port of the container image.
728
- env_var: dict
729
- The environment variables input for the deployment.
730
- tags: dict
731
- The tags input for the deployment.
732
- cmd_var: dict, optional
733
- The cmd arguments input for the deployment.
734
-
735
- Returns
736
- -------
737
- AquaDeployment
738
- An Aqua deployment instance.
739
- """
740
- # Start model deployment
741
- # configure model deployment infrastructure
742
- infrastructure = (
743
- ModelDeploymentInfrastructure()
744
- .with_project_id(create_deployment_details.project_id or PROJECT_OCID)
745
- .with_compartment_id(
746
- create_deployment_details.compartment_id or COMPARTMENT_OCID
747
- )
748
- .with_shape_name(create_deployment_details.instance_shape)
749
- .with_bandwidth_mbps(create_deployment_details.bandwidth_mbps)
750
- .with_replica(create_deployment_details.instance_count)
751
- .with_web_concurrency(create_deployment_details.web_concurrency)
752
- .with_private_endpoint_id(create_deployment_details.private_endpoint_id)
753
- .with_access_log(
754
- log_group_id=create_deployment_details.log_group_id,
755
- log_id=create_deployment_details.access_log_id,
756
- )
757
- .with_predict_log(
758
- log_group_id=create_deployment_details.log_group_id,
759
- log_id=create_deployment_details.predict_log_id,
760
- )
761
- )
762
- if (
763
- create_deployment_details.memory_in_gbs
764
- and create_deployment_details.ocpus
765
- and infrastructure.shape_name.endswith("Flex")
766
- ):
767
- infrastructure.with_shape_config_details(
768
- ocpus=create_deployment_details.ocpus,
769
- memory_in_gbs=create_deployment_details.memory_in_gbs,
770
- )
771
- # configure model deployment runtime
772
- container_runtime = (
773
- ModelDeploymentContainerRuntime()
774
- .with_image(container_image_uri)
775
- .with_server_port(server_port)
776
- .with_health_check_port(health_check_port)
777
- .with_env(env_var)
778
- .with_deployment_mode(ModelDeploymentMode.HTTPS)
779
- .with_model_uri(aqua_model_id)
780
- .with_region(self.region)
781
- .with_overwrite_existing_artifact(True)
782
- .with_remove_existing_artifact(True)
783
- )
784
- if cmd_var:
785
- container_runtime.with_cmd(cmd_var)
786
-
787
- # configure model deployment and deploy model on container runtime
788
- deployment = (
789
- ModelDeployment()
790
- .with_display_name(create_deployment_details.display_name)
791
- .with_description(create_deployment_details.description)
792
- .with_freeform_tags(**tags)
793
- .with_defined_tags(**(create_deployment_details.defined_tags or {}))
794
- .with_infrastructure(infrastructure)
795
- .with_runtime(container_runtime)
796
- ).deploy(wait_for_completion=False)
797
-
798
- deployment_id = deployment.id
799
- logger.info(
800
- f"Aqua model deployment {deployment_id} created for model {aqua_model_id}."
801
- )
802
-
803
- # we arbitrarily choose last 8 characters of OCID to identify MD in telemetry
804
- telemetry_kwargs = {"ocid": get_ocid_substring(deployment_id, key_len=8)}
805
-
806
- # tracks unique deployments that were created in the user compartment
807
- self.telemetry.record_event_async(
808
- category=f"aqua/{model_type}/deployment",
809
- action="create",
810
- detail=model_name,
811
- **telemetry_kwargs,
812
- )
813
- # tracks the shape used for deploying the custom or service models by name
814
- self.telemetry.record_event_async(
815
- category=f"aqua/{model_type}/deployment/create",
816
- action="shape",
817
- detail=create_deployment_details.instance_shape,
818
- value=model_name,
819
- )
820
-
821
- return AquaDeployment.from_oci_model_deployment(
822
- deployment.dsc_model_deployment, self.region
823
- )
824
-
825
- @staticmethod
826
- def _get_container_type_key(model: DataScienceModel, container_family: str) -> str:
827
- container_type_key = UNKNOWN
828
- if container_family:
829
- container_type_key = container_family
830
- else:
831
- try:
832
- container_type_key = model.custom_metadata_list.get(
833
- AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME
834
- ).value
835
- except ValueError as err:
836
- raise AquaValueError(
837
- f"{AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME} key is not available in the custom metadata field "
838
- f"for model {model.id}. For unverified Aqua models, {AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME} should be"
839
- f"set and value can be one of {', '.join(InferenceContainerTypeFamily.values())}."
840
- ) from err
841
-
842
- return container_type_key
843
-
844
- @telemetry(entry_point="plugin=deployment&action=list", name="aqua")
845
- def list(self, **kwargs) -> List["AquaDeployment"]:
846
- """List Aqua model deployments in a given compartment and under certain project.
847
-
848
- Parameters
849
- ----------
850
- kwargs
851
- Keyword arguments, such as compartment_id and project_id,
852
- for `list_call_get_all_results <https://docs.oracle.com/en-us/iaas/tools/python/2.118.1/api/pagination.html#oci.pagination.list_call_get_all_results>`_
853
-
854
- Returns
855
- -------
856
- List[AquaDeployment]:
857
- The list of the Aqua model deployments.
858
- """
859
- compartment_id = kwargs.pop("compartment_id", COMPARTMENT_OCID)
860
-
861
- model_deployments = self.list_resource(
862
- self.ds_client.list_model_deployments,
863
- compartment_id=compartment_id,
864
- **kwargs,
865
- )
866
-
867
- results = []
868
- for model_deployment in model_deployments:
869
- oci_aqua = (
870
- (
871
- Tags.AQUA_TAG in model_deployment.freeform_tags
872
- or Tags.AQUA_TAG.lower() in model_deployment.freeform_tags
873
- )
874
- if model_deployment.freeform_tags
875
- else False
876
- )
877
-
878
- if oci_aqua:
879
- results.append(
880
- AquaDeployment.from_oci_model_deployment(
881
- model_deployment, self.region
882
- )
883
- )
884
-
885
- # log telemetry if MD is in active or failed state
886
- deployment_id = model_deployment.id
887
- state = model_deployment.lifecycle_state.upper()
888
- if state in ["ACTIVE", "FAILED"]:
889
- # tracks unique deployments that were listed in the user compartment
890
- # we arbitrarily choose last 8 characters of OCID to identify MD in telemetry
891
- self.telemetry.record_event_async(
892
- category="aqua/deployment",
893
- action="list",
894
- detail=get_ocid_substring(deployment_id, key_len=8),
895
- value=state,
896
- )
897
-
898
- logger.info(
899
- f"Fetched {len(results)} model deployments from compartment_id={compartment_id}."
900
- )
901
- # tracks number of times deployment listing was called
902
- self.telemetry.record_event_async(category="aqua/deployment", action="list")
903
-
904
- return results
905
-
906
- @telemetry(entry_point="plugin=deployment&action=delete", name="aqua")
907
- def delete(self, model_deployment_id: str):
908
- logger.info(f"Deleting model deployment {model_deployment_id}.")
909
- return self.ds_client.delete_model_deployment(
910
- model_deployment_id=model_deployment_id
911
- ).data
912
-
913
- @telemetry(entry_point="plugin=deployment&action=deactivate", name="aqua")
914
- def deactivate(self, model_deployment_id: str):
915
- logger.info(f"Deactivating model deployment {model_deployment_id}.")
916
- return self.ds_client.deactivate_model_deployment(
917
- model_deployment_id=model_deployment_id
918
- ).data
919
-
920
- @telemetry(entry_point="plugin=deployment&action=activate", name="aqua")
921
- def activate(self, model_deployment_id: str):
922
- logger.info(f"Activating model deployment {model_deployment_id}.")
923
- return self.ds_client.activate_model_deployment(
924
- model_deployment_id=model_deployment_id
925
- ).data
926
-
927
- @telemetry(entry_point="plugin=deployment&action=get", name="aqua")
928
- def get(self, model_deployment_id: str, **kwargs) -> "AquaDeploymentDetail":
929
- """Gets the information of Aqua model deployment.
930
-
931
- Parameters
932
- ----------
933
- model_deployment_id: str
934
- The OCID of the Aqua model deployment.
935
- kwargs
936
- Keyword arguments, for `get_model_deployment
937
- <https://docs.oracle.com/en-us/iaas/tools/python/2.119.1/api/data_science/client/oci.data_science.DataScienceClient.html#oci.data_science.DataScienceClient.get_model_deployment>`_
938
-
939
- Returns
940
- -------
941
- AquaDeploymentDetail:
942
- The instance of the Aqua model deployment details.
943
- """
944
- logger.info(f"Fetching model deployment details for {model_deployment_id}.")
945
-
946
- model_deployment = self.ds_client.get_model_deployment(
947
- model_deployment_id=model_deployment_id, **kwargs
948
- ).data
949
-
950
- oci_aqua = (
951
- (
952
- Tags.AQUA_TAG in model_deployment.freeform_tags
953
- or Tags.AQUA_TAG.lower() in model_deployment.freeform_tags
954
- )
955
- if model_deployment.freeform_tags
956
- else False
957
- )
958
-
959
- if not oci_aqua:
960
- raise AquaRuntimeError(
961
- f"Target deployment {model_deployment_id} is not Aqua deployment as it does not contain "
962
- f"{Tags.AQUA_TAG} tag."
963
- )
964
-
965
- log_id = ""
966
- log_group_id = ""
967
- log_name = ""
968
- log_group_name = ""
969
-
970
- logs = (
971
- model_deployment.category_log_details.access
972
- or model_deployment.category_log_details.predict
973
- )
974
- if logs:
975
- log_id = logs.log_id
976
- log_group_id = logs.log_group_id
977
- if log_id:
978
- log_name = get_resource_name(log_id)
979
- if log_group_id:
980
- log_group_name = get_resource_name(log_group_id)
981
-
982
- log_group_url = get_log_links(region=self.region, log_group_id=log_group_id)
983
- log_url = get_log_links(
984
- region=self.region,
985
- log_group_id=log_group_id,
986
- log_id=log_id,
987
- compartment_id=model_deployment.compartment_id,
988
- source_id=model_deployment.id,
989
- )
990
-
991
- aqua_deployment = AquaDeployment.from_oci_model_deployment(
992
- model_deployment, self.region
993
- )
994
-
995
- if Tags.MULTIMODEL_TYPE_TAG in model_deployment.freeform_tags:
996
- aqua_model_id = model_deployment.freeform_tags.get(
997
- Tags.AQUA_MODEL_ID_TAG, UNKNOWN
998
- )
999
- if not aqua_model_id:
1000
- raise AquaRuntimeError(
1001
- f"Invalid multi model deployment {model_deployment_id}."
1002
- f"Make sure the {Tags.AQUA_MODEL_ID_TAG} tag is added to the deployment."
1003
- )
1004
- aqua_model = DataScienceModel.from_id(aqua_model_id)
1005
- custom_metadata_list = aqua_model.custom_metadata_list
1006
- multi_model_metadata_value = custom_metadata_list.get(
1007
- ModelCustomMetadataFields.MULTIMODEL_METADATA,
1008
- ModelCustomMetadataItem(
1009
- key=ModelCustomMetadataFields.MULTIMODEL_METADATA
1010
- ),
1011
- ).value
1012
- if not multi_model_metadata_value:
1013
- raise AquaRuntimeError(
1014
- f"Invalid multi-model deployment: {model_deployment_id}. "
1015
- f"Ensure that the required custom metadata `{ModelCustomMetadataFields.MULTIMODEL_METADATA}` is added to the AQUA multi-model `{aqua_model.display_name}` ({aqua_model.id})."
1016
- )
1017
- multi_model_metadata = json.loads(
1018
- aqua_model.dsc_model.get_custom_metadata_artifact(
1019
- metadata_key_name=ModelCustomMetadataFields.MULTIMODEL_METADATA
1020
- ).decode("utf-8")
1021
- )
1022
- aqua_deployment.models = [
1023
- AquaMultiModelRef(**metadata) for metadata in multi_model_metadata
1024
- ]
1025
-
1026
- return AquaDeploymentDetail(
1027
- **vars(aqua_deployment),
1028
- log_group=AquaResourceIdentifier(
1029
- log_group_id, log_group_name, log_group_url
1030
- ),
1031
- log=AquaResourceIdentifier(log_id, log_name, log_url),
1032
- )
1033
-
1034
- @telemetry(
1035
- entry_point="plugin=deployment&action=get_deployment_config", name="aqua"
1036
- )
1037
- def get_deployment_config(self, model_id: str) -> AquaDeploymentConfig:
1038
- """Gets the deployment config of given Aqua model.
1039
-
1040
- Parameters
1041
- ----------
1042
- model_id: str
1043
- The OCID of the Aqua model.
1044
-
1045
- Returns
1046
- -------
1047
- AquaDeploymentConfig:
1048
- An instance of AquaDeploymentConfig.
1049
- """
1050
- config = self.get_config_from_metadata(
1051
- model_id, AquaModelMetadataKeys.DEPLOYMENT_CONFIGURATION
1052
- ).config
1053
- if config:
1054
- logger.info(
1055
- f"Fetched {AquaModelMetadataKeys.DEPLOYMENT_CONFIGURATION} from defined metadata for model: {model_id}."
1056
- )
1057
- return AquaDeploymentConfig(**(config or UNKNOWN_DICT))
1058
- config = self.get_config(
1059
- model_id,
1060
- DEFINED_METADATA_TO_FILE_MAP.get(
1061
- AquaModelMetadataKeys.DEPLOYMENT_CONFIGURATION.lower()
1062
- ),
1063
- ).config
1064
- if not config:
1065
- logger.debug(
1066
- f"Deployment config for custom model: {model_id} is not available. Use defaults."
1067
- )
1068
- return AquaDeploymentConfig(**(config or UNKNOWN_DICT))
1069
-
1070
- @telemetry(
1071
- entry_point="plugin=deployment&action=get_multimodel_deployment_config",
1072
- name="aqua",
1073
- )
1074
- def get_multimodel_deployment_config(
1075
- self,
1076
- model_ids: List[str],
1077
- primary_model_id: Optional[str] = None,
1078
- **kwargs: Dict,
1079
- ) -> ModelDeploymentConfigSummary:
1080
- """
1081
- Retrieves the deployment configuration for multiple models and calculates
1082
- GPU allocations across all compatible shapes.
1083
-
1084
- More details:
1085
- https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/multimodel-deployment-tips.md#get_multimodel_deployment_config
1086
-
1087
- CLI example:
1088
- ads aqua deployment get_multimodel_deployment_config --model_ids '["md_ocid1","md_ocid2"]'
1089
-
1090
- If a primary model ID is provided, GPU allocation will prioritize that model
1091
- when selecting compatible shapes.
1092
-
1093
- Example:
1094
- Assume all three models: A, B, and C, support the same shape: "BM.GPU.H100.8" and each supports the following GPU counts for that shape: 1, 2, 4, 8.
1095
- If `no` primary model is specified, valid allocations could be: [2, 4, 2], [2, 2, 4], or [4, 2, 2]
1096
- If `B` is set as the primary model, the allocation will be: [2, 4, 2], where B receives the maximum available GPU count
1097
-
1098
- Parameters
1099
- ----------
1100
- model_ids : List[str]
1101
- A list of OCIDs for the Aqua models.
1102
- primary_model_id : Optional[str]
1103
- The OCID of the primary Aqua model. If provided, GPU allocation will prioritize
1104
- this model. Otherwise, GPUs will be evenly allocated.
1105
- **kwargs: Dict
1106
- - compartment_id: str
1107
- The compartment OCID to retrieve the model deployment shapes.
1108
-
1109
- Returns
1110
- -------
1111
- ModelDeploymentConfigSummary
1112
- A summary of the model deployment configurations and GPU allocations.
1113
- """
1114
- if not model_ids:
1115
- raise AquaValueError(
1116
- "Model IDs were not provided. Please provide a valid list of model IDs to retrieve the multi-model deployment configuration."
1117
- )
1118
-
1119
- compartment_id = kwargs.pop("compartment_id", COMPARTMENT_OCID)
1120
-
1121
- # Get the all model deployment available shapes in a given compartment
1122
- available_shapes = self.list_shapes(compartment_id=compartment_id)
1123
-
1124
- return MultiModelDeploymentConfigLoader(
1125
- deployment_app=self,
1126
- ).load(
1127
- shapes=available_shapes,
1128
- model_ids=model_ids,
1129
- primary_model_id=primary_model_id,
1130
- )
1131
-
1132
- def get_deployment_default_params(
1133
- self,
1134
- model_id: str,
1135
- instance_shape: str,
1136
- gpu_count: int = None,
1137
- ) -> List[str]:
1138
- """Gets the default params set in the deployment configs for the given model and instance shape.
1139
-
1140
- Parameters
1141
- ----------
1142
- model_id: str
1143
- The OCID of the Aqua model.
1144
-
1145
- instance_shape: (str).
1146
- The shape of the instance used for deployment.
1147
-
1148
- gpu_count: (int, optional).
1149
- The number of GPUs used by the Aqua model. Defaults to None.
1150
-
1151
- Returns
1152
- -------
1153
- List[str]:
1154
- List of parameters from the loaded from deployment config json file. If not available, then an empty list
1155
- is returned.
1156
-
1157
- """
1158
- default_params = []
1159
- config_params = {}
1160
- model = DataScienceModel.from_id(model_id)
1161
- try:
1162
- container_type_key = model.custom_metadata_list.get(
1163
- AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME
1164
- ).value
1165
- except ValueError:
1166
- container_type_key = UNKNOWN
1167
- logger.debug(
1168
- f"{AQUA_DEPLOYMENT_CONTAINER_METADATA_NAME} key is not available in the custom metadata field for model {model_id}."
1169
- )
1170
-
1171
- if (
1172
- container_type_key
1173
- and container_type_key in InferenceContainerTypeFamily.values()
1174
- ):
1175
- deployment_config = self.get_deployment_config(model_id)
1176
-
1177
- instance_shape_config = deployment_config.configuration.get(
1178
- instance_shape, ConfigurationItem()
1179
- )
1180
-
1181
- if instance_shape_config.multi_model_deployment and gpu_count:
1182
- gpu_params = instance_shape_config.multi_model_deployment
1183
-
1184
- for gpu_config in gpu_params:
1185
- if gpu_config.gpu_count == gpu_count:
1186
- config_params = gpu_config.parameters.get(
1187
- get_container_params_type(container_type_key), UNKNOWN
1188
- )
1189
- break
1190
-
1191
- else:
1192
- config_params = instance_shape_config.parameters.get(
1193
- get_container_params_type(container_type_key), UNKNOWN
1194
- )
1195
-
1196
- if config_params:
1197
- params_list = get_params_list(config_params)
1198
- restricted_params_set = get_restricted_params_by_container(
1199
- container_type_key
1200
- )
1201
-
1202
- # remove restricted params from the list as user cannot override them during deployment
1203
- for params in params_list:
1204
- if params.split()[0] not in restricted_params_set:
1205
- default_params.append(params)
1206
-
1207
- return default_params
1208
-
1209
- def validate_deployment_params(
1210
- self,
1211
- model_id: str,
1212
- params: List[str] = None,
1213
- container_family: str = None,
1214
- ) -> Dict:
1215
- """Validate if the deployment parameters passed by the user can be overridden. Parameter values are not
1216
- validated, only param keys are validated.
1217
-
1218
- Parameters
1219
- ----------
1220
- model_id: str
1221
- The OCID of the Aqua model.
1222
- params : List[str], optional
1223
- Params passed by the user.
1224
- container_family: str
1225
- The image family of model deployment container runtime. Required for unverified Aqua models.
1226
-
1227
- Returns
1228
- -------
1229
- Return a list of restricted params.
1230
-
1231
- """
1232
- restricted_params = []
1233
- if params:
1234
- model = DataScienceModel.from_id(model_id)
1235
- container_type_key = self._get_container_type_key(
1236
- model=model, container_family=container_family
1237
- )
1238
-
1239
- container_config = self.get_container_config_item(container_type_key)
1240
- container_spec = container_config.spec if container_config else UNKNOWN
1241
- cli_params = container_spec.cli_param if container_spec else UNKNOWN
1242
-
1243
- restricted_params = self._find_restricted_params(
1244
- cli_params, params, container_type_key
1245
- )
1246
-
1247
- if restricted_params:
1248
- raise AquaValueError(
1249
- f"Parameters {restricted_params} are set by Aqua "
1250
- f"and cannot be overridden or are invalid."
1251
- )
1252
- return {"valid": True}
1253
-
1254
- @staticmethod
1255
- def _find_restricted_params(
1256
- default_params: Union[str, List[str]],
1257
- user_params: Union[str, List[str]],
1258
- container_family: str,
1259
- ) -> List[str]:
1260
- """Returns a list of restricted params that user chooses to override when creating an Aqua deployment.
1261
- The default parameters coming from the container index json file cannot be overridden.
1262
-
1263
- Parameters
1264
- ----------
1265
- default_params:
1266
- Inference container parameter string with default values.
1267
- user_params:
1268
- Inference container parameter string with user provided values.
1269
- container_family: str
1270
- The image family of model deployment container runtime.
1271
-
1272
- Returns
1273
- -------
1274
- A list with params keys common between params1 and params2.
1275
-
1276
- """
1277
- restricted_params = []
1278
- if default_params and user_params:
1279
- default_params_dict = get_params_dict(default_params)
1280
- user_params_dict = get_params_dict(user_params)
1281
-
1282
- restricted_params_set = get_restricted_params_by_container(container_family)
1283
- for key, _items in user_params_dict.items():
1284
- if key in default_params_dict or key in restricted_params_set:
1285
- restricted_params.append(key.lstrip("-"))
1286
-
1287
- return restricted_params
1288
-
1289
- @telemetry(entry_point="plugin=deployment&action=list_shapes", name="aqua")
1290
- @cached(cache=TTLCache(maxsize=1, ttl=timedelta(minutes=5), timer=datetime.now))
1291
- def list_shapes(self, **kwargs) -> List[ComputeShapeSummary]:
1292
- """Lists the valid model deployment shapes.
1293
-
1294
- Parameters
1295
- ----------
1296
- kwargs
1297
- Keyword arguments, such as compartment_id
1298
- for `list_call_get_all_results <https://docs.oracle.com/en-us/iaas/tools/python/2.118.1/api/pagination.html#oci.pagination.list_call_get_all_results>`_
1299
-
1300
- Returns
1301
- -------
1302
- List[ComputeShapeSummary]:
1303
- The list of the model deployment shapes.
1304
- """
1305
- compartment_id = kwargs.pop("compartment_id", COMPARTMENT_OCID)
1306
- oci_shapes: list[ModelDeploymentShapeSummary] = self.list_resource(
1307
- self.ds_client.list_model_deployment_shapes,
1308
- compartment_id=compartment_id,
1309
- **kwargs,
1310
- )
1311
-
1312
- gpu_specs = load_gpu_shapes_index()
1313
-
1314
- return [
1315
- ComputeShapeSummary(
1316
- core_count=oci_shape.core_count,
1317
- memory_in_gbs=oci_shape.memory_in_gbs,
1318
- shape_series=oci_shape.shape_series,
1319
- name=oci_shape.name,
1320
- gpu_specs=gpu_specs.shapes.get(oci_shape.name)
1321
- or gpu_specs.shapes.get(oci_shape.name.upper()),
1322
- )
1323
- for oci_shape in oci_shapes
1324
- ]