oracle-ads 2.13.7__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.7.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.7.dist-info → oracle_ads-2.13.9rc0.dist-info}/WHEEL +2 -1
  4. {oracle_ads-2.13.7.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 -2079
  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.7.dist-info/RECORD +0 -858
  857. {oracle_ads-2.13.7.dist-info → oracle_ads-2.13.9rc0.dist-info}/licenses/LICENSE.txt +0 -0
ads/aqua/common/utils.py DELETED
@@ -1,1285 +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
- """AQUA utils and constants."""
5
-
6
- import asyncio
7
- import base64
8
- import json
9
- import logging
10
- import os
11
- import random
12
- import re
13
- import shlex
14
- import shutil
15
- import subprocess
16
- from datetime import datetime, timedelta
17
- from functools import wraps
18
- from pathlib import Path
19
- from string import Template
20
- from typing import Any, Dict, List, Optional, Union
21
-
22
- import fsspec
23
- import oci
24
- from cachetools import TTLCache, cached
25
- from huggingface_hub.constants import HF_HUB_CACHE
26
- from huggingface_hub.file_download import repo_folder_name
27
- from huggingface_hub.hf_api import HfApi, ModelInfo
28
- from huggingface_hub.utils import (
29
- GatedRepoError,
30
- HfHubHTTPError,
31
- RepositoryNotFoundError,
32
- RevisionNotFoundError,
33
- )
34
- from oci.data_science.models import JobRun, Model
35
- from oci.object_storage.models import ObjectSummary
36
- from pydantic import BaseModel, ValidationError
37
-
38
- from ads.aqua.common.entities import GPUShapesIndex
39
- from ads.aqua.common.enums import (
40
- CONTAINER_FAMILY_COMPATIBILITY,
41
- InferenceContainerParamType,
42
- InferenceContainerType,
43
- RqsAdditionalDetails,
44
- TextEmbeddingInferenceContainerParams,
45
- )
46
- from ads.aqua.common.errors import (
47
- AquaFileNotFoundError,
48
- AquaRuntimeError,
49
- AquaValueError,
50
- )
51
- from ads.aqua.constants import (
52
- AQUA_GA_LIST,
53
- CONSOLE_LINK_RESOURCE_TYPE_MAPPING,
54
- DEPLOYMENT_CONFIG,
55
- FINE_TUNING_CONFIG,
56
- HF_LOGIN_DEFAULT_TIMEOUT,
57
- LICENSE,
58
- MAXIMUM_ALLOWED_DATASET_IN_BYTE,
59
- MODEL_BY_REFERENCE_OSS_PATH_KEY,
60
- README,
61
- SERVICE_MANAGED_CONTAINER_URI_SCHEME,
62
- SUPPORTED_FILE_FORMATS,
63
- TEI_CONTAINER_DEFAULT_HOST,
64
- TGI_INFERENCE_RESTRICTED_PARAMS,
65
- UNKNOWN_JSON_STR,
66
- VLLM_INFERENCE_RESTRICTED_PARAMS,
67
- )
68
- from ads.aqua.data import AquaResourceIdentifier
69
- from ads.common import auth as authutil
70
- from ads.common.auth import AuthState, default_signer
71
- from ads.common.decorator.threaded import threaded
72
- from ads.common.extended_enum import ExtendedEnum
73
- from ads.common.object_storage_details import ObjectStorageDetails
74
- from ads.common.oci_resource import SEARCH_TYPE, OCIResource
75
- from ads.common.utils import (
76
- UNKNOWN,
77
- copy_file,
78
- get_console_link,
79
- read_file,
80
- upload_to_os,
81
- )
82
- from ads.config import (
83
- AQUA_MODEL_DEPLOYMENT_FOLDER,
84
- AQUA_SERVICE_MODELS_BUCKET,
85
- CONDA_BUCKET_NAME,
86
- CONDA_BUCKET_NS,
87
- TENANCY_OCID,
88
- )
89
- from ads.model import DataScienceModel, ModelVersionSet
90
-
91
- logger = logging.getLogger("ads.aqua")
92
-
93
-
94
- DEFINED_METADATA_TO_FILE_MAP = {
95
- "readme": README,
96
- "license": LICENSE,
97
- "finetuneconfiguration": FINE_TUNING_CONFIG,
98
- "deploymentconfiguration": DEPLOYMENT_CONFIG,
99
- }
100
-
101
-
102
- class LifecycleStatus(ExtendedEnum):
103
- UNKNOWN = ""
104
-
105
- @property
106
- def detail(self) -> str:
107
- """Returns the detail message corresponding to the status."""
108
- return LIFECYCLE_DETAILS_MAPPING.get(
109
- self.name, f"No detail available for the status {self.name}."
110
- )
111
-
112
- @staticmethod
113
- def get_status(evaluation_status: str, job_run_status: str = None):
114
- """
115
- Maps the combination of evaluation status and job run status to a standard status.
116
-
117
- Parameters
118
- ----------
119
- evaluation_status (str):
120
- The status of the evaluation.
121
- job_run_status (str):
122
- The status of the job run.
123
-
124
- Returns
125
- -------
126
- LifecycleStatus
127
- The mapped status ("Completed", "In Progress", "Canceled").
128
- """
129
- if not job_run_status:
130
- logger.error("Failed to get jobrun state.")
131
- # case1 : failed to create jobrun
132
- # case2: jobrun is deleted - rqs cannot retreive deleted resource
133
- return JobRun.LIFECYCLE_STATE_NEEDS_ATTENTION
134
-
135
- status = LifecycleStatus.UNKNOWN
136
- if evaluation_status == Model.LIFECYCLE_STATE_ACTIVE:
137
- if job_run_status in {
138
- JobRun.LIFECYCLE_STATE_IN_PROGRESS,
139
- JobRun.LIFECYCLE_STATE_ACCEPTED,
140
- }:
141
- status = JobRun.LIFECYCLE_STATE_IN_PROGRESS
142
- elif job_run_status in {
143
- JobRun.LIFECYCLE_STATE_FAILED,
144
- JobRun.LIFECYCLE_STATE_NEEDS_ATTENTION,
145
- }:
146
- status = JobRun.LIFECYCLE_STATE_FAILED
147
- else:
148
- status = job_run_status
149
- else:
150
- status = evaluation_status
151
-
152
- return status
153
-
154
-
155
- LIFECYCLE_DETAILS_MAPPING = {
156
- JobRun.LIFECYCLE_STATE_SUCCEEDED: "The evaluation ran successfully.",
157
- JobRun.LIFECYCLE_STATE_IN_PROGRESS: "The evaluation is running.",
158
- JobRun.LIFECYCLE_STATE_FAILED: "The evaluation failed.",
159
- JobRun.LIFECYCLE_STATE_NEEDS_ATTENTION: "Missing jobrun information.",
160
- }
161
-
162
-
163
- def random_color_generator(word: str):
164
- seed = sum([ord(c) for c in word]) % 13
165
- random.seed(seed)
166
- r = random.randint(10, 245)
167
- g = random.randint(10, 245)
168
- b = random.randint(10, 245)
169
-
170
- text_color = "black" if (0.299 * r + 0.587 * g + 0.114 * b) / 255 > 0.5 else "white"
171
-
172
- return f"#{r:02x}{g:02x}{b:02x}", text_color
173
-
174
-
175
- def svg_to_base64_datauri(svg_contents: str):
176
- base64_encoded_svg_contents = base64.b64encode(svg_contents.encode())
177
- return "data:image/svg+xml;base64," + base64_encoded_svg_contents.decode()
178
-
179
-
180
- def create_word_icon(label: str, width: int = 150, return_as_datauri=True):
181
- match = re.findall(r"(^[a-zA-Z]{1}).*?(\d+[a-z]?)", label)
182
- icon_text = "".join(match[0] if match else [label[0]])
183
- icon_color, text_color = random_color_generator(label)
184
- cx = width / 2
185
- cy = width / 2
186
- r = width / 2
187
- fs = int(r / 25)
188
-
189
- t = Template(
190
- """
191
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="${width}" height="${width}">
192
-
193
- <style>
194
- text {
195
- font-size: ${fs}em;
196
- font-family: lucida console, Fira Mono, monospace;
197
- text-anchor: middle;
198
- stroke-width: 1px;
199
- font-weight: bold;
200
- alignment-baseline: central;
201
- }
202
-
203
- </style>
204
-
205
- <circle cx="${cx}" cy="${cy}" r="${r}" fill="${icon_color}" />
206
- <text x="50%" y="50%" fill="${text_color}">${icon_text}</text>
207
- </svg>
208
- """.strip()
209
- )
210
-
211
- icon_svg = t.substitute(**locals())
212
- if return_as_datauri:
213
- return svg_to_base64_datauri(icon_svg)
214
- else:
215
- return icon_svg
216
-
217
-
218
- def get_artifact_path(custom_metadata_list: List) -> str:
219
- """Get the artifact path from the custom metadata list of model.
220
-
221
- Parameters
222
- ----------
223
- custom_metadata_list: List
224
- A list of custom metadata of OCI model.
225
-
226
- Returns
227
- -------
228
- str:
229
- The artifact path from model.
230
- """
231
- try:
232
- for custom_metadata in custom_metadata_list:
233
- if custom_metadata.key == MODEL_BY_REFERENCE_OSS_PATH_KEY:
234
- if ObjectStorageDetails.is_oci_path(custom_metadata.value):
235
- artifact_path = custom_metadata.value
236
- else:
237
- artifact_path = ObjectStorageDetails(
238
- AQUA_SERVICE_MODELS_BUCKET,
239
- CONDA_BUCKET_NS,
240
- custom_metadata.value,
241
- ).path
242
- return artifact_path
243
- except Exception as ex:
244
- logger.debug(ex)
245
-
246
- logger.debug("Failed to get artifact path from custom metadata.")
247
- return UNKNOWN
248
-
249
-
250
- @threaded()
251
- def load_config(file_path: str, config_file_name: str, **kwargs) -> dict:
252
- artifact_path = f"{file_path.rstrip('/')}/{config_file_name}"
253
- signer = default_signer() if artifact_path.startswith("oci://") else {}
254
- config = json.loads(
255
- read_file(file_path=artifact_path, auth=signer, **kwargs) or UNKNOWN_JSON_STR
256
- )
257
- if not config:
258
- raise AquaFileNotFoundError(
259
- f"Config file `{config_file_name}` is either empty or missing at {artifact_path}",
260
- 500,
261
- )
262
- return config
263
-
264
-
265
- def list_os_files_with_extension(oss_path: str, extension: str) -> List[str]:
266
- """
267
- List files in the specified directory with the given extension.
268
-
269
- Parameters:
270
- - oss_path: The path to the directory where files are located.
271
- - extension: The file extension to filter by (e.g., 'txt' for text files).
272
-
273
- Returns:
274
- - A list of file paths matching the specified extension.
275
- """
276
-
277
- oss_client = ObjectStorageDetails.from_path(oss_path)
278
-
279
- # Ensure the extension is prefixed with a dot if not already
280
- if not extension.startswith("."):
281
- extension = "." + extension
282
- files: List[ObjectSummary] = oss_client.list_objects().objects
283
-
284
- return [
285
- file.name[len(oss_client.filepath) :].lstrip("/")
286
- for file in files
287
- if file.name.endswith(extension)
288
- ]
289
-
290
-
291
- def is_valid_ocid(ocid: str) -> bool:
292
- """Checks if the given ocid is valid.
293
-
294
- Parameters
295
- ----------
296
- ocid: str
297
- Oracle Cloud Identifier (OCID).
298
-
299
- Returns
300
- -------
301
- bool:
302
- Whether the given ocid is valid.
303
- """
304
-
305
- if not ocid:
306
- return False
307
- return ocid.lower().startswith("ocid")
308
-
309
-
310
- def get_resource_type(ocid: str) -> str:
311
- """Gets resource type based on the given ocid.
312
-
313
- Parameters
314
- ----------
315
- ocid: str
316
- Oracle Cloud Identifier (OCID).
317
-
318
- Returns
319
- -------
320
- str:
321
- The resource type indicated in the given ocid.
322
-
323
- Raises
324
- -------
325
- ValueError:
326
- When the given ocid is not a valid ocid.
327
- """
328
- if not is_valid_ocid(ocid):
329
- raise ValueError(
330
- f"The given ocid {ocid} is not a valid ocid."
331
- "Check out this page https://docs.oracle.com/en-us/iaas/Content/General/Concepts/identifiers.htm to see more details."
332
- )
333
- return ocid.split(".")[1]
334
-
335
-
336
- def query_resource(
337
- ocid, return_all: bool = True
338
- ) -> "oci.resource_search.models.ResourceSummary":
339
- """Use Search service to find a single resource within a tenancy.
340
-
341
- Parameters
342
- ----------
343
- ocid: str
344
- Oracle Cloud Identifier (OCID).
345
- return_all: bool
346
- Whether to return allAdditionalFields.
347
-
348
- Returns
349
- -------
350
- oci.resource_search.models.ResourceSummary:
351
- The retrieved resource.
352
- """
353
-
354
- return_all = " return allAdditionalFields " if return_all else " "
355
- resource_type = get_resource_type(ocid)
356
- query = f"query {resource_type} resources{return_all}where (identifier = '{ocid}')"
357
- logger.debug(query)
358
-
359
- resources = OCIResource.search(
360
- query,
361
- type=SEARCH_TYPE.STRUCTURED,
362
- tenant_id=TENANCY_OCID,
363
- )
364
- if len(resources) == 0:
365
- raise AquaRuntimeError(
366
- f"Failed to retreive {resource_type}'s information.",
367
- service_payload={"query": query, "tenant_id": TENANCY_OCID},
368
- )
369
- return resources[0]
370
-
371
-
372
- def query_resources(
373
- compartment_id,
374
- resource_type: str,
375
- return_all: bool = True,
376
- tag_list: list = None,
377
- status_list: list = None,
378
- connect_by_ampersands: bool = True,
379
- **kwargs,
380
- ) -> List["oci.resource_search.models.ResourceSummary"]:
381
- """Use Search service to find resources within compartment.
382
-
383
- Parameters
384
- ----------
385
- compartment_id: str
386
- The compartment ocid.
387
- resource_type: str
388
- The type of the target resources.
389
- return_all: bool
390
- Whether to return allAdditionalFields.
391
- tag_list: list
392
- List of tags will be applied for filtering.
393
- status_list: list
394
- List of lifecycleState will be applied for filtering.
395
- connect_by_ampersands: bool
396
- Whether to use `&&` to group multiple conditions.
397
- if `connect_by_ampersands=False`, `||` will be used.
398
- **kwargs:
399
- Additional arguments.
400
-
401
- Returns
402
- -------
403
- List[oci.resource_search.models.ResourceSummary]:
404
- The retrieved resources.
405
- """
406
- return_all = " return allAdditionalFields " if return_all else " "
407
- condition_lifecycle = _construct_condition(
408
- field_name="lifecycleState",
409
- allowed_values=status_list,
410
- connect_by_ampersands=False,
411
- )
412
- condition_tags = _construct_condition(
413
- field_name="freeformTags.key",
414
- allowed_values=tag_list,
415
- connect_by_ampersands=connect_by_ampersands,
416
- )
417
- query = f"query {resource_type} resources{return_all}where (compartmentId = '{compartment_id}'{condition_lifecycle}{condition_tags})"
418
- logger.debug(query)
419
- logger.debug(f"tenant_id=`{TENANCY_OCID}`")
420
-
421
- return OCIResource.search(
422
- query, type=SEARCH_TYPE.STRUCTURED, tenant_id=TENANCY_OCID, **kwargs
423
- )
424
-
425
-
426
- def _construct_condition(
427
- field_name: str, allowed_values: list = None, connect_by_ampersands: bool = True
428
- ) -> str:
429
- """Returns tag condition applied in query statement.
430
-
431
- Parameters
432
- ----------
433
- field_name: str
434
- The field_name keyword is the resource attribute against which the
435
- operation and chosen value of that attribute are evaluated.
436
- allowed_values: list
437
- List of value will be applied for filtering.
438
- connect_by_ampersands: bool
439
- Whether to use `&&` to group multiple tag conditions.
440
- if `connect_by_ampersands=False`, `||` will be used.
441
-
442
- Returns
443
- -------
444
- str:
445
- The tag condition.
446
- """
447
- if not allowed_values:
448
- return ""
449
-
450
- joint = "&&" if connect_by_ampersands else "||"
451
- formatted_tags = [f"{field_name} = '{value}'" for value in allowed_values]
452
- joined_tags = f" {joint} ".join(formatted_tags)
453
- condition = f" && ({joined_tags})" if joined_tags else ""
454
- return condition
455
-
456
-
457
- def upload_local_to_os(
458
- src_uri: str, dst_uri: str, auth: dict = None, force_overwrite: bool = False
459
- ):
460
- expanded_path = os.path.expanduser(src_uri)
461
- if not os.path.isfile(expanded_path):
462
- raise AquaFileNotFoundError("Invalid input file path. Specify a valid one.")
463
- if Path(expanded_path).suffix.lstrip(".") not in SUPPORTED_FILE_FORMATS:
464
- raise AquaValueError(
465
- f"Invalid input file. Only {', '.join(SUPPORTED_FILE_FORMATS)} files are supported."
466
- )
467
- if os.path.getsize(expanded_path) == 0:
468
- raise AquaValueError("Empty input file. Specify a valid file path.")
469
- if os.path.getsize(expanded_path) > MAXIMUM_ALLOWED_DATASET_IN_BYTE:
470
- raise AquaValueError(
471
- f"Local dataset file can't exceed {MAXIMUM_ALLOWED_DATASET_IN_BYTE} bytes."
472
- )
473
-
474
- upload_to_os(
475
- src_uri=expanded_path,
476
- dst_uri=dst_uri,
477
- auth=auth,
478
- force_overwrite=force_overwrite,
479
- )
480
-
481
-
482
- def sanitize_response(oci_client, response: list):
483
- """Builds a JSON POST object for the response from OCI clients.
484
-
485
- Parameters
486
- ----------
487
- oci_client
488
- OCI client object
489
-
490
- response
491
- list of results from the OCI client
492
-
493
- Returns
494
- -------
495
- The serialized form of data.
496
-
497
- """
498
- return oci_client.base_client.sanitize_for_serialization(response)
499
-
500
-
501
- def _build_resource_identifier(
502
- id: str = None, name: str = None, region: str = None
503
- ) -> AquaResourceIdentifier:
504
- """Constructs AquaResourceIdentifier based on the given ocid and display name."""
505
- try:
506
- resource_type = CONSOLE_LINK_RESOURCE_TYPE_MAPPING.get(get_resource_type(id))
507
-
508
- return AquaResourceIdentifier(
509
- id=id,
510
- name=name,
511
- url=get_console_link(
512
- resource=resource_type,
513
- ocid=id,
514
- region=region,
515
- ),
516
- )
517
- except Exception as e:
518
- logger.debug(
519
- f"Failed to construct AquaResourceIdentifier from given id=`{id}`, and name=`{name}`, {str(e)}"
520
- )
521
- return AquaResourceIdentifier()
522
-
523
-
524
- def _get_experiment_info(
525
- model: Union[oci.resource_search.models.ResourceSummary, DataScienceModel],
526
- ) -> tuple:
527
- """Returns ocid and name of the experiment."""
528
- return (
529
- (
530
- model.additional_details.get(RqsAdditionalDetails.MODEL_VERSION_SET_ID),
531
- model.additional_details.get(RqsAdditionalDetails.MODEL_VERSION_SET_NAME),
532
- )
533
- if isinstance(model, oci.resource_search.models.ResourceSummary)
534
- else (model.model_version_set_id, model.model_version_set_name)
535
- )
536
-
537
-
538
- def _build_job_identifier(
539
- job_run_details: Union[
540
- oci.data_science.models.JobRun, oci.resource_search.models.ResourceSummary
541
- ] = None,
542
- **kwargs,
543
- ) -> AquaResourceIdentifier:
544
- try:
545
- job_id = (
546
- job_run_details.id
547
- if isinstance(job_run_details, oci.data_science.models.JobRun)
548
- else job_run_details.identifier
549
- )
550
- return _build_resource_identifier(
551
- id=job_id, name=job_run_details.display_name, **kwargs
552
- )
553
-
554
- except Exception as e:
555
- logger.debug(
556
- f"Failed to get job details from job_run_details: {job_run_details}"
557
- f"DEBUG INFO:{str(e)}"
558
- )
559
- return AquaResourceIdentifier()
560
-
561
-
562
- def get_max_version(versions):
563
- """Takes in a list of versions and returns the higher version."""
564
- if not versions:
565
- return UNKNOWN
566
-
567
- def compare_versions(version1, version2):
568
- # split version strings into parts and convert to int values for comparison
569
- parts1 = list(map(int, version1.split(".")))
570
- parts2 = list(map(int, version2.split(".")))
571
-
572
- # compare each part
573
- for idx in range(min(len(parts1), len(parts2))):
574
- if parts1[idx] < parts2[idx]:
575
- return version2
576
- elif parts1[idx] > parts2[idx]:
577
- return version1
578
-
579
- # if all parts are equal up to this point, return the longer version string
580
- return version1 if len(parts1) > len(parts2) else version2
581
-
582
- max_version = versions[0]
583
- for version in versions[1:]:
584
- max_version = compare_versions(max_version, version)
585
-
586
- return max_version
587
-
588
-
589
- def fire_and_forget(func):
590
- """Decorator to push execution of methods to the background."""
591
-
592
- @wraps(func)
593
- def wrapped(*args, **kwargs):
594
- return asyncio.get_event_loop().run_in_executor(None, func, *args, *kwargs)
595
-
596
- return wrapped
597
-
598
-
599
- def extract_id_and_name_from_tag(tag: str):
600
- base_model_ocid = UNKNOWN
601
- base_model_name = UNKNOWN
602
- try:
603
- base_model_ocid, base_model_name = tag.split("#")
604
- except Exception:
605
- pass
606
-
607
- if not (is_valid_ocid(base_model_ocid) and base_model_name):
608
- logger.debug(
609
- f"Invalid {tag}. Specify tag in the format as <service_model_id>#<service_model_name>."
610
- )
611
-
612
- return base_model_ocid, base_model_name
613
-
614
-
615
- def get_resource_name(ocid: str) -> str:
616
- """Gets resource name based on the given ocid.
617
-
618
- Parameters
619
- ----------
620
- ocid: str
621
- Oracle Cloud Identifier (OCID).
622
-
623
- Returns
624
- -------
625
- str:
626
- The resource name indicated in the given ocid.
627
-
628
- Raises
629
- -------
630
- ValueError:
631
- When the given ocid is not a valid ocid.
632
- """
633
- if not is_valid_ocid(ocid):
634
- raise ValueError(
635
- f"The given ocid {ocid} is not a valid ocid."
636
- "Check out this page https://docs.oracle.com/en-us/iaas/Content/General/Concepts/identifiers.htm to see more details."
637
- )
638
- try:
639
- resource = query_resource(ocid, return_all=False)
640
- name = resource.display_name if resource else UNKNOWN
641
- except Exception:
642
- name = UNKNOWN
643
- return name
644
-
645
-
646
- def get_model_by_reference_paths(model_file_description: dict):
647
- """Reads the model file description json dict and returns the base model path and fine-tuned path for
648
- models created by reference.
649
-
650
- Parameters
651
- ----------
652
- model_file_description: dict
653
- json dict containing model paths and objects for models created by reference.
654
-
655
- Returns
656
- -------
657
- a tuple with base_model_path and fine_tune_output_path
658
- """
659
- base_model_path = UNKNOWN
660
- fine_tune_output_path = UNKNOWN
661
- models = model_file_description["models"]
662
-
663
- if not models:
664
- raise AquaValueError(
665
- "Model path is not available in the model json artifact. "
666
- "Please check if the model created by reference has the correct artifact."
667
- )
668
-
669
- if len(models) > 0:
670
- # since the model_file_description json does not have a flag to identify the base model, we consider
671
- # the first instance to be the base model.
672
- base_model_artifact = models[0]
673
- base_model_path = f"oci://{base_model_artifact['bucketName']}@{base_model_artifact['namespace']}/{base_model_artifact['prefix']}".rstrip(
674
- "/"
675
- )
676
- if len(models) > 1:
677
- # second model is considered as fine-tuned model
678
- ft_model_artifact = models[1]
679
- fine_tune_output_path = f"oci://{ft_model_artifact['bucketName']}@{ft_model_artifact['namespace']}/{ft_model_artifact['prefix']}".rstrip(
680
- "/"
681
- )
682
-
683
- return base_model_path, fine_tune_output_path
684
-
685
-
686
- def _is_valid_mvs(mvs: ModelVersionSet, target_tag: str) -> bool:
687
- """Returns whether the given model version sets has the target tag.
688
-
689
- Parameters
690
- ----------
691
- mvs: str
692
- The instance of `ads.model.ModelVersionSet`.
693
- target_tag: list
694
- Target tag expected to be in MVS.
695
-
696
- Returns
697
- -------
698
- bool:
699
- Return True if the given model version sets is valid.
700
- """
701
- if mvs.freeform_tags is None:
702
- return False
703
-
704
- return target_tag in mvs.freeform_tags
705
-
706
-
707
- def known_realm():
708
- """This helper function returns True if the Aqua service is available by default in the given namespace.
709
- Returns
710
- -------
711
- bool:
712
- Return True if aqua service is available.
713
-
714
- """
715
- return os.environ.get("CONDA_BUCKET_NS") in AQUA_GA_LIST
716
-
717
-
718
- def get_ocid_substring(ocid: str, key_len: int) -> str:
719
- """This helper function returns the last n characters of the ocid specified by key_len parameter.
720
- If ocid is None or length is less than key_len, it returns an empty string."""
721
- return ocid[-key_len:] if ocid and len(ocid) > key_len else ""
722
-
723
-
724
- def upload_folder(
725
- os_path: str, local_dir: str, model_name: str, exclude_pattern: str = None
726
- ) -> str:
727
- """Upload the local folder to the object storage
728
-
729
- Args:
730
- os_path (str): object storage URI with prefix. This is the path to upload
731
- local_dir (str): Local directory where the object is downloaded
732
- model_name (str): Name of the huggingface model
733
- exclude_pattern (optional, str): The matching pattern of files to be excluded from uploading.
734
- Retuns:
735
- str: Object name inside the bucket
736
- """
737
- os_details: ObjectStorageDetails = ObjectStorageDetails.from_path(os_path)
738
- if not os_details.is_bucket_versioned():
739
- raise ValueError(f"Version is not enabled at object storage location {os_path}")
740
- auth_state = AuthState()
741
- object_path = os_details.filepath.rstrip("/") + "/" + model_name + "/"
742
- command = f"oci os object bulk-upload --src-dir {local_dir} --prefix {object_path} -bn {os_details.bucket} -ns {os_details.namespace} --auth {auth_state.oci_iam_type} --profile {auth_state.oci_key_profile} --no-overwrite"
743
- if exclude_pattern:
744
- command += f" --exclude {exclude_pattern}"
745
- try:
746
- logger.info(f"Running: {command}")
747
- subprocess.check_call(shlex.split(command))
748
- except subprocess.CalledProcessError as e:
749
- logger.error(
750
- f"Error uploading the object. Exit code: {e.returncode} with error {e.stdout}"
751
- )
752
-
753
- return f"oci://{os_details.bucket}@{os_details.namespace}" + "/" + object_path
754
-
755
-
756
- def cleanup_local_hf_model_artifact(
757
- model_name: str,
758
- local_dir: str = None,
759
- ):
760
- """
761
- Helper function that deletes local artifacts downloaded from Hugging Face to free up disk space.
762
- Parameters
763
- ----------
764
- model_name (str): Name of the huggingface model
765
- local_dir (str): Local directory where the object is downloaded
766
-
767
- """
768
- if local_dir and os.path.exists(local_dir):
769
- model_dir = os.path.join(local_dir, model_name)
770
- model_dir = (
771
- os.path.dirname(model_dir)
772
- if "/" in model_name or os.sep in model_name
773
- else model_dir
774
- )
775
- shutil.rmtree(model_dir, ignore_errors=True)
776
- if os.path.exists(model_dir):
777
- logger.debug(
778
- f"Could not delete local model artifact directory: {model_dir}"
779
- )
780
- else:
781
- logger.debug(f"Deleted local model artifact directory: {model_dir}.")
782
-
783
- hf_local_path = os.path.join(
784
- HF_HUB_CACHE, repo_folder_name(repo_id=model_name, repo_type="model")
785
- )
786
- shutil.rmtree(hf_local_path, ignore_errors=True)
787
-
788
- if os.path.exists(hf_local_path):
789
- logger.debug(
790
- f"Could not clear the local Hugging Face cache directory {hf_local_path} for the model {model_name}."
791
- )
792
- else:
793
- logger.debug(
794
- f"Cleared contents of local Hugging Face cache directory {hf_local_path} for the model {model_name}."
795
- )
796
-
797
-
798
- def is_service_managed_container(container):
799
- return container and container.startswith(SERVICE_MANAGED_CONTAINER_URI_SCHEME)
800
-
801
-
802
- def get_params_list(params: str) -> List[str]:
803
- """Parses the string parameter and returns a list of params.
804
-
805
- Parameters
806
- ----------
807
- params
808
- string parameters by separated by -- delimiter
809
-
810
- Returns
811
- -------
812
- list of params
813
-
814
- """
815
- if not params:
816
- return []
817
- return ["--" + param.strip() for param in params.split("--")[1:]]
818
-
819
-
820
- def get_params_dict(params: Union[str, List[str]]) -> dict:
821
- """Accepts a string or list of string of double-dash parameters and returns a dict with the parameter keys and values.
822
-
823
- Parameters
824
- ----------
825
- params:
826
- List of parameters or parameter string separated by space.
827
-
828
- Returns
829
- -------
830
- dict containing parameter keys and values
831
-
832
- """
833
- params_list = get_params_list(params) if isinstance(params, str) else params
834
- return {
835
- split_result[0]: split_result[1] if len(split_result) > 1 else UNKNOWN
836
- for split_result in (x.split() for x in params_list)
837
- }
838
-
839
-
840
- def get_combined_params(params1: str = None, params2: str = None) -> str:
841
- """
842
- Combines string of double-dash parameters, and overrides the values from the second string in the first.
843
- Parameters
844
- ----------
845
- params1:
846
- Parameter string with values
847
- params2:
848
- Parameter string with values that need to be overridden.
849
-
850
- Returns
851
- -------
852
- A combined list with overridden values from params2.
853
- """
854
- if not params1:
855
- return params2
856
- if not params2:
857
- return params1
858
-
859
- # overwrite values from params2 into params1
860
- combined_params = [
861
- f"{key} {value}" if value else key
862
- for key, value in {
863
- **get_params_dict(params1),
864
- **get_params_dict(params2),
865
- }.items()
866
- ]
867
-
868
- return " ".join(combined_params)
869
-
870
-
871
- def build_params_string(params: dict) -> str:
872
- """Builds params string from params dict
873
-
874
- Parameters
875
- ----------
876
- params:
877
- Parameter dict with key-value pairs
878
-
879
- Returns
880
- -------
881
- A params string.
882
- """
883
- return (
884
- " ".join(f"{name} {value}" for name, value in params.items()).strip()
885
- if params
886
- else UNKNOWN
887
- )
888
-
889
-
890
- def copy_model_config(artifact_path: str, os_path: str, auth: dict = None):
891
- """Copies the aqua model config folder from the artifact path to the user provided object storage path.
892
- The config folder is overwritten if the files already exist at the destination path.
893
-
894
- Parameters
895
- ----------
896
- artifact_path:
897
- Path of the aqua model where config folder is available.
898
- os_path:
899
- User provided path where config folder will be copied.
900
- auth: (Dict, optional). Defaults to None.
901
- The default authentication is set using `ads.set_auth` API. If you need to override the
902
- default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
903
- authentication signer and kwargs required to instantiate IdentityClient object.
904
-
905
- Returns
906
- -------
907
- None
908
- Nothing.
909
- """
910
-
911
- try:
912
- source_dir = ObjectStorageDetails(
913
- AQUA_SERVICE_MODELS_BUCKET,
914
- CONDA_BUCKET_NS,
915
- f"{os.path.dirname(artifact_path).rstrip('/')}/config",
916
- ).path
917
- dest_dir = f"{os_path.rstrip('/')}/config"
918
-
919
- oss_details = ObjectStorageDetails.from_path(source_dir)
920
- objects = oss_details.list_objects(fields="name").objects
921
-
922
- for obj in objects:
923
- source_path = ObjectStorageDetails(
924
- AQUA_SERVICE_MODELS_BUCKET, CONDA_BUCKET_NS, obj.name
925
- ).path
926
- destination_path = os.path.join(dest_dir, os.path.basename(obj.name))
927
- copy_file(
928
- uri_src=source_path,
929
- uri_dst=destination_path,
930
- force_overwrite=True,
931
- auth=auth,
932
- )
933
- except Exception as ex:
934
- logger.debug(ex)
935
- logger.debug(f"Failed to copy config folder from {artifact_path} to {os_path}.")
936
-
937
-
938
- def get_container_params_type(container_type_name: str) -> str:
939
- """The utility function accepts the deployment container type name and returns the corresponding params name.
940
- Parameters
941
- ----------
942
- container_type_name: str
943
- type of deployment container, like odsc-vllm-serving or odsc-tgi-serving.
944
-
945
- Returns
946
- -------
947
- InferenceContainerParamType value
948
-
949
- """
950
- # check substring instead of direct match in case container_type_name changes in the future
951
- if InferenceContainerType.CONTAINER_TYPE_VLLM in container_type_name.lower():
952
- return InferenceContainerParamType.PARAM_TYPE_VLLM
953
- elif InferenceContainerType.CONTAINER_TYPE_TGI in container_type_name.lower():
954
- return InferenceContainerParamType.PARAM_TYPE_TGI
955
- elif InferenceContainerType.CONTAINER_TYPE_LLAMA_CPP in container_type_name.lower():
956
- return InferenceContainerParamType.PARAM_TYPE_LLAMA_CPP
957
- else:
958
- return UNKNOWN
959
-
960
-
961
- def get_restricted_params_by_container(container_type_name: str) -> set:
962
- """The utility function accepts the deployment container type name and returns a set of restricted params
963
- for that container.
964
- Parameters
965
- ----------
966
- container_type_name: str
967
- type of deployment container, like odsc-vllm-serving or odsc-tgi-serving.
968
-
969
- Returns
970
- -------
971
- Set of restricted params based on container type
972
-
973
- """
974
- # check substring instead of direct match in case container_type_name changes in the future
975
- if InferenceContainerType.CONTAINER_TYPE_VLLM in container_type_name.lower():
976
- return VLLM_INFERENCE_RESTRICTED_PARAMS
977
- elif InferenceContainerType.CONTAINER_TYPE_TGI in container_type_name.lower():
978
- return TGI_INFERENCE_RESTRICTED_PARAMS
979
- else:
980
- return set()
981
-
982
-
983
- def get_huggingface_login_timeout() -> int:
984
- """This helper function returns the huggingface login timeout, returns default if not set via
985
- env var.
986
- Returns
987
- -------
988
- timeout: int
989
- huggingface login timeout.
990
-
991
- """
992
- timeout = HF_LOGIN_DEFAULT_TIMEOUT
993
- try:
994
- timeout = int(
995
- os.environ.get("HF_LOGIN_DEFAULT_TIMEOUT", HF_LOGIN_DEFAULT_TIMEOUT)
996
- )
997
- except ValueError:
998
- pass
999
- return timeout
1000
-
1001
-
1002
- def format_hf_custom_error_message(error: HfHubHTTPError):
1003
- """
1004
- Formats a custom error message based on the Hugging Face error response.
1005
-
1006
- Parameters
1007
- ----------
1008
- error (HfHubHTTPError): The caught exception.
1009
-
1010
- Raises
1011
- ------
1012
- AquaRuntimeError: A user-friendly error message.
1013
- """
1014
- # Extract the repository URL from the error message if present
1015
- match = re.search(r"(https://huggingface.co/[^\s]+)", str(error))
1016
- url = match.group(1) if match else "the requested Hugging Face URL."
1017
-
1018
- if isinstance(error, RepositoryNotFoundError):
1019
- raise AquaRuntimeError(
1020
- reason=f"Failed to access `{url}`. Please check if the provided repository name is correct. "
1021
- "If the repo is private, make sure you are authenticated and have a valid HF token registered. "
1022
- "To register your token, run this command in your terminal: `huggingface-cli login`",
1023
- service_payload={"error": "RepositoryNotFoundError"},
1024
- )
1025
-
1026
- if isinstance(error, GatedRepoError):
1027
- raise AquaRuntimeError(
1028
- reason=f"Access denied to `{url}` "
1029
- "This repository is gated. Access is restricted to authorized users. "
1030
- "Please request access or check with the repository administrator. "
1031
- "If you are trying to access a gated repository, ensure you have a valid HF token registered. "
1032
- "To register your token, run this command in your terminal: `huggingface-cli login`",
1033
- service_payload={"error": "GatedRepoError"},
1034
- )
1035
-
1036
- if isinstance(error, RevisionNotFoundError):
1037
- raise AquaRuntimeError(
1038
- reason=f"The specified revision could not be found at `{url}` "
1039
- "Please check the revision identifier and try again.",
1040
- service_payload={"error": "RevisionNotFoundError"},
1041
- )
1042
-
1043
- raise AquaRuntimeError(
1044
- reason=f"An error occurred while accessing `{url}` "
1045
- "Please check your network connection and try again. "
1046
- "If you are trying to access a gated repository, ensure you have a valid HF token registered. "
1047
- "To register your token, run this command in your terminal: `huggingface-cli login`",
1048
- service_payload={"error": "Error"},
1049
- )
1050
-
1051
-
1052
- @cached(cache=TTLCache(maxsize=1, ttl=timedelta(hours=5), timer=datetime.now))
1053
- def get_hf_model_info(repo_id: str) -> ModelInfo:
1054
- """Gets the model information object for the given model repository name. For models that requires a token,
1055
- this method assumes that the token validation is already done.
1056
-
1057
- Parameters
1058
- ----------
1059
- repo_id: str
1060
- hugging face model repository name
1061
-
1062
- Returns
1063
- -------
1064
- instance of ModelInfo object
1065
-
1066
- """
1067
- try:
1068
- return HfApi().model_info(repo_id=repo_id)
1069
- except HfHubHTTPError as err:
1070
- raise format_hf_custom_error_message(err) from err
1071
-
1072
-
1073
- @cached(cache=TTLCache(maxsize=1, ttl=timedelta(hours=5), timer=datetime.now))
1074
- def list_hf_models(query: str) -> List[str]:
1075
- try:
1076
- models = HfApi().list_models(
1077
- model_name=query,
1078
- sort="downloads",
1079
- direction=-1,
1080
- limit=20,
1081
- )
1082
- return [model.id for model in models if model.disabled is None]
1083
- except HfHubHTTPError as err:
1084
- raise format_hf_custom_error_message(err) from err
1085
-
1086
-
1087
- def generate_tei_cmd_var(os_path: str) -> List[str]:
1088
- """This utility functions generates CMD params for Text Embedding Inference container. Only the
1089
- essential parameters for OCI model deployment are added, defaults are used for the rest.
1090
- Parameters
1091
- ----------
1092
- os_path: str
1093
- OCI bucket path where the model artifacts are uploaded - oci://bucket@namespace/prefix
1094
-
1095
- Returns
1096
- -------
1097
- cmd_var:
1098
- List of command line arguments
1099
- """
1100
-
1101
- cmd_prefix = "--"
1102
- cmd_var = [
1103
- f"{cmd_prefix}{TextEmbeddingInferenceContainerParams.MODEL_ID}",
1104
- f"{AQUA_MODEL_DEPLOYMENT_FOLDER}{ObjectStorageDetails.from_path(os_path.rstrip('/')).filepath}/",
1105
- f"{cmd_prefix}{TextEmbeddingInferenceContainerParams.PORT}",
1106
- TEI_CONTAINER_DEFAULT_HOST,
1107
- ]
1108
-
1109
- return cmd_var
1110
-
1111
-
1112
- def parse_cmd_var(cmd_list: List[str]) -> dict:
1113
- """Helper functions that parses a list into a key-value dictionary. The list contains keys separated by the prefix
1114
- '--' and the value of the key is the subsequent element.
1115
- """
1116
- parsed_cmd = {}
1117
-
1118
- for i, cmd in enumerate(cmd_list):
1119
- if cmd.startswith("--"):
1120
- if i + 1 < len(cmd_list) and not cmd_list[i + 1].startswith("--"):
1121
- parsed_cmd[cmd] = cmd_list[i + 1]
1122
- i += 1
1123
- else:
1124
- parsed_cmd[cmd] = None
1125
- return parsed_cmd
1126
-
1127
-
1128
- def validate_cmd_var(cmd_var: List[str], overrides: List[str]) -> List[str]:
1129
- """This function accepts two lists of parameters and combines them. If the second list shares the common parameter
1130
- names/keys, then it raises an error.
1131
- Parameters
1132
- ----------
1133
- cmd_var: List[str]
1134
- Default list of parameters
1135
- overrides: List[str]
1136
- List of parameters to override
1137
- Returns
1138
- -------
1139
- List[str] of combined parameters
1140
- """
1141
- cmd_var = [str(x) for x in cmd_var]
1142
- if not overrides:
1143
- return cmd_var
1144
- overrides = [str(x) for x in overrides]
1145
-
1146
- cmd_dict = parse_cmd_var(cmd_var)
1147
- overrides_dict = parse_cmd_var(overrides)
1148
-
1149
- # check for conflicts
1150
- common_keys = set(cmd_dict.keys()) & set(overrides_dict.keys())
1151
- if common_keys:
1152
- raise AquaValueError(
1153
- f"The following CMD input cannot be overridden for model deployment: {', '.join(common_keys)}"
1154
- )
1155
-
1156
- combined_cmd_var = cmd_var + overrides
1157
- return combined_cmd_var
1158
-
1159
-
1160
- def build_pydantic_error_message(ex: ValidationError):
1161
- """Added to handle error messages from pydantic model validator.
1162
- Combine both loc and msg for errors where loc (field) is present in error details, else only build error
1163
- message using msg field."""
1164
-
1165
- return {
1166
- ".".join(map(str, e["loc"])): e["msg"]
1167
- for e in ex.errors()
1168
- if "loc" in e and e["loc"]
1169
- } or "; ".join(e["msg"] for e in ex.errors())
1170
-
1171
-
1172
- def is_pydantic_model(obj: object) -> bool:
1173
- """
1174
- Returns True if obj is a Pydantic model class or an instance of a Pydantic model.
1175
-
1176
- Args:
1177
- obj: The object or class to check.
1178
-
1179
- Returns:
1180
- bool: True if obj is a subclass or instance of BaseModel, False otherwise.
1181
- """
1182
- cls = obj if isinstance(obj, type) else type(obj)
1183
- return issubclass(cls, BaseModel)
1184
-
1185
-
1186
- @cached(cache=TTLCache(maxsize=1, ttl=timedelta(minutes=5), timer=datetime.now))
1187
- def load_gpu_shapes_index(
1188
- auth: Optional[Dict] = None,
1189
- ) -> GPUShapesIndex:
1190
- """
1191
- Loads the GPU shapes index from Object Storage or a local resource folder.
1192
-
1193
- The function first attempts to load the file from an Object Storage bucket using fsspec.
1194
- If the loading fails (due to connection issues, missing file, etc.), it falls back to
1195
- loading the index from a local file.
1196
-
1197
- Parameters
1198
- ----------
1199
- auth: (Dict, optional). Defaults to None.
1200
- The default authentication is set using `ads.set_auth` API. If you need to override the
1201
- default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
1202
- authentication signer and kwargs required to instantiate IdentityClient object.
1203
-
1204
- Returns
1205
- -------
1206
- GPUShapesIndex: The parsed GPU shapes index.
1207
-
1208
- Raises
1209
- ------
1210
- FileNotFoundError: If the GPU shapes index cannot be found in either Object Storage or locally.
1211
- json.JSONDecodeError: If the JSON is malformed.
1212
- """
1213
- file_name = "gpu_shapes_index.json"
1214
- data: Dict[str, Any] = {}
1215
-
1216
- # Check if the CONDA_BUCKET_NS environment variable is set.
1217
- if CONDA_BUCKET_NS:
1218
- try:
1219
- auth = auth or authutil.default_signer()
1220
- # Construct the object storage path. Adjust bucket name and path as needed.
1221
- storage_path = (
1222
- f"oci://{CONDA_BUCKET_NAME}@{CONDA_BUCKET_NS}/service_pack/{file_name}"
1223
- )
1224
- logger.debug("Loading GPU shapes index from Object Storage")
1225
- with fsspec.open(storage_path, mode="r", **auth) as file_obj:
1226
- data = json.load(file_obj)
1227
- logger.debug("Successfully loaded GPU shapes index.")
1228
- except Exception as ex:
1229
- logger.debug(
1230
- f"Failed to load GPU shapes index from Object Storage. Details: {ex}"
1231
- )
1232
-
1233
- # If loading from Object Storage failed, load from the local resource folder.
1234
- if not data:
1235
- try:
1236
- local_path = os.path.join(
1237
- os.path.dirname(__file__), "../resources", file_name
1238
- )
1239
- logger.debug(f"Loading GPU shapes index from {local_path}.")
1240
- with open(local_path) as file_obj:
1241
- data = json.load(file_obj)
1242
- logger.debug("Successfully loaded GPU shapes index.")
1243
- except Exception as e:
1244
- logger.debug(
1245
- f"Failed to load GPU shapes index from {local_path}. Details: {e}"
1246
- )
1247
-
1248
- return GPUShapesIndex(**data)
1249
-
1250
-
1251
- def get_preferred_compatible_family(selected_families: set[str]) -> str:
1252
- """
1253
- Determines the preferred container family from a given set of container families.
1254
-
1255
- This method is used in the context of multi-model deployment to handle cases
1256
- where models selected for deployment use different, but compatible, container families.
1257
-
1258
- It checks the input `families` set against the `CONTAINER_FAMILY_COMPATIBILITY` map.
1259
- If a compatibility group exists that fully includes all the families in the input,
1260
- the corresponding key (i.e., the preferred family) is returned.
1261
-
1262
- Parameters
1263
- ----------
1264
- families : set[str]
1265
- A set of container family identifiers.
1266
-
1267
- Returns
1268
- -------
1269
- Optional[str]
1270
- The preferred container family if all families are compatible within one group;
1271
- otherwise, returns `None` indicating that no compatible family group was found.
1272
-
1273
- Example
1274
- -------
1275
- >>> get_preferred_compatible_family({"odsc-vllm-serving", "odsc-vllm-serving-v1"})
1276
- 'odsc-vllm-serving-v1'
1277
-
1278
- >>> get_preferred_compatible_family({"odsc-vllm-serving", "odsc-tgi-serving"})
1279
- None # Incompatible families
1280
- """
1281
- for preferred, compatible_list in CONTAINER_FAMILY_COMPATIBILITY.items():
1282
- if selected_families.issubset(set(compatible_list)):
1283
- return preferred
1284
-
1285
- return None