databricks-sdk 0.64.0__tar.gz → 0.65.0__tar.gz

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 (89) hide show
  1. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/CHANGELOG.md +22 -0
  2. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/PKG-INFO +2 -2
  3. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/mixins/open_ai_client.py +55 -6
  4. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/cleanrooms.py +4 -3
  5. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/dashboards.py +8 -8
  6. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/database.py +20 -0
  7. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/iam.py +3 -1
  8. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/jobs.py +21 -1
  9. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/ml.py +47 -47
  10. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/pipelines.py +130 -0
  11. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/settings.py +69 -2
  12. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/vectorsearch.py +69 -3
  13. databricks_sdk-0.65.0/databricks/sdk/version.py +1 -0
  14. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks_sdk.egg-info/PKG-INFO +2 -2
  15. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks_sdk.egg-info/requires.txt +1 -1
  16. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/pyproject.toml +1 -1
  17. databricks_sdk-0.64.0/databricks/sdk/version.py +0 -1
  18. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/CONTRIBUTING.md +0 -0
  19. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/DCO +0 -0
  20. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/LICENSE +0 -0
  21. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/MANIFEST.in +0 -0
  22. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/Makefile +0 -0
  23. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/NOTICE +0 -0
  24. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/README.md +0 -0
  25. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/SECURITY.md +0 -0
  26. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/__init__.py +0 -0
  27. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/__init__.py +0 -0
  28. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/_base_client.py +0 -0
  29. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/_property.py +0 -0
  30. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/_widgets/__init__.py +0 -0
  31. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/_widgets/default_widgets_utils.py +0 -0
  32. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/_widgets/ipywidgets_utils.py +0 -0
  33. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/azure.py +0 -0
  34. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/casing.py +0 -0
  35. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/clock.py +0 -0
  36. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/config.py +0 -0
  37. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/core.py +0 -0
  38. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/credentials_provider.py +0 -0
  39. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/data_plane.py +0 -0
  40. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/dbutils.py +0 -0
  41. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/environments.py +0 -0
  42. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/__init__.py +0 -0
  43. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/base.py +0 -0
  44. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/customizer.py +0 -0
  45. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/deserializer.py +0 -0
  46. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/details.py +0 -0
  47. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/mapper.py +0 -0
  48. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/overrides.py +0 -0
  49. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/parser.py +0 -0
  50. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/platform.py +0 -0
  51. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/private_link.py +0 -0
  52. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/errors/sdk.py +0 -0
  53. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/logger/__init__.py +0 -0
  54. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/logger/round_trip_logger.py +0 -0
  55. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/mixins/__init__.py +0 -0
  56. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/mixins/compute.py +0 -0
  57. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/mixins/files.py +0 -0
  58. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/mixins/jobs.py +0 -0
  59. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/mixins/workspace.py +0 -0
  60. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/oauth.py +0 -0
  61. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/oidc.py +0 -0
  62. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/oidc_token_supplier.py +0 -0
  63. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/py.typed +0 -0
  64. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/retries.py +0 -0
  65. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/runtime/__init__.py +0 -0
  66. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/runtime/dbutils_stub.py +0 -0
  67. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/__init__.py +0 -0
  68. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/_internal.py +0 -0
  69. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/agentbricks.py +0 -0
  70. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/apps.py +0 -0
  71. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/billing.py +0 -0
  72. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/catalog.py +0 -0
  73. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/compute.py +0 -0
  74. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/files.py +0 -0
  75. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/marketplace.py +0 -0
  76. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/oauth2.py +0 -0
  77. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/provisioning.py +0 -0
  78. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/qualitymonitorv2.py +0 -0
  79. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/serving.py +0 -0
  80. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/settingsv2.py +0 -0
  81. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/sharing.py +0 -0
  82. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/sql.py +0 -0
  83. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/tags.py +0 -0
  84. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/service/workspace.py +0 -0
  85. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks/sdk/useragent.py +0 -0
  86. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks_sdk.egg-info/SOURCES.txt +0 -0
  87. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks_sdk.egg-info/dependency_links.txt +0 -0
  88. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/databricks_sdk.egg-info/top_level.txt +0 -0
  89. {databricks_sdk-0.64.0 → databricks_sdk-0.65.0}/setup.cfg +0 -0
@@ -1,5 +1,27 @@
1
1
  # Version changelog
2
2
 
3
+ ## Release v0.65.0
4
+
5
+ ### New Features and Improvements
6
+
7
+ * Added support for passing additional kwargs to `WorkspaceClient().serving_endpoints.get_open_ai_client()` ([#1025](https://github.com/databricks/databricks-sdk-py/pull/1025)). Users can now pass standard OpenAI client parameters like `timeout` and `max_retries` when creating an OpenAI client for Databricks Model Serving.
8
+
9
+ ### API Changes
10
+ * Added `comment` field for `databricks.sdk.service.dashboards.GenieSendMessageFeedbackRequest`.
11
+ * [Breaking] Added `rating` field for `databricks.sdk.service.dashboards.GenieSendMessageFeedbackRequest`.
12
+ * Added `effective_enable_pg_native_login` and `enable_pg_native_login` fields for `databricks.sdk.service.database.DatabaseInstance`.
13
+ * Added `task_retry_mode` field for `databricks.sdk.service.jobs.Continuous`.
14
+ * Added `source_configurations` field for `databricks.sdk.service.pipelines.IngestionPipelineDefinition`.
15
+ * Added `app_id`, `app_id_set`, `auth_secret`, `auth_secret_set`, `channel_url`, `channel_url_set`, `tenant_id` and `tenant_id_set` fields for `databricks.sdk.service.settings.MicrosoftTeamsConfig`.
16
+ * Added `ensure_reranker_compatible` field for `databricks.sdk.service.vectorsearch.GetIndexRequest`.
17
+ * Added `reranker` field for `databricks.sdk.service.vectorsearch.QueryVectorIndexRequest`.
18
+ * [Breaking] Changed `create_clean_room_asset_review()` method for [w.clean_room_assets](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/cleanrooms/clean_room_assets.html) workspace-level service with new required argument order.
19
+ * [Breaking] Changed `send_message_feedback()` method for [w.genie](https://databricks-sdk-py.readthedocs.io/en/latest/workspace/dashboards/genie.html) workspace-level service with new required argument order.
20
+ * Changed `notebook_review` field for `databricks.sdk.service.cleanrooms.CreateCleanRoomAssetReviewRequest` to no longer be required.
21
+ * [Breaking] Changed `features` field for `databricks.sdk.service.ml.FeatureList` to type list[`databricks.sdk.service.ml.LinkedFeature`] dataclass.
22
+ * [Breaking] Removed `feedback_rating` and `feedback_text` fields for `databricks.sdk.service.dashboards.GenieSendMessageFeedbackRequest`.
23
+
24
+
3
25
  ## Release v0.64.0
4
26
 
5
27
  ### API Changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-sdk
3
- Version: 0.64.0
3
+ Version: 0.65.0
4
4
  Summary: Databricks SDK for Python (Beta)
5
5
  Project-URL: Documentation, https://databricks-sdk-py.readthedocs.io
6
6
  Keywords: databricks,sdk
@@ -26,7 +26,7 @@ Requires-Dist: google-auth~=2.0
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: pytest; extra == "dev"
28
28
  Requires-Dist: pytest-cov; extra == "dev"
29
- Requires-Dist: pytest-xdist; extra == "dev"
29
+ Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == "dev"
30
30
  Requires-Dist: pytest-mock; extra == "dev"
31
31
  Requires-Dist: black; extra == "dev"
32
32
  Requires-Dist: pycodestyle; extra == "dev"
@@ -31,7 +31,41 @@ class ServingEndpointsExt(ServingEndpointsAPI):
31
31
  http_client = httpx.Client(auth=databricks_token_auth)
32
32
  return http_client
33
33
 
34
- def get_open_ai_client(self):
34
+ def get_open_ai_client(self, **kwargs):
35
+ """Create an OpenAI client configured for Databricks Model Serving.
36
+
37
+ Returns an OpenAI client instance that is pre-configured to send requests to
38
+ Databricks Model Serving endpoints. The client uses Databricks authentication
39
+ to query endpoints within the workspace associated with the current WorkspaceClient
40
+ instance.
41
+
42
+ Args:
43
+ **kwargs: Additional parameters to pass to the OpenAI client constructor.
44
+ Common parameters include:
45
+ - timeout (float): Request timeout in seconds (e.g., 30.0)
46
+ - max_retries (int): Maximum number of retries for failed requests (e.g., 3)
47
+ - default_headers (dict): Additional headers to include with requests
48
+ - default_query (dict): Additional query parameters to include with requests
49
+
50
+ Any parameter accepted by the OpenAI client constructor can be passed here,
51
+ except for the following parameters which are reserved for Databricks integration:
52
+ base_url, api_key, http_client
53
+
54
+ Returns:
55
+ OpenAI: An OpenAI client instance configured for Databricks Model Serving.
56
+
57
+ Raises:
58
+ ImportError: If the OpenAI library is not installed.
59
+ ValueError: If any reserved Databricks parameters are provided in kwargs.
60
+
61
+ Example:
62
+ >>> client = workspace_client.serving_endpoints.get_open_ai_client()
63
+ >>> # With custom timeout and retries
64
+ >>> client = workspace_client.serving_endpoints.get_open_ai_client(
65
+ ... timeout=30.0,
66
+ ... max_retries=5
67
+ ... )
68
+ """
35
69
  try:
36
70
  from openai import OpenAI
37
71
  except Exception:
@@ -39,11 +73,26 @@ class ServingEndpointsExt(ServingEndpointsAPI):
39
73
  "Open AI is not installed. Please install the Databricks SDK with the following command `pip install databricks-sdk[openai]`"
40
74
  )
41
75
 
42
- return OpenAI(
43
- base_url=self._api._cfg.host + "/serving-endpoints",
44
- api_key="no-token", # Passing in a placeholder to pass validations, this will not be used
45
- http_client=self._get_authorized_http_client(),
46
- )
76
+ # Check for reserved parameters that should not be overridden
77
+ reserved_params = {"base_url", "api_key", "http_client"}
78
+ conflicting_params = reserved_params.intersection(kwargs.keys())
79
+ if conflicting_params:
80
+ raise ValueError(
81
+ f"Cannot override reserved Databricks parameters: {', '.join(sorted(conflicting_params))}. "
82
+ f"These parameters are automatically configured for Databricks Model Serving."
83
+ )
84
+
85
+ # Default parameters that are required for Databricks integration
86
+ client_params = {
87
+ "base_url": self._api._cfg.host + "/serving-endpoints",
88
+ "api_key": "no-token", # Passing in a placeholder to pass validations, this will not be used
89
+ "http_client": self._get_authorized_http_client(),
90
+ }
91
+
92
+ # Update with any additional parameters passed by the user
93
+ client_params.update(kwargs)
94
+
95
+ return OpenAI(**client_params)
47
96
 
48
97
  def get_langchain_chat_open_ai_client(self, model):
49
98
  try:
@@ -1509,17 +1509,18 @@ class CleanRoomAssetsAPI:
1509
1509
  clean_room_name: str,
1510
1510
  asset_type: CleanRoomAssetAssetType,
1511
1511
  name: str,
1512
- notebook_review: NotebookVersionReview,
1512
+ *,
1513
+ notebook_review: Optional[NotebookVersionReview] = None,
1513
1514
  ) -> CreateCleanRoomAssetReviewResponse:
1514
1515
  """Submit an asset review
1515
1516
 
1516
1517
  :param clean_room_name: str
1517
1518
  Name of the clean room
1518
1519
  :param asset_type: :class:`CleanRoomAssetAssetType`
1519
- Asset type. Can only be NOTEBOOK_FILE.
1520
+ Asset type. Can either be NOTEBOOK_FILE or JAR_ANALYSIS.
1520
1521
  :param name: str
1521
1522
  Name of the asset
1522
- :param notebook_review: :class:`NotebookVersionReview`
1523
+ :param notebook_review: :class:`NotebookVersionReview` (optional)
1523
1524
 
1524
1525
  :returns: :class:`CreateCleanRoomAssetReviewResponse`
1525
1526
  """
@@ -1975,9 +1975,9 @@ class GenieAPI:
1975
1975
  space_id: str,
1976
1976
  conversation_id: str,
1977
1977
  message_id: str,
1978
- feedback_rating: GenieFeedbackRating,
1978
+ rating: GenieFeedbackRating,
1979
1979
  *,
1980
- feedback_text: Optional[str] = None,
1980
+ comment: Optional[str] = None,
1981
1981
  ):
1982
1982
  """Send feedback for a message.
1983
1983
 
@@ -1987,18 +1987,18 @@ class GenieAPI:
1987
1987
  The ID associated with the conversation.
1988
1988
  :param message_id: str
1989
1989
  The ID associated with the message to provide feedback for.
1990
- :param feedback_rating: :class:`GenieFeedbackRating`
1990
+ :param rating: :class:`GenieFeedbackRating`
1991
1991
  The rating (POSITIVE, NEGATIVE, or NONE).
1992
- :param feedback_text: str (optional)
1992
+ :param comment: str (optional)
1993
1993
  Optional text feedback that will be stored as a comment.
1994
1994
 
1995
1995
 
1996
1996
  """
1997
1997
  body = {}
1998
- if feedback_rating is not None:
1999
- body["feedback_rating"] = feedback_rating.value
2000
- if feedback_text is not None:
2001
- body["feedback_text"] = feedback_text
1998
+ if comment is not None:
1999
+ body["comment"] = comment
2000
+ if rating is not None:
2001
+ body["rating"] = rating.value
2002
2002
  headers = {
2003
2003
  "Accept": "application/json",
2004
2004
  "Content-Type": "application/json",
@@ -125,6 +125,13 @@ class DatabaseInstance:
125
125
  creator: Optional[str] = None
126
126
  """The email of the creator of the instance."""
127
127
 
128
+ effective_enable_pg_native_login: Optional[bool] = None
129
+ """xref AIP-129. `enable_pg_native_login` is owned by the client, while
130
+ `effective_enable_pg_native_login` is owned by the server. `enable_pg_native_login` will only be
131
+ set in Create/Update response messages if and only if the user provides the field via the
132
+ request. `effective_enable_pg_native_login` on the other hand will always bet set in all
133
+ response messages (Create/Update/Get/List)."""
134
+
128
135
  effective_enable_readable_secondaries: Optional[bool] = None
129
136
  """xref AIP-129. `enable_readable_secondaries` is owned by the client, while
130
137
  `effective_enable_readable_secondaries` is owned by the server. `enable_readable_secondaries`
@@ -151,6 +158,9 @@ class DatabaseInstance:
151
158
  provides the field via the request. `effective_stopped` on the other hand will always bet set in
152
159
  all response messages (Create/Update/Get/List)."""
153
160
 
161
+ enable_pg_native_login: Optional[bool] = None
162
+ """Whether the instance has PG native password login enabled. Defaults to true."""
163
+
154
164
  enable_readable_secondaries: Optional[bool] = None
155
165
  """Whether to enable secondaries to serve read-only traffic. Defaults to false."""
156
166
 
@@ -197,6 +207,8 @@ class DatabaseInstance:
197
207
  body["creation_time"] = self.creation_time
198
208
  if self.creator is not None:
199
209
  body["creator"] = self.creator
210
+ if self.effective_enable_pg_native_login is not None:
211
+ body["effective_enable_pg_native_login"] = self.effective_enable_pg_native_login
200
212
  if self.effective_enable_readable_secondaries is not None:
201
213
  body["effective_enable_readable_secondaries"] = self.effective_enable_readable_secondaries
202
214
  if self.effective_node_count is not None:
@@ -205,6 +217,8 @@ class DatabaseInstance:
205
217
  body["effective_retention_window_in_days"] = self.effective_retention_window_in_days
206
218
  if self.effective_stopped is not None:
207
219
  body["effective_stopped"] = self.effective_stopped
220
+ if self.enable_pg_native_login is not None:
221
+ body["enable_pg_native_login"] = self.enable_pg_native_login
208
222
  if self.enable_readable_secondaries is not None:
209
223
  body["enable_readable_secondaries"] = self.enable_readable_secondaries
210
224
  if self.name is not None:
@@ -240,6 +254,8 @@ class DatabaseInstance:
240
254
  body["creation_time"] = self.creation_time
241
255
  if self.creator is not None:
242
256
  body["creator"] = self.creator
257
+ if self.effective_enable_pg_native_login is not None:
258
+ body["effective_enable_pg_native_login"] = self.effective_enable_pg_native_login
243
259
  if self.effective_enable_readable_secondaries is not None:
244
260
  body["effective_enable_readable_secondaries"] = self.effective_enable_readable_secondaries
245
261
  if self.effective_node_count is not None:
@@ -248,6 +264,8 @@ class DatabaseInstance:
248
264
  body["effective_retention_window_in_days"] = self.effective_retention_window_in_days
249
265
  if self.effective_stopped is not None:
250
266
  body["effective_stopped"] = self.effective_stopped
267
+ if self.enable_pg_native_login is not None:
268
+ body["enable_pg_native_login"] = self.enable_pg_native_login
251
269
  if self.enable_readable_secondaries is not None:
252
270
  body["enable_readable_secondaries"] = self.enable_readable_secondaries
253
271
  if self.name is not None:
@@ -280,10 +298,12 @@ class DatabaseInstance:
280
298
  child_instance_refs=_repeated_dict(d, "child_instance_refs", DatabaseInstanceRef),
281
299
  creation_time=d.get("creation_time", None),
282
300
  creator=d.get("creator", None),
301
+ effective_enable_pg_native_login=d.get("effective_enable_pg_native_login", None),
283
302
  effective_enable_readable_secondaries=d.get("effective_enable_readable_secondaries", None),
284
303
  effective_node_count=d.get("effective_node_count", None),
285
304
  effective_retention_window_in_days=d.get("effective_retention_window_in_days", None),
286
305
  effective_stopped=d.get("effective_stopped", None),
306
+ enable_pg_native_login=d.get("enable_pg_native_login", None),
287
307
  enable_readable_secondaries=d.get("enable_readable_secondaries", None),
288
308
  name=d.get("name", None),
289
309
  node_count=d.get("node_count", None),
@@ -2193,7 +2193,9 @@ class AccountGroupsAPI:
2193
2193
  sort_order: Optional[ListSortOrder] = None,
2194
2194
  start_index: Optional[int] = None,
2195
2195
  ) -> Iterator[Group]:
2196
- """Gets all details of the groups associated with the Databricks account.
2196
+ """Gets all details of the groups associated with the Databricks account. As of 08/22/2025, this endpoint
2197
+ will not return members. Instead, members should be retrieved by iterating through `Get group
2198
+ details`.
2197
2199
 
2198
2200
  :param attributes: str (optional)
2199
2201
  Comma-separated list of attributes to return in response.
@@ -873,11 +873,16 @@ class Continuous:
873
873
  pause_status: Optional[PauseStatus] = None
874
874
  """Indicate whether the continuous execution of the job is paused or not. Defaults to UNPAUSED."""
875
875
 
876
+ task_retry_mode: Optional[TaskRetryMode] = None
877
+ """Indicate whether the continuous job is applying task level retries or not. Defaults to NEVER."""
878
+
876
879
  def as_dict(self) -> dict:
877
880
  """Serializes the Continuous into a dictionary suitable for use as a JSON request body."""
878
881
  body = {}
879
882
  if self.pause_status is not None:
880
883
  body["pause_status"] = self.pause_status.value
884
+ if self.task_retry_mode is not None:
885
+ body["task_retry_mode"] = self.task_retry_mode.value
881
886
  return body
882
887
 
883
888
  def as_shallow_dict(self) -> dict:
@@ -885,12 +890,17 @@ class Continuous:
885
890
  body = {}
886
891
  if self.pause_status is not None:
887
892
  body["pause_status"] = self.pause_status
893
+ if self.task_retry_mode is not None:
894
+ body["task_retry_mode"] = self.task_retry_mode
888
895
  return body
889
896
 
890
897
  @classmethod
891
898
  def from_dict(cls, d: Dict[str, Any]) -> Continuous:
892
899
  """Deserializes the Continuous from a dictionary."""
893
- return cls(pause_status=_enum(d, "pause_status", PauseStatus))
900
+ return cls(
901
+ pause_status=_enum(d, "pause_status", PauseStatus),
902
+ task_retry_mode=_enum(d, "task_retry_mode", TaskRetryMode),
903
+ )
894
904
 
895
905
 
896
906
  @dataclass
@@ -7891,6 +7901,16 @@ class TaskNotificationSettings:
7891
7901
  )
7892
7902
 
7893
7903
 
7904
+ class TaskRetryMode(Enum):
7905
+ """task retry mode of the continuous job * NEVER: The failed task will not be retried. *
7906
+ ON_FAILURE: Retry a failed task if at least one other task in the job is still running its first
7907
+ attempt. When this condition is no longer met or the retry limit is reached, the job run is
7908
+ cancelled and a new run is started."""
7909
+
7910
+ NEVER = "NEVER"
7911
+ ON_FAILURE = "ON_FAILURE"
7912
+
7913
+
7894
7914
  class TerminationCodeCode(Enum):
7895
7915
  """The code indicates why the run was terminated. Additional codes might be introduced in future
7896
7916
  releases. * `SUCCESS`: The run was completed successfully. * `SUCCESS_WITH_FAILURES`: The run
@@ -1210,51 +1210,6 @@ class ExperimentTag:
1210
1210
  return cls(key=d.get("key", None), value=d.get("value", None))
1211
1211
 
1212
1212
 
1213
- @dataclass
1214
- class Feature:
1215
- """Feature for model version."""
1216
-
1217
- feature_name: Optional[str] = None
1218
- """Feature name"""
1219
-
1220
- feature_table_id: Optional[str] = None
1221
- """Feature table id"""
1222
-
1223
- feature_table_name: Optional[str] = None
1224
- """Feature table name"""
1225
-
1226
- def as_dict(self) -> dict:
1227
- """Serializes the Feature into a dictionary suitable for use as a JSON request body."""
1228
- body = {}
1229
- if self.feature_name is not None:
1230
- body["feature_name"] = self.feature_name
1231
- if self.feature_table_id is not None:
1232
- body["feature_table_id"] = self.feature_table_id
1233
- if self.feature_table_name is not None:
1234
- body["feature_table_name"] = self.feature_table_name
1235
- return body
1236
-
1237
- def as_shallow_dict(self) -> dict:
1238
- """Serializes the Feature into a shallow dictionary of its immediate attributes."""
1239
- body = {}
1240
- if self.feature_name is not None:
1241
- body["feature_name"] = self.feature_name
1242
- if self.feature_table_id is not None:
1243
- body["feature_table_id"] = self.feature_table_id
1244
- if self.feature_table_name is not None:
1245
- body["feature_table_name"] = self.feature_table_name
1246
- return body
1247
-
1248
- @classmethod
1249
- def from_dict(cls, d: Dict[str, Any]) -> Feature:
1250
- """Deserializes the Feature from a dictionary."""
1251
- return cls(
1252
- feature_name=d.get("feature_name", None),
1253
- feature_table_id=d.get("feature_table_id", None),
1254
- feature_table_name=d.get("feature_table_name", None),
1255
- )
1256
-
1257
-
1258
1213
  @dataclass
1259
1214
  class FeatureLineage:
1260
1215
  feature_specs: Optional[List[FeatureLineageFeatureSpec]] = None
@@ -1391,7 +1346,7 @@ class FeatureLineageOnlineFeature:
1391
1346
  class FeatureList:
1392
1347
  """Feature list wrap all the features for a model version"""
1393
1348
 
1394
- features: Optional[List[Feature]] = None
1349
+ features: Optional[List[LinkedFeature]] = None
1395
1350
 
1396
1351
  def as_dict(self) -> dict:
1397
1352
  """Serializes the FeatureList into a dictionary suitable for use as a JSON request body."""
@@ -1410,7 +1365,7 @@ class FeatureList:
1410
1365
  @classmethod
1411
1366
  def from_dict(cls, d: Dict[str, Any]) -> FeatureList:
1412
1367
  """Deserializes the FeatureList from a dictionary."""
1413
- return cls(features=_repeated_dict(d, "features", Feature))
1368
+ return cls(features=_repeated_dict(d, "features", LinkedFeature))
1414
1369
 
1415
1370
 
1416
1371
  @dataclass
@@ -2054,6 +2009,51 @@ class JobSpecWithoutSecret:
2054
2009
  return cls(job_id=d.get("job_id", None), workspace_url=d.get("workspace_url", None))
2055
2010
 
2056
2011
 
2012
+ @dataclass
2013
+ class LinkedFeature:
2014
+ """Feature for model version. ([ML-57150] Renamed from Feature to LinkedFeature)"""
2015
+
2016
+ feature_name: Optional[str] = None
2017
+ """Feature name"""
2018
+
2019
+ feature_table_id: Optional[str] = None
2020
+ """Feature table id"""
2021
+
2022
+ feature_table_name: Optional[str] = None
2023
+ """Feature table name"""
2024
+
2025
+ def as_dict(self) -> dict:
2026
+ """Serializes the LinkedFeature into a dictionary suitable for use as a JSON request body."""
2027
+ body = {}
2028
+ if self.feature_name is not None:
2029
+ body["feature_name"] = self.feature_name
2030
+ if self.feature_table_id is not None:
2031
+ body["feature_table_id"] = self.feature_table_id
2032
+ if self.feature_table_name is not None:
2033
+ body["feature_table_name"] = self.feature_table_name
2034
+ return body
2035
+
2036
+ def as_shallow_dict(self) -> dict:
2037
+ """Serializes the LinkedFeature into a shallow dictionary of its immediate attributes."""
2038
+ body = {}
2039
+ if self.feature_name is not None:
2040
+ body["feature_name"] = self.feature_name
2041
+ if self.feature_table_id is not None:
2042
+ body["feature_table_id"] = self.feature_table_id
2043
+ if self.feature_table_name is not None:
2044
+ body["feature_table_name"] = self.feature_table_name
2045
+ return body
2046
+
2047
+ @classmethod
2048
+ def from_dict(cls, d: Dict[str, Any]) -> LinkedFeature:
2049
+ """Deserializes the LinkedFeature from a dictionary."""
2050
+ return cls(
2051
+ feature_name=d.get("feature_name", None),
2052
+ feature_table_id=d.get("feature_table_id", None),
2053
+ feature_table_name=d.get("feature_table_name", None),
2054
+ )
2055
+
2056
+
2057
2057
  @dataclass
2058
2058
  class ListArtifactsResponse:
2059
2059
  files: Optional[List[FileInfo]] = None
@@ -613,6 +613,9 @@ class IngestionPipelineDefinition:
613
613
  objects: Optional[List[IngestionConfig]] = None
614
614
  """Required. Settings specifying tables to replicate and the destination for the replicated tables."""
615
615
 
616
+ source_configurations: Optional[List[SourceConfig]] = None
617
+ """Top-level source configurations"""
618
+
616
619
  source_type: Optional[IngestionSourceType] = None
617
620
  """The type of the foreign source. The source type will be inferred from the source connection or
618
621
  ingestion gateway. This field is output only and will be ignored if provided."""
@@ -630,6 +633,8 @@ class IngestionPipelineDefinition:
630
633
  body["ingestion_gateway_id"] = self.ingestion_gateway_id
631
634
  if self.objects:
632
635
  body["objects"] = [v.as_dict() for v in self.objects]
636
+ if self.source_configurations:
637
+ body["source_configurations"] = [v.as_dict() for v in self.source_configurations]
633
638
  if self.source_type is not None:
634
639
  body["source_type"] = self.source_type.value
635
640
  if self.table_configuration:
@@ -645,6 +650,8 @@ class IngestionPipelineDefinition:
645
650
  body["ingestion_gateway_id"] = self.ingestion_gateway_id
646
651
  if self.objects:
647
652
  body["objects"] = self.objects
653
+ if self.source_configurations:
654
+ body["source_configurations"] = self.source_configurations
648
655
  if self.source_type is not None:
649
656
  body["source_type"] = self.source_type
650
657
  if self.table_configuration:
@@ -658,6 +665,7 @@ class IngestionPipelineDefinition:
658
665
  connection_name=d.get("connection_name", None),
659
666
  ingestion_gateway_id=d.get("ingestion_gateway_id", None),
660
667
  objects=_repeated_dict(d, "objects", IngestionConfig),
668
+ source_configurations=_repeated_dict(d, "source_configurations", SourceConfig),
661
669
  source_type=_enum(d, "source_type", IngestionSourceType),
662
670
  table_configuration=_from_dict(d, "table_configuration", TableSpecificConfig),
663
671
  )
@@ -2239,6 +2247,67 @@ class PipelinesEnvironment:
2239
2247
  return cls(dependencies=d.get("dependencies", None))
2240
2248
 
2241
2249
 
2250
+ @dataclass
2251
+ class PostgresCatalogConfig:
2252
+ """PG-specific catalog-level configuration parameters"""
2253
+
2254
+ slot_config: Optional[PostgresSlotConfig] = None
2255
+ """Optional. The Postgres slot configuration to use for logical replication"""
2256
+
2257
+ def as_dict(self) -> dict:
2258
+ """Serializes the PostgresCatalogConfig into a dictionary suitable for use as a JSON request body."""
2259
+ body = {}
2260
+ if self.slot_config:
2261
+ body["slot_config"] = self.slot_config.as_dict()
2262
+ return body
2263
+
2264
+ def as_shallow_dict(self) -> dict:
2265
+ """Serializes the PostgresCatalogConfig into a shallow dictionary of its immediate attributes."""
2266
+ body = {}
2267
+ if self.slot_config:
2268
+ body["slot_config"] = self.slot_config
2269
+ return body
2270
+
2271
+ @classmethod
2272
+ def from_dict(cls, d: Dict[str, Any]) -> PostgresCatalogConfig:
2273
+ """Deserializes the PostgresCatalogConfig from a dictionary."""
2274
+ return cls(slot_config=_from_dict(d, "slot_config", PostgresSlotConfig))
2275
+
2276
+
2277
+ @dataclass
2278
+ class PostgresSlotConfig:
2279
+ """PostgresSlotConfig contains the configuration for a Postgres logical replication slot"""
2280
+
2281
+ publication_name: Optional[str] = None
2282
+ """The name of the publication to use for the Postgres source"""
2283
+
2284
+ slot_name: Optional[str] = None
2285
+ """The name of the logical replication slot to use for the Postgres source"""
2286
+
2287
+ def as_dict(self) -> dict:
2288
+ """Serializes the PostgresSlotConfig into a dictionary suitable for use as a JSON request body."""
2289
+ body = {}
2290
+ if self.publication_name is not None:
2291
+ body["publication_name"] = self.publication_name
2292
+ if self.slot_name is not None:
2293
+ body["slot_name"] = self.slot_name
2294
+ return body
2295
+
2296
+ def as_shallow_dict(self) -> dict:
2297
+ """Serializes the PostgresSlotConfig into a shallow dictionary of its immediate attributes."""
2298
+ body = {}
2299
+ if self.publication_name is not None:
2300
+ body["publication_name"] = self.publication_name
2301
+ if self.slot_name is not None:
2302
+ body["slot_name"] = self.slot_name
2303
+ return body
2304
+
2305
+ @classmethod
2306
+ def from_dict(cls, d: Dict[str, Any]) -> PostgresSlotConfig:
2307
+ """Deserializes the PostgresSlotConfig from a dictionary."""
2308
+ return cls(publication_name=d.get("publication_name", None), slot_name=d.get("slot_name", None))
2309
+
2310
+
2242
2311
  @dataclass
2243
2312
  class ReportSpec:
2244
2313
  source_url: str
@@ -2527,6 +2596,67 @@ class SerializedException:
2527
2596
  )
2528
2597
 
2529
2598
 
2599
+ @dataclass
2600
+ class SourceCatalogConfig:
2601
+ """SourceCatalogConfig contains catalog-level custom configuration parameters for each source"""
2602
+
2603
+ postgres: Optional[PostgresCatalogConfig] = None
2604
+ """Postgres-specific catalog-level configuration parameters"""
2605
+
2606
+ source_catalog: Optional[str] = None
2607
+ """Source catalog name"""
2608
+
2609
+ def as_dict(self) -> dict:
2610
+ """Serializes the SourceCatalogConfig into a dictionary suitable for use as a JSON request body."""
2611
+ body = {}
2612
+ if self.postgres:
2613
+ body["postgres"] = self.postgres.as_dict()
2614
+ if self.source_catalog is not None:
2615
+ body["source_catalog"] = self.source_catalog
2616
+ return body
2617
+
2618
+ def as_shallow_dict(self) -> dict:
2619
+ """Serializes the SourceCatalogConfig into a shallow dictionary of its immediate attributes."""
2620
+ body = {}
2621
+ if self.postgres:
2622
+ body["postgres"] = self.postgres
2623
+ if self.source_catalog is not None:
2624
+ body["source_catalog"] = self.source_catalog
2625
+ return body
2626
+
2627
+ @classmethod
2628
+ def from_dict(cls, d: Dict[str, Any]) -> SourceCatalogConfig:
2629
+ """Deserializes the SourceCatalogConfig from a dictionary."""
2630
+ return cls(
2631
+ postgres=_from_dict(d, "postgres", PostgresCatalogConfig), source_catalog=d.get("source_catalog", None)
2632
+ )
2633
+
2634
+
2635
+ @dataclass
2636
+ class SourceConfig:
2637
+ catalog: Optional[SourceCatalogConfig] = None
2638
+ """Catalog-level source configuration parameters"""
2639
+
2640
+ def as_dict(self) -> dict:
2641
+ """Serializes the SourceConfig into a dictionary suitable for use as a JSON request body."""
2642
+ body = {}
2643
+ if self.catalog:
2644
+ body["catalog"] = self.catalog.as_dict()
2645
+ return body
2646
+
2647
+ def as_shallow_dict(self) -> dict:
2648
+ """Serializes the SourceConfig into a shallow dictionary of its immediate attributes."""
2649
+ body = {}
2650
+ if self.catalog:
2651
+ body["catalog"] = self.catalog
2652
+ return body
2653
+
2654
+ @classmethod
2655
+ def from_dict(cls, d: Dict[str, Any]) -> SourceConfig:
2656
+ """Deserializes the SourceConfig from a dictionary."""
2657
+ return cls(catalog=_from_dict(d, "catalog", SourceCatalogConfig))
2658
+
2659
+
2530
2660
  @dataclass
2531
2661
  class StackFrame:
2532
2662
  declaring_class: Optional[str] = None
@@ -3587,8 +3587,32 @@ class LlmProxyPartnerPoweredWorkspace:
3587
3587
 
3588
3588
  @dataclass
3589
3589
  class MicrosoftTeamsConfig:
3590
+ app_id: Optional[str] = None
3591
+ """[Input-Only] App ID for Microsoft Teams App."""
3592
+
3593
+ app_id_set: Optional[bool] = None
3594
+ """[Output-Only] Whether App ID is set."""
3595
+
3596
+ auth_secret: Optional[str] = None
3597
+ """[Input-Only] Secret for Microsoft Teams App authentication."""
3598
+
3599
+ auth_secret_set: Optional[bool] = None
3600
+ """[Output-Only] Whether secret is set."""
3601
+
3602
+ channel_url: Optional[str] = None
3603
+ """[Input-Only] Channel URL for Microsoft Teams App."""
3604
+
3605
+ channel_url_set: Optional[bool] = None
3606
+ """[Output-Only] Whether Channel URL is set."""
3607
+
3608
+ tenant_id: Optional[str] = None
3609
+ """[Input-Only] Tenant ID for Microsoft Teams App."""
3610
+
3611
+ tenant_id_set: Optional[bool] = None
3612
+ """[Output-Only] Whether Tenant ID is set."""
3613
+
3590
3614
  url: Optional[str] = None
3591
- """[Input-Only] URL for Microsoft Teams."""
3615
+ """[Input-Only] URL for Microsoft Teams webhook."""
3592
3616
 
3593
3617
  url_set: Optional[bool] = None
3594
3618
  """[Output-Only] Whether URL is set."""
@@ -3596,6 +3620,22 @@ class MicrosoftTeamsConfig:
3596
3620
  def as_dict(self) -> dict:
3597
3621
  """Serializes the MicrosoftTeamsConfig into a dictionary suitable for use as a JSON request body."""
3598
3622
  body = {}
3623
+ if self.app_id is not None:
3624
+ body["app_id"] = self.app_id
3625
+ if self.app_id_set is not None:
3626
+ body["app_id_set"] = self.app_id_set
3627
+ if self.auth_secret is not None:
3628
+ body["auth_secret"] = self.auth_secret
3629
+ if self.auth_secret_set is not None:
3630
+ body["auth_secret_set"] = self.auth_secret_set
3631
+ if self.channel_url is not None:
3632
+ body["channel_url"] = self.channel_url
3633
+ if self.channel_url_set is not None:
3634
+ body["channel_url_set"] = self.channel_url_set
3635
+ if self.tenant_id is not None:
3636
+ body["tenant_id"] = self.tenant_id
3637
+ if self.tenant_id_set is not None:
3638
+ body["tenant_id_set"] = self.tenant_id_set
3599
3639
  if self.url is not None:
3600
3640
  body["url"] = self.url
3601
3641
  if self.url_set is not None:
@@ -3605,6 +3645,22 @@ class MicrosoftTeamsConfig:
3605
3645
  def as_shallow_dict(self) -> dict:
3606
3646
  """Serializes the MicrosoftTeamsConfig into a shallow dictionary of its immediate attributes."""
3607
3647
  body = {}
3648
+ if self.app_id is not None:
3649
+ body["app_id"] = self.app_id
3650
+ if self.app_id_set is not None:
3651
+ body["app_id_set"] = self.app_id_set
3652
+ if self.auth_secret is not None:
3653
+ body["auth_secret"] = self.auth_secret
3654
+ if self.auth_secret_set is not None:
3655
+ body["auth_secret_set"] = self.auth_secret_set
3656
+ if self.channel_url is not None:
3657
+ body["channel_url"] = self.channel_url
3658
+ if self.channel_url_set is not None:
3659
+ body["channel_url_set"] = self.channel_url_set
3660
+ if self.tenant_id is not None:
3661
+ body["tenant_id"] = self.tenant_id
3662
+ if self.tenant_id_set is not None:
3663
+ body["tenant_id_set"] = self.tenant_id_set
3608
3664
  if self.url is not None:
3609
3665
  body["url"] = self.url
3610
3666
  if self.url_set is not None:
@@ -3614,7 +3670,18 @@ class MicrosoftTeamsConfig:
3614
3670
  @classmethod
3615
3671
  def from_dict(cls, d: Dict[str, Any]) -> MicrosoftTeamsConfig:
3616
3672
  """Deserializes the MicrosoftTeamsConfig from a dictionary."""
3617
- return cls(url=d.get("url", None), url_set=d.get("url_set", None))
3673
+ return cls(
3674
+ app_id=d.get("app_id", None),
3675
+ app_id_set=d.get("app_id_set", None),
3676
+ auth_secret=d.get("auth_secret", None),
3677
+ auth_secret_set=d.get("auth_secret_set", None),
3678
+ channel_url=d.get("channel_url", None),
3679
+ channel_url_set=d.get("channel_url_set", None),
3680
+ tenant_id=d.get("tenant_id", None),
3681
+ tenant_id_set=d.get("tenant_id_set", None),
3682
+ url=d.get("url", None),
3683
+ url_set=d.get("url_set", None),
3684
+ )
3618
3685
 
3619
3686
 
3620
3687
  @dataclass
@@ -872,6 +872,60 @@ class QueryVectorIndexResponse:
872
872
  )
873
873
 
874
874
 
875
+ @dataclass
876
+ class RerankerConfig:
877
+ model: Optional[str] = None
878
+
879
+ parameters: Optional[RerankerConfigRerankerParameters] = None
880
+
881
+ def as_dict(self) -> dict:
882
+ """Serializes the RerankerConfig into a dictionary suitable for use as a JSON request body."""
883
+ body = {}
884
+ if self.model is not None:
885
+ body["model"] = self.model
886
+ if self.parameters:
887
+ body["parameters"] = self.parameters.as_dict()
888
+ return body
889
+
890
+ def as_shallow_dict(self) -> dict:
891
+ """Serializes the RerankerConfig into a shallow dictionary of its immediate attributes."""
892
+ body = {}
893
+ if self.model is not None:
894
+ body["model"] = self.model
895
+ if self.parameters:
896
+ body["parameters"] = self.parameters
897
+ return body
898
+
899
+ @classmethod
900
+ def from_dict(cls, d: Dict[str, Any]) -> RerankerConfig:
901
+ """Deserializes the RerankerConfig from a dictionary."""
902
+ return cls(model=d.get("model", None), parameters=_from_dict(d, "parameters", RerankerConfigRerankerParameters))
903
+
904
+
905
+ @dataclass
906
+ class RerankerConfigRerankerParameters:
907
+ columns_to_rerank: Optional[List[str]] = None
908
+
909
+ def as_dict(self) -> dict:
910
+ """Serializes the RerankerConfigRerankerParameters into a dictionary suitable for use as a JSON request body."""
911
+ body = {}
912
+ if self.columns_to_rerank:
913
+ body["columns_to_rerank"] = [v for v in self.columns_to_rerank]
914
+ return body
915
+
916
+ def as_shallow_dict(self) -> dict:
917
+ """Serializes the RerankerConfigRerankerParameters into a shallow dictionary of its immediate attributes."""
918
+ body = {}
919
+ if self.columns_to_rerank:
920
+ body["columns_to_rerank"] = self.columns_to_rerank
921
+ return body
922
+
923
+ @classmethod
924
+ def from_dict(cls, d: Dict[str, Any]) -> RerankerConfigRerankerParameters:
925
+ """Deserializes the RerankerConfigRerankerParameters from a dictionary."""
926
+ return cls(columns_to_rerank=d.get("columns_to_rerank", None))
927
+
928
+
875
929
  @dataclass
876
930
  class ResultData:
877
931
  """Data returned in the query result."""
@@ -1468,7 +1522,8 @@ class VectorSearchEndpointsAPI:
1468
1522
  :param endpoint_name: str
1469
1523
  Name of the vector search endpoint
1470
1524
  :param budget_policy_id: str
1471
- The budget policy id to be applied
1525
+ The budget policy id to be applied (hima-sheth) TODO: remove this once we've migrated to usage
1526
+ policies
1472
1527
 
1473
1528
  :returns: :class:`PatchEndpointBudgetPolicyResponse`
1474
1529
  """
@@ -1608,20 +1663,27 @@ class VectorSearchIndexesAPI:
1608
1663
 
1609
1664
  self._api.do("DELETE", f"/api/2.0/vector-search/indexes/{index_name}", headers=headers)
1610
1665
 
1611
- def get_index(self, index_name: str) -> VectorIndex:
1666
+ def get_index(self, index_name: str, *, ensure_reranker_compatible: Optional[bool] = None) -> VectorIndex:
1612
1667
  """Get an index.
1613
1668
 
1614
1669
  :param index_name: str
1615
1670
  Name of the index
1671
+ :param ensure_reranker_compatible: bool (optional)
1672
+ If true, the URL returned for the index is guaranteed to be compatible with the reranker. Currently
1673
+ this means we return the CP URL regardless of how the index is being accessed. If not set or set to
1674
+ false, the URL may still be compatible with the reranker depending on what URL we return.
1616
1675
 
1617
1676
  :returns: :class:`VectorIndex`
1618
1677
  """
1619
1678
 
1679
+ query = {}
1680
+ if ensure_reranker_compatible is not None:
1681
+ query["ensure_reranker_compatible"] = ensure_reranker_compatible
1620
1682
  headers = {
1621
1683
  "Accept": "application/json",
1622
1684
  }
1623
1685
 
1624
- res = self._api.do("GET", f"/api/2.0/vector-search/indexes/{index_name}", headers=headers)
1686
+ res = self._api.do("GET", f"/api/2.0/vector-search/indexes/{index_name}", query=query, headers=headers)
1625
1687
  return VectorIndex.from_dict(res)
1626
1688
 
1627
1689
  def list_indexes(self, endpoint_name: str, *, page_token: Optional[str] = None) -> Iterator[MiniVectorIndex]:
@@ -1664,6 +1726,7 @@ class VectorSearchIndexesAPI:
1664
1726
  query_text: Optional[str] = None,
1665
1727
  query_type: Optional[str] = None,
1666
1728
  query_vector: Optional[List[float]] = None,
1729
+ reranker: Optional[RerankerConfig] = None,
1667
1730
  score_threshold: Optional[float] = None,
1668
1731
  ) -> QueryVectorIndexResponse:
1669
1732
  """Query the specified vector index.
@@ -1691,6 +1754,7 @@ class VectorSearchIndexesAPI:
1691
1754
  :param query_vector: List[float] (optional)
1692
1755
  Query vector. Required for Direct Vector Access Index and Delta Sync Index using self-managed
1693
1756
  vectors.
1757
+ :param reranker: :class:`RerankerConfig` (optional)
1694
1758
  :param score_threshold: float (optional)
1695
1759
  Threshold for the approximate nearest neighbor search. Defaults to 0.0.
1696
1760
 
@@ -1711,6 +1775,8 @@ class VectorSearchIndexesAPI:
1711
1775
  body["query_type"] = query_type
1712
1776
  if query_vector is not None:
1713
1777
  body["query_vector"] = [v for v in query_vector]
1778
+ if reranker is not None:
1779
+ body["reranker"] = reranker.as_dict()
1714
1780
  if score_threshold is not None:
1715
1781
  body["score_threshold"] = score_threshold
1716
1782
  headers = {
@@ -0,0 +1 @@
1
+ __version__ = "0.65.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: databricks-sdk
3
- Version: 0.64.0
3
+ Version: 0.65.0
4
4
  Summary: Databricks SDK for Python (Beta)
5
5
  Project-URL: Documentation, https://databricks-sdk-py.readthedocs.io
6
6
  Keywords: databricks,sdk
@@ -26,7 +26,7 @@ Requires-Dist: google-auth~=2.0
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: pytest; extra == "dev"
28
28
  Requires-Dist: pytest-cov; extra == "dev"
29
- Requires-Dist: pytest-xdist; extra == "dev"
29
+ Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == "dev"
30
30
  Requires-Dist: pytest-mock; extra == "dev"
31
31
  Requires-Dist: black; extra == "dev"
32
32
  Requires-Dist: pycodestyle; extra == "dev"
@@ -4,7 +4,7 @@ google-auth~=2.0
4
4
  [dev]
5
5
  pytest
6
6
  pytest-cov
7
- pytest-xdist
7
+ pytest-xdist<4.0,>=3.6.1
8
8
  pytest-mock
9
9
  black
10
10
  pycodestyle
@@ -36,7 +36,7 @@ Documentation = "https://databricks-sdk-py.readthedocs.io"
36
36
  dev = [
37
37
  "pytest",
38
38
  "pytest-cov",
39
- "pytest-xdist",
39
+ "pytest-xdist>=3.6.1,<4.0",
40
40
  "pytest-mock",
41
41
  "black",
42
42
  "pycodestyle",
@@ -1 +0,0 @@
1
- __version__ = "0.64.0"
File without changes
File without changes
File without changes