oracle-ads 2.13.5__py3-none-any.whl → 2.13.6__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.
ads/aqua/common/enums.py CHANGED
@@ -2,6 +2,8 @@
2
2
  # Copyright (c) 2024, 2025 Oracle and/or its affiliates.
3
3
  # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
4
4
 
5
+ from typing import Dict, List
6
+
5
7
  from ads.common.extended_enum import ExtendedEnum
6
8
 
7
9
 
@@ -106,3 +108,15 @@ class ModelFormat(ExtendedEnum):
106
108
  class Platform(ExtendedEnum):
107
109
  ARM_CPU = "ARM_CPU"
108
110
  NVIDIA_GPU = "NVIDIA_GPU"
111
+
112
+
113
+ # This dictionary defines compatibility groups for container families.
114
+ # The structure is:
115
+ # - Key: The preferred container family to use when multiple compatible families are selected.
116
+ # - Value: A list of all compatible families (including the preferred one).
117
+ CONTAINER_FAMILY_COMPATIBILITY: Dict[str, List[str]] = {
118
+ InferenceContainerTypeFamily.AQUA_VLLM_V1_CONTAINER_FAMILY: [
119
+ InferenceContainerTypeFamily.AQUA_VLLM_V1_CONTAINER_FAMILY,
120
+ InferenceContainerTypeFamily.AQUA_VLLM_CONTAINER_FAMILY,
121
+ ],
122
+ }
ads/aqua/common/utils.py CHANGED
@@ -37,6 +37,7 @@ from pydantic import BaseModel, ValidationError
37
37
 
38
38
  from ads.aqua.common.entities import GPUShapesIndex
39
39
  from ads.aqua.common.enums import (
40
+ CONTAINER_FAMILY_COMPATIBILITY,
40
41
  InferenceContainerParamType,
41
42
  InferenceContainerType,
42
43
  RqsAdditionalDetails,
@@ -1316,3 +1317,40 @@ def load_gpu_shapes_index(
1316
1317
  )
1317
1318
 
1318
1319
  return GPUShapesIndex(**data)
1320
+
1321
+
1322
+ def get_preferred_compatible_family(selected_families: set[str]) -> str:
1323
+ """
1324
+ Determines the preferred container family from a given set of container families.
1325
+
1326
+ This method is used in the context of multi-model deployment to handle cases
1327
+ where models selected for deployment use different, but compatible, container families.
1328
+
1329
+ It checks the input `families` set against the `CONTAINER_FAMILY_COMPATIBILITY` map.
1330
+ If a compatibility group exists that fully includes all the families in the input,
1331
+ the corresponding key (i.e., the preferred family) is returned.
1332
+
1333
+ Parameters
1334
+ ----------
1335
+ families : set[str]
1336
+ A set of container family identifiers.
1337
+
1338
+ Returns
1339
+ -------
1340
+ Optional[str]
1341
+ The preferred container family if all families are compatible within one group;
1342
+ otherwise, returns `None` indicating that no compatible family group was found.
1343
+
1344
+ Example
1345
+ -------
1346
+ >>> get_preferred_compatible_family({"odsc-vllm-serving", "odsc-vllm-serving-v1"})
1347
+ 'odsc-vllm-serving-v1'
1348
+
1349
+ >>> get_preferred_compatible_family({"odsc-vllm-serving", "odsc-tgi-serving"})
1350
+ None # Incompatible families
1351
+ """
1352
+ for preferred, compatible_list in CONTAINER_FAMILY_COMPATIBILITY.items():
1353
+ if selected_families.issubset(set(compatible_list)):
1354
+ return preferred
1355
+
1356
+ return None
ads/aqua/model/model.py CHANGED
@@ -39,6 +39,7 @@ from ads.aqua.common.utils import (
39
39
  get_artifact_path,
40
40
  get_container_config,
41
41
  get_hf_model_info,
42
+ get_preferred_compatible_family,
42
43
  list_os_files_with_extension,
43
44
  load_config,
44
45
  read_file,
@@ -337,15 +338,25 @@ class AquaModelApp(AquaApp):
337
338
 
338
339
  selected_models_deployment_containers.add(deployment_container)
339
340
 
340
- # Check if the all models in the group shares same container family
341
- if len(selected_models_deployment_containers) > 1:
341
+ if not selected_models_deployment_containers:
342
342
  raise AquaValueError(
343
- "The selected models are associated with different container families: "
344
- f"{list(selected_models_deployment_containers)}."
345
- "For multi-model deployment, all models in the group must share the same container family."
343
+ "None of the selected models are associated with a recognized container family. "
344
+ "Please review the selected models, or select a different group of models."
346
345
  )
347
346
 
348
- deployment_container = selected_models_deployment_containers.pop()
347
+ # Check if the all models in the group shares same container family
348
+ if len(selected_models_deployment_containers) > 1:
349
+ deployment_container = get_preferred_compatible_family(
350
+ selected_families=selected_models_deployment_containers
351
+ )
352
+ if not deployment_container:
353
+ raise AquaValueError(
354
+ "The selected models are associated with different container families: "
355
+ f"{list(selected_models_deployment_containers)}."
356
+ "For multi-model deployment, all models in the group must share the same container family."
357
+ )
358
+ else:
359
+ deployment_container = selected_models_deployment_containers.pop()
349
360
 
350
361
  # Generate model group details
351
362
  timestamp = datetime.now().strftime("%Y%m%d")
@@ -1,15 +1,14 @@
1
1
  #!/usr/bin/env python
2
- # -*- coding: utf-8; -*-
3
2
 
4
- # Copyright (c) 2020, 2022 Oracle and/or its affiliates.
3
+ # Copyright (c) 2020, 2025 Oracle and/or its affiliates.
5
4
  # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
6
5
 
7
6
  import copy
8
7
  import importlib
9
8
 
10
9
  from ads.common.decorator.runtime_dependency import (
11
- runtime_dependency,
12
10
  OptionalDependency,
11
+ runtime_dependency,
13
12
  )
14
13
  from ads.dataset import logger
15
14
 
@@ -59,11 +58,10 @@ class Recommendation:
59
58
  if change["type"] == "change" and change["name"] == "value":
60
59
  if change["new"] == "Fill missing values with constant":
61
60
  self._show_constant_fill_widget(column)
62
- else:
63
- if change["old"] == "Fill missing values with constant":
64
- text = self.fill_nan_dict.pop(column, None)
65
- if text is not None:
66
- text.close()
61
+ elif change["old"] == "Fill missing values with constant":
62
+ text = self.fill_nan_dict.pop(column, None)
63
+ if text is not None:
64
+ text.close()
67
65
  self.reco_dict[recommendation_type][column]["Selected Action"] = change[
68
66
  "new"
69
67
  ]
@@ -151,7 +149,6 @@ class Recommendation:
151
149
  @runtime_dependency(module="IPython", install_from=OptionalDependency.NOTEBOOK)
152
150
  @runtime_dependency(module="ipywidgets", install_from=OptionalDependency.NOTEBOOK)
153
151
  def _display(self):
154
-
155
152
  from IPython.core.display import display
156
153
 
157
154
  if self.recommendation_type_index != len(self.recommendation_types):
@@ -164,11 +161,7 @@ class Recommendation:
164
161
  ]
165
162
  if self.recommendation_type_index == 0:
166
163
  for column in recommendation:
167
- print(
168
- "Column '{0}' is constant and will be dropped".format(
169
- column
170
- )
171
- )
164
+ print(f"Column '{column}' is constant and will be dropped")
172
165
  self.recommendation_type_index += 1
173
166
  self._display()
174
167
  return
@@ -184,9 +177,9 @@ class Recommendation:
184
177
  self.recommendation_type_labels[
185
178
  self.recommendation_type_index
186
179
  ]
187
- )
180
+ ),
181
+ layout=ipywidgets.Layout(display="flex"),
188
182
  ),
189
- layout=ipywidgets.Layout(display="flex"),
190
183
  )
191
184
  self.action_list[
192
185
  self.recommendation_types[self.recommendation_type_index]
@@ -194,7 +187,7 @@ class Recommendation:
194
187
  self.column_list = []
195
188
  self.message_list = []
196
189
  self.extra_info_list = []
197
- for column in recommendation.keys():
190
+ for column in recommendation:
198
191
  messages = ipywidgets.Label(
199
192
  recommendation[column]["Message"],
200
193
  layout=ipywidgets.Layout(
@@ -240,9 +233,7 @@ class Recommendation:
240
233
  self.column_list.append(
241
234
  ipywidgets.Label(
242
235
  column
243
- + "(type: {0})".format(
244
- self.ds.sampled_df[column].dtype
245
- ),
236
+ + f"(type: {self.ds.sampled_df[column].dtype})",
246
237
  layout=ipywidgets.Layout(flex="auto"),
247
238
  color="grey",
248
239
  )
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- # Copyright (c) 2023, 2024 Oracle and/or its affiliates.
3
+ # Copyright (c) 2023, 2025 Oracle and/or its affiliates.
4
4
  # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5
5
 
6
6
 
@@ -123,7 +123,6 @@ def make_model_card(model_name="", readme_path=""):
123
123
  )
124
124
  return rc.Group(
125
125
  rc.Text("-"),
126
- columns=1,
127
126
  )
128
127
 
129
128
  try:
@@ -156,7 +155,6 @@ def make_model_card(model_name="", readme_path=""):
156
155
  return rc.Group(
157
156
  rc.Text(text),
158
157
  eval_res_tb,
159
- columns=2,
160
158
  )
161
159
 
162
160
 
@@ -216,7 +214,7 @@ def build_entity_df(entites, id) -> pd.DataFrame:
216
214
  "Type": "-",
217
215
  "Redacted To": "-",
218
216
  }
219
- df = df.append(df2, ignore_index=True)
217
+ df = pd.concat([df, pd.DataFrame([df2])], ignore_index=True)
220
218
  return df
221
219
 
222
220
 
@@ -232,7 +230,6 @@ class RowReportFields:
232
230
  self._make_stats_card(),
233
231
  self._make_text_card(),
234
232
  ],
235
- type=rc.SelectType.TABS,
236
233
  ),
237
234
  label="Row Id: " + str(self.spec.id),
238
235
  )
@@ -256,7 +253,7 @@ class RowReportFields:
256
253
  index=True,
257
254
  )
258
255
  )
259
- return rc.Group(stats, label="STATS")
256
+ return rc.Group(*stats, label="STATS")
260
257
 
261
258
  def _make_text_card(self):
262
259
  annotations = []
@@ -277,7 +274,7 @@ class RowReportFields:
277
274
  },
278
275
  return_html=True,
279
276
  )
280
- return rc.Group(rc.HTML(render_html), label="TEXT")
277
+ return rc.Group(rc.Html(render_html), label="TEXT")
281
278
 
282
279
 
283
280
  class PIIOperatorReport:
@@ -292,7 +289,7 @@ class PIIOperatorReport:
292
289
  RowReportFields(r, report_spec.run_summary.show_sensitive_info)
293
290
  for r in rows
294
291
  ]
295
-
292
+ self.report_sections = None
296
293
  self.report_uri = report_uri
297
294
 
298
295
  def make_view(self):
@@ -317,7 +314,6 @@ class PIIOperatorReport:
317
314
  label="Details",
318
315
  ),
319
316
  ],
320
- type=rc.SelectType.TABS,
321
317
  )
322
318
  )
323
319
  self.report_sections = [title_text, report_description, time_proceed, structure]
@@ -331,7 +327,8 @@ class PIIOperatorReport:
331
327
  disable_print()
332
328
  with rc.ReportCreator("My Report") as report:
333
329
  report.save(
334
- rc.Block(report_sections or self.report_sections), report_local_path
330
+ rc.Block(*(report_sections or self.report_sections)),
331
+ report_local_path,
335
332
  )
336
333
  enable_print()
337
334
 
@@ -354,7 +351,6 @@ class PIIOperatorReport:
354
351
  self._make_yaml_card(),
355
352
  self._make_model_card(),
356
353
  ],
357
- type=rc.SelectType.TABS,
358
354
  ),
359
355
  )
360
356
 
@@ -367,7 +363,6 @@ class PIIOperatorReport:
367
363
  blocks=[
368
364
  row.build_report() for row in self.rows_details
369
365
  ], # RowReportFields
370
- type=rc.SelectType.DROPDOWN,
371
366
  label="Details",
372
367
  ),
373
368
  )
@@ -414,7 +409,6 @@ class PIIOperatorReport:
414
409
  self.report_spec.run_summary.elapsed_time
415
410
  ),
416
411
  ),
417
- columns=2,
418
412
  ),
419
413
  rc.Heading("Entities Distribution", level=3),
420
414
  plot_pie(self.report_spec.run_summary.statics),
@@ -423,7 +417,7 @@ class PIIOperatorReport:
423
417
  entites_df = self._build_total_entity_df()
424
418
  summary_stats.append(rc.Heading("Resolved Entities", level=3))
425
419
  summary_stats.append(rc.DataTable(entites_df, index=True))
426
- return rc.Group(summary_stats, label="STATS")
420
+ return rc.Group(*summary_stats, label="STATS")
427
421
 
428
422
  def _make_yaml_card(self) -> rc.Group:
429
423
  """Shows the full pii config yaml."""
@@ -449,13 +443,12 @@ class PIIOperatorReport:
449
443
 
450
444
  if len(model_cards) <= 1:
451
445
  return rc.Group(
452
- model_cards,
446
+ *model_cards,
453
447
  label="MODEL CARD",
454
448
  )
455
449
  return rc.Group(
456
450
  rc.Select(
457
451
  model_cards,
458
- type=rc.SelectType.TABS,
459
452
  ),
460
453
  label="MODEL CARD",
461
454
  )
ads/opctl/utils.py CHANGED
@@ -154,7 +154,7 @@ def build_image(image_type: str, gpu: bool = False) -> None:
154
154
  # Just get the manufacturer of the processors
155
155
  manufacturer = cpuinfo.get_cpu_info().get("brand_raw")
156
156
  arch = (
157
- "arm" if re.search("apple m\d ", manufacturer, re.IGNORECASE) else "other"
157
+ "arm" if re.search("apple m\d", manufacturer, re.IGNORECASE) else "other"
158
158
  )
159
159
  print(f"The local machine's platform is {arch}.")
160
160
  image, dockerfile, target = _get_image_name_dockerfile_target(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oracle_ads
3
- Version: 2.13.5
3
+ Version: 2.13.6
4
4
  Summary: Oracle Accelerated Data Science SDK
5
5
  Keywords: Oracle Cloud Infrastructure,OCI,Machine Learning,ML,Artificial Intelligence,AI,Data Science,Cloud,Oracle
6
6
  Author: Oracle Data Science
@@ -13,9 +13,9 @@ ads/aqua/client/openai_client.py,sha256=Gi8nSrtPAUOjxRNu-6UUAqtxWyQIQ5CAvatnm7Xf
13
13
  ads/aqua/common/__init__.py,sha256=rZrmh1nho40OCeabXCNWtze-mXi-PGKetcZdxZSn3_0,204
14
14
  ads/aqua/common/decorator.py,sha256=JEN6Cy4DYgQbmIR3ShCjTuBMCnilDxq7jkYMJse1rcM,4112
15
15
  ads/aqua/common/entities.py,sha256=kLUJu77Sg97VrHb76PvFAAaSWEUum9nYTwzMtOnUo50,8922
16
- ads/aqua/common/enums.py,sha256=ZuGidUsZvfWkTxkj4S6K9tRJAXPTrR7t2v4JgGSV7_8,3175
16
+ ads/aqua/common/enums.py,sha256=rTZDOQzTfcgwEl7gjVY3_JotHXkz7wB_edEIB0i6AeQ,3739
17
17
  ads/aqua/common/errors.py,sha256=QONm-2jKBg8AjgOKXm6x-arAV1KIW9pdhfNN1Ys21Wo,3044
18
- ads/aqua/common/utils.py,sha256=enU8TvoR4-kaNKRt7SCF-ARMFrDNs6vOsubFfyqV5S0,42843
18
+ ads/aqua/common/utils.py,sha256=OtHtGCC0gZvqNif_sfQoYp4KnZhIulv5a_gbceomIew,44238
19
19
  ads/aqua/config/__init__.py,sha256=2a_1LI4jWtJpbic5_v4EoOUTXCAH7cmsy9BW5prDHjU,179
20
20
  ads/aqua/config/config.py,sha256=MNY4ttccaQdhxUyS1o367YIDl-U_AiSLVlgvzSd7JE4,944
21
21
  ads/aqua/config/container_config.py,sha256=7n3ZZG7Y1J4IkwEAhkoQ-h638pthPcyjRQogR25pSB4,8292
@@ -58,7 +58,7 @@ ads/aqua/model/__init__.py,sha256=j2iylvERdANxgrEDp7b_mLcKMz1CF5Go0qgYCiMwdos,27
58
58
  ads/aqua/model/constants.py,sha256=3BT5Dpr7EmTrBL7xF128gHGGjwyBgwAr3OlLSWSnR9g,1628
59
59
  ads/aqua/model/entities.py,sha256=kBjsihInnbGw9MhWQEfJ4hcWEzv6BxF8VlDDFWUPYVg,9903
60
60
  ads/aqua/model/enums.py,sha256=iJi-AZRh7KR_HK5HUwTkgnTOGVna2Ai5WEzqCjk7Y3s,1079
61
- ads/aqua/model/model.py,sha256=Um7CqAJlFm4UOFtfU70KUXOaTC2fVpixJi1MqOUBKSQ,78762
61
+ ads/aqua/model/model.py,sha256=9gl2bPyUURb3azHmtu-iZJy2-hpCQKI-NvVPAxjPuy8,79324
62
62
  ads/aqua/modeldeployment/__init__.py,sha256=RJCfU1yazv3hVWi5rS08QVLTpTwZLnlC8wU8diwFjnM,391
63
63
  ads/aqua/modeldeployment/constants.py,sha256=lJF77zwxmlECljDYjwFAMprAUR_zctZHmawiP-4alLg,296
64
64
  ads/aqua/modeldeployment/deployment.py,sha256=bKwq0-qrAni2mZ9LMslcME-qlWSOhp7bn1H1zCvi1e0,55636
@@ -171,7 +171,7 @@ ads/dataset/label_encoder.py,sha256=JEvS7zdQRrj-hyDqLCY-tXLeROYCtdibapRWoUDXy_0,
171
171
  ads/dataset/pipeline.py,sha256=laXu4E-ipL7UKWEeTcvJEw2ub8YYUNFUo4Taqa4eB_o,1642
172
172
  ads/dataset/plot.py,sha256=8DB7brJqBJBsTFWogOxfYPYwTykFwAHFOIjA3Q8P2NE,26056
173
173
  ads/dataset/progress.py,sha256=ulcjMurT0P0FKJk0-6tmUQF5clpv2VGpnD2shM2EIHA,2298
174
- ads/dataset/recommendation.py,sha256=GZQiTxAC8ucSRV6W_ioEtbN8tKUV2By930iaBgGckjA,12909
174
+ ads/dataset/recommendation.py,sha256=lxVN9ThG2Mjs9aSLbVRxx_lWJ1U3kFZEN5QoqMiY-aw,12633
175
175
  ads/dataset/recommendation_transformer.py,sha256=ijt7EnG65vUuuMgfMH6gRE-kSVXtXoHvieFiagWg05U,22159
176
176
  ads/dataset/regression_dataset.py,sha256=KYoxzhn7kPXSUFX_QDDC4eSHP-3rAC3Y-2BHj-L28Zo,562
177
177
  ads/dataset/sampled_dataset.py,sha256=rvmQagFVDXZXtmUw_ugKO1cDL4sOZfqvsG033PnxXR4,39566
@@ -579,7 +579,7 @@ ads/opctl/forecast.py,sha256=ZInj8FyXHkdjiEmXDc-jH1xT7JAGHEKwP0Lnq39xWGQ,418
579
579
  ads/opctl/index.yaml,sha256=cf9j3VXcNY-DvFlAZQLZj8-hA9QArWlirPtN1sRKqyM,68
580
580
  ads/opctl/schema.yaml.yml,sha256=L4eoHVFLu5tHPDOD53-dVGbscKkXG86i4IbRX-bVL2g,546
581
581
  ads/opctl/script.py,sha256=3AgTOjDnvmheu4ROrn56d38h8wZVOZwne_ix2x3U6bY,1181
582
- ads/opctl/utils.py,sha256=DcEbj4xMB4H8brjwq6-F1SyWDK4o007xRTWC0IEmvoM,10672
582
+ ads/opctl/utils.py,sha256=QL0TmdVdP9Cywwqt8pF7mcpJpG0tLfc8A9M6X_sb20U,10671
583
583
  ads/opctl/backend/__init__.py,sha256=DwYupQz6SOfMLmmAjJ9danchK0shQRJKTGPU--naQgY,204
584
584
  ads/opctl/backend/ads_dataflow.py,sha256=XHk6OEcaWPU6vRvvRMqROiN8PriFKx_5Gvu6cz6pZas,13031
585
585
  ads/opctl/backend/ads_ml_job.py,sha256=Wwt2uiehi7ulkoPlhb4k5UeqYw1Y56Y_ANhGw5G5zP8,27834
@@ -748,7 +748,7 @@ ads/opctl/operator/lowcode/pii/model/__init__.py,sha256=sAqmLhogrLXb3xI7dPOj9HmS
748
748
  ads/opctl/operator/lowcode/pii/model/factory.py,sha256=mM-xifHwVa1tGHcTcvgySUrGsPmIqmOavf8i_dVbkRQ,2502
749
749
  ads/opctl/operator/lowcode/pii/model/guardrails.py,sha256=--GUFt-zlVyJY5WQZNMHjQDlVfVy-tYeXubgvYN-H-U,6246
750
750
  ads/opctl/operator/lowcode/pii/model/pii.py,sha256=hbOomsCNgj7uZNOdUIja3rE-iTGhh9P2hKh8xrtpXR4,5110
751
- ads/opctl/operator/lowcode/pii/model/report.py,sha256=vDivP5dWWBoIzDpT1ww2WMBZKybX6DigaPSCW46F__Q,16361
751
+ ads/opctl/operator/lowcode/pii/model/report.py,sha256=8D24DlDHPy_FRNUzFkKN7iTFH-974xiJ48rzUWsUsd8,16167
752
752
  ads/opctl/operator/lowcode/pii/model/processor/__init__.py,sha256=febfGPoGJXTD-hCJoiVmsnBP3K3MYBqfuQoTNPm_4kY,910
753
753
  ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py,sha256=sTjMbP8UfwszrzFI0QgzZ0BwWfVqYxhWJ1z8S5AcE2U,996
754
754
  ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py,sha256=nm4dRZjFwxraktXTR1FConaAH4o1uagiXMVeGU0H0O0,1025
@@ -852,8 +852,8 @@ ads/type_discovery/unknown_detector.py,sha256=yZuYQReO7PUyoWZE7onhhtYaOg6088wf1y
852
852
  ads/type_discovery/zipcode_detector.py,sha256=3AlETg_ZF4FT0u914WXvTT3F3Z6Vf51WiIt34yQMRbw,1421
853
853
  ads/vault/__init__.py,sha256=x9tMdDAOdF5iDHk9u2di_K-ze5Nq068x25EWOBoWwqY,245
854
854
  ads/vault/vault.py,sha256=hFBkpYE-Hfmzu1L0sQwUfYcGxpWmgG18JPndRl0NOXI,8624
855
- oracle_ads-2.13.5.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
856
- oracle_ads-2.13.5.dist-info/licenses/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
857
- oracle_ads-2.13.5.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
858
- oracle_ads-2.13.5.dist-info/METADATA,sha256=X_fCTf7Z5NMzhSK-j-O9ikinJQ6WMydYIZyfJO7TfPE,16639
859
- oracle_ads-2.13.5.dist-info/RECORD,,
855
+ oracle_ads-2.13.6.dist-info/entry_points.txt,sha256=9VFnjpQCsMORA4rVkvN8eH6D3uHjtegb9T911t8cqV0,35
856
+ oracle_ads-2.13.6.dist-info/licenses/LICENSE.txt,sha256=zoGmbfD1IdRKx834U0IzfFFFo5KoFK71TND3K9xqYqo,1845
857
+ oracle_ads-2.13.6.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
858
+ oracle_ads-2.13.6.dist-info/METADATA,sha256=r07qyuquzLOV4t2OloGNRKDEgdbwifVB6v6viXCK7oI,16639
859
+ oracle_ads-2.13.6.dist-info/RECORD,,