oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (858) hide show
  1. ads/aqua/__init__.py +40 -0
  2. ads/aqua/app.py +507 -0
  3. ads/aqua/cli.py +96 -0
  4. ads/aqua/client/__init__.py +3 -0
  5. ads/aqua/client/client.py +836 -0
  6. ads/aqua/client/openai_client.py +305 -0
  7. ads/aqua/common/__init__.py +5 -0
  8. ads/aqua/common/decorator.py +125 -0
  9. ads/aqua/common/entities.py +274 -0
  10. ads/aqua/common/enums.py +134 -0
  11. ads/aqua/common/errors.py +109 -0
  12. ads/aqua/common/utils.py +1295 -0
  13. ads/aqua/config/__init__.py +4 -0
  14. ads/aqua/config/container_config.py +246 -0
  15. ads/aqua/config/evaluation/__init__.py +4 -0
  16. ads/aqua/config/evaluation/evaluation_service_config.py +147 -0
  17. ads/aqua/config/utils/__init__.py +4 -0
  18. ads/aqua/config/utils/serializer.py +339 -0
  19. ads/aqua/constants.py +116 -0
  20. ads/aqua/data.py +14 -0
  21. ads/aqua/dummy_data/icon.txt +1 -0
  22. ads/aqua/dummy_data/oci_model_deployments.json +56 -0
  23. ads/aqua/dummy_data/oci_models.json +1 -0
  24. ads/aqua/dummy_data/readme.md +26 -0
  25. ads/aqua/evaluation/__init__.py +8 -0
  26. ads/aqua/evaluation/constants.py +53 -0
  27. ads/aqua/evaluation/entities.py +186 -0
  28. ads/aqua/evaluation/errors.py +70 -0
  29. ads/aqua/evaluation/evaluation.py +1814 -0
  30. ads/aqua/extension/__init__.py +42 -0
  31. ads/aqua/extension/aqua_ws_msg_handler.py +76 -0
  32. ads/aqua/extension/base_handler.py +90 -0
  33. ads/aqua/extension/common_handler.py +121 -0
  34. ads/aqua/extension/common_ws_msg_handler.py +36 -0
  35. ads/aqua/extension/deployment_handler.py +381 -0
  36. ads/aqua/extension/deployment_ws_msg_handler.py +54 -0
  37. ads/aqua/extension/errors.py +30 -0
  38. ads/aqua/extension/evaluation_handler.py +129 -0
  39. ads/aqua/extension/evaluation_ws_msg_handler.py +61 -0
  40. ads/aqua/extension/finetune_handler.py +96 -0
  41. ads/aqua/extension/model_handler.py +390 -0
  42. ads/aqua/extension/models/__init__.py +0 -0
  43. ads/aqua/extension/models/ws_models.py +145 -0
  44. ads/aqua/extension/models_ws_msg_handler.py +50 -0
  45. ads/aqua/extension/ui_handler.py +300 -0
  46. ads/aqua/extension/ui_websocket_handler.py +130 -0
  47. ads/aqua/extension/utils.py +133 -0
  48. ads/aqua/finetuning/__init__.py +7 -0
  49. ads/aqua/finetuning/constants.py +23 -0
  50. ads/aqua/finetuning/entities.py +181 -0
  51. ads/aqua/finetuning/finetuning.py +749 -0
  52. ads/aqua/model/__init__.py +8 -0
  53. ads/aqua/model/constants.py +60 -0
  54. ads/aqua/model/entities.py +385 -0
  55. ads/aqua/model/enums.py +32 -0
  56. ads/aqua/model/model.py +2134 -0
  57. ads/aqua/model/utils.py +52 -0
  58. ads/aqua/modeldeployment/__init__.py +6 -0
  59. ads/aqua/modeldeployment/constants.py +10 -0
  60. ads/aqua/modeldeployment/deployment.py +1315 -0
  61. ads/aqua/modeldeployment/entities.py +653 -0
  62. ads/aqua/modeldeployment/utils.py +543 -0
  63. ads/aqua/resources/gpu_shapes_index.json +94 -0
  64. ads/aqua/server/__init__.py +4 -0
  65. ads/aqua/server/__main__.py +24 -0
  66. ads/aqua/server/app.py +47 -0
  67. ads/aqua/server/aqua_spec.yml +1291 -0
  68. ads/aqua/training/__init__.py +4 -0
  69. ads/aqua/training/exceptions.py +476 -0
  70. ads/aqua/ui.py +519 -0
  71. ads/automl/__init__.py +9 -0
  72. ads/automl/driver.py +330 -0
  73. ads/automl/provider.py +975 -0
  74. ads/bds/__init__.py +5 -0
  75. ads/bds/auth.py +127 -0
  76. ads/bds/big_data_service.py +255 -0
  77. ads/catalog/__init__.py +19 -0
  78. ads/catalog/model.py +1576 -0
  79. ads/catalog/notebook.py +461 -0
  80. ads/catalog/project.py +468 -0
  81. ads/catalog/summary.py +178 -0
  82. ads/common/__init__.py +11 -0
  83. ads/common/analyzer.py +65 -0
  84. ads/common/artifact/.model-ignore +63 -0
  85. ads/common/artifact/__init__.py +10 -0
  86. ads/common/auth.py +1122 -0
  87. ads/common/card_identifier.py +83 -0
  88. ads/common/config.py +647 -0
  89. ads/common/data.py +165 -0
  90. ads/common/decorator/__init__.py +9 -0
  91. ads/common/decorator/argument_to_case.py +88 -0
  92. ads/common/decorator/deprecate.py +69 -0
  93. ads/common/decorator/require_nonempty_arg.py +65 -0
  94. ads/common/decorator/runtime_dependency.py +178 -0
  95. ads/common/decorator/threaded.py +97 -0
  96. ads/common/decorator/utils.py +35 -0
  97. ads/common/dsc_file_system.py +303 -0
  98. ads/common/error.py +14 -0
  99. ads/common/extended_enum.py +81 -0
  100. ads/common/function/__init__.py +5 -0
  101. ads/common/function/fn_util.py +142 -0
  102. ads/common/function/func_conf.yaml +25 -0
  103. ads/common/ipython.py +76 -0
  104. ads/common/model.py +679 -0
  105. ads/common/model_artifact.py +1759 -0
  106. ads/common/model_artifact_schema.json +107 -0
  107. ads/common/model_export_util.py +664 -0
  108. ads/common/model_metadata.py +24 -0
  109. ads/common/object_storage_details.py +296 -0
  110. ads/common/oci_client.py +179 -0
  111. ads/common/oci_datascience.py +46 -0
  112. ads/common/oci_logging.py +1144 -0
  113. ads/common/oci_mixin.py +957 -0
  114. ads/common/oci_resource.py +136 -0
  115. ads/common/serializer.py +559 -0
  116. ads/common/utils.py +1852 -0
  117. ads/common/word_lists.py +1491 -0
  118. ads/common/work_request.py +189 -0
  119. ads/config.py +1 -0
  120. ads/data_labeling/__init__.py +13 -0
  121. ads/data_labeling/boundingbox.py +253 -0
  122. ads/data_labeling/constants.py +47 -0
  123. ads/data_labeling/data_labeling_service.py +244 -0
  124. ads/data_labeling/interface/__init__.py +5 -0
  125. ads/data_labeling/interface/loader.py +16 -0
  126. ads/data_labeling/interface/parser.py +16 -0
  127. ads/data_labeling/interface/reader.py +23 -0
  128. ads/data_labeling/loader/__init__.py +5 -0
  129. ads/data_labeling/loader/file_loader.py +241 -0
  130. ads/data_labeling/metadata.py +110 -0
  131. ads/data_labeling/mixin/__init__.py +5 -0
  132. ads/data_labeling/mixin/data_labeling.py +232 -0
  133. ads/data_labeling/ner.py +129 -0
  134. ads/data_labeling/parser/__init__.py +5 -0
  135. ads/data_labeling/parser/dls_record_parser.py +388 -0
  136. ads/data_labeling/parser/export_metadata_parser.py +94 -0
  137. ads/data_labeling/parser/export_record_parser.py +473 -0
  138. ads/data_labeling/reader/__init__.py +5 -0
  139. ads/data_labeling/reader/dataset_reader.py +574 -0
  140. ads/data_labeling/reader/dls_record_reader.py +121 -0
  141. ads/data_labeling/reader/export_record_reader.py +62 -0
  142. ads/data_labeling/reader/jsonl_reader.py +75 -0
  143. ads/data_labeling/reader/metadata_reader.py +203 -0
  144. ads/data_labeling/reader/record_reader.py +263 -0
  145. ads/data_labeling/record.py +52 -0
  146. ads/data_labeling/visualizer/__init__.py +5 -0
  147. ads/data_labeling/visualizer/image_visualizer.py +525 -0
  148. ads/data_labeling/visualizer/text_visualizer.py +357 -0
  149. ads/database/__init__.py +5 -0
  150. ads/database/connection.py +338 -0
  151. ads/dataset/__init__.py +10 -0
  152. ads/dataset/capabilities.md +51 -0
  153. ads/dataset/classification_dataset.py +339 -0
  154. ads/dataset/correlation.py +226 -0
  155. ads/dataset/correlation_plot.py +563 -0
  156. ads/dataset/dask_series.py +173 -0
  157. ads/dataset/dataframe_transformer.py +110 -0
  158. ads/dataset/dataset.py +1979 -0
  159. ads/dataset/dataset_browser.py +360 -0
  160. ads/dataset/dataset_with_target.py +995 -0
  161. ads/dataset/exception.py +25 -0
  162. ads/dataset/factory.py +987 -0
  163. ads/dataset/feature_engineering_transformer.py +35 -0
  164. ads/dataset/feature_selection.py +107 -0
  165. ads/dataset/forecasting_dataset.py +26 -0
  166. ads/dataset/helper.py +1450 -0
  167. ads/dataset/label_encoder.py +99 -0
  168. ads/dataset/mixin/__init__.py +5 -0
  169. ads/dataset/mixin/dataset_accessor.py +134 -0
  170. ads/dataset/pipeline.py +58 -0
  171. ads/dataset/plot.py +710 -0
  172. ads/dataset/progress.py +86 -0
  173. ads/dataset/recommendation.py +297 -0
  174. ads/dataset/recommendation_transformer.py +502 -0
  175. ads/dataset/regression_dataset.py +14 -0
  176. ads/dataset/sampled_dataset.py +1050 -0
  177. ads/dataset/target.py +98 -0
  178. ads/dataset/timeseries.py +18 -0
  179. ads/dbmixin/__init__.py +5 -0
  180. ads/dbmixin/db_pandas_accessor.py +153 -0
  181. ads/environment/__init__.py +9 -0
  182. ads/environment/ml_runtime.py +66 -0
  183. ads/evaluations/README.md +14 -0
  184. ads/evaluations/__init__.py +109 -0
  185. ads/evaluations/evaluation_plot.py +983 -0
  186. ads/evaluations/evaluator.py +1334 -0
  187. ads/evaluations/statistical_metrics.py +543 -0
  188. ads/experiments/__init__.py +9 -0
  189. ads/experiments/capabilities.md +0 -0
  190. ads/explanations/__init__.py +21 -0
  191. ads/explanations/base_explainer.py +142 -0
  192. ads/explanations/capabilities.md +83 -0
  193. ads/explanations/explainer.py +190 -0
  194. ads/explanations/mlx_global_explainer.py +1050 -0
  195. ads/explanations/mlx_interface.py +386 -0
  196. ads/explanations/mlx_local_explainer.py +287 -0
  197. ads/explanations/mlx_whatif_explainer.py +201 -0
  198. ads/feature_engineering/__init__.py +20 -0
  199. ads/feature_engineering/accessor/__init__.py +5 -0
  200. ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
  201. ads/feature_engineering/accessor/mixin/__init__.py +5 -0
  202. ads/feature_engineering/accessor/mixin/correlation.py +166 -0
  203. ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
  204. ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
  205. ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
  206. ads/feature_engineering/accessor/mixin/utils.py +65 -0
  207. ads/feature_engineering/accessor/series_accessor.py +431 -0
  208. ads/feature_engineering/adsimage/__init__.py +5 -0
  209. ads/feature_engineering/adsimage/image.py +192 -0
  210. ads/feature_engineering/adsimage/image_reader.py +170 -0
  211. ads/feature_engineering/adsimage/interface/__init__.py +5 -0
  212. ads/feature_engineering/adsimage/interface/reader.py +19 -0
  213. ads/feature_engineering/adsstring/__init__.py +7 -0
  214. ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
  215. ads/feature_engineering/adsstring/string/__init__.py +8 -0
  216. ads/feature_engineering/data_schema.json +57 -0
  217. ads/feature_engineering/dataset/__init__.py +5 -0
  218. ads/feature_engineering/dataset/zip_code_data.py +42062 -0
  219. ads/feature_engineering/exceptions.py +40 -0
  220. ads/feature_engineering/feature_type/__init__.py +133 -0
  221. ads/feature_engineering/feature_type/address.py +184 -0
  222. ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
  223. ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
  224. ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
  225. ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
  226. ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
  227. ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
  228. ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
  229. ads/feature_engineering/feature_type/adsstring/string.py +258 -0
  230. ads/feature_engineering/feature_type/base.py +58 -0
  231. ads/feature_engineering/feature_type/boolean.py +183 -0
  232. ads/feature_engineering/feature_type/category.py +146 -0
  233. ads/feature_engineering/feature_type/constant.py +137 -0
  234. ads/feature_engineering/feature_type/continuous.py +151 -0
  235. ads/feature_engineering/feature_type/creditcard.py +314 -0
  236. ads/feature_engineering/feature_type/datetime.py +190 -0
  237. ads/feature_engineering/feature_type/discrete.py +134 -0
  238. ads/feature_engineering/feature_type/document.py +43 -0
  239. ads/feature_engineering/feature_type/gis.py +251 -0
  240. ads/feature_engineering/feature_type/handler/__init__.py +5 -0
  241. ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
  242. ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
  243. ads/feature_engineering/feature_type/handler/warnings.py +128 -0
  244. ads/feature_engineering/feature_type/integer.py +142 -0
  245. ads/feature_engineering/feature_type/ip_address.py +144 -0
  246. ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
  247. ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
  248. ads/feature_engineering/feature_type/lat_long.py +256 -0
  249. ads/feature_engineering/feature_type/object.py +43 -0
  250. ads/feature_engineering/feature_type/ordinal.py +132 -0
  251. ads/feature_engineering/feature_type/phone_number.py +135 -0
  252. ads/feature_engineering/feature_type/string.py +171 -0
  253. ads/feature_engineering/feature_type/text.py +93 -0
  254. ads/feature_engineering/feature_type/unknown.py +43 -0
  255. ads/feature_engineering/feature_type/zip_code.py +164 -0
  256. ads/feature_engineering/feature_type_manager.py +406 -0
  257. ads/feature_engineering/schema.py +795 -0
  258. ads/feature_engineering/utils.py +245 -0
  259. ads/feature_store/.readthedocs.yaml +19 -0
  260. ads/feature_store/README.md +65 -0
  261. ads/feature_store/__init__.py +9 -0
  262. ads/feature_store/common/__init__.py +0 -0
  263. ads/feature_store/common/enums.py +339 -0
  264. ads/feature_store/common/exceptions.py +18 -0
  265. ads/feature_store/common/spark_session_singleton.py +125 -0
  266. ads/feature_store/common/utils/__init__.py +0 -0
  267. ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
  268. ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
  269. ads/feature_store/common/utils/transformation_utils.py +82 -0
  270. ads/feature_store/common/utils/utility.py +403 -0
  271. ads/feature_store/data_validation/__init__.py +0 -0
  272. ads/feature_store/data_validation/great_expectation.py +129 -0
  273. ads/feature_store/dataset.py +1230 -0
  274. ads/feature_store/dataset_job.py +530 -0
  275. ads/feature_store/docs/Dockerfile +7 -0
  276. ads/feature_store/docs/Makefile +44 -0
  277. ads/feature_store/docs/conf.py +28 -0
  278. ads/feature_store/docs/requirements.txt +14 -0
  279. ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
  280. ads/feature_store/docs/source/cicd.rst +137 -0
  281. ads/feature_store/docs/source/conf.py +86 -0
  282. ads/feature_store/docs/source/data_versioning.rst +33 -0
  283. ads/feature_store/docs/source/dataset.rst +388 -0
  284. ads/feature_store/docs/source/dataset_job.rst +27 -0
  285. ads/feature_store/docs/source/demo.rst +70 -0
  286. ads/feature_store/docs/source/entity.rst +78 -0
  287. ads/feature_store/docs/source/feature_group.rst +624 -0
  288. ads/feature_store/docs/source/feature_group_job.rst +29 -0
  289. ads/feature_store/docs/source/feature_store.rst +122 -0
  290. ads/feature_store/docs/source/feature_store_class.rst +123 -0
  291. ads/feature_store/docs/source/feature_validation.rst +66 -0
  292. ads/feature_store/docs/source/figures/cicd.png +0 -0
  293. ads/feature_store/docs/source/figures/data_validation.png +0 -0
  294. ads/feature_store/docs/source/figures/data_versioning.png +0 -0
  295. ads/feature_store/docs/source/figures/dataset.gif +0 -0
  296. ads/feature_store/docs/source/figures/dataset.png +0 -0
  297. ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
  298. ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
  299. ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
  300. ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
  301. ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
  302. ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
  303. ads/feature_store/docs/source/figures/entity.png +0 -0
  304. ads/feature_store/docs/source/figures/feature_group.png +0 -0
  305. ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
  306. ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
  307. ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
  308. ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
  309. ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
  310. ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
  311. ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
  312. ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
  313. ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
  314. ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
  315. ads/feature_store/docs/source/figures/overview.png +0 -0
  316. ads/feature_store/docs/source/figures/resource_manager.png +0 -0
  317. ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
  318. ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
  319. ads/feature_store/docs/source/figures/stats_1.png +0 -0
  320. ads/feature_store/docs/source/figures/stats_2.png +0 -0
  321. ads/feature_store/docs/source/figures/stats_d.png +0 -0
  322. ads/feature_store/docs/source/figures/stats_fg.png +0 -0
  323. ads/feature_store/docs/source/figures/transformation.png +0 -0
  324. ads/feature_store/docs/source/figures/transformations.gif +0 -0
  325. ads/feature_store/docs/source/figures/validation.png +0 -0
  326. ads/feature_store/docs/source/figures/validation_fg.png +0 -0
  327. ads/feature_store/docs/source/figures/validation_results.png +0 -0
  328. ads/feature_store/docs/source/figures/validation_summary.png +0 -0
  329. ads/feature_store/docs/source/index.rst +81 -0
  330. ads/feature_store/docs/source/module.rst +8 -0
  331. ads/feature_store/docs/source/notebook.rst +94 -0
  332. ads/feature_store/docs/source/overview.rst +47 -0
  333. ads/feature_store/docs/source/quickstart.rst +176 -0
  334. ads/feature_store/docs/source/release_notes.rst +194 -0
  335. ads/feature_store/docs/source/setup_feature_store.rst +81 -0
  336. ads/feature_store/docs/source/statistics.rst +58 -0
  337. ads/feature_store/docs/source/transformation.rst +199 -0
  338. ads/feature_store/docs/source/ui.rst +65 -0
  339. ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
  340. ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
  341. ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
  342. ads/feature_store/entity.py +718 -0
  343. ads/feature_store/execution_strategy/__init__.py +0 -0
  344. ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
  345. ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
  346. ads/feature_store/execution_strategy/engine/__init__.py +0 -0
  347. ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
  348. ads/feature_store/execution_strategy/execution_strategy.py +113 -0
  349. ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
  350. ads/feature_store/execution_strategy/spark/__init__.py +0 -0
  351. ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
  352. ads/feature_store/feature.py +192 -0
  353. ads/feature_store/feature_group.py +1494 -0
  354. ads/feature_store/feature_group_expectation.py +346 -0
  355. ads/feature_store/feature_group_job.py +602 -0
  356. ads/feature_store/feature_lineage/__init__.py +0 -0
  357. ads/feature_store/feature_lineage/graphviz_service.py +180 -0
  358. ads/feature_store/feature_option_details.py +50 -0
  359. ads/feature_store/feature_statistics/__init__.py +0 -0
  360. ads/feature_store/feature_statistics/statistics_service.py +99 -0
  361. ads/feature_store/feature_store.py +699 -0
  362. ads/feature_store/feature_store_registrar.py +518 -0
  363. ads/feature_store/input_feature_detail.py +149 -0
  364. ads/feature_store/mixin/__init__.py +4 -0
  365. ads/feature_store/mixin/oci_feature_store.py +145 -0
  366. ads/feature_store/model_details.py +73 -0
  367. ads/feature_store/query/__init__.py +0 -0
  368. ads/feature_store/query/filter.py +266 -0
  369. ads/feature_store/query/generator/__init__.py +0 -0
  370. ads/feature_store/query/generator/query_generator.py +298 -0
  371. ads/feature_store/query/join.py +161 -0
  372. ads/feature_store/query/query.py +403 -0
  373. ads/feature_store/query/validator/__init__.py +0 -0
  374. ads/feature_store/query/validator/query_validator.py +57 -0
  375. ads/feature_store/response/__init__.py +0 -0
  376. ads/feature_store/response/response_builder.py +68 -0
  377. ads/feature_store/service/__init__.py +0 -0
  378. ads/feature_store/service/oci_dataset.py +139 -0
  379. ads/feature_store/service/oci_dataset_job.py +199 -0
  380. ads/feature_store/service/oci_entity.py +125 -0
  381. ads/feature_store/service/oci_feature_group.py +164 -0
  382. ads/feature_store/service/oci_feature_group_job.py +214 -0
  383. ads/feature_store/service/oci_feature_store.py +182 -0
  384. ads/feature_store/service/oci_lineage.py +87 -0
  385. ads/feature_store/service/oci_transformation.py +104 -0
  386. ads/feature_store/statistics/__init__.py +0 -0
  387. ads/feature_store/statistics/abs_feature_value.py +49 -0
  388. ads/feature_store/statistics/charts/__init__.py +0 -0
  389. ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
  390. ads/feature_store/statistics/charts/box_plot.py +148 -0
  391. ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
  392. ads/feature_store/statistics/charts/probability_distribution.py +68 -0
  393. ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
  394. ads/feature_store/statistics/feature_stat.py +126 -0
  395. ads/feature_store/statistics/generic_feature_value.py +33 -0
  396. ads/feature_store/statistics/statistics.py +41 -0
  397. ads/feature_store/statistics_config.py +101 -0
  398. ads/feature_store/templates/feature_store_template.yaml +45 -0
  399. ads/feature_store/transformation.py +499 -0
  400. ads/feature_store/validation_output.py +57 -0
  401. ads/hpo/__init__.py +9 -0
  402. ads/hpo/_imports.py +91 -0
  403. ads/hpo/ads_search_space.py +439 -0
  404. ads/hpo/distributions.py +325 -0
  405. ads/hpo/objective.py +280 -0
  406. ads/hpo/search_cv.py +1657 -0
  407. ads/hpo/stopping_criterion.py +75 -0
  408. ads/hpo/tuner_artifact.py +413 -0
  409. ads/hpo/utils.py +91 -0
  410. ads/hpo/validation.py +140 -0
  411. ads/hpo/visualization/__init__.py +5 -0
  412. ads/hpo/visualization/_contour.py +23 -0
  413. ads/hpo/visualization/_edf.py +20 -0
  414. ads/hpo/visualization/_intermediate_values.py +21 -0
  415. ads/hpo/visualization/_optimization_history.py +25 -0
  416. ads/hpo/visualization/_parallel_coordinate.py +169 -0
  417. ads/hpo/visualization/_param_importances.py +26 -0
  418. ads/jobs/__init__.py +53 -0
  419. ads/jobs/ads_job.py +663 -0
  420. ads/jobs/builders/__init__.py +5 -0
  421. ads/jobs/builders/base.py +156 -0
  422. ads/jobs/builders/infrastructure/__init__.py +6 -0
  423. ads/jobs/builders/infrastructure/base.py +165 -0
  424. ads/jobs/builders/infrastructure/dataflow.py +1252 -0
  425. ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
  426. ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
  427. ads/jobs/builders/infrastructure/utils.py +65 -0
  428. ads/jobs/builders/runtimes/__init__.py +5 -0
  429. ads/jobs/builders/runtimes/artifact.py +338 -0
  430. ads/jobs/builders/runtimes/base.py +325 -0
  431. ads/jobs/builders/runtimes/container_runtime.py +242 -0
  432. ads/jobs/builders/runtimes/python_runtime.py +1016 -0
  433. ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
  434. ads/jobs/cli.py +104 -0
  435. ads/jobs/env_var_parser.py +131 -0
  436. ads/jobs/extension.py +160 -0
  437. ads/jobs/schema/__init__.py +5 -0
  438. ads/jobs/schema/infrastructure_schema.json +116 -0
  439. ads/jobs/schema/job_schema.json +42 -0
  440. ads/jobs/schema/runtime_schema.json +183 -0
  441. ads/jobs/schema/validator.py +141 -0
  442. ads/jobs/serializer.py +296 -0
  443. ads/jobs/templates/__init__.py +5 -0
  444. ads/jobs/templates/container.py +6 -0
  445. ads/jobs/templates/driver_notebook.py +177 -0
  446. ads/jobs/templates/driver_oci.py +500 -0
  447. ads/jobs/templates/driver_python.py +48 -0
  448. ads/jobs/templates/driver_pytorch.py +852 -0
  449. ads/jobs/templates/driver_utils.py +615 -0
  450. ads/jobs/templates/hostname_from_env.c +55 -0
  451. ads/jobs/templates/oci_metrics.py +181 -0
  452. ads/jobs/utils.py +104 -0
  453. ads/llm/__init__.py +28 -0
  454. ads/llm/autogen/__init__.py +2 -0
  455. ads/llm/autogen/constants.py +15 -0
  456. ads/llm/autogen/reports/__init__.py +2 -0
  457. ads/llm/autogen/reports/base.py +67 -0
  458. ads/llm/autogen/reports/data.py +103 -0
  459. ads/llm/autogen/reports/session.py +526 -0
  460. ads/llm/autogen/reports/templates/chat_box.html +13 -0
  461. ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
  462. ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
  463. ads/llm/autogen/reports/utils.py +56 -0
  464. ads/llm/autogen/v02/__init__.py +4 -0
  465. ads/llm/autogen/v02/client.py +295 -0
  466. ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
  467. ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
  468. ads/llm/autogen/v02/loggers/__init__.py +6 -0
  469. ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
  470. ads/llm/autogen/v02/loggers/session_logger.py +580 -0
  471. ads/llm/autogen/v02/loggers/utils.py +86 -0
  472. ads/llm/autogen/v02/runtime_logging.py +163 -0
  473. ads/llm/chain.py +268 -0
  474. ads/llm/chat_template.py +31 -0
  475. ads/llm/deploy.py +63 -0
  476. ads/llm/guardrails/__init__.py +5 -0
  477. ads/llm/guardrails/base.py +442 -0
  478. ads/llm/guardrails/huggingface.py +44 -0
  479. ads/llm/langchain/__init__.py +5 -0
  480. ads/llm/langchain/plugins/__init__.py +5 -0
  481. ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
  482. ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
  483. ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
  484. ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
  485. ads/llm/langchain/plugins/llms/__init__.py +5 -0
  486. ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
  487. ads/llm/requirements.txt +3 -0
  488. ads/llm/serialize.py +219 -0
  489. ads/llm/serializers/__init__.py +0 -0
  490. ads/llm/serializers/retrieval_qa.py +153 -0
  491. ads/llm/serializers/runnable_parallel.py +27 -0
  492. ads/llm/templates/score_chain.jinja2 +155 -0
  493. ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
  494. ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
  495. ads/model/__init__.py +52 -0
  496. ads/model/artifact.py +573 -0
  497. ads/model/artifact_downloader.py +254 -0
  498. ads/model/artifact_uploader.py +267 -0
  499. ads/model/base_properties.py +238 -0
  500. ads/model/common/.model-ignore +66 -0
  501. ads/model/common/__init__.py +5 -0
  502. ads/model/common/utils.py +142 -0
  503. ads/model/datascience_model.py +2635 -0
  504. ads/model/deployment/__init__.py +20 -0
  505. ads/model/deployment/common/__init__.py +5 -0
  506. ads/model/deployment/common/utils.py +308 -0
  507. ads/model/deployment/model_deployer.py +466 -0
  508. ads/model/deployment/model_deployment.py +1846 -0
  509. ads/model/deployment/model_deployment_infrastructure.py +671 -0
  510. ads/model/deployment/model_deployment_properties.py +493 -0
  511. ads/model/deployment/model_deployment_runtime.py +838 -0
  512. ads/model/extractor/__init__.py +5 -0
  513. ads/model/extractor/automl_extractor.py +74 -0
  514. ads/model/extractor/embedding_onnx_extractor.py +80 -0
  515. ads/model/extractor/huggingface_extractor.py +88 -0
  516. ads/model/extractor/keras_extractor.py +84 -0
  517. ads/model/extractor/lightgbm_extractor.py +93 -0
  518. ads/model/extractor/model_info_extractor.py +114 -0
  519. ads/model/extractor/model_info_extractor_factory.py +105 -0
  520. ads/model/extractor/pytorch_extractor.py +87 -0
  521. ads/model/extractor/sklearn_extractor.py +112 -0
  522. ads/model/extractor/spark_extractor.py +89 -0
  523. ads/model/extractor/tensorflow_extractor.py +85 -0
  524. ads/model/extractor/xgboost_extractor.py +94 -0
  525. ads/model/framework/__init__.py +5 -0
  526. ads/model/framework/automl_model.py +178 -0
  527. ads/model/framework/embedding_onnx_model.py +438 -0
  528. ads/model/framework/huggingface_model.py +399 -0
  529. ads/model/framework/lightgbm_model.py +266 -0
  530. ads/model/framework/pytorch_model.py +266 -0
  531. ads/model/framework/sklearn_model.py +250 -0
  532. ads/model/framework/spark_model.py +326 -0
  533. ads/model/framework/tensorflow_model.py +254 -0
  534. ads/model/framework/xgboost_model.py +258 -0
  535. ads/model/generic_model.py +3518 -0
  536. ads/model/model_artifact_boilerplate/README.md +381 -0
  537. ads/model/model_artifact_boilerplate/__init__.py +5 -0
  538. ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
  539. ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
  540. ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
  541. ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
  542. ads/model/model_artifact_boilerplate/score.py +61 -0
  543. ads/model/model_file_description_schema.json +68 -0
  544. ads/model/model_introspect.py +331 -0
  545. ads/model/model_metadata.py +1810 -0
  546. ads/model/model_metadata_mixin.py +460 -0
  547. ads/model/model_properties.py +63 -0
  548. ads/model/model_version_set.py +739 -0
  549. ads/model/runtime/__init__.py +5 -0
  550. ads/model/runtime/env_info.py +306 -0
  551. ads/model/runtime/model_deployment_details.py +37 -0
  552. ads/model/runtime/model_provenance_details.py +58 -0
  553. ads/model/runtime/runtime_info.py +81 -0
  554. ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
  555. ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
  556. ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
  557. ads/model/runtime/utils.py +201 -0
  558. ads/model/serde/__init__.py +5 -0
  559. ads/model/serde/common.py +40 -0
  560. ads/model/serde/model_input.py +547 -0
  561. ads/model/serde/model_serializer.py +1184 -0
  562. ads/model/service/__init__.py +5 -0
  563. ads/model/service/oci_datascience_model.py +1076 -0
  564. ads/model/service/oci_datascience_model_deployment.py +500 -0
  565. ads/model/service/oci_datascience_model_version_set.py +176 -0
  566. ads/model/transformer/__init__.py +5 -0
  567. ads/model/transformer/onnx_transformer.py +324 -0
  568. ads/mysqldb/__init__.py +5 -0
  569. ads/mysqldb/mysql_db.py +227 -0
  570. ads/opctl/__init__.py +18 -0
  571. ads/opctl/anomaly_detection.py +11 -0
  572. ads/opctl/backend/__init__.py +5 -0
  573. ads/opctl/backend/ads_dataflow.py +353 -0
  574. ads/opctl/backend/ads_ml_job.py +710 -0
  575. ads/opctl/backend/ads_ml_pipeline.py +164 -0
  576. ads/opctl/backend/ads_model_deployment.py +209 -0
  577. ads/opctl/backend/base.py +146 -0
  578. ads/opctl/backend/local.py +1053 -0
  579. ads/opctl/backend/marketplace/__init__.py +9 -0
  580. ads/opctl/backend/marketplace/helm_helper.py +173 -0
  581. ads/opctl/backend/marketplace/local_marketplace.py +271 -0
  582. ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
  583. ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
  584. ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
  585. ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
  586. ads/opctl/backend/marketplace/models/__init__.py +5 -0
  587. ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
  588. ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
  589. ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
  590. ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
  591. ads/opctl/cli.py +707 -0
  592. ads/opctl/cmds.py +869 -0
  593. ads/opctl/conda/__init__.py +5 -0
  594. ads/opctl/conda/cli.py +193 -0
  595. ads/opctl/conda/cmds.py +749 -0
  596. ads/opctl/conda/config.yaml +34 -0
  597. ads/opctl/conda/manifest_template.yaml +13 -0
  598. ads/opctl/conda/multipart_uploader.py +188 -0
  599. ads/opctl/conda/pack.py +89 -0
  600. ads/opctl/config/__init__.py +5 -0
  601. ads/opctl/config/base.py +57 -0
  602. ads/opctl/config/diagnostics/__init__.py +5 -0
  603. ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
  604. ads/opctl/config/merger.py +255 -0
  605. ads/opctl/config/resolver.py +297 -0
  606. ads/opctl/config/utils.py +79 -0
  607. ads/opctl/config/validator.py +17 -0
  608. ads/opctl/config/versioner.py +68 -0
  609. ads/opctl/config/yaml_parsers/__init__.py +7 -0
  610. ads/opctl/config/yaml_parsers/base.py +58 -0
  611. ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
  612. ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
  613. ads/opctl/constants.py +66 -0
  614. ads/opctl/decorator/__init__.py +5 -0
  615. ads/opctl/decorator/common.py +129 -0
  616. ads/opctl/diagnostics/__init__.py +5 -0
  617. ads/opctl/diagnostics/__main__.py +25 -0
  618. ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
  619. ads/opctl/diagnostics/check_requirements.py +144 -0
  620. ads/opctl/diagnostics/requirement_exception.py +9 -0
  621. ads/opctl/distributed/README.md +109 -0
  622. ads/opctl/distributed/__init__.py +5 -0
  623. ads/opctl/distributed/certificates.py +32 -0
  624. ads/opctl/distributed/cli.py +207 -0
  625. ads/opctl/distributed/cmds.py +731 -0
  626. ads/opctl/distributed/common/__init__.py +5 -0
  627. ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
  628. ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
  629. ads/opctl/distributed/common/cluster_config_helper.py +103 -0
  630. ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
  631. ads/opctl/distributed/common/cluster_runner.py +54 -0
  632. ads/opctl/distributed/common/framework_factory.py +29 -0
  633. ads/opctl/docker/Dockerfile.job +103 -0
  634. ads/opctl/docker/Dockerfile.job.arm +107 -0
  635. ads/opctl/docker/Dockerfile.job.gpu +175 -0
  636. ads/opctl/docker/base-env.yaml +13 -0
  637. ads/opctl/docker/cuda.repo +6 -0
  638. ads/opctl/docker/operator/.dockerignore +0 -0
  639. ads/opctl/docker/operator/Dockerfile +41 -0
  640. ads/opctl/docker/operator/Dockerfile.gpu +85 -0
  641. ads/opctl/docker/operator/cuda.repo +6 -0
  642. ads/opctl/docker/operator/environment.yaml +8 -0
  643. ads/opctl/forecast.py +11 -0
  644. ads/opctl/index.yaml +3 -0
  645. ads/opctl/model/__init__.py +5 -0
  646. ads/opctl/model/cli.py +65 -0
  647. ads/opctl/model/cmds.py +73 -0
  648. ads/opctl/operator/README.md +4 -0
  649. ads/opctl/operator/__init__.py +31 -0
  650. ads/opctl/operator/cli.py +344 -0
  651. ads/opctl/operator/cmd.py +596 -0
  652. ads/opctl/operator/common/__init__.py +5 -0
  653. ads/opctl/operator/common/backend_factory.py +460 -0
  654. ads/opctl/operator/common/const.py +27 -0
  655. ads/opctl/operator/common/data/synthetic.csv +16001 -0
  656. ads/opctl/operator/common/dictionary_merger.py +148 -0
  657. ads/opctl/operator/common/errors.py +42 -0
  658. ads/opctl/operator/common/operator_config.py +99 -0
  659. ads/opctl/operator/common/operator_loader.py +811 -0
  660. ads/opctl/operator/common/operator_schema.yaml +130 -0
  661. ads/opctl/operator/common/operator_yaml_generator.py +152 -0
  662. ads/opctl/operator/common/utils.py +208 -0
  663. ads/opctl/operator/lowcode/__init__.py +5 -0
  664. ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
  665. ads/opctl/operator/lowcode/anomaly/README.md +207 -0
  666. ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
  667. ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
  668. ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
  669. ads/opctl/operator/lowcode/anomaly/const.py +167 -0
  670. ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
  671. ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
  672. ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
  673. ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
  674. ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
  675. ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
  676. ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
  677. ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
  678. ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
  679. ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
  680. ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
  681. ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
  682. ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
  683. ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
  684. ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
  685. ads/opctl/operator/lowcode/common/__init__.py +5 -0
  686. ads/opctl/operator/lowcode/common/const.py +10 -0
  687. ads/opctl/operator/lowcode/common/data.py +116 -0
  688. ads/opctl/operator/lowcode/common/errors.py +47 -0
  689. ads/opctl/operator/lowcode/common/transformations.py +296 -0
  690. ads/opctl/operator/lowcode/common/utils.py +384 -0
  691. ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
  692. ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
  693. ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
  694. ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
  695. ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
  696. ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
  697. ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
  698. ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
  699. ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
  700. ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
  701. ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
  702. ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
  703. ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
  704. ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
  705. ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
  706. ads/opctl/operator/lowcode/forecast/README.md +209 -0
  707. ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
  708. ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
  709. ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
  710. ads/opctl/operator/lowcode/forecast/const.py +92 -0
  711. ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
  712. ads/opctl/operator/lowcode/forecast/errors.py +26 -0
  713. ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
  714. ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
  715. ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
  716. ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
  717. ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
  718. ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
  719. ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
  720. ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
  721. ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
  722. ads/opctl/operator/lowcode/forecast/model/prophet.py +450 -0
  723. ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
  724. ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
  725. ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
  726. ads/opctl/operator/lowcode/forecast/utils.py +397 -0
  727. ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
  728. ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
  729. ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
  730. ads/opctl/operator/lowcode/pii/MLoperator +17 -0
  731. ads/opctl/operator/lowcode/pii/README.md +208 -0
  732. ads/opctl/operator/lowcode/pii/__init__.py +5 -0
  733. ads/opctl/operator/lowcode/pii/__main__.py +78 -0
  734. ads/opctl/operator/lowcode/pii/cmd.py +39 -0
  735. ads/opctl/operator/lowcode/pii/constant.py +84 -0
  736. ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
  737. ads/opctl/operator/lowcode/pii/errors.py +27 -0
  738. ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
  739. ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
  740. ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
  741. ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
  742. ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
  743. ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
  744. ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
  745. ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
  746. ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
  747. ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
  748. ads/opctl/operator/lowcode/pii/model/report.py +487 -0
  749. ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
  750. ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
  751. ads/opctl/operator/lowcode/pii/utils.py +43 -0
  752. ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
  753. ads/opctl/operator/lowcode/recommender/README.md +206 -0
  754. ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
  755. ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
  756. ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
  757. ads/opctl/operator/lowcode/recommender/constant.py +30 -0
  758. ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
  759. ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
  760. ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
  761. ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
  762. ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
  763. ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
  764. ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
  765. ads/opctl/operator/lowcode/recommender/utils.py +13 -0
  766. ads/opctl/operator/runtime/__init__.py +5 -0
  767. ads/opctl/operator/runtime/const.py +17 -0
  768. ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
  769. ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
  770. ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
  771. ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
  772. ads/opctl/operator/runtime/runtime.py +115 -0
  773. ads/opctl/schema.yaml.yml +36 -0
  774. ads/opctl/script.py +40 -0
  775. ads/opctl/spark/__init__.py +5 -0
  776. ads/opctl/spark/cli.py +43 -0
  777. ads/opctl/spark/cmds.py +147 -0
  778. ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
  779. ads/opctl/utils.py +344 -0
  780. ads/oracledb/__init__.py +5 -0
  781. ads/oracledb/oracle_db.py +346 -0
  782. ads/pipeline/__init__.py +39 -0
  783. ads/pipeline/ads_pipeline.py +2279 -0
  784. ads/pipeline/ads_pipeline_run.py +772 -0
  785. ads/pipeline/ads_pipeline_step.py +605 -0
  786. ads/pipeline/builders/__init__.py +5 -0
  787. ads/pipeline/builders/infrastructure/__init__.py +5 -0
  788. ads/pipeline/builders/infrastructure/custom_script.py +32 -0
  789. ads/pipeline/cli.py +119 -0
  790. ads/pipeline/extension.py +291 -0
  791. ads/pipeline/schema/__init__.py +5 -0
  792. ads/pipeline/schema/cs_step_schema.json +35 -0
  793. ads/pipeline/schema/ml_step_schema.json +31 -0
  794. ads/pipeline/schema/pipeline_schema.json +71 -0
  795. ads/pipeline/visualizer/__init__.py +5 -0
  796. ads/pipeline/visualizer/base.py +570 -0
  797. ads/pipeline/visualizer/graph_renderer.py +272 -0
  798. ads/pipeline/visualizer/text_renderer.py +84 -0
  799. ads/secrets/__init__.py +11 -0
  800. ads/secrets/adb.py +386 -0
  801. ads/secrets/auth_token.py +86 -0
  802. ads/secrets/big_data_service.py +365 -0
  803. ads/secrets/mysqldb.py +149 -0
  804. ads/secrets/oracledb.py +160 -0
  805. ads/secrets/secrets.py +407 -0
  806. ads/telemetry/__init__.py +7 -0
  807. ads/telemetry/base.py +69 -0
  808. ads/telemetry/client.py +122 -0
  809. ads/telemetry/telemetry.py +257 -0
  810. ads/templates/dataflow_pyspark.jinja2 +13 -0
  811. ads/templates/dataflow_sparksql.jinja2 +22 -0
  812. ads/templates/func.jinja2 +20 -0
  813. ads/templates/schemas/openapi.json +1740 -0
  814. ads/templates/score-pkl.jinja2 +173 -0
  815. ads/templates/score.jinja2 +322 -0
  816. ads/templates/score_embedding_onnx.jinja2 +202 -0
  817. ads/templates/score_generic.jinja2 +165 -0
  818. ads/templates/score_huggingface_pipeline.jinja2 +217 -0
  819. ads/templates/score_lightgbm.jinja2 +185 -0
  820. ads/templates/score_onnx.jinja2 +407 -0
  821. ads/templates/score_onnx_new.jinja2 +473 -0
  822. ads/templates/score_oracle_automl.jinja2 +185 -0
  823. ads/templates/score_pyspark.jinja2 +154 -0
  824. ads/templates/score_pytorch.jinja2 +219 -0
  825. ads/templates/score_scikit-learn.jinja2 +184 -0
  826. ads/templates/score_tensorflow.jinja2 +184 -0
  827. ads/templates/score_xgboost.jinja2 +178 -0
  828. ads/text_dataset/__init__.py +5 -0
  829. ads/text_dataset/backends.py +211 -0
  830. ads/text_dataset/dataset.py +445 -0
  831. ads/text_dataset/extractor.py +207 -0
  832. ads/text_dataset/options.py +53 -0
  833. ads/text_dataset/udfs.py +22 -0
  834. ads/text_dataset/utils.py +49 -0
  835. ads/type_discovery/__init__.py +9 -0
  836. ads/type_discovery/abstract_detector.py +21 -0
  837. ads/type_discovery/constant_detector.py +41 -0
  838. ads/type_discovery/continuous_detector.py +54 -0
  839. ads/type_discovery/credit_card_detector.py +99 -0
  840. ads/type_discovery/datetime_detector.py +92 -0
  841. ads/type_discovery/discrete_detector.py +118 -0
  842. ads/type_discovery/document_detector.py +146 -0
  843. ads/type_discovery/ip_detector.py +68 -0
  844. ads/type_discovery/latlon_detector.py +90 -0
  845. ads/type_discovery/phone_number_detector.py +63 -0
  846. ads/type_discovery/type_discovery_driver.py +87 -0
  847. ads/type_discovery/typed_feature.py +594 -0
  848. ads/type_discovery/unknown_detector.py +41 -0
  849. ads/type_discovery/zipcode_detector.py +48 -0
  850. ads/vault/__init__.py +7 -0
  851. ads/vault/vault.py +237 -0
  852. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/METADATA +150 -149
  853. oracle_ads-2.13.10.dist-info/RECORD +858 -0
  854. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/WHEEL +1 -2
  855. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/entry_points.txt +2 -1
  856. oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
  857. oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
  858. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,836 @@
1
+ #!/usr/bin/env python
2
+ # Copyright (c) 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 asyncio
6
+ import functools
7
+ import json
8
+ import logging
9
+ import time
10
+ from types import TracebackType
11
+ from typing import (
12
+ Any,
13
+ AnyStr,
14
+ AsyncIterator,
15
+ Callable,
16
+ Dict,
17
+ Iterator,
18
+ List,
19
+ Mapping,
20
+ Optional,
21
+ Sequence,
22
+ Tuple,
23
+ Type,
24
+ TypeVar,
25
+ Union,
26
+ )
27
+
28
+ import httpx
29
+ import oci
30
+ import requests
31
+ from tenacity import (
32
+ before_sleep_log,
33
+ retry,
34
+ retry_if_exception,
35
+ stop_after_attempt,
36
+ stop_after_delay,
37
+ wait_exponential,
38
+ wait_random_exponential,
39
+ )
40
+
41
+ from ads.common import auth as authutil
42
+
43
+ DEFAULT_RETRIES = 3
44
+ DEFAULT_BACKOFF_FACTOR = 3
45
+ TIMEOUT = 600 # Timeout in seconds
46
+ STATUS_FORCE_LIST = [429, 500, 502, 503, 504]
47
+ DEFAULT_ENCODING = "utf-8"
48
+
49
+ _T = TypeVar("_T", bound="BaseClient")
50
+
51
+ logger = logging.getLogger(__name__)
52
+
53
+
54
+ class HttpxOCIAuth(httpx.Auth):
55
+ """
56
+ Custom HTTPX authentication class that uses the OCI Signer for request signing.
57
+
58
+ Attributes:
59
+ signer (oci.signer.Signer): The OCI signer used to sign requests.
60
+ """
61
+
62
+ def __init__(self, signer: Optional[oci.signer.Signer] = None):
63
+ """
64
+ Initialize the HttpxOCIAuth instance.
65
+
66
+ Args:
67
+ signer (oci.signer.Signer): The OCI signer to use for signing requests.
68
+ """
69
+
70
+ self.signer = signer or authutil.default_signer().get("signer")
71
+
72
+ def auth_flow(self, request: httpx.Request) -> Iterator[httpx.Request]:
73
+ """
74
+ The authentication flow that signs the HTTPX request using the OCI signer.
75
+
76
+ Args:
77
+ request (httpx.Request): The outgoing HTTPX request to be signed.
78
+
79
+ Yields:
80
+ httpx.Request: The signed HTTPX request.
81
+ """
82
+ # Create a requests.Request object from the HTTPX request
83
+ req = requests.Request(
84
+ method=request.method,
85
+ url=str(request.url),
86
+ headers=dict(request.headers),
87
+ data=request.content,
88
+ )
89
+ prepared_request = req.prepare()
90
+
91
+ # Sign the request using the OCI Signer
92
+ self.signer.do_request_sign(prepared_request)
93
+
94
+ # Update the original HTTPX request with the signed headers
95
+ request.headers.update(prepared_request.headers)
96
+
97
+ # Proceed with the request
98
+ yield request
99
+
100
+
101
+ class ExtendedRequestError(Exception):
102
+ """
103
+ Custom exception for handling request errors with additional context.
104
+
105
+ Attributes:
106
+ original_exception (Exception): The original exception that caused the error.
107
+ response_text (str): The text of the response received from the request, if available.
108
+ """
109
+
110
+ def __init__(self, message: str, original_exception: Exception, response_text: str):
111
+ """
112
+ Initialize the ExtendedRequestError.
113
+
114
+ Args:
115
+ message (str): The error message associated with the exception.
116
+ original_exception (Exception): The original exception that caused the error.
117
+ response_text (str): The text of the response received from the request, if available.
118
+ """
119
+ super().__init__(message)
120
+ self.original_exception = original_exception
121
+ self.response_text = response_text
122
+
123
+
124
+ def _should_retry_exception(e: ExtendedRequestError) -> bool:
125
+ """
126
+ Determine whether the exception should trigger a retry.
127
+
128
+ Args:
129
+ e (ExtendedRequestError): The exception raised.
130
+
131
+ Returns:
132
+ bool: True if the exception should trigger a retry, False otherwise.
133
+ """
134
+ original_exception = e.original_exception if hasattr(e, "original_exception") else e
135
+ if isinstance(original_exception, httpx.HTTPStatusError):
136
+ return original_exception.response.status_code in STATUS_FORCE_LIST
137
+ elif isinstance(original_exception, httpx.RequestError):
138
+ return True
139
+ return False
140
+
141
+
142
+ def _create_retry_decorator(
143
+ max_retries: int,
144
+ backoff_factor: float,
145
+ random_exponential: bool = False,
146
+ stop_after_delay_seconds: Optional[float] = None,
147
+ min_seconds: float = 0,
148
+ max_seconds: float = 60,
149
+ ) -> Callable[[Any], Any]:
150
+ """
151
+ Create a tenacity retry decorator with the specified configuration.
152
+
153
+ Args:
154
+ max_retries (int): The maximum number of retry attempts.
155
+ backoff_factor (float): The backoff factor for calculating retry delays.
156
+ random_exponential (bool): Whether to use random exponential backoff.
157
+ stop_after_delay_seconds (Optional[float]): Maximum total time to retry.
158
+ min_seconds (float): Minimum wait time between retries.
159
+ max_seconds (float): Maximum wait time between retries.
160
+
161
+ Returns:
162
+ Callable[[Any], Any]: A tenacity retry decorator configured with the specified strategy.
163
+ """
164
+ wait_strategy = (
165
+ wait_random_exponential(min=min_seconds, max=max_seconds)
166
+ if random_exponential
167
+ else wait_exponential(
168
+ multiplier=backoff_factor, min=min_seconds, max=max_seconds
169
+ )
170
+ )
171
+
172
+ stop_strategy = stop_after_attempt(max_retries)
173
+ if stop_after_delay_seconds is not None:
174
+ stop_strategy = stop_strategy | stop_after_delay(stop_after_delay_seconds)
175
+
176
+ retry_strategy = retry_if_exception(_should_retry_exception)
177
+ return retry(
178
+ wait=wait_strategy,
179
+ stop=stop_strategy,
180
+ retry=retry_strategy,
181
+ reraise=True,
182
+ before_sleep=before_sleep_log(logger, logging.WARNING),
183
+ )
184
+
185
+
186
+ def _retry_decorator(f: Callable) -> Callable:
187
+ """
188
+ Decorator to apply retry logic to a function using tenacity.
189
+
190
+ Args:
191
+ f (Callable): The function to be decorated.
192
+
193
+ Returns:
194
+ Callable: The decorated function with retry logic applied.
195
+ """
196
+
197
+ @functools.wraps(f)
198
+ def wrapper(self, *args: Any, **kwargs: Any):
199
+ retries = getattr(self, "retries", DEFAULT_RETRIES)
200
+ if retries <= 0:
201
+ return f(self, *args, **kwargs)
202
+ backoff_factor = getattr(self, "backoff_factor", DEFAULT_BACKOFF_FACTOR)
203
+ retry_func = _create_retry_decorator(
204
+ max_retries=retries,
205
+ backoff_factor=backoff_factor,
206
+ random_exponential=False,
207
+ stop_after_delay_seconds=getattr(self, "timeout", TIMEOUT),
208
+ min_seconds=0,
209
+ max_seconds=60,
210
+ )
211
+
212
+ return retry_func(f)(self, *args, **kwargs)
213
+
214
+ return wrapper
215
+
216
+
217
+ class BaseClient:
218
+ """
219
+ Base class for invoking models via HTTP requests with retry logic.
220
+
221
+ Attributes:
222
+ endpoint (str): The URL endpoint to send the request.
223
+ auth (Any): The authentication signer for the requests.
224
+ retries (int): The number of retry attempts for the request.
225
+ backoff_factor (float): The factor to determine the delay between retries.
226
+ timeout (Union[float, Tuple[float, float]]): The timeout setting for the HTTP request.
227
+ kwargs (Dict): Additional keyword arguments.
228
+ """
229
+
230
+ def __init__(
231
+ self,
232
+ endpoint: str,
233
+ auth: Optional[Any] = None,
234
+ retries: Optional[int] = DEFAULT_RETRIES,
235
+ backoff_factor: Optional[float] = DEFAULT_BACKOFF_FACTOR,
236
+ timeout: Optional[Union[float, Tuple[float, float]]] = None,
237
+ **kwargs: Any,
238
+ ) -> None:
239
+ """
240
+ Initialize the BaseClient.
241
+
242
+ Args:
243
+ endpoint (str): The URL endpoint to send the request.
244
+ auth (Optional[Any]): The authentication signer for the requests.
245
+ retries (Optional[int]): The number of retry attempts for the request.
246
+ backoff_factor (Optional[float]): The factor to determine the delay between retries.
247
+ timeout (Optional[Union[float, Tuple[float, float]]]): The timeout setting for the HTTP request.
248
+ **kwargs: Additional keyword arguments.
249
+ """
250
+ self.endpoint = endpoint
251
+ self.retries = retries or DEFAULT_RETRIES
252
+ self.backoff_factor = backoff_factor or DEFAULT_BACKOFF_FACTOR
253
+ self.timeout = timeout or TIMEOUT
254
+ self.kwargs = kwargs
255
+
256
+ # Validate auth object
257
+ auth = auth or authutil.default_signer()
258
+ if not callable(auth.get("signer")):
259
+ raise ValueError("Auth object must have a 'signer' callable attribute.")
260
+ self.auth = HttpxOCIAuth(auth["signer"])
261
+
262
+ logger.debug(
263
+ f"Initialized {self.__class__.__name__} with endpoint={self.endpoint}, "
264
+ f"retries={self.retries}, backoff_factor={self.backoff_factor}, timeout={self.timeout}"
265
+ )
266
+
267
+ def _parse_streaming_line(
268
+ self, line: Union[bytes, str]
269
+ ) -> Optional[Dict[str, Any]]:
270
+ """
271
+ Parse a single line from the streaming response.
272
+
273
+ Args:
274
+ line (Union[bytes, str]): A line of the response in bytes or string format.
275
+
276
+ Returns:
277
+ Optional[Dict[str, Any]]: Parsed JSON object, or None if the line is to be ignored.
278
+
279
+ Raises:
280
+ Exception: Raised if the line contains an error object.
281
+ json.JSONDecodeError: Raised if the line cannot be decoded as JSON.
282
+ """
283
+ logger.debug(f"Parsing streaming line: {line}")
284
+
285
+ if isinstance(line, bytes):
286
+ line = line.decode(DEFAULT_ENCODING)
287
+
288
+ line = line.strip()
289
+
290
+ if line.lower().startswith("data:"):
291
+ line = line[5:].lstrip()
292
+
293
+ if not line or line.startswith("[DONE]"):
294
+ logger.debug("Received end of stream signal or empty line.")
295
+ return None
296
+
297
+ try:
298
+ json_line = json.loads(line)
299
+ logger.debug(f"Parsed JSON line: {json_line}")
300
+ except json.JSONDecodeError as e:
301
+ logger.debug(f"Error decoding JSON from line: {line}")
302
+ raise json.JSONDecodeError(
303
+ f"Error decoding JSON from line: {e!s}", e.doc, e.pos
304
+ ) from e
305
+
306
+ if json_line.get("object") == "error":
307
+ # Raise an error for error objects in the stream
308
+ error_message = json_line.get("message", "Unknown error")
309
+ logger.debug(f"Error in streaming response: {error_message}")
310
+ raise Exception(f"Error in streaming response: {error_message}")
311
+
312
+ return json_line
313
+
314
+ def _prepare_headers(
315
+ self,
316
+ stream: bool,
317
+ headers: Optional[Dict[str, str]] = None,
318
+ ) -> Dict[str, str]:
319
+ """
320
+ Construct and return the headers for a request.
321
+
322
+ Args:
323
+ stream (bool): Whether to use streaming for the response.
324
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
325
+
326
+ Returns:
327
+ Dict[str, str]: The prepared headers.
328
+ """
329
+ default_headers = {
330
+ "Content-Type": "application/json",
331
+ "Accept": "text/event-stream" if stream else "application/json",
332
+ }
333
+ if stream:
334
+ default_headers["enable-streaming"] = "true"
335
+ if headers:
336
+ default_headers.update(headers)
337
+
338
+ logger.debug(f"Prepared headers: {default_headers}")
339
+ return default_headers
340
+
341
+
342
+ class Client(BaseClient):
343
+ """
344
+ Synchronous HTTP client for invoking models with support for request and streaming APIs.
345
+ """
346
+
347
+ def __init__(self, *args, **kwargs) -> None:
348
+ """
349
+ Initialize the Client.
350
+
351
+ Args:
352
+ *args: Positional arguments forwarded to BaseClient.
353
+ **kwargs: Keyword arguments forwarded to BaseClient.
354
+ """
355
+ super().__init__(*args, **kwargs)
356
+ self._client = httpx.Client(timeout=self.timeout, auth=self.auth)
357
+
358
+ def is_closed(self) -> bool:
359
+ return self._client.is_closed
360
+
361
+ def close(self) -> None:
362
+ """Close the underlying HTTPX client."""
363
+ self._client.close()
364
+
365
+ def __enter__(self: _T) -> _T: # noqa: PYI019
366
+ return self
367
+
368
+ def __exit__(
369
+ self,
370
+ exc_type: Optional[Type[BaseException]] = None,
371
+ exc: Optional[BaseException] = None,
372
+ exc_tb: Optional[TracebackType] = None,
373
+ ) -> None:
374
+ self.close()
375
+
376
+ def __del__(self) -> None:
377
+ try:
378
+ self.close()
379
+ except Exception:
380
+ pass
381
+
382
+ @_retry_decorator
383
+ def _request(
384
+ self, payload: Dict[str, Any], headers: Optional[Dict[str, str]] = None
385
+ ) -> Dict[str, Any]:
386
+ """
387
+ Send a POST request to the configured endpoint with retry and error handling.
388
+
389
+ Args:
390
+ payload (Dict[str, Any]): Parameters for the request payload.
391
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
392
+
393
+ Returns:
394
+ Dict[str, Any]: Decoded JSON response.
395
+
396
+ Raises:
397
+ ExtendedRequestError: Raised when the request fails.
398
+ """
399
+ logger.debug(f"Starting synchronous request with payload: {payload}")
400
+ try:
401
+ response = self._client.post(
402
+ self.endpoint,
403
+ headers=self._prepare_headers(stream=False, headers=headers),
404
+ json=payload,
405
+ )
406
+ logger.debug(f"Received response with status code: {response.status_code}")
407
+ response.raise_for_status()
408
+ json_response = response.json()
409
+ logger.debug(f"Response JSON: {json_response}")
410
+ return json_response
411
+ except Exception as e:
412
+ last_exception_text = (
413
+ e.response.text if hasattr(e, "response") and e.response else str(e)
414
+ )
415
+ logger.error(
416
+ f"Request failed. Error: {e!s}. Details: {last_exception_text}"
417
+ )
418
+ raise ExtendedRequestError(
419
+ f"Request failed: {e!s}. Details: {last_exception_text}",
420
+ e,
421
+ last_exception_text,
422
+ ) from e
423
+
424
+ def _stream(
425
+ self, payload: Dict[str, Any], headers: Optional[Dict[str, str]] = None
426
+ ) -> Iterator[Mapping[str, Any]]:
427
+ """
428
+ Send a POST request expecting a streaming response.
429
+
430
+ Args:
431
+ payload (Dict[str, Any]): Parameters for the request payload.
432
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
433
+
434
+ Yields:
435
+ Mapping[str, Any]: Decoded JSON response line-by-line.
436
+
437
+ Raises:
438
+ ExtendedRequestError: Raised when the request fails.
439
+ """
440
+ logger.debug(f"Starting synchronous streaming request with payload: {payload}")
441
+ last_exception_text = None
442
+
443
+ for attempt in range(1, self.retries + 2): # retries + initial attempt
444
+ logger.debug(f"Attempt {attempt} for synchronous streaming request.")
445
+ try:
446
+ with self._client.stream(
447
+ "POST",
448
+ self.endpoint,
449
+ headers=self._prepare_headers(stream=True, headers=headers),
450
+ json={**payload, "stream": True},
451
+ ) as response:
452
+ try:
453
+ logger.debug(
454
+ f"Received streaming response with status code: {response.status_code}"
455
+ )
456
+ response.raise_for_status()
457
+ for line in response.iter_lines():
458
+ if not line: # Skip empty lines
459
+ continue
460
+
461
+ parsed_line = self._parse_streaming_line(line)
462
+ if parsed_line:
463
+ logger.debug(f"Yielding parsed line: {parsed_line}")
464
+ yield parsed_line
465
+ return
466
+ except Exception as e:
467
+ last_exception_text = (
468
+ e.response.read().decode(
469
+ e.response.encoding or DEFAULT_ENCODING
470
+ )
471
+ if hasattr(e, "response") and e.response
472
+ else str(e)
473
+ )
474
+ raise
475
+
476
+ except Exception as e:
477
+ if attempt <= self.retries and _should_retry_exception(e):
478
+ delay = self.backoff_factor * (2 ** (attempt - 1))
479
+ logger.warning(
480
+ f"Streaming attempt {attempt} failed: {e}. Retrying in {delay} seconds..."
481
+ )
482
+ time.sleep(delay)
483
+ else:
484
+ logger.error(
485
+ f"Streaming request failed. Error: {e!s}. Details: {last_exception_text}"
486
+ )
487
+ raise ExtendedRequestError(
488
+ f"Streaming request failed: {e!s}. Details: {last_exception_text}",
489
+ e,
490
+ last_exception_text,
491
+ ) from e
492
+
493
+ def generate(
494
+ self,
495
+ prompt: str,
496
+ payload: Optional[Dict[str, Any]] = None,
497
+ headers: Optional[Dict[str, str]] = None,
498
+ stream: bool = True,
499
+ ) -> Union[Dict[str, Any], Iterator[Mapping[str, Any]]]:
500
+ """
501
+ Generate text completion for the given prompt.
502
+
503
+ Args:
504
+ prompt (str): Input text prompt for the model.
505
+ payload (Optional[Dict[str, Any]]): Additional parameters for the request payload.
506
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
507
+ stream (bool): Whether to use streaming for the response.
508
+
509
+ Returns:
510
+ Union[Dict[str, Any], Iterator[Mapping[str, Any]]]: A full JSON response or an iterator for streaming responses.
511
+ """
512
+ logger.debug(f"Generating text with prompt: {prompt}, stream: {stream}")
513
+ payload = {**(payload or {}), "prompt": prompt}
514
+ headers = {"route": "/v1/completions", **(headers or {})}
515
+ if stream:
516
+ return self._stream(payload=payload, headers=headers)
517
+ return self._request(payload=payload, headers=headers)
518
+
519
+ def chat(
520
+ self,
521
+ messages: List[Dict[str, Any]],
522
+ payload: Optional[Dict[str, Any]] = None,
523
+ headers: Optional[Dict[str, str]] = None,
524
+ stream: bool = True,
525
+ ) -> Union[Dict[str, Any], Iterator[Mapping[str, Any]]]:
526
+ """
527
+ Perform a chat interaction with the model.
528
+
529
+ Args:
530
+ messages (List[Dict[str, Any]]): List of message dictionaries for chat interaction.
531
+ payload (Optional[Dict[str, Any]]): Additional parameters for the request payload.
532
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
533
+ stream (bool): Whether to use streaming for the response.
534
+
535
+ Returns:
536
+ Union[Dict[str, Any], Iterator[Mapping[str, Any]]]: A full JSON response or an iterator for streaming responses.
537
+ """
538
+ logger.debug(f"Starting chat with messages: {messages}, stream: {stream}")
539
+ payload = {**(payload or {}), "messages": messages}
540
+ headers = {"route": "/v1/chat/completions", **(headers or {})}
541
+ if stream:
542
+ return self._stream(payload=payload, headers=headers)
543
+ return self._request(payload=payload, headers=headers)
544
+
545
+ def embeddings(
546
+ self,
547
+ input: Union[str, Sequence[AnyStr]] = "",
548
+ payload: Optional[Dict[str, Any]] = None,
549
+ headers: Optional[Dict[str, str]] = None,
550
+ ) -> Union[Dict[str, Any], Iterator[Mapping[str, Any]]]:
551
+ """Generate embeddings by sending a request to the endpoint.
552
+
553
+ Args:
554
+ input (Union[str, Sequence[AnyStr]], optional): The input text or sequence of texts for which to generate embeddings.
555
+ Defaults to "".
556
+ payload (Optional[Dict[str, Any]], optional): Additional parameters to include in the request payload.
557
+ Defaults to None.
558
+ headers (Optional[Dict[str, str]], optional): HTTP headers to include in the request.
559
+ Defaults to None.
560
+
561
+ Returns:
562
+ Union[Dict[str, Any], Iterator[Mapping[str, Any]]]: The server's response, typically including the generated embeddings.
563
+ """
564
+ logger.debug(f"Generating embeddings with input: {input}, payload: {payload}")
565
+ payload = {**(payload or {}), "input": input}
566
+ return self._request(payload=payload, headers=headers)
567
+
568
+
569
+ class AsyncClient(BaseClient):
570
+ """
571
+ Asynchronous HTTP client for invoking models with support for request and streaming APIs, including retry logic.
572
+ """
573
+
574
+ def __init__(self, *args, **kwargs) -> None:
575
+ """
576
+ Initialize the AsyncClient.
577
+
578
+ Args:
579
+ *args: Positional arguments forwarded to BaseClient.
580
+ **kwargs: Keyword arguments forwarded to BaseClient.
581
+ """
582
+ super().__init__(*args, **kwargs)
583
+ self._client = httpx.AsyncClient(timeout=self.timeout, auth=self.auth)
584
+
585
+ def is_closed(self) -> bool:
586
+ return self._client.is_closed
587
+
588
+ async def close(self) -> None:
589
+ """Close the underlying HTTPX client.
590
+
591
+ The client will *not* be usable after this.
592
+ """
593
+ await self._client.aclose()
594
+
595
+ async def __aenter__(self: _T) -> _T: # noqa: PYI019
596
+ return self
597
+
598
+ async def __aexit__(
599
+ self,
600
+ exc_type: Optional[Type[BaseException]] = None,
601
+ exc: Optional[BaseException] = None,
602
+ exc_tb: Optional[TracebackType] = None,
603
+ ) -> None:
604
+ await self.close()
605
+
606
+ def __del__(self) -> None:
607
+ try:
608
+ if not self._client.is_closed:
609
+ loop = asyncio.get_event_loop()
610
+ if loop.is_running():
611
+ loop.create_task(self.close())
612
+ else:
613
+ loop.run_until_complete(self.close())
614
+ except Exception:
615
+ pass
616
+
617
+ @_retry_decorator
618
+ async def _request(
619
+ self, payload: Dict[str, Any], headers: Optional[Dict[str, str]] = None
620
+ ) -> Dict[str, Any]:
621
+ """
622
+ Send a POST request to the configured endpoint with retry and error handling.
623
+
624
+ Args:
625
+ payload (Dict[str, Any]): Parameters for the request payload.
626
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
627
+
628
+ Returns:
629
+ Dict[str, Any]: Decoded JSON response.
630
+
631
+ Raises:
632
+ ExtendedRequestError: Raised when the request fails.
633
+ """
634
+ logger.debug(f"Starting asynchronous request with payload: {payload}")
635
+ try:
636
+ response = await self._client.post(
637
+ self.endpoint,
638
+ headers=self._prepare_headers(stream=False, headers=headers),
639
+ json=payload,
640
+ )
641
+ logger.debug(f"Received response with status code: {response.status_code}")
642
+ response.raise_for_status()
643
+ json_response = response.json()
644
+ logger.debug(f"Response JSON: {json_response}")
645
+ return json_response
646
+ except Exception as e:
647
+ last_exception_text = (
648
+ e.response.text if hasattr(e, "response") and e.response else str(e)
649
+ )
650
+ logger.error(
651
+ f"Request failed. Error: {e!s}. Details: {last_exception_text}"
652
+ )
653
+ raise ExtendedRequestError(
654
+ f"Request failed: {e!s}. Details: {last_exception_text}",
655
+ e,
656
+ last_exception_text,
657
+ ) from e
658
+
659
+ async def _stream(
660
+ self, payload: Dict[str, Any], headers: Optional[Dict[str, str]] = None
661
+ ) -> AsyncIterator[Mapping[str, Any]]:
662
+ """
663
+ Send a POST request expecting a streaming response with retry logic.
664
+
665
+ Args:
666
+ payload (Dict[str, Any]): Parameters for the request payload.
667
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
668
+
669
+ Yields:
670
+ Mapping[str, Any]: Decoded JSON response line-by-line.
671
+
672
+ Raises:
673
+ ExtendedRequestError: Raised when the request fails.
674
+ """
675
+ logger.debug(f"Starting asynchronous streaming request with payload: {payload}")
676
+ last_exception_text = None
677
+ for attempt in range(1, self.retries + 2): # retries + initial attempt
678
+ logger.debug(f"Attempt {attempt} for asynchronous streaming request.")
679
+ try:
680
+ async with self._client.stream(
681
+ "POST",
682
+ self.endpoint,
683
+ headers=self._prepare_headers(stream=True, headers=headers),
684
+ json={**payload, "stream": True},
685
+ ) as response:
686
+ try:
687
+ logger.debug(
688
+ f"Received streaming response with status code: {response.status_code}"
689
+ )
690
+ response.raise_for_status()
691
+ async for line in response.aiter_lines():
692
+ if not line: # Skip empty lines
693
+ continue
694
+ parsed_line = self._parse_streaming_line(line)
695
+ if parsed_line:
696
+ logger.debug(f"Yielding parsed line: {parsed_line}")
697
+ yield parsed_line
698
+ return
699
+ except Exception as e:
700
+ if hasattr(e, "response") and e.response:
701
+ content = await e.response.aread()
702
+ last_exception_text = content.decode(
703
+ e.response.encoding or DEFAULT_ENCODING
704
+ )
705
+ raise
706
+ except Exception as e:
707
+ if attempt <= self.retries and _should_retry_exception(e):
708
+ delay = self.backoff_factor * (2 ** (attempt - 1))
709
+ logger.warning(
710
+ f"Streaming attempt {attempt} failed: {e}. Retrying in {delay} seconds..."
711
+ )
712
+ await asyncio.sleep(delay)
713
+ else:
714
+ logger.error(
715
+ f"Streaming request failed. Error: {e!s}. Details: {last_exception_text}"
716
+ )
717
+ raise ExtendedRequestError(
718
+ f"Streaming request failed: {e!s}. Details: {last_exception_text}",
719
+ e,
720
+ last_exception_text,
721
+ ) from e
722
+
723
+ async def generate(
724
+ self,
725
+ prompt: str,
726
+ payload: Optional[Dict[str, Any]] = None,
727
+ headers: Optional[Dict[str, str]] = None,
728
+ stream: bool = False,
729
+ ) -> Union[Dict[str, Any], AsyncIterator[Mapping[str, Any]]]:
730
+ """
731
+ Generate text completion for the given prompt.
732
+
733
+ Args:
734
+ prompt (str): Input text prompt for the model.
735
+ payload (Optional[Dict[str, Any]]): Additional parameters for the request payload.
736
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
737
+ stream (bool): Whether to use streaming for the response.
738
+
739
+ Returns:
740
+ Union[Dict[str, Any], AsyncIterator[Mapping[str, Any]]]: A full JSON response or an async iterator for streaming responses.
741
+ """
742
+ logger.debug(f"Generating text with prompt: {prompt}, stream: {stream}")
743
+ payload = {**(payload or {}), "prompt": prompt}
744
+ headers = {"route": "/v1/completions", **(headers or {})}
745
+ if stream:
746
+ return self._stream(payload=payload, headers=headers)
747
+ return await self._request(payload=payload, headers=headers)
748
+
749
+ async def chat(
750
+ self,
751
+ messages: List[Dict[str, Any]],
752
+ payload: Optional[Dict[str, Any]] = None,
753
+ headers: Optional[Dict[str, str]] = None,
754
+ stream: bool = False,
755
+ ) -> Union[Dict[str, Any], AsyncIterator[Mapping[str, Any]]]:
756
+ """
757
+ Perform a chat interaction with the model.
758
+
759
+ Args:
760
+ messages (List[Dict[str, Any]]): List of message dictionaries for chat interaction.
761
+ payload (Optional[Dict[str, Any]]): Additional parameters for the request payload.
762
+ headers (Optional[Dict[str, str]]): HTTP headers to include in the request.
763
+ stream (bool): Whether to use streaming for the response.
764
+
765
+ Returns:
766
+ Union[Dict[str, Any], AsyncIterator[Mapping[str, Any]]]: A full JSON response or an async iterator for streaming responses.
767
+ """
768
+ logger.debug(f"Starting chat with messages: {messages}, stream: {stream}")
769
+ payload = {**(payload or {}), "messages": messages}
770
+ headers = {"route": "/v1/chat/completions", **(headers or {})}
771
+ if stream:
772
+ return self._stream(payload=payload, headers=headers)
773
+ return await self._request(payload=payload, headers=headers)
774
+
775
+ async def embeddings(
776
+ self,
777
+ input: Union[str, Sequence[AnyStr]] = "",
778
+ payload: Optional[Dict[str, Any]] = None,
779
+ headers: Optional[Dict[str, str]] = None,
780
+ ) -> Union[Dict[str, Any], Iterator[Mapping[str, Any]]]:
781
+ """Generate embeddings asynchronously by sending a request to the endpoint.
782
+
783
+ Args:
784
+ input (Union[str, Sequence[AnyStr]], optional): The input text or sequence of texts for which to generate embeddings.
785
+ Defaults to "".
786
+ payload (Optional[Dict[str, Any]], optional): Additional parameters to include in the request payload.
787
+ Defaults to None.
788
+ headers (Optional[Dict[str, str]], optional): HTTP headers to include in the request.
789
+ Defaults to None.
790
+
791
+ Returns:
792
+ Union[Dict[str, Any], Iterator[Mapping[str, Any]]]: The server's response, typically including the generated embeddings.
793
+ """
794
+ logger.debug(f"Generating embeddings with input: {input}, payload: {payload}")
795
+ payload = {**(payload or {}), "input": input}
796
+ return await self._request(payload=payload, headers=headers)
797
+
798
+
799
+ def get_httpx_client(**kwargs: Any) -> httpx.Client:
800
+ """
801
+ Creates and returns a synchronous httpx Client configured with OCI authentication signer based
802
+ the authentication type setup using ads.set_auth method or env variable OCI_IAM_TYPE.
803
+ More information - https://accelerated-data-science.readthedocs.io/en/stable/user_guide/cli/authentication.html
804
+
805
+ Parameters
806
+ ----------
807
+ **kwargs : Any
808
+ Keyword arguments supported by httpx.Client
809
+
810
+ Returns
811
+ -------
812
+ Client
813
+ A configured synchronous httpx Client instance.
814
+ """
815
+ kwargs["auth"] = kwargs.get("auth") or HttpxOCIAuth()
816
+ return httpx.Client(**kwargs)
817
+
818
+
819
+ def get_async_httpx_client(**kwargs: Any) -> httpx.AsyncClient:
820
+ """
821
+ Creates and returns a synchronous httpx Client configured with OCI authentication signer based
822
+ the authentication type setup using ads.set_auth method or env variable OCI_IAM_TYPE.
823
+ More information - https://accelerated-data-science.readthedocs.io/en/stable/user_guide/cli/authentication.html
824
+
825
+ Parameters
826
+ ----------
827
+ **kwargs : Any
828
+ Keyword arguments supported by httpx.Client
829
+
830
+ Returns
831
+ -------
832
+ AsyncClient
833
+ A configured asynchronous httpx AsyncClient instance.
834
+ """
835
+ kwargs["auth"] = kwargs.get("auth") or HttpxOCIAuth()
836
+ return httpx.AsyncClient(**kwargs)