oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.9rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (857) hide show
  1. ads/aqua/__init__.py +40 -0
  2. ads/aqua/app.py +506 -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 +269 -0
  10. ads/aqua/common/enums.py +122 -0
  11. ads/aqua/common/errors.py +109 -0
  12. ads/aqua/common/utils.py +1285 -0
  13. ads/aqua/config/__init__.py +4 -0
  14. ads/aqua/config/container_config.py +248 -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 +298 -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 +282 -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 +2114 -0
  57. ads/aqua/modeldeployment/__init__.py +8 -0
  58. ads/aqua/modeldeployment/constants.py +10 -0
  59. ads/aqua/modeldeployment/deployment.py +1326 -0
  60. ads/aqua/modeldeployment/entities.py +653 -0
  61. ads/aqua/modeldeployment/inference.py +74 -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 +499 -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 +175 -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/data_labeling/__init__.py +13 -0
  120. ads/data_labeling/boundingbox.py +253 -0
  121. ads/data_labeling/constants.py +47 -0
  122. ads/data_labeling/data_labeling_service.py +244 -0
  123. ads/data_labeling/interface/__init__.py +5 -0
  124. ads/data_labeling/interface/loader.py +16 -0
  125. ads/data_labeling/interface/parser.py +16 -0
  126. ads/data_labeling/interface/reader.py +23 -0
  127. ads/data_labeling/loader/__init__.py +5 -0
  128. ads/data_labeling/loader/file_loader.py +241 -0
  129. ads/data_labeling/metadata.py +110 -0
  130. ads/data_labeling/mixin/__init__.py +5 -0
  131. ads/data_labeling/mixin/data_labeling.py +232 -0
  132. ads/data_labeling/ner.py +129 -0
  133. ads/data_labeling/parser/__init__.py +5 -0
  134. ads/data_labeling/parser/dls_record_parser.py +388 -0
  135. ads/data_labeling/parser/export_metadata_parser.py +94 -0
  136. ads/data_labeling/parser/export_record_parser.py +473 -0
  137. ads/data_labeling/reader/__init__.py +5 -0
  138. ads/data_labeling/reader/dataset_reader.py +574 -0
  139. ads/data_labeling/reader/dls_record_reader.py +121 -0
  140. ads/data_labeling/reader/export_record_reader.py +62 -0
  141. ads/data_labeling/reader/jsonl_reader.py +75 -0
  142. ads/data_labeling/reader/metadata_reader.py +203 -0
  143. ads/data_labeling/reader/record_reader.py +263 -0
  144. ads/data_labeling/record.py +52 -0
  145. ads/data_labeling/visualizer/__init__.py +5 -0
  146. ads/data_labeling/visualizer/image_visualizer.py +525 -0
  147. ads/data_labeling/visualizer/text_visualizer.py +357 -0
  148. ads/database/__init__.py +5 -0
  149. ads/database/connection.py +338 -0
  150. ads/dataset/__init__.py +10 -0
  151. ads/dataset/capabilities.md +51 -0
  152. ads/dataset/classification_dataset.py +339 -0
  153. ads/dataset/correlation.py +226 -0
  154. ads/dataset/correlation_plot.py +563 -0
  155. ads/dataset/dask_series.py +173 -0
  156. ads/dataset/dataframe_transformer.py +110 -0
  157. ads/dataset/dataset.py +1979 -0
  158. ads/dataset/dataset_browser.py +360 -0
  159. ads/dataset/dataset_with_target.py +995 -0
  160. ads/dataset/exception.py +25 -0
  161. ads/dataset/factory.py +987 -0
  162. ads/dataset/feature_engineering_transformer.py +35 -0
  163. ads/dataset/feature_selection.py +107 -0
  164. ads/dataset/forecasting_dataset.py +26 -0
  165. ads/dataset/helper.py +1450 -0
  166. ads/dataset/label_encoder.py +99 -0
  167. ads/dataset/mixin/__init__.py +5 -0
  168. ads/dataset/mixin/dataset_accessor.py +134 -0
  169. ads/dataset/pipeline.py +58 -0
  170. ads/dataset/plot.py +710 -0
  171. ads/dataset/progress.py +86 -0
  172. ads/dataset/recommendation.py +297 -0
  173. ads/dataset/recommendation_transformer.py +502 -0
  174. ads/dataset/regression_dataset.py +14 -0
  175. ads/dataset/sampled_dataset.py +1050 -0
  176. ads/dataset/target.py +98 -0
  177. ads/dataset/timeseries.py +18 -0
  178. ads/dbmixin/__init__.py +5 -0
  179. ads/dbmixin/db_pandas_accessor.py +153 -0
  180. ads/environment/__init__.py +9 -0
  181. ads/environment/ml_runtime.py +66 -0
  182. ads/evaluations/README.md +14 -0
  183. ads/evaluations/__init__.py +109 -0
  184. ads/evaluations/evaluation_plot.py +983 -0
  185. ads/evaluations/evaluator.py +1334 -0
  186. ads/evaluations/statistical_metrics.py +543 -0
  187. ads/experiments/__init__.py +9 -0
  188. ads/experiments/capabilities.md +0 -0
  189. ads/explanations/__init__.py +21 -0
  190. ads/explanations/base_explainer.py +142 -0
  191. ads/explanations/capabilities.md +83 -0
  192. ads/explanations/explainer.py +190 -0
  193. ads/explanations/mlx_global_explainer.py +1050 -0
  194. ads/explanations/mlx_interface.py +386 -0
  195. ads/explanations/mlx_local_explainer.py +287 -0
  196. ads/explanations/mlx_whatif_explainer.py +201 -0
  197. ads/feature_engineering/__init__.py +20 -0
  198. ads/feature_engineering/accessor/__init__.py +5 -0
  199. ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
  200. ads/feature_engineering/accessor/mixin/__init__.py +5 -0
  201. ads/feature_engineering/accessor/mixin/correlation.py +166 -0
  202. ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
  203. ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
  204. ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
  205. ads/feature_engineering/accessor/mixin/utils.py +65 -0
  206. ads/feature_engineering/accessor/series_accessor.py +431 -0
  207. ads/feature_engineering/adsimage/__init__.py +5 -0
  208. ads/feature_engineering/adsimage/image.py +192 -0
  209. ads/feature_engineering/adsimage/image_reader.py +170 -0
  210. ads/feature_engineering/adsimage/interface/__init__.py +5 -0
  211. ads/feature_engineering/adsimage/interface/reader.py +19 -0
  212. ads/feature_engineering/adsstring/__init__.py +7 -0
  213. ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
  214. ads/feature_engineering/adsstring/string/__init__.py +8 -0
  215. ads/feature_engineering/data_schema.json +57 -0
  216. ads/feature_engineering/dataset/__init__.py +5 -0
  217. ads/feature_engineering/dataset/zip_code_data.py +42062 -0
  218. ads/feature_engineering/exceptions.py +40 -0
  219. ads/feature_engineering/feature_type/__init__.py +133 -0
  220. ads/feature_engineering/feature_type/address.py +184 -0
  221. ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
  222. ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
  223. ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
  224. ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
  225. ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
  226. ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
  227. ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
  228. ads/feature_engineering/feature_type/adsstring/string.py +258 -0
  229. ads/feature_engineering/feature_type/base.py +58 -0
  230. ads/feature_engineering/feature_type/boolean.py +183 -0
  231. ads/feature_engineering/feature_type/category.py +146 -0
  232. ads/feature_engineering/feature_type/constant.py +137 -0
  233. ads/feature_engineering/feature_type/continuous.py +151 -0
  234. ads/feature_engineering/feature_type/creditcard.py +314 -0
  235. ads/feature_engineering/feature_type/datetime.py +190 -0
  236. ads/feature_engineering/feature_type/discrete.py +134 -0
  237. ads/feature_engineering/feature_type/document.py +43 -0
  238. ads/feature_engineering/feature_type/gis.py +251 -0
  239. ads/feature_engineering/feature_type/handler/__init__.py +5 -0
  240. ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
  241. ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
  242. ads/feature_engineering/feature_type/handler/warnings.py +128 -0
  243. ads/feature_engineering/feature_type/integer.py +142 -0
  244. ads/feature_engineering/feature_type/ip_address.py +144 -0
  245. ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
  246. ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
  247. ads/feature_engineering/feature_type/lat_long.py +256 -0
  248. ads/feature_engineering/feature_type/object.py +43 -0
  249. ads/feature_engineering/feature_type/ordinal.py +132 -0
  250. ads/feature_engineering/feature_type/phone_number.py +135 -0
  251. ads/feature_engineering/feature_type/string.py +171 -0
  252. ads/feature_engineering/feature_type/text.py +93 -0
  253. ads/feature_engineering/feature_type/unknown.py +43 -0
  254. ads/feature_engineering/feature_type/zip_code.py +164 -0
  255. ads/feature_engineering/feature_type_manager.py +406 -0
  256. ads/feature_engineering/schema.py +795 -0
  257. ads/feature_engineering/utils.py +245 -0
  258. ads/feature_store/.readthedocs.yaml +19 -0
  259. ads/feature_store/README.md +65 -0
  260. ads/feature_store/__init__.py +9 -0
  261. ads/feature_store/common/__init__.py +0 -0
  262. ads/feature_store/common/enums.py +339 -0
  263. ads/feature_store/common/exceptions.py +18 -0
  264. ads/feature_store/common/spark_session_singleton.py +125 -0
  265. ads/feature_store/common/utils/__init__.py +0 -0
  266. ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
  267. ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
  268. ads/feature_store/common/utils/transformation_utils.py +82 -0
  269. ads/feature_store/common/utils/utility.py +403 -0
  270. ads/feature_store/data_validation/__init__.py +0 -0
  271. ads/feature_store/data_validation/great_expectation.py +129 -0
  272. ads/feature_store/dataset.py +1230 -0
  273. ads/feature_store/dataset_job.py +530 -0
  274. ads/feature_store/docs/Dockerfile +7 -0
  275. ads/feature_store/docs/Makefile +44 -0
  276. ads/feature_store/docs/conf.py +28 -0
  277. ads/feature_store/docs/requirements.txt +14 -0
  278. ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
  279. ads/feature_store/docs/source/cicd.rst +137 -0
  280. ads/feature_store/docs/source/conf.py +86 -0
  281. ads/feature_store/docs/source/data_versioning.rst +33 -0
  282. ads/feature_store/docs/source/dataset.rst +388 -0
  283. ads/feature_store/docs/source/dataset_job.rst +27 -0
  284. ads/feature_store/docs/source/demo.rst +70 -0
  285. ads/feature_store/docs/source/entity.rst +78 -0
  286. ads/feature_store/docs/source/feature_group.rst +624 -0
  287. ads/feature_store/docs/source/feature_group_job.rst +29 -0
  288. ads/feature_store/docs/source/feature_store.rst +122 -0
  289. ads/feature_store/docs/source/feature_store_class.rst +123 -0
  290. ads/feature_store/docs/source/feature_validation.rst +66 -0
  291. ads/feature_store/docs/source/figures/cicd.png +0 -0
  292. ads/feature_store/docs/source/figures/data_validation.png +0 -0
  293. ads/feature_store/docs/source/figures/data_versioning.png +0 -0
  294. ads/feature_store/docs/source/figures/dataset.gif +0 -0
  295. ads/feature_store/docs/source/figures/dataset.png +0 -0
  296. ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
  297. ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
  298. ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
  299. ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
  300. ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
  301. ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
  302. ads/feature_store/docs/source/figures/entity.png +0 -0
  303. ads/feature_store/docs/source/figures/feature_group.png +0 -0
  304. ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
  305. ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
  306. ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
  307. ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
  308. ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
  309. ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
  310. ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
  311. ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
  312. ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
  313. ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
  314. ads/feature_store/docs/source/figures/overview.png +0 -0
  315. ads/feature_store/docs/source/figures/resource_manager.png +0 -0
  316. ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
  317. ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
  318. ads/feature_store/docs/source/figures/stats_1.png +0 -0
  319. ads/feature_store/docs/source/figures/stats_2.png +0 -0
  320. ads/feature_store/docs/source/figures/stats_d.png +0 -0
  321. ads/feature_store/docs/source/figures/stats_fg.png +0 -0
  322. ads/feature_store/docs/source/figures/transformation.png +0 -0
  323. ads/feature_store/docs/source/figures/transformations.gif +0 -0
  324. ads/feature_store/docs/source/figures/validation.png +0 -0
  325. ads/feature_store/docs/source/figures/validation_fg.png +0 -0
  326. ads/feature_store/docs/source/figures/validation_results.png +0 -0
  327. ads/feature_store/docs/source/figures/validation_summary.png +0 -0
  328. ads/feature_store/docs/source/index.rst +81 -0
  329. ads/feature_store/docs/source/module.rst +8 -0
  330. ads/feature_store/docs/source/notebook.rst +94 -0
  331. ads/feature_store/docs/source/overview.rst +47 -0
  332. ads/feature_store/docs/source/quickstart.rst +176 -0
  333. ads/feature_store/docs/source/release_notes.rst +194 -0
  334. ads/feature_store/docs/source/setup_feature_store.rst +81 -0
  335. ads/feature_store/docs/source/statistics.rst +58 -0
  336. ads/feature_store/docs/source/transformation.rst +199 -0
  337. ads/feature_store/docs/source/ui.rst +65 -0
  338. ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
  339. ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
  340. ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
  341. ads/feature_store/entity.py +718 -0
  342. ads/feature_store/execution_strategy/__init__.py +0 -0
  343. ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
  344. ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
  345. ads/feature_store/execution_strategy/engine/__init__.py +0 -0
  346. ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
  347. ads/feature_store/execution_strategy/execution_strategy.py +113 -0
  348. ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
  349. ads/feature_store/execution_strategy/spark/__init__.py +0 -0
  350. ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
  351. ads/feature_store/feature.py +192 -0
  352. ads/feature_store/feature_group.py +1494 -0
  353. ads/feature_store/feature_group_expectation.py +346 -0
  354. ads/feature_store/feature_group_job.py +602 -0
  355. ads/feature_store/feature_lineage/__init__.py +0 -0
  356. ads/feature_store/feature_lineage/graphviz_service.py +180 -0
  357. ads/feature_store/feature_option_details.py +50 -0
  358. ads/feature_store/feature_statistics/__init__.py +0 -0
  359. ads/feature_store/feature_statistics/statistics_service.py +99 -0
  360. ads/feature_store/feature_store.py +699 -0
  361. ads/feature_store/feature_store_registrar.py +518 -0
  362. ads/feature_store/input_feature_detail.py +149 -0
  363. ads/feature_store/mixin/__init__.py +4 -0
  364. ads/feature_store/mixin/oci_feature_store.py +145 -0
  365. ads/feature_store/model_details.py +73 -0
  366. ads/feature_store/query/__init__.py +0 -0
  367. ads/feature_store/query/filter.py +266 -0
  368. ads/feature_store/query/generator/__init__.py +0 -0
  369. ads/feature_store/query/generator/query_generator.py +298 -0
  370. ads/feature_store/query/join.py +161 -0
  371. ads/feature_store/query/query.py +403 -0
  372. ads/feature_store/query/validator/__init__.py +0 -0
  373. ads/feature_store/query/validator/query_validator.py +57 -0
  374. ads/feature_store/response/__init__.py +0 -0
  375. ads/feature_store/response/response_builder.py +68 -0
  376. ads/feature_store/service/__init__.py +0 -0
  377. ads/feature_store/service/oci_dataset.py +139 -0
  378. ads/feature_store/service/oci_dataset_job.py +199 -0
  379. ads/feature_store/service/oci_entity.py +125 -0
  380. ads/feature_store/service/oci_feature_group.py +164 -0
  381. ads/feature_store/service/oci_feature_group_job.py +214 -0
  382. ads/feature_store/service/oci_feature_store.py +182 -0
  383. ads/feature_store/service/oci_lineage.py +87 -0
  384. ads/feature_store/service/oci_transformation.py +104 -0
  385. ads/feature_store/statistics/__init__.py +0 -0
  386. ads/feature_store/statistics/abs_feature_value.py +49 -0
  387. ads/feature_store/statistics/charts/__init__.py +0 -0
  388. ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
  389. ads/feature_store/statistics/charts/box_plot.py +148 -0
  390. ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
  391. ads/feature_store/statistics/charts/probability_distribution.py +68 -0
  392. ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
  393. ads/feature_store/statistics/feature_stat.py +126 -0
  394. ads/feature_store/statistics/generic_feature_value.py +33 -0
  395. ads/feature_store/statistics/statistics.py +41 -0
  396. ads/feature_store/statistics_config.py +101 -0
  397. ads/feature_store/templates/feature_store_template.yaml +45 -0
  398. ads/feature_store/transformation.py +499 -0
  399. ads/feature_store/validation_output.py +57 -0
  400. ads/hpo/__init__.py +9 -0
  401. ads/hpo/_imports.py +91 -0
  402. ads/hpo/ads_search_space.py +439 -0
  403. ads/hpo/distributions.py +325 -0
  404. ads/hpo/objective.py +280 -0
  405. ads/hpo/search_cv.py +1657 -0
  406. ads/hpo/stopping_criterion.py +75 -0
  407. ads/hpo/tuner_artifact.py +413 -0
  408. ads/hpo/utils.py +91 -0
  409. ads/hpo/validation.py +140 -0
  410. ads/hpo/visualization/__init__.py +5 -0
  411. ads/hpo/visualization/_contour.py +23 -0
  412. ads/hpo/visualization/_edf.py +20 -0
  413. ads/hpo/visualization/_intermediate_values.py +21 -0
  414. ads/hpo/visualization/_optimization_history.py +25 -0
  415. ads/hpo/visualization/_parallel_coordinate.py +169 -0
  416. ads/hpo/visualization/_param_importances.py +26 -0
  417. ads/jobs/__init__.py +53 -0
  418. ads/jobs/ads_job.py +663 -0
  419. ads/jobs/builders/__init__.py +5 -0
  420. ads/jobs/builders/base.py +156 -0
  421. ads/jobs/builders/infrastructure/__init__.py +6 -0
  422. ads/jobs/builders/infrastructure/base.py +165 -0
  423. ads/jobs/builders/infrastructure/dataflow.py +1252 -0
  424. ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
  425. ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
  426. ads/jobs/builders/infrastructure/utils.py +65 -0
  427. ads/jobs/builders/runtimes/__init__.py +5 -0
  428. ads/jobs/builders/runtimes/artifact.py +338 -0
  429. ads/jobs/builders/runtimes/base.py +325 -0
  430. ads/jobs/builders/runtimes/container_runtime.py +242 -0
  431. ads/jobs/builders/runtimes/python_runtime.py +1016 -0
  432. ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
  433. ads/jobs/cli.py +104 -0
  434. ads/jobs/env_var_parser.py +131 -0
  435. ads/jobs/extension.py +160 -0
  436. ads/jobs/schema/__init__.py +5 -0
  437. ads/jobs/schema/infrastructure_schema.json +116 -0
  438. ads/jobs/schema/job_schema.json +42 -0
  439. ads/jobs/schema/runtime_schema.json +183 -0
  440. ads/jobs/schema/validator.py +141 -0
  441. ads/jobs/serializer.py +296 -0
  442. ads/jobs/templates/__init__.py +5 -0
  443. ads/jobs/templates/container.py +6 -0
  444. ads/jobs/templates/driver_notebook.py +177 -0
  445. ads/jobs/templates/driver_oci.py +500 -0
  446. ads/jobs/templates/driver_python.py +48 -0
  447. ads/jobs/templates/driver_pytorch.py +852 -0
  448. ads/jobs/templates/driver_utils.py +615 -0
  449. ads/jobs/templates/hostname_from_env.c +55 -0
  450. ads/jobs/templates/oci_metrics.py +181 -0
  451. ads/jobs/utils.py +104 -0
  452. ads/llm/__init__.py +28 -0
  453. ads/llm/autogen/__init__.py +2 -0
  454. ads/llm/autogen/constants.py +15 -0
  455. ads/llm/autogen/reports/__init__.py +2 -0
  456. ads/llm/autogen/reports/base.py +67 -0
  457. ads/llm/autogen/reports/data.py +103 -0
  458. ads/llm/autogen/reports/session.py +526 -0
  459. ads/llm/autogen/reports/templates/chat_box.html +13 -0
  460. ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
  461. ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
  462. ads/llm/autogen/reports/utils.py +56 -0
  463. ads/llm/autogen/v02/__init__.py +4 -0
  464. ads/llm/autogen/v02/client.py +295 -0
  465. ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
  466. ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
  467. ads/llm/autogen/v02/loggers/__init__.py +6 -0
  468. ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
  469. ads/llm/autogen/v02/loggers/session_logger.py +580 -0
  470. ads/llm/autogen/v02/loggers/utils.py +86 -0
  471. ads/llm/autogen/v02/runtime_logging.py +163 -0
  472. ads/llm/chain.py +268 -0
  473. ads/llm/chat_template.py +31 -0
  474. ads/llm/deploy.py +63 -0
  475. ads/llm/guardrails/__init__.py +5 -0
  476. ads/llm/guardrails/base.py +442 -0
  477. ads/llm/guardrails/huggingface.py +44 -0
  478. ads/llm/langchain/__init__.py +5 -0
  479. ads/llm/langchain/plugins/__init__.py +5 -0
  480. ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
  481. ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
  482. ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
  483. ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
  484. ads/llm/langchain/plugins/llms/__init__.py +5 -0
  485. ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
  486. ads/llm/requirements.txt +3 -0
  487. ads/llm/serialize.py +219 -0
  488. ads/llm/serializers/__init__.py +0 -0
  489. ads/llm/serializers/retrieval_qa.py +153 -0
  490. ads/llm/serializers/runnable_parallel.py +27 -0
  491. ads/llm/templates/score_chain.jinja2 +155 -0
  492. ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
  493. ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
  494. ads/model/__init__.py +52 -0
  495. ads/model/artifact.py +573 -0
  496. ads/model/artifact_downloader.py +254 -0
  497. ads/model/artifact_uploader.py +267 -0
  498. ads/model/base_properties.py +238 -0
  499. ads/model/common/.model-ignore +66 -0
  500. ads/model/common/__init__.py +5 -0
  501. ads/model/common/utils.py +142 -0
  502. ads/model/datascience_model.py +2635 -0
  503. ads/model/deployment/__init__.py +20 -0
  504. ads/model/deployment/common/__init__.py +5 -0
  505. ads/model/deployment/common/utils.py +308 -0
  506. ads/model/deployment/model_deployer.py +466 -0
  507. ads/model/deployment/model_deployment.py +1846 -0
  508. ads/model/deployment/model_deployment_infrastructure.py +671 -0
  509. ads/model/deployment/model_deployment_properties.py +493 -0
  510. ads/model/deployment/model_deployment_runtime.py +838 -0
  511. ads/model/extractor/__init__.py +5 -0
  512. ads/model/extractor/automl_extractor.py +74 -0
  513. ads/model/extractor/embedding_onnx_extractor.py +80 -0
  514. ads/model/extractor/huggingface_extractor.py +88 -0
  515. ads/model/extractor/keras_extractor.py +84 -0
  516. ads/model/extractor/lightgbm_extractor.py +93 -0
  517. ads/model/extractor/model_info_extractor.py +114 -0
  518. ads/model/extractor/model_info_extractor_factory.py +105 -0
  519. ads/model/extractor/pytorch_extractor.py +87 -0
  520. ads/model/extractor/sklearn_extractor.py +112 -0
  521. ads/model/extractor/spark_extractor.py +89 -0
  522. ads/model/extractor/tensorflow_extractor.py +85 -0
  523. ads/model/extractor/xgboost_extractor.py +94 -0
  524. ads/model/framework/__init__.py +5 -0
  525. ads/model/framework/automl_model.py +178 -0
  526. ads/model/framework/embedding_onnx_model.py +438 -0
  527. ads/model/framework/huggingface_model.py +399 -0
  528. ads/model/framework/lightgbm_model.py +266 -0
  529. ads/model/framework/pytorch_model.py +266 -0
  530. ads/model/framework/sklearn_model.py +250 -0
  531. ads/model/framework/spark_model.py +326 -0
  532. ads/model/framework/tensorflow_model.py +254 -0
  533. ads/model/framework/xgboost_model.py +258 -0
  534. ads/model/generic_model.py +3518 -0
  535. ads/model/model_artifact_boilerplate/README.md +381 -0
  536. ads/model/model_artifact_boilerplate/__init__.py +5 -0
  537. ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
  538. ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
  539. ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
  540. ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
  541. ads/model/model_artifact_boilerplate/score.py +61 -0
  542. ads/model/model_file_description_schema.json +68 -0
  543. ads/model/model_introspect.py +331 -0
  544. ads/model/model_metadata.py +1810 -0
  545. ads/model/model_metadata_mixin.py +460 -0
  546. ads/model/model_properties.py +63 -0
  547. ads/model/model_version_set.py +739 -0
  548. ads/model/runtime/__init__.py +5 -0
  549. ads/model/runtime/env_info.py +306 -0
  550. ads/model/runtime/model_deployment_details.py +37 -0
  551. ads/model/runtime/model_provenance_details.py +58 -0
  552. ads/model/runtime/runtime_info.py +81 -0
  553. ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
  554. ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
  555. ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
  556. ads/model/runtime/utils.py +201 -0
  557. ads/model/serde/__init__.py +5 -0
  558. ads/model/serde/common.py +40 -0
  559. ads/model/serde/model_input.py +547 -0
  560. ads/model/serde/model_serializer.py +1184 -0
  561. ads/model/service/__init__.py +5 -0
  562. ads/model/service/oci_datascience_model.py +1076 -0
  563. ads/model/service/oci_datascience_model_deployment.py +500 -0
  564. ads/model/service/oci_datascience_model_version_set.py +176 -0
  565. ads/model/transformer/__init__.py +5 -0
  566. ads/model/transformer/onnx_transformer.py +324 -0
  567. ads/mysqldb/__init__.py +5 -0
  568. ads/mysqldb/mysql_db.py +227 -0
  569. ads/opctl/__init__.py +18 -0
  570. ads/opctl/anomaly_detection.py +11 -0
  571. ads/opctl/backend/__init__.py +5 -0
  572. ads/opctl/backend/ads_dataflow.py +353 -0
  573. ads/opctl/backend/ads_ml_job.py +710 -0
  574. ads/opctl/backend/ads_ml_pipeline.py +164 -0
  575. ads/opctl/backend/ads_model_deployment.py +209 -0
  576. ads/opctl/backend/base.py +146 -0
  577. ads/opctl/backend/local.py +1053 -0
  578. ads/opctl/backend/marketplace/__init__.py +9 -0
  579. ads/opctl/backend/marketplace/helm_helper.py +173 -0
  580. ads/opctl/backend/marketplace/local_marketplace.py +271 -0
  581. ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
  582. ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
  583. ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
  584. ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
  585. ads/opctl/backend/marketplace/models/__init__.py +5 -0
  586. ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
  587. ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
  588. ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
  589. ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
  590. ads/opctl/cli.py +707 -0
  591. ads/opctl/cmds.py +869 -0
  592. ads/opctl/conda/__init__.py +5 -0
  593. ads/opctl/conda/cli.py +193 -0
  594. ads/opctl/conda/cmds.py +749 -0
  595. ads/opctl/conda/config.yaml +34 -0
  596. ads/opctl/conda/manifest_template.yaml +13 -0
  597. ads/opctl/conda/multipart_uploader.py +188 -0
  598. ads/opctl/conda/pack.py +89 -0
  599. ads/opctl/config/__init__.py +5 -0
  600. ads/opctl/config/base.py +57 -0
  601. ads/opctl/config/diagnostics/__init__.py +5 -0
  602. ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
  603. ads/opctl/config/merger.py +255 -0
  604. ads/opctl/config/resolver.py +297 -0
  605. ads/opctl/config/utils.py +79 -0
  606. ads/opctl/config/validator.py +17 -0
  607. ads/opctl/config/versioner.py +68 -0
  608. ads/opctl/config/yaml_parsers/__init__.py +7 -0
  609. ads/opctl/config/yaml_parsers/base.py +58 -0
  610. ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
  611. ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
  612. ads/opctl/constants.py +66 -0
  613. ads/opctl/decorator/__init__.py +5 -0
  614. ads/opctl/decorator/common.py +129 -0
  615. ads/opctl/diagnostics/__init__.py +5 -0
  616. ads/opctl/diagnostics/__main__.py +25 -0
  617. ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
  618. ads/opctl/diagnostics/check_requirements.py +144 -0
  619. ads/opctl/diagnostics/requirement_exception.py +9 -0
  620. ads/opctl/distributed/README.md +109 -0
  621. ads/opctl/distributed/__init__.py +5 -0
  622. ads/opctl/distributed/certificates.py +32 -0
  623. ads/opctl/distributed/cli.py +207 -0
  624. ads/opctl/distributed/cmds.py +731 -0
  625. ads/opctl/distributed/common/__init__.py +5 -0
  626. ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
  627. ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
  628. ads/opctl/distributed/common/cluster_config_helper.py +103 -0
  629. ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
  630. ads/opctl/distributed/common/cluster_runner.py +54 -0
  631. ads/opctl/distributed/common/framework_factory.py +29 -0
  632. ads/opctl/docker/Dockerfile.job +103 -0
  633. ads/opctl/docker/Dockerfile.job.arm +107 -0
  634. ads/opctl/docker/Dockerfile.job.gpu +175 -0
  635. ads/opctl/docker/base-env.yaml +13 -0
  636. ads/opctl/docker/cuda.repo +6 -0
  637. ads/opctl/docker/operator/.dockerignore +0 -0
  638. ads/opctl/docker/operator/Dockerfile +41 -0
  639. ads/opctl/docker/operator/Dockerfile.gpu +85 -0
  640. ads/opctl/docker/operator/cuda.repo +6 -0
  641. ads/opctl/docker/operator/environment.yaml +8 -0
  642. ads/opctl/forecast.py +11 -0
  643. ads/opctl/index.yaml +3 -0
  644. ads/opctl/model/__init__.py +5 -0
  645. ads/opctl/model/cli.py +65 -0
  646. ads/opctl/model/cmds.py +73 -0
  647. ads/opctl/operator/README.md +4 -0
  648. ads/opctl/operator/__init__.py +31 -0
  649. ads/opctl/operator/cli.py +344 -0
  650. ads/opctl/operator/cmd.py +596 -0
  651. ads/opctl/operator/common/__init__.py +5 -0
  652. ads/opctl/operator/common/backend_factory.py +460 -0
  653. ads/opctl/operator/common/const.py +27 -0
  654. ads/opctl/operator/common/data/synthetic.csv +16001 -0
  655. ads/opctl/operator/common/dictionary_merger.py +148 -0
  656. ads/opctl/operator/common/errors.py +42 -0
  657. ads/opctl/operator/common/operator_config.py +99 -0
  658. ads/opctl/operator/common/operator_loader.py +811 -0
  659. ads/opctl/operator/common/operator_schema.yaml +130 -0
  660. ads/opctl/operator/common/operator_yaml_generator.py +152 -0
  661. ads/opctl/operator/common/utils.py +208 -0
  662. ads/opctl/operator/lowcode/__init__.py +5 -0
  663. ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
  664. ads/opctl/operator/lowcode/anomaly/README.md +207 -0
  665. ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
  666. ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
  667. ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
  668. ads/opctl/operator/lowcode/anomaly/const.py +167 -0
  669. ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
  670. ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
  671. ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
  672. ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
  673. ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
  674. ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
  675. ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
  676. ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
  677. ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
  678. ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
  679. ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
  680. ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
  681. ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
  682. ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
  683. ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
  684. ads/opctl/operator/lowcode/common/__init__.py +5 -0
  685. ads/opctl/operator/lowcode/common/const.py +10 -0
  686. ads/opctl/operator/lowcode/common/data.py +116 -0
  687. ads/opctl/operator/lowcode/common/errors.py +47 -0
  688. ads/opctl/operator/lowcode/common/transformations.py +296 -0
  689. ads/opctl/operator/lowcode/common/utils.py +384 -0
  690. ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
  691. ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
  692. ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
  693. ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
  694. ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
  695. ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
  696. ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
  697. ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
  698. ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
  699. ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
  700. ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
  701. ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
  702. ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
  703. ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
  704. ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
  705. ads/opctl/operator/lowcode/forecast/README.md +209 -0
  706. ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
  707. ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
  708. ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
  709. ads/opctl/operator/lowcode/forecast/const.py +92 -0
  710. ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
  711. ads/opctl/operator/lowcode/forecast/errors.py +26 -0
  712. ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
  713. ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
  714. ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
  715. ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
  716. ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
  717. ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
  718. ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
  719. ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
  720. ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
  721. ads/opctl/operator/lowcode/forecast/model/prophet.py +445 -0
  722. ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
  723. ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
  724. ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
  725. ads/opctl/operator/lowcode/forecast/utils.py +397 -0
  726. ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
  727. ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
  728. ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
  729. ads/opctl/operator/lowcode/pii/MLoperator +17 -0
  730. ads/opctl/operator/lowcode/pii/README.md +208 -0
  731. ads/opctl/operator/lowcode/pii/__init__.py +5 -0
  732. ads/opctl/operator/lowcode/pii/__main__.py +78 -0
  733. ads/opctl/operator/lowcode/pii/cmd.py +39 -0
  734. ads/opctl/operator/lowcode/pii/constant.py +84 -0
  735. ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
  736. ads/opctl/operator/lowcode/pii/errors.py +27 -0
  737. ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
  738. ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
  739. ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
  740. ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
  741. ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
  742. ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
  743. ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
  744. ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
  745. ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
  746. ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
  747. ads/opctl/operator/lowcode/pii/model/report.py +487 -0
  748. ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
  749. ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
  750. ads/opctl/operator/lowcode/pii/utils.py +43 -0
  751. ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
  752. ads/opctl/operator/lowcode/recommender/README.md +206 -0
  753. ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
  754. ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
  755. ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
  756. ads/opctl/operator/lowcode/recommender/constant.py +30 -0
  757. ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
  758. ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
  759. ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
  760. ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
  761. ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
  762. ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
  763. ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
  764. ads/opctl/operator/lowcode/recommender/utils.py +13 -0
  765. ads/opctl/operator/runtime/__init__.py +5 -0
  766. ads/opctl/operator/runtime/const.py +17 -0
  767. ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
  768. ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
  769. ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
  770. ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
  771. ads/opctl/operator/runtime/runtime.py +115 -0
  772. ads/opctl/schema.yaml.yml +36 -0
  773. ads/opctl/script.py +40 -0
  774. ads/opctl/spark/__init__.py +5 -0
  775. ads/opctl/spark/cli.py +43 -0
  776. ads/opctl/spark/cmds.py +147 -0
  777. ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
  778. ads/opctl/utils.py +344 -0
  779. ads/oracledb/__init__.py +5 -0
  780. ads/oracledb/oracle_db.py +346 -0
  781. ads/pipeline/__init__.py +39 -0
  782. ads/pipeline/ads_pipeline.py +2279 -0
  783. ads/pipeline/ads_pipeline_run.py +772 -0
  784. ads/pipeline/ads_pipeline_step.py +605 -0
  785. ads/pipeline/builders/__init__.py +5 -0
  786. ads/pipeline/builders/infrastructure/__init__.py +5 -0
  787. ads/pipeline/builders/infrastructure/custom_script.py +32 -0
  788. ads/pipeline/cli.py +119 -0
  789. ads/pipeline/extension.py +291 -0
  790. ads/pipeline/schema/__init__.py +5 -0
  791. ads/pipeline/schema/cs_step_schema.json +35 -0
  792. ads/pipeline/schema/ml_step_schema.json +31 -0
  793. ads/pipeline/schema/pipeline_schema.json +71 -0
  794. ads/pipeline/visualizer/__init__.py +5 -0
  795. ads/pipeline/visualizer/base.py +570 -0
  796. ads/pipeline/visualizer/graph_renderer.py +272 -0
  797. ads/pipeline/visualizer/text_renderer.py +84 -0
  798. ads/secrets/__init__.py +11 -0
  799. ads/secrets/adb.py +386 -0
  800. ads/secrets/auth_token.py +86 -0
  801. ads/secrets/big_data_service.py +365 -0
  802. ads/secrets/mysqldb.py +149 -0
  803. ads/secrets/oracledb.py +160 -0
  804. ads/secrets/secrets.py +407 -0
  805. ads/telemetry/__init__.py +7 -0
  806. ads/telemetry/base.py +69 -0
  807. ads/telemetry/client.py +125 -0
  808. ads/telemetry/telemetry.py +257 -0
  809. ads/templates/dataflow_pyspark.jinja2 +13 -0
  810. ads/templates/dataflow_sparksql.jinja2 +22 -0
  811. ads/templates/func.jinja2 +20 -0
  812. ads/templates/schemas/openapi.json +1740 -0
  813. ads/templates/score-pkl.jinja2 +173 -0
  814. ads/templates/score.jinja2 +322 -0
  815. ads/templates/score_embedding_onnx.jinja2 +202 -0
  816. ads/templates/score_generic.jinja2 +165 -0
  817. ads/templates/score_huggingface_pipeline.jinja2 +217 -0
  818. ads/templates/score_lightgbm.jinja2 +185 -0
  819. ads/templates/score_onnx.jinja2 +407 -0
  820. ads/templates/score_onnx_new.jinja2 +473 -0
  821. ads/templates/score_oracle_automl.jinja2 +185 -0
  822. ads/templates/score_pyspark.jinja2 +154 -0
  823. ads/templates/score_pytorch.jinja2 +219 -0
  824. ads/templates/score_scikit-learn.jinja2 +184 -0
  825. ads/templates/score_tensorflow.jinja2 +184 -0
  826. ads/templates/score_xgboost.jinja2 +178 -0
  827. ads/text_dataset/__init__.py +5 -0
  828. ads/text_dataset/backends.py +211 -0
  829. ads/text_dataset/dataset.py +445 -0
  830. ads/text_dataset/extractor.py +207 -0
  831. ads/text_dataset/options.py +53 -0
  832. ads/text_dataset/udfs.py +22 -0
  833. ads/text_dataset/utils.py +49 -0
  834. ads/type_discovery/__init__.py +9 -0
  835. ads/type_discovery/abstract_detector.py +21 -0
  836. ads/type_discovery/constant_detector.py +41 -0
  837. ads/type_discovery/continuous_detector.py +54 -0
  838. ads/type_discovery/credit_card_detector.py +99 -0
  839. ads/type_discovery/datetime_detector.py +92 -0
  840. ads/type_discovery/discrete_detector.py +118 -0
  841. ads/type_discovery/document_detector.py +146 -0
  842. ads/type_discovery/ip_detector.py +68 -0
  843. ads/type_discovery/latlon_detector.py +90 -0
  844. ads/type_discovery/phone_number_detector.py +63 -0
  845. ads/type_discovery/type_discovery_driver.py +87 -0
  846. ads/type_discovery/typed_feature.py +594 -0
  847. ads/type_discovery/unknown_detector.py +41 -0
  848. ads/type_discovery/zipcode_detector.py +48 -0
  849. ads/vault/__init__.py +7 -0
  850. ads/vault/vault.py +237 -0
  851. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.dist-info}/METADATA +150 -150
  852. oracle_ads-2.13.9rc1.dist-info/RECORD +858 -0
  853. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.dist-info}/WHEEL +1 -2
  854. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.dist-info}/entry_points.txt +2 -1
  855. oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
  856. oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
  857. {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,246 @@
1
+ #!/usr/bin/env python
2
+
3
+ # Copyright (c) 2023, 2024 Oracle and/or its affiliates.
4
+ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5
+
6
+ import json
7
+ import os
8
+ from joblib import load
9
+ import pandas as pd
10
+ import numpy as np
11
+ from functools import lru_cache
12
+ import logging
13
+ import ads
14
+ from ads.opctl.operator.lowcode.common.utils import load_data
15
+ from ads.opctl.operator.common.operator_config import InputData
16
+ from ads.opctl.operator.lowcode.forecast.const import SupportedModels
17
+
18
+ ads.set_auth("resource_principal")
19
+
20
+ logging.basicConfig(format='%(name)s - %(levelname)s - %(message)s', level=logging.INFO)
21
+ logger_pred = logging.getLogger('model-prediction')
22
+ logger_pred.setLevel(logging.INFO)
23
+ logger_feat = logging.getLogger('input-features')
24
+ logger_feat.setLevel(logging.INFO)
25
+
26
+ """
27
+ Inference script. This script is used for prediction by scoring server when schema is known.
28
+ """
29
+
30
+
31
+ @lru_cache(maxsize=10)
32
+ def load_model():
33
+ """
34
+ Loads model from the serialized format
35
+
36
+ Returns
37
+ -------
38
+ model: a model instance on which predict API can be invoked
39
+ """
40
+ model_dir = os.path.dirname(os.path.realpath(__file__))
41
+ contents = os.listdir(model_dir)
42
+ model_file_name = "models.pickle"
43
+ if model_file_name in contents:
44
+ with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), model_file_name), "rb") as file:
45
+ model = load(file)
46
+ else:
47
+ raise Exception('{0} is not found in model directory {1}'.format(model_file_name, model_dir))
48
+ return model
49
+
50
+
51
+ @lru_cache(maxsize=1)
52
+ def fetch_data_type_from_schema(
53
+ input_schema_path=os.path.join(os.path.dirname(os.path.realpath(__file__)), "input_schema.json")):
54
+ """
55
+ Returns data type information fetch from input_schema.json.
56
+
57
+ Parameters
58
+ ----------
59
+ input_schema_path: path of input schema.
60
+
61
+ Returns
62
+ -------
63
+ data_type: data type fetch from input_schema.json.
64
+
65
+ """
66
+ data_type = {}
67
+ if os.path.exists(input_schema_path):
68
+ schema = json.load(open(input_schema_path))
69
+ for col in schema['schema']:
70
+ data_type[col['name']] = col['dtype']
71
+ else:
72
+ print(
73
+ "input_schema has to be passed in in order to recover the same data type. pass `X_sample` in `ads.model.framework.sklearn_model.SklearnModel.prepare` function to generate the input_schema. Otherwise, the data type might be changed after serialization/deserialization.")
74
+ return data_type
75
+
76
+
77
+ def deserialize(data, input_schema_path):
78
+ """
79
+ Deserialize json serialization data to data in original type when sent to predict.
80
+
81
+ Parameters
82
+ ----------
83
+ data: serialized input data.
84
+ input_schema_path: path of input schema.
85
+
86
+ Returns
87
+ -------
88
+ data: deserialized input data.
89
+
90
+ """
91
+
92
+ # Add further data deserialization if needed
93
+ return data
94
+
95
+
96
+ def pre_inference(data, input_schema_path):
97
+ """
98
+ Preprocess data
99
+
100
+ Parameters
101
+ ----------
102
+ data: Data format as expected by the predict API of the core estimator.
103
+ input_schema_path: path of input schema.
104
+
105
+ Returns
106
+ -------
107
+ data: Data format after any processing.
108
+
109
+ """
110
+ return deserialize(data, input_schema_path)
111
+
112
+
113
+ def post_inference(yhat):
114
+ """
115
+ Post-process the model results
116
+
117
+ Parameters
118
+ ----------
119
+ yhat: Data format after calling model.predict.
120
+
121
+ Returns
122
+ -------
123
+ yhat: Data format after any processing.
124
+
125
+ """
126
+ if isinstance(yhat, pd.core.frame.DataFrame):
127
+ yhat = yhat.values
128
+ if isinstance(yhat, np.ndarray):
129
+ yhat = yhat.tolist()
130
+ return yhat
131
+
132
+
133
+ def get_forecast(future_df, model_name, series_id, model_object, date_col, target_column, target_cat_col, horizon):
134
+ date_col_name = date_col["name"]
135
+ date_col_format = date_col["format"]
136
+ future_df[target_cat_col] = future_df[target_cat_col].astype("str")
137
+ future_df[date_col_name] = pd.to_datetime(
138
+ future_df[date_col_name], format=date_col_format
139
+ )
140
+ if model_name == SupportedModels.AutoTS:
141
+ series_id_col = "Series"
142
+ full_data_indexed = future_df.rename(columns={target_cat_col: series_id_col})
143
+ additional_regressors = list(
144
+ set(full_data_indexed.columns) - {target_column, series_id_col, date_col_name}
145
+ )
146
+ future_reg = full_data_indexed.reset_index().pivot(
147
+ index=date_col_name,
148
+ columns=series_id_col,
149
+ values=additional_regressors,
150
+ )
151
+ pred_obj = model_object.predict(future_regressor=future_reg)
152
+ return pred_obj.forecast[series_id].tolist()
153
+ elif model_name == SupportedModels.Prophet and series_id in model_object:
154
+ model = model_object[series_id]['model']
155
+ label_encoder = model_object[series_id]['le']
156
+ processed = future_df.rename(columns={date_col_name: 'ds', target_column: 'y'})
157
+ encoded_df = label_encoder.transform(processed)
158
+ forecast = model.predict(encoded_df)
159
+ return forecast['yhat'].tolist()
160
+ elif model_name == SupportedModels.NeuralProphet and series_id in model_object:
161
+ model = model_object[series_id]['model']
162
+ label_encoder = model_object[series_id]['le']
163
+ model.restore_trainer()
164
+ accepted_regressors = list(model.config_regressors.regressors.keys())
165
+ data = future_df.rename(columns={date_col_name: 'ds', target_column: 'y'})
166
+ encoded_df = label_encoder.transform(data)
167
+ future = encoded_df[accepted_regressors + ["ds"]].reset_index(drop=True)
168
+ future["y"] = None
169
+ forecast = model.predict(future)
170
+ return forecast['yhat1'].tolist()
171
+ elif model_name == SupportedModels.Arima and series_id in model_object:
172
+ model = model_object[series_id]['model']
173
+ label_encoder = model_object[series_id]['le']
174
+ predict_cols = model_object[series_id]["predict_component_cols"]
175
+ encoded_df = label_encoder.transform(future_df)
176
+ x_pred = encoded_df.set_index(date_col_name)
177
+ x_pred = x_pred.drop(target_cat_col, axis=1)
178
+ yhat, conf_int = model.predict(
179
+ n_periods=horizon,
180
+ X=x_pred[predict_cols],
181
+ return_conf_int=True
182
+ )
183
+ yhat_clean = pd.DataFrame(yhat, index=yhat.index, columns=["yhat"])
184
+ return yhat_clean['yhat'].tolist()
185
+ elif model_name == SupportedModels.AutoMLX and series_id in model_object:
186
+ model = model_object[series_id]['model']
187
+ label_encoder = model_object[series_id]['le']
188
+ encoded_df = label_encoder.transform(future_df)
189
+ x_pred = encoded_df.drop(target_cat_col, axis=1)
190
+ x_pred = x_pred.set_index(date_col_name)
191
+ forecast = model.forecast(
192
+ X=x_pred,
193
+ periods=horizon
194
+ )
195
+ return forecast[target_column].tolist()
196
+ else:
197
+ raise Exception(f"Invalid model object type: {type(model_object).__name__}.")
198
+
199
+
200
+ def predict(data, model=load_model()) -> dict:
201
+ """
202
+ Returns prediction given the model and data to predict
203
+
204
+ Parameters
205
+ ----------
206
+ model: Model instance returned by load_model API
207
+ data: Data format as expected by the predict API of the core estimator. For eg. in case of sckit models it could be numpy array/List of list/Panda DataFrame
208
+
209
+ Returns
210
+ -------
211
+ predictions: Output from scoring server
212
+ Format: { 'prediction': output from `model.predict` method }
213
+
214
+ """
215
+ assert model is not None, "Model is not loaded"
216
+
217
+ models = model["models"]
218
+ specs = model["spec"]
219
+ horizon = specs["horizon"]
220
+ model_name = specs["model"]
221
+ date_col = specs["datetime_column"]
222
+ target_column = specs["target_column"]
223
+ target_category_column = specs["target_category_columns"][0]
224
+
225
+ try:
226
+ input_data = InputData(**data["additional_data"])
227
+ except TypeError as e:
228
+ raise ValueError(f"Validation error: {e}")
229
+ additional_data = load_data(input_data)
230
+
231
+ unique_values = additional_data[target_category_column].unique()
232
+ forecasts = {}
233
+ for key in unique_values:
234
+ try:
235
+ s_id = str(key)
236
+ filtered = additional_data[additional_data[target_category_column] == key]
237
+ future = filtered.tail(horizon)
238
+ forecast = get_forecast(future, model_name, s_id, models, date_col,
239
+ target_column, target_category_column, horizon)
240
+ forecasts[s_id] = json.dumps(forecast)
241
+ except Exception as e:
242
+ raise RuntimeError(
243
+ f"An error occurred during prediction: {e}."
244
+ f" Please ensure the input data matches the format and structure of the data used during training.")
245
+
246
+ return {'prediction': json.dumps(forecasts)}
@@ -0,0 +1,17 @@
1
+ type: pii
2
+ version: v1
3
+ name: PII Operator
4
+ conda_type: published
5
+ conda: pii_v1
6
+ gpu: no
7
+ keywords:
8
+ - PII
9
+ - Spacy
10
+ backends:
11
+ - job
12
+ - operator.local
13
+ description: |
14
+ PII operator, that detects detect and redact Personally Identifiable Information
15
+ (PII) data in datasets by combining pattern match and machine learning solution.
16
+ Use `ads operator info -t pii` to get more details about the pii operator."
17
+ logo: data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI1MCIKICBoZWlnaHQ9IjUwLjk0ODQ1MzYwODI0NzQ2IiB2aWV3Qm94PSIwLCAwLCA0MDAsMzY0Ljk0ODQ1MzYwODI0NzQ2Ij4KICA8ZyBpZD0ic3ZnZyI+CiAgICA8cGF0aCBpZD0icGF0aDAiCiAgICAgIGQ9Ik0xODIuNDc0IDQuMTk0IEMgMTI2LjI1NyAxMC4yODIsNjkuOTExIDQ0LjA5MCwyNy4zNzggOTcuMjUxIEMgMjIuMjM3IDEwMy42NzcsMTUuMDY1IDExMi4yOTgsMTEuNDQwIDExNi40MDkgQyAtMy4wMjcgMTMyLjgxOSwtMi41MTYgMTM2Ljk2MywxNi43OTIgMTU5Ljc5NCBDIDc5LjAzMCAyMzMuMzg3LDEzNS43MjMgMjY2LjI4NiwyMDAuMzQ0IDI2Ni4zMDcgQyAyNjIuNTYyIDI2Ni4zMjcsMzI0LjI1NSAyMzEuNjc1LDM3NS45NDkgMTY3LjY3MyBDIDM3OS4xNDQgMTYzLjcxOCwzODQuNDc5IDE1Ny4zODgsMzg3LjgwNCAxNTMuNjA4IEMgNDA0LjEwNSAxMzUuMDc3LDQwMi41OTggMTMxLjEwMSwzNjIuMTUzIDg1LjkxMSBDIDMwOS4zNjEgMjYuOTI1LDI0NC41OTAgLTIuNTMyLDE4Mi40NzQgNC4xOTQgTTIxNC40MzcgMzQuMDA4IEMgMjM0LjkwOSAzNi40MzYsMjYzLjkxOCA0NC43MDcsMjYzLjkxOCA0OC4xMTUgQyAyNjMuOTE4IDQ4LjY3MiwyNDQuNDg1IDcwLjI0OCwyMzIuNjYxIDgyLjgxOCBDIDIyNy42ODMgODguMTEwLDIxOS45MjEgOTYuNDUwLDIxNS40MTMgMTAxLjM1MiBDIDIxMC45MDUgMTA2LjI1MywyMDQuNTg4IDExMy4wNjIsMjAxLjM3NSAxMTYuNDgzIEMgMTk4LjE2MiAxMTkuOTAzLDE5Mi4yODUgMTI2LjI1MSwxODguMzE2IDEzMC41ODggQyAxODQuMzQ3IDEzNC45MjYsMTc3LjA3OSAxNDIuNzU4LDE3Mi4xNjUgMTQ3Ljk5NCBDIDE2MS4zMDcgMTU5LjU2MiwxNDEuOTEwIDE4MC40NDMsMTMyLjQ3NCAxOTAuNzIyIEMgMTI4LjY1NyAxOTQuODgwLDEyMi44MzMgMjAxLjA5NywxMTkuNTMxIDIwNC41MzcgTCAxMTMuNTI5IDIxMC43OTMgMTA0LjcwMiAyMDQuMjYzIEMgODcuMDMxIDE5MS4xODksNjYuNzk0IDE3Mi4wMDksNDguNzE4IDE1MS4yMDMgQyAzNC43NjMgMTM1LjE0MCwzNC42MjggMTM0Ljk1NCwzNS44NTggMTMzLjUxMCBDIDM2LjQyNCAxMzIuODQ2LDQwLjg3OSAxMjcuNTA5LDQ1Ljc1NyAxMjEuNjQ5IEMgNjAuMDIzIDEwNC41MTUsNzUuOTI3IDg3Ljk0Myw4Ni45NDIgNzguNzM0IEMgOTUuNjI4IDcxLjQ3MiwxMDkuMTU0IDYxLjE2OCwxMTAuMDAwIDYxLjE2OCBDIDExMC4zMTYgNjEuMTY4LDExNi45MDkgNjcuNTM5LDEyNC42NTMgNzUuMzI2IEwgMTM4LjczMiA4OS40ODMgMTM2LjM3OCA5Mi43NTkgQyAxMjQuMzU5IDEwOS40ODksMTIwLjExOSAxMzguMzMyLDEyNi41ODYgMTU5LjM3MiBDIDEyOC4xNzcgMTY0LjU1MCwxMzIuNjA1IDE3NC41NzAsMTMzLjMwMSAxNzQuNTcwIEMgMTMzLjU1NiAxNzQuNTcwLDEzOS4wMDIgMTY4Ljk0MCwxNDUuNDA1IDE2Mi4wNTkgQyAxNTEuODA3IDE1NS4xNzgsMTU5LjEzMiAxNDcuMzQ1LDE2MS42ODQgMTQ0LjY1MyBDIDE2NS42MTUgMTQwLjUwNiwxNjYuMzIzIDEzOS4zODcsMTY2LjMyMyAxMzcuMzI3IEMgMTY2LjMyMyAxMjEuOTgwLDE3Ny41NTkgMTA4LjYzOCwxOTIuNDYwIDEwNi4yOTIgTCAxOTcuMzY3IDEwNS41MTkgMjA1LjcyOCA5Ni44OTggQyAyMTkuOTEzIDgyLjI3MywyMzEuNjE1IDY5LjYyOCwyMzEuNjE1IDY4LjkyNyBDIDIzMS42MTUgNjguNTU5LDIyOC45MDkgNjcuNDQwLDIyNS42MDEgNjYuNDQwIEMgMjA4LjExNyA2MS4xNTMsMTgyLjgzMyA2Mi4zMzUsMTY3LjY1MSA2OS4xNDggTCAxNjMuNDcwIDcxLjAyNSAxNTEuMzIyIDU4Ljg2NCBDIDE0MS41NzkgNDkuMTEwLDEzOS4zNzkgNDYuNTcyLDE0MC4yMDYgNDYuMDM1IEMgMTUzLjc5NSAzNy4yMjcsMTkwLjg5NCAzMS4yMTYsMjE0LjQzNyAzNC4wMDggTTI5Ny40NTIgNjYuMDk4IEMgMzEyLjY0MSA3Ny4yMDEsMzM3LjU1MCAxMDEuOTgxLDM1Ny42MzYgMTI1Ljk2OSBMIDM2NC45OTQgMTM0Ljc1NiAzNjEuMTA5IDEzOS4zNzEgQyAzNTguOTcyIDE0MS45MDksMzU2LjA5NiAxNDUuMjIzLDM1NC43MTcgMTQ2LjczNSBDIDM1My4zMzkgMTQ4LjI0NywzNDguNjMwIDE1My41MDUsMzQ0LjI1NCAxNTguNDE5IEMgMzIyLjA1MSAxODMuMzUxLDI5MC4wNjkgMjExLjQ4MCwyODcuMzI2IDIwOC40ODggQyAyODYuNjg1IDIwNy43ODksMjgwLjY4MSAyMDEuNjE1LDI3My45ODUgMTk0Ljc2OCBMIDI2MS44MTAgMTgyLjMyMCAyNjQuMjcwIDE3OC42MTcgQyAyNzguMjU3IDE1Ny41NjYsMjgwLjg1MiAxMjUuNDI1LDI3MC4yMzYgMTA0LjczMyBMIDI2OS4wMjkgMTAyLjM4MCAyNTEuNTU4IDEyMS4zNDcgQyAyMzQuNDI1IDEzOS45NDgsMjM0LjA2NiAxNDAuMzk4LDIzMy4wMTAgMTQ0LjU5MSBDIDIzMC42MDMgMTU0LjE1NywyMjEuMDI0IDE2My41NDAsMjEzLjY0MSAxNjMuNTY3IEMgMjEyLjQxMiAxNjMuNTcyLDIxMS4xNzkgMTY0LjMzOCwyMDkuODYwIDE2NS45MTYgQyAyMDguNzg0IDE2Ny4yMDQsMjAyLjgwMSAxNzMuODkwLDE5Ni41NjQgMTgwLjc3NCBDIDE3My42MjAgMjA2LjA5OCwxNzQuNzQ5IDIwNC4yNTAsMTgxLjI3MSAyMDUuODA1IEMgMTk3Ljg4OSAyMDkuNzY4LDIxNi4wMTYgMjA4LjMxNSwyMzMuMjQxIDIwMS42NDAgTCAyMzYuNTg2IDIwMC4zNDQgMjQ3Ljg3OSAyMTEuOTI5IEMgMjYwLjU2NyAyMjQuOTQ1LDI2MC4zMTYgMjI0LjM0MSwyNTQuMDg3IDIyNi44OTQgQyAyMjYuODU5IDIzOC4wNTMsMTkxLjU5NyAyMzkuOTkzLDE2My4yMzAgMjMxLjg5MiBDIDE1Ni4xNzQgMjI5Ljg3NywxNDQuMjk0IDIyNS41NzUsMTQzLjM2MCAyMjQuNjk3IEMgMTQyLjk5NyAyMjQuMzU1LDE0Ni43NDAgMjE5Ljg4MCwxNTIuMjk1IDIxNC4wMTggQyAxNjEuODI5IDIwMy45NTYsMTYzLjQyMCAyMDIuMjM0LDE4MS43MjcgMTgyLjE3NiBDIDIwMC45MzUgMTYxLjEzMSwyMTUuNTg3IDE0NS4yMzQsMjIxLjk5NCAxMzguNDkwIEMgMjI1LjU4NiAxMzQuNzA5LDIzMC4wMzggMTI5LjkxNCwyMzEuODg4IDEyNy44MzUgQyAyMzMuNzM4IDEyNS43NTYsMjQwLjEwMiAxMTguOTUyLDI0Ni4wMzEgMTEyLjcxNSBDIDI1MS45NjAgMTA2LjQ3OCwyNTguNzk3IDk5LjIxNiwyNjEuMjIzIDk2LjU3OCBDIDI2My42NTAgOTMuOTQwLDI2OS4wMzggODguMjE4LDI3My4xOTYgODMuODYzIEMgMjc3LjM1NCA3OS41MDgsMjgzLjM2NCA3My4wODQsMjg2LjU1MSA2OS41ODggQyAyOTMuMjk4IDYyLjE4NSwyOTIuNDY1IDYyLjQ1MiwyOTcuNDUyIDY2LjA5OCBNMjAyLjQwNSAyOTYuMDI1IEMgMjAxLjY0OSAyOTYuMjA4LDIwMC4zMDYgMjk3LjAyMiwxOTkuNDE5IDI5Ny44MzUgQyAxOTUuOTMzIDMwMS4wMzEsMTk1LjkxNyAzMDEuMTc1LDE5NS43MzUgMzI5LjczNyBMIDE5NS41NjQgMzU2LjUwNiAxOTcuMzc3IDM1OS4yNDUgQyAyMDEuNzkxIDM2NS45MTUsMjA5Ljk5NSAzNjUuNjQzLDIxNC4wODkgMzU4LjY5MSBDIDIxNS4zOTkgMzU2LjQ2OCwyMTUuNDY0IDM1NS4xMjEsMjE1LjQ2NCAzMzAuMjQxIEMgMjE1LjQ2NCAzMDUuNDk1LDIxNS4zOTIgMzAzLjk4MCwyMTQuMDg5IDMwMS4zODQgQyAyMTEuNzYzIDI5Ni43NDcsMjA3LjUwMSAyOTQuNzkyLDIwMi40MDUgMjk2LjAyNSBNMjM5Ljg4NiAyOTYuNzM2IEMgMjM0Ljc3NSAyOTkuMzE1LDIzNC43MzQgMjk5LjU1OCwyMzQuNDkyIDMyOC45NTUgQyAyMzQuMjUyIDM1OC4xNDgsMjM0LjI5MCAzNTguNDM4LDIzOC43MzMgMzYxLjgyNyBDIDI0My42ODUgMzY1LjYwNCwyNDkuNjU0IDM2NC40MTQsMjUyLjczOCAzNTkuMDM1IEMgMjU1LjE0NyAzNTQuODMyLDI1NS4xNTcgMzA1Ljc1MSwyNTIuNzQ5IDMwMS4wNTYgQyAyNTAuMTU4IDI5Ni4wMDIsMjQ0Ljg2NSAyOTQuMjI1LDIzOS44ODYgMjk2LjczNiBNMTQxLjA1OSAyOTcuMTMxIEMgMTM3LjA5NSAyOTkuMzMyLDEzNy4xMzIgMjk5LjA1MSwxMzYuODkyIDMyOC4zMTIgQyAxMzYuNjQzIDM1OC42NjksMTM2LjgxMiAzNTkuODgyLDE0MS43MDYgMzYyLjg2NiBDIDE0OS43OTMgMzY3Ljc5NiwxNTUuMzI2IDM2Mi4xNDEsMTU1LjMyNiAzNDguOTQ2IEwgMTU1LjMyNiAzNDEuMDU1IDE2MC42NTMgMzQwLjU5NCBDIDE4NC40NzIgMzM4LjUzMSwxOTAuMjYxIDMwOC4zNTgsMTY4Ljc4NyAyOTguMTk5IEMgMTY0LjAyNyAyOTUuOTQ4LDE0NC41NDIgMjk1LjE5NywxNDEuMDU5IDI5Ny4xMzEgTTE2My4yNjEgMzE1LjA4OSBDIDE2Ni44NjcgMzE4LjY5NSwxNjQuNTM1IDMyMy4yMzcsMTU5LjAzNiAzMjMuMzE4IEwgMTU1LjY3MCAzMjMuMzY4IDE1NS40NjEgMzE5LjMyMSBDIDE1NS4xMzEgMzEyLjkzMCwxNTkuMDAyIDMxMC44MzAsMTYzLjI2MSAzMTUuMDg5ICIKICAgICAgc3Ryb2tlPSJub25lIiBmaWxsPSIjMjk0NDY1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD4KICA8L2c+Cjwvc3ZnPg==
@@ -0,0 +1,208 @@
1
+ # PII Operator
2
+
3
+
4
+ The PII Operator aims to detect and redact Personally Identifiable Information (PII) in datasets. PII data includes information such as names, addresses, and social security numbers, which can be used to identify individuals. This operator combine pattern matching and machine learning solution to identify PII, and then redacts or anonymizes it to protect the privacy of individuals.
5
+
6
+ Below are the steps to configure and run the PII Operator on different resources.
7
+
8
+ ## 1. Prerequisites
9
+
10
+ Follow the [CLI Configuration](https://accelerated-data-science.readthedocs.io/en/latest/user_guide/cli/opctl/configure.html) steps from the ADS documentation. This step is mandatory as it sets up default values for different options while running the PII Operator on OCI Data Science jobs.
11
+
12
+ ## 2. Generating configs
13
+
14
+ To generate starter configs, run the command below. This will create a list of YAML configs and place them in the `output` folder.
15
+
16
+ ```bash
17
+ ads operator init -t pii --overwrite --output ~/pii/
18
+ ```
19
+
20
+ The most important files expected to be generated are:
21
+
22
+ - `pii.yaml`: Contains pii-related configuration.
23
+ - `pii_operator_local_python.yaml`: This includes a local backend configuration for running pii operator in a local environment. The environment should be set up manually before running the operator.
24
+ - `pii_operator_local_container.yaml`: This includes a local backend configuration for running pii operator within a local container. The container should be built before running the operator. Please refer to the instructions below for details on how to accomplish this.
25
+ - `pii_job_container.yaml`: Contains Data Science job-related config to run pii operator in a Data Science job within a container (BYOC) runtime. The container should be built and published before running the operator. Please refer to the instructions below for details on how to accomplish this.
26
+ - `pii_job_python.yaml`: Contains Data Science job-related config to run pii operator in a Data Science job within a conda runtime. The conda should be built and published before running the operator.
27
+
28
+ All generated configurations should be ready to use without the need for any additional adjustments. However, they are provided as starter kit configurations that can be customized as needed.
29
+
30
+ ## 3. Running Pii on the local conda environment
31
+
32
+ To run pii operator locally, create and activate a new conda environment (`ads-pii`). Install all the required libraries listed in the `environment.yaml` file.
33
+
34
+ ```yaml
35
+ - aiohttp
36
+ - report-creator
37
+ - gender_guesser
38
+ - nameparser
39
+ - oracle_ads[opctl]
40
+ - plotly
41
+ - scrubadub
42
+ - scrubadub_spacy
43
+ - spacy-transformers==1.2.5
44
+ - spacy==3.6.1
45
+ ```
46
+
47
+ Please review the previously generated `pii.yaml` file using the `init` command, and make any necessary adjustments to the input and output file locations. By default, it assumes that the files should be located in the same folder from which the `init` command was executed.
48
+
49
+ Use the command below to verify the pii config.
50
+
51
+ ```bash
52
+ ads operator verify -f ~/pii/pii.yaml
53
+ ```
54
+
55
+ Use the following command to run the pii operator within the `ads-pii` conda environment.
56
+
57
+ ```bash
58
+ ads operator run -f ~/pii/pii.yaml -b local
59
+ ```
60
+
61
+ The operator will run in your local environment without requiring any additional modifications.
62
+
63
+ ## 4. Running pii on the local container
64
+
65
+ To run the pii operator within a local container, follow these steps:
66
+
67
+ Use the command below to build the pii container.
68
+
69
+ ```bash
70
+ ads operator build-image -t pii
71
+ ```
72
+
73
+ This will create a new `pii:v1` image, with `/etc/operator` as the designated working directory within the container.
74
+
75
+
76
+ Check the `pii_operator_local_container.yaml` config file. By default, it should have a `volume` section with the `.oci` configs folder mounted.
77
+
78
+ ```yaml
79
+ volume:
80
+ - "/Users/<user>/.oci:/root/.oci"
81
+ ```
82
+
83
+ Mounting the OCI configs folder is only required if an OCI Object Storage bucket will be used to store the input data or output result. The input/output folders can also be mounted to the container.
84
+
85
+ ```yaml
86
+ volume:
87
+ - /Users/<user>/.oci:/root/.oci
88
+ - /Users/<user>/pii/data:/etc/operator/data
89
+ - /Users/<user>/pii/result:/etc/operator/result
90
+ ```
91
+
92
+ The full config can look like:
93
+ ```yaml
94
+ kind: operator.local
95
+ spec:
96
+ image: pii:v1
97
+ volume:
98
+ - /Users/<user>/.oci:/root/.oci
99
+ - /Users/<user>/pii/data:/etc/operator/data
100
+ - /Users/<user>/pii/result:/etc/operator/result
101
+ type: container
102
+ version: v1
103
+ ```
104
+
105
+ Run the pii operator within a container using the command below:
106
+
107
+ ```bash
108
+ ads operator run -f ~/pii/pii.yaml --backend-config ~/pii/pii_operator_local_container.yaml
109
+ ```
110
+
111
+ ## 5. Running pii in the Data Science job within container runtime
112
+
113
+ To execute the pii operator within a Data Science job using container runtime, please follow the steps outlined below:
114
+
115
+ You can use the following command to build the forecast container. This step can be skipped if you have already done this for running the operator within a local container.
116
+
117
+ ```bash
118
+ ads operator build-image -t pii
119
+ ```
120
+
121
+ This will create a new `pii:v1` image, with `/etc/operator` as the designated working directory within the container.
122
+
123
+ Publish the `pii:v1` container to the [Oracle Container Registry](https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/Content/Registry/home.htm). To become familiar with OCI, read the documentation links posted below.
124
+
125
+ - [Access Container Registry](https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/Content/Registry/Concepts/registryoverview.htm#access)
126
+ - [Create repositories](https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/Content/Registry/Tasks/registrycreatingarepository.htm#top)
127
+ - [Push images](https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/Content/Registry/Tasks/registrypushingimagesusingthedockercli.htm#Pushing_Images_Using_the_Docker_CLI)
128
+
129
+ To publish `pii:v1` to OCR, use the command posted below:
130
+
131
+ ```bash
132
+ ads operator publish-image pii:v1 --registry <iad.ocir.io/tenancy/>
133
+ ```
134
+
135
+ After the container is published to OCR, it can be used within Data Science jobs service. Check the `backend_job_container_config.yaml` config file. It should contain pre-populated infrastructure and runtime sections. The runtime section should contain an image property, something like `image: iad.ocir.io/<tenancy>/pii:v1`. More details about supported options can be found in the ADS Jobs documentation - [Run a Container](https://accelerated-data-science.readthedocs.io/en/latest/user_guide/jobs/run_container.html).
136
+
137
+ Adjust the `pii.yaml` config with proper input/output folders. When the operator is run in the Data Science job, it will not have access to local folders. Therefore, input data and output folders should be placed in the Object Storage bucket. Open the `pii.yaml` and adjust the following fields:
138
+
139
+ ```yaml
140
+ input_data:
141
+ url: oci://bucket@namespace/pii/input_data/data.csv
142
+ output_directory:
143
+ url: oci://bucket@namespace/pii/result/
144
+ ```
145
+
146
+ Run the pii operator on the Data Science jobs using the command posted below:
147
+
148
+ ```bash
149
+ ads operator run -f ~/pii/pii.yaml --backend-config ~/pii/pii_job_container.yaml
150
+ ```
151
+
152
+ The logs can be monitored using the `ads opctl watch` command.
153
+
154
+ ```bash
155
+ ads opctl watch <OCID>
156
+ ```
157
+
158
+
159
+ ## 6. Running pii in the Data Science job within conda runtime
160
+
161
+ To execute the pii operator within a Data Science job using conda runtime, please follow the steps outlined below:
162
+
163
+ You can use the following command to build the pii conda environment.
164
+
165
+ ```bash
166
+ ads operator build-conda -t pii
167
+ ```
168
+
169
+ This will create a new `pii_v1` conda environment and place it in the folder specified within `ads opctl configure` command.
170
+
171
+ Use the command below to Publish the `pii_v1` conda environment to the Object Storage bucket.
172
+
173
+ ```bash
174
+ ads opctl conda publish pii_v1
175
+ ```
176
+ More details about configuring CLI can be found here - [Configuring CLI](https://accelerated-data-science.readthedocs.io/en/latest/user_guide/cli/opctl/configure.html)
177
+
178
+
179
+ After the conda environment is published to Object Storage, it can be used within Data Science jobs service. Check the `pii_job_python.yaml` config file. It should contain pre-populated infrastructure and runtime sections. The runtime section should contain a `conda` section.
180
+
181
+ ```yaml
182
+ conda:
183
+ type: published
184
+ uri: oci://bucket@namespace/conda_environments/cpu/pii/1/pii_v1
185
+ ```
186
+
187
+ More details about supported options can be found in the ADS Jobs documentation - [Run a Python Workload](https://accelerated-data-science.readthedocs.io/en/latest/user_guide/jobs/run_python.html).
188
+
189
+ Adjust the `pii.yaml` config with proper input/output folders. When the pii is run in the Data Science job, it will not have access to local folders. Therefore, input data and output folders should be placed in the Object Storage bucket. Open the `pii.yaml` and adjust the following fields:
190
+
191
+ ```yaml
192
+ input_data:
193
+ url: oci://bucket@namespace/pii/input_data/data.csv
194
+ output_directory:
195
+ url: oci://bucket@namespace/pii/result/
196
+ ```
197
+
198
+ Run the pii on the Data Science jobs using the command posted below:
199
+
200
+ ```bash
201
+ ads operator run -f ~/pii/pii.yaml --backend-config ~/pii/pii_job_python.yaml
202
+ ```
203
+
204
+ The logs can be monitored using the `ads opctl watch` command.
205
+
206
+ ```bash
207
+ ads opctl watch <OCID>
208
+ ```
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*--
3
+
4
+ # Copyright (c) 2023 Oracle and/or its affiliates.
5
+ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*--
3
+
4
+ # Copyright (c) 2023 Oracle and/or its affiliates.
5
+ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
6
+
7
+ import json
8
+ import os
9
+ import sys
10
+ from typing import Dict, List
11
+
12
+ import yaml
13
+
14
+ from ads.opctl import logger
15
+ from ads.opctl.operator.common.const import ENV_OPERATOR_ARGS
16
+ from ads.opctl.operator.common.utils import _parse_input_args
17
+
18
+ from .model.guardrails import PIIGuardrail
19
+ from .operator_config import PiiOperatorConfig
20
+
21
+
22
+ def operate(operator_config: PiiOperatorConfig) -> None:
23
+ """Runs the PII operator."""
24
+ guard = PIIGuardrail(config=operator_config)
25
+ guard.process()
26
+
27
+
28
+ def verify(spec: Dict, **kwargs: Dict) -> bool:
29
+ """Verifies the PII operator config."""
30
+ operator = PiiOperatorConfig.from_dict(spec)
31
+ msg_header = (
32
+ f"{'*' * 30} The operator config has been successfully verified {'*' * 30}"
33
+ )
34
+ print(msg_header)
35
+ print(operator.to_yaml())
36
+ print("*" * len(msg_header))
37
+
38
+
39
+ def main(raw_args: List[str]):
40
+ """The entry point of the PII the operator."""
41
+ args, _ = _parse_input_args(raw_args)
42
+ if not args.file and not args.spec and not os.environ.get(ENV_OPERATOR_ARGS):
43
+ logger.info(
44
+ "Please specify -f[--file] or -s[--spec] or "
45
+ f"pass operator's arguments via {ENV_OPERATOR_ARGS} environment variable."
46
+ )
47
+ return
48
+
49
+ logger.info("-" * 100)
50
+ logger.info(f"{'Running' if not args.verify else 'Verifying'} the operator...")
51
+
52
+ # if spec provided as input string, then convert the string into YAML
53
+ yaml_string = ""
54
+ if args.spec or os.environ.get(ENV_OPERATOR_ARGS):
55
+ operator_spec_str = args.spec or os.environ.get(ENV_OPERATOR_ARGS)
56
+ try:
57
+ yaml_string = yaml.safe_dump(json.loads(operator_spec_str))
58
+ except json.JSONDecodeError:
59
+ yaml_string = yaml.safe_dump(yaml.safe_load(operator_spec_str))
60
+ except:
61
+ yaml_string = operator_spec_str
62
+
63
+ operator_config = PiiOperatorConfig.from_yaml(
64
+ uri=args.file,
65
+ yaml_string=yaml_string,
66
+ )
67
+
68
+ logger.info(operator_config.to_yaml())
69
+
70
+ # run operator
71
+ if args.verify:
72
+ verify(operator_config)
73
+ else:
74
+ operate(operator_config)
75
+
76
+
77
+ if __name__ == "__main__":
78
+ main(sys.argv[1:])
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*--
3
+
4
+ # Copyright (c) 2023 Oracle and/or its affiliates.
5
+ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
6
+
7
+ from typing import Dict
8
+
9
+ from ads.opctl import logger
10
+ from ads.opctl.operator.common.operator_yaml_generator import YamlGenerator
11
+ from ads.opctl.operator.common.utils import _load_yaml_from_uri
12
+
13
+
14
+ def init(**kwargs: Dict) -> str:
15
+ """
16
+ Generates operator config by the schema.
17
+
18
+ Properties
19
+ ----------
20
+ kwargs: (Dict, optional).
21
+ Additional key value arguments.
22
+
23
+ - type: str
24
+ The type of the operator.
25
+
26
+ Returns
27
+ -------
28
+ str
29
+ The YAML specification generated based on the schema.
30
+ """
31
+ logger.info("==== PII related options ====")
32
+
33
+ default_detector = [{"name": "<type>.<entity>", "action": "mask"}]
34
+
35
+ return YamlGenerator(
36
+ schema=_load_yaml_from_uri(__file__.replace("cmd.py", "schema.yaml"))
37
+ ).generate_example_dict(
38
+ values={"type": kwargs.get("type"), "detectors": default_detector}
39
+ )