From 524d8112f41fff194e999d5e48a500aeacffa4b5 Mon Sep 17 00:00:00 2001 From: Pieter Noordhuis Date: Tue, 30 Jun 2026 12:50:13 +0200 Subject: [PATCH] Bump databricks-sdk-go from v0.147.0 to v0.152.0 Co-authored-by: Isaac --- .codegen/_openapi_sha | 2 +- .codegen/cli.json | 1383 +++++++++++++---- .github/workflows/tagging.yml | 4 +- acceptance/bundle/refschema/out.fields.txt | 37 + acceptance/cmd/workspace/apps/output.txt | 2 +- acceptance/help/output.txt | 3 + .../dresources/model_serving_endpoint.go | 3 + bundle/direct/dresources/postgres_database.go | 3 + bundle/direct/dresources/postgres_project.go | 2 + bundle/direct/dresources/postgres_role.go | 3 + .../direct/dresources/resources.generated.yml | 6 +- .../validation/generated/enum_fields.go | 136 +- .../validation/generated/required_fields.go | 6 + bundle/schema/jsonschema.json | 216 ++- bundle/terraform_dabs_map/generated.go | 39 +- .../disaster-recovery/disaster-recovery.go | 3 +- cmd/workspace/ai-search/ai-search.go | 155 +- cmd/workspace/apps/apps.go | 4 +- .../bundle-deployments/bundle-deployments.go | 21 +- cmd/workspace/data-quality/data-quality.go | 4 +- cmd/workspace/environments/environments.go | 2 + cmd/workspace/genie/genie.go | 70 + cmd/workspace/lakeview/lakeview.go | 2 +- .../policy-compliance-for-clusters.go | 98 +- cmd/workspace/postgres/postgres.go | 4 + .../serving-endpoints/serving-endpoints.go | 1 + go.mod | 2 +- go.sum | 4 +- internal/genkit/tagging.py | 1 - libs/structs/structwalk/walktype_test.go | 2 +- python/codegen/uv.lock | 36 +- python/databricks/bundles/jobs/__init__.py | 30 + .../bundles/jobs/_models/ai_runtime_task.py | 155 ++ .../bundles/jobs/_models/compute_spec.py | 75 + .../_models/compute_spec_accelerator_type.py | 21 + .../bundles/jobs/_models/dashboard_task.py | 5 +- .../bundles/jobs/_models/deployment_spec.py | 95 ++ .../bundles/jobs/_models/init_script_info.py | 1 - python/databricks/bundles/jobs/_models/job.py | 5 +- .../databricks/bundles/jobs/_models/task.py | 25 +- .../pipelines/_models/init_script_info.py | 1 - .../_models/pipelines_environment.py | 8 +- 42 files changed, 2210 insertions(+), 465 deletions(-) create mode 100644 python/databricks/bundles/jobs/_models/ai_runtime_task.py create mode 100644 python/databricks/bundles/jobs/_models/compute_spec.py create mode 100644 python/databricks/bundles/jobs/_models/compute_spec_accelerator_type.py create mode 100644 python/databricks/bundles/jobs/_models/deployment_spec.py diff --git a/.codegen/_openapi_sha b/.codegen/_openapi_sha index 0cf8a83d600..24aaa0815fc 100644 --- a/.codegen/_openapi_sha +++ b/.codegen/_openapi_sha @@ -1 +1 @@ -991b0723352f59606b0043604aa9206ec294b07d \ No newline at end of file +b6adc4629926d38da0869938d0217b9c824b48f9 \ No newline at end of file diff --git a/.codegen/cli.json b/.codegen/cli.json index 61835fb4a8c..ea037873de9 100644 --- a/.codegen/cli.json +++ b/.codegen/cli.json @@ -144,14 +144,14 @@ "fields": { "name": { "description": "Name of the column.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "type_text": { "description": "Data type of the column (e.g., \"string\", \"int\", \"array\u003cfloat\u003e\").", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -163,11 +163,11 @@ "endpoint": { "description": "The Endpoint resource to create. Fields other than `endpoint.name` carry the desired\nconfiguration; `endpoint.name` is server-assigned from `parent` and `endpoint_id`.", "ref": "aisearch.Endpoint", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "endpoint_id": { "description": "The user-supplied short name for the Endpoint, per AIP-133. The server composes the\nfull `Endpoint.name` as `{parent}/endpoints/{endpoint_id}`. AIP-133 does not list\n`endpoint_id` as a fields-may-be-required entry, so we annotate it OPTIONAL on the\nwire; the server still rejects empty values with INVALID_PARAMETER_VALUE.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -179,11 +179,11 @@ "index": { "description": "The Index resource to create. Fields other than `index.name` carry the desired\nconfiguration; `index.name` is server-assigned from `parent` and `index_id`.", "ref": "aisearch.Index", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "index_id": { "description": "The user-supplied Unity Catalog table name for the Index, per AIP-133. The server\ncomposes the full `Index.name` as `{parent}/indexes/{index_id}`. AIP-133 does not\nlist `index_id` as a fields-may-be-required entry, so we annotate it OPTIONAL on the\nwire; the server still rejects empty values with INVALID_PARAMETER_VALUE.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -195,11 +195,11 @@ "fields": { "key": { "description": "Key field for an AI Search endpoint tag.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "value": { "description": "[Optional] Value field for an AI Search endpoint tag.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -211,14 +211,14 @@ "fields": { "failed_primary_keys": { "description": "Primary keys of rows that failed to process.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "success_row_count": { "description": "Count of rows processed successfully.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -233,9 +233,9 @@ "FAILURE" ], "enum_launch_stages": { - "FAILURE": "PRIVATE_PREVIEW", - "PARTIAL_SUCCESS": "PRIVATE_PREVIEW", - "SUCCESS": "PRIVATE_PREVIEW" + "FAILURE": "PUBLIC_BETA", + "PARTIAL_SUCCESS": "PUBLIC_BETA", + "SUCCESS": "PUBLIC_BETA" } }, "aisearch.DeleteEndpointRequest": {}, @@ -245,35 +245,35 @@ "fields": { "columns_to_sync": { "description": "[Optional] Select the columns to sync with the index. If left blank, all columns\nfrom the source table are synced. The primary key column and embedding source or\nvector column are always synced.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "embedding_source_columns": { "description": "The columns that contain the embedding source.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "embedding_vector_columns": { "description": "The columns that contain the embedding vectors.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "embedding_writeback_table": { "description": "[Optional] Name of the Delta table to sync the index contents and computed embeddings to.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "pipeline_id": { "description": "The ID of the pipeline that is used to sync the index.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -281,11 +281,11 @@ "pipeline_type": { "description": "Pipeline execution mode. Required on create — the backend rejects an unset value.\nStorage Optimized endpoints accept only `TRIGGERED`; Standard endpoints accept both.\nNo explicit `stage` — a REQUIRED field staged below its service would be dropped from\ncombined specs while remaining in `required`, tripping the OpenAPI required-vs-properties\nconsistency check. The field inherits the service's launch stage.", "ref": "aisearch.PipelineType", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "source_table": { "description": "The full name of the source Delta table.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -297,21 +297,21 @@ "fields": { "embedding_source_columns": { "description": "The columns that contain the embedding source.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "embedding_vector_columns": { "description": "The columns that contain the embedding vectors.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "schema_json": { "description": "The schema of the index in JSON format. Supported types are `integer`, `long`,\n`float`, `double`, `boolean`, `string`, `date`, `timestamp`. Supported types for\nvector columns: `array\u003cfloat\u003e`, `array\u003cdouble\u003e`.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -323,15 +323,15 @@ "fields": { "embedding_model_endpoint": { "description": "Name of the embedding model endpoint, used by default for both ingestion and querying.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "model_endpoint_name_for_query": { "description": "Name of the embedding model endpoint which, if specified, is used for querying (not ingestion).", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "name": { "description": "Name of the source column.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" } } }, @@ -340,11 +340,11 @@ "fields": { "embedding_dimension": { "description": "Dimension of the embedding vector.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "name": { "description": "Name of the column.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" } } }, @@ -353,35 +353,35 @@ "fields": { "budget_policy_id": { "description": "The user-selected budget policy id for the endpoint.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "create_time": { "description": "Time the endpoint was created.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "creator": { "description": "Creator of the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "custom_tags": { "description": "The custom tags assigned to the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "effective_budget_policy_id": { "description": "The budget policy id applied to the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -389,7 +389,7 @@ "endpoint_status": { "description": "Current status of the endpoint", "ref": "aisearch.EndpointStatus", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -397,39 +397,39 @@ "endpoint_type": { "description": "Type of endpoint. Required on create and immutable thereafter.", "ref": "aisearch.EndpointType", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "IMMUTABLE" ] }, "id": { "description": "Unique identifier of the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "index_count": { "description": "Number of indexes on the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "last_updated_user": { "description": "User who last updated the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "name": { "description": "Name of the AI Search endpoint. Server-assigned full resource path\n(`workspaces/{workspace}/endpoints/{endpoint}`) on output. On create, the\nuser-supplied short name is conveyed via `CreateEndpointRequest.endpoint_id`;\nthe server composes the full `name` and returns it on the response.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "replica_count": { "description": "The client-supplied desired number of replicas for the endpoint, applied at\ncreate/update time. Mutually exclusive with `target_qps`.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -437,14 +437,14 @@ "scaling_info": { "description": "Scaling information for the endpoint", "ref": "aisearch.EndpointScalingInfo", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "target_qps": { "description": "Target QPS for the endpoint. Mutually exclusive with `replica_count`. Best-effort;\nthe system does not guarantee this QPS will be achieved.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -452,21 +452,21 @@ "throughput_info": { "description": "Throughput information for the endpoint", "ref": "aisearch.EndpointThroughputInfo", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "update_time": { "description": "Time the endpoint was last updated.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "usage_policy_id": { "description": "The usage policy id applied to the endpoint.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -478,7 +478,7 @@ "fields": { "requested_target_qps": { "description": "The requested QPS target for the endpoint. Best-effort; the system does not\nguarantee this QPS will be achieved.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -486,7 +486,7 @@ "state": { "description": "The current state of the scaling change request.", "ref": "aisearch.ScalingChangeState", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -498,7 +498,7 @@ "fields": { "message": { "description": "Human-readable detail about the endpoint's current state or the reason for a state transition.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -506,7 +506,7 @@ "state": { "description": "Current lifecycle state of the endpoint. See `State` for the meaning of each value.", "ref": "aisearch.EndpointStatusState", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -524,12 +524,12 @@ "DELETED" ], "enum_launch_stages": { - "DELETED": "PRIVATE_PREVIEW", - "OFFLINE": "PRIVATE_PREVIEW", - "ONLINE": "PRIVATE_PREVIEW", - "PROVISIONING": "PRIVATE_PREVIEW", - "RED_STATE": "PRIVATE_PREVIEW", - "YELLOW_STATE": "PRIVATE_PREVIEW" + "DELETED": "PUBLIC_BETA", + "OFFLINE": "PUBLIC_BETA", + "ONLINE": "PUBLIC_BETA", + "PROVISIONING": "PUBLIC_BETA", + "RED_STATE": "PUBLIC_BETA", + "YELLOW_STATE": "PUBLIC_BETA" } }, "aisearch.EndpointThroughputInfo": { @@ -537,7 +537,7 @@ "fields": { "change_request_message": { "description": "Additional information about the throughput change request", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -545,56 +545,56 @@ "change_request_state": { "description": "The state of the most recent throughput change request", "ref": "aisearch.ThroughputChangeRequestState", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "current_concurrency": { "description": "The current concurrency (total CPU) allocated to the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "current_concurrency_utilization_percentage": { "description": "The current utilization of concurrency as a percentage (0-100)", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "current_num_replicas": { "description": "The current number of replicas allocated to the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "maximum_concurrency_allowed": { "description": "The maximum concurrency allowed for this endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "minimal_concurrency_allowed": { "description": "The minimum concurrency allowed for this endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "requested_concurrency": { "description": "The requested concurrency (total CPU) for the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "requested_num_replicas": { "description": "The requested number of replicas for the endpoint", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -608,8 +608,8 @@ "STANDARD" ], "enum_launch_stages": { - "STANDARD": "PRIVATE_PREVIEW", - "STORAGE_OPTIMIZED": "PRIVATE_PREVIEW" + "STANDARD": "PUBLIC_BETA", + "STORAGE_OPTIMIZED": "PUBLIC_BETA" } }, "aisearch.FacetResultData": { @@ -617,14 +617,14 @@ "fields": { "facet_array": { "description": "Facet rows; each row is `[facet_column_name, value_or_range, count]`.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "facet_row_count": { "description": "Number of facet rows returned.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -638,7 +638,7 @@ "fields": { "creator": { "description": "Creator of the index.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -646,7 +646,7 @@ "delta_sync_index_spec": { "description": "Specification for a Delta Sync index. Set when `index_type` is `DELTA_SYNC`.", "ref": "aisearch.DeltaSyncIndexSpec", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "IMMUTABLE", "OPTIONAL" @@ -655,7 +655,7 @@ "direct_access_index_spec": { "description": "Specification for a Direct Access index. Set when `index_type` is `DIRECT_ACCESS`.", "ref": "aisearch.DirectAccessIndexSpec", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "IMMUTABLE", "OPTIONAL" @@ -663,7 +663,7 @@ }, "endpoint": { "description": "Name of the endpoint associated with the index. Ignored on create — the endpoint is\ntaken from `CreateIndexRequest.parent`; populated only on output.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -671,7 +671,7 @@ "index_subtype": { "description": "The subtype of the index. Set on create and immutable thereafter.", "ref": "aisearch.IndexSubtype", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "IMMUTABLE", "OPTIONAL" @@ -680,18 +680,18 @@ "index_type": { "description": "Type of index. Required on create and immutable thereafter.", "ref": "aisearch.IndexType", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "IMMUTABLE" ] }, "name": { "description": "Name of the AI Search index. Server-assigned full resource path\n(`workspaces/{workspace}/endpoints/{endpoint}/indexes/{index}`) on output, where\n`{index}` is the index's Unity Catalog table name. On create, the user-supplied UC\ntable name is conveyed via `CreateIndexRequest.index_id`; the server composes the\nfull `name` and returns it on the response.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "primary_key": { "description": "Primary key of the index. Set on create and immutable thereafter.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "IMMUTABLE" ] @@ -699,7 +699,7 @@ "status": { "description": "Current status of the index.", "ref": "aisearch.IndexStatus", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -711,28 +711,28 @@ "fields": { "index_url": { "description": "Index API URL used to perform operations on the index.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "indexed_row_count": { "description": "Number of rows indexed.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "message": { "description": "Human-readable detail about the index's current state.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "ready": { "description": "Whether the index is ready for search.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -747,9 +747,9 @@ "HYBRID" ], "enum_launch_stages": { - "FULL_TEXT": "PRIVATE_PREVIEW", - "HYBRID": "PRIVATE_PREVIEW", - "VECTOR": "PRIVATE_PREVIEW" + "FULL_TEXT": "PUBLIC_BETA", + "HYBRID": "PUBLIC_BETA", + "VECTOR": "PUBLIC_BETA" }, "enum_descriptions": { "FULL_TEXT": "An index that uses full-text search without vector embeddings.", @@ -764,8 +764,8 @@ "DIRECT_ACCESS" ], "enum_launch_stages": { - "DELTA_SYNC": "PRIVATE_PREVIEW", - "DIRECT_ACCESS": "PRIVATE_PREVIEW" + "DELTA_SYNC": "PUBLIC_BETA", + "DIRECT_ACCESS": "PUBLIC_BETA" }, "enum_descriptions": { "DELTA_SYNC": "An index that automatically syncs with a source Delta Table,", @@ -776,14 +776,14 @@ "fields": { "page_size": { "description": "Best-effort upper bound on the number of results to return. Honored as an upper\nbound by the shim: `page_size` only narrows the legacy backend's response, never\nwidens it, so the practical cap is `min(page_size, legacy_fixed_page_size)`.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "page_token": { "description": "Page token from a previous response. If not provided, returns the first page.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -795,14 +795,14 @@ "fields": { "endpoints": { "description": "The endpoints in the workspace.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "next_page_token": { "description": "A token that can be used to get the next page of results. Empty when there are no more results.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -813,14 +813,14 @@ "fields": { "page_size": { "description": "Best-effort upper bound on the number of results to return. Honored as an upper\nbound by the shim: `page_size` only narrows the legacy backend's response, never\nwidens it, so the practical cap is `min(page_size, legacy_fixed_page_size)`.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "page_token": { "description": "Page token from a previous response. If not provided, returns the first page.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -832,14 +832,14 @@ "fields": { "indexes": { "description": "The indexes on the endpoint. The field is named `indexes` (not the irregular plural\n`indices`) to satisfy core::0132, which derives the response field name from the\nListIndexes method. core::0158::response-plural-first-field independently computes the\nresource plural as `indices` and is satisfied via a scoped field exception below.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "next_page_token": { "description": "A token that can be used to get the next page of results. Empty when there are no more results.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -853,8 +853,8 @@ "CONTINUOUS" ], "enum_launch_stages": { - "CONTINUOUS": "PRIVATE_PREVIEW", - "TRIGGERED": "PRIVATE_PREVIEW" + "CONTINUOUS": "PUBLIC_BETA", + "TRIGGERED": "PUBLIC_BETA" }, "enum_descriptions": { "CONTINUOUS": "the pipeline processes new data as it arrives in the source table to", @@ -866,60 +866,60 @@ "fields": { "columns": { "description": "Column names to include in each result row.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "columns_to_rerank": { "description": "Columns whose values are sent to the reranker.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "facets": { "description": "Facets to compute over the matched results (e.g. `\"category TOP 5\"`).", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "filters_json": { "description": "JSON string describing query filters (e.g. `{\"id \u003e\": 5}`).", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "max_results": { "description": "Maximum number of results to return (the legacy `num_results`). Defaults to 10.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "query_columns": { "description": "Text columns to search for `query_text`. When empty, all text columns are searched.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "query_text": { "description": "Query text. Required for Delta Sync indexes that compute embeddings from a model endpoint.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "query_type": { "description": "Query type: `ANN`, `HYBRID`, or `FULL_TEXT`. Defaults to `ANN`.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "query_vector": { "description": "Query vector. Required for Direct Access indexes and Delta Sync indexes with self-managed\nvectors.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -927,21 +927,21 @@ "reranker": { "description": "If set, results are reranked before being returned.", "ref": "aisearch.RerankerConfig", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "score_threshold": { "description": "Score threshold for the approximate nearest-neighbor search. Defaults to 0.0.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "sort_columns": { "description": "Sort clauses, e.g. `[\"rating DESC\", \"price ASC\"]`. Overrides relevance ordering.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -954,7 +954,7 @@ "facet_result": { "description": "Facet aggregation rows, when facets were requested.", "ref": "aisearch.FacetResultData", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -962,7 +962,7 @@ "manifest": { "description": "Metadata describing the result columns.", "ref": "aisearch.ResultManifest", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -970,7 +970,7 @@ "result": { "description": "The matched result rows.", "ref": "aisearch.ResultData", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -982,7 +982,7 @@ "fields": { "primary_keys": { "description": "Primary keys of the rows to remove.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" } } }, @@ -992,7 +992,7 @@ "result": { "description": "Per-row outcome of the delete.", "ref": "aisearch.DataModificationResult", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -1000,7 +1000,7 @@ "status": { "description": "Overall status of the delete.", "ref": "aisearch.DataModificationStatus", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -1012,7 +1012,7 @@ "fields": { "model": { "description": "Reranker identifier: \"databricks_reranker\" for the base model, or a Model Serving\nendpoint name when `model_type` is MODEL_TYPE_FINETUNED.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -1020,7 +1020,7 @@ "model_type": { "description": "Discriminator for how `model` is interpreted.", "ref": "aisearch.RerankerConfigModelType", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -1028,7 +1028,7 @@ "parameters": { "description": "Parameters controlling reranking.", "ref": "aisearch.RerankerConfigRerankerParameters", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -1042,8 +1042,8 @@ "MODEL_TYPE_FINETUNED" ], "enum_launch_stages": { - "MODEL_TYPE_BASE": "PRIVATE_PREVIEW", - "MODEL_TYPE_FINETUNED": "PRIVATE_PREVIEW" + "MODEL_TYPE_BASE": "PUBLIC_BETA", + "MODEL_TYPE_FINETUNED": "PUBLIC_BETA" } }, "aisearch.RerankerConfigRerankerParameters": { @@ -1051,7 +1051,7 @@ "fields": { "columns_to_rerank": { "description": "Columns whose values are concatenated and sent to the reranker.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -1063,14 +1063,14 @@ "fields": { "data_array": { "description": "Result rows; each row is a list of column values aligned with the manifest columns.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "row_count": { "description": "Number of rows in the result set.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -1082,28 +1082,28 @@ "fields": { "column_count": { "description": "Number of columns in the result set.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "columns": { "description": "Information about each column in the result set.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "facet_column_count": { "description": "Number of columns in the facet result.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "facet_columns": { "description": "Information about each facet column.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -1118,9 +1118,9 @@ "SCALING_CHANGE_IN_PROGRESS" ], "enum_launch_stages": { - "SCALING_CHANGE_APPLIED": "PRIVATE_PREVIEW", - "SCALING_CHANGE_IN_PROGRESS": "PRIVATE_PREVIEW", - "SCALING_CHANGE_UNSPECIFIED": "PRIVATE_PREVIEW" + "SCALING_CHANGE_APPLIED": "PUBLIC_BETA", + "SCALING_CHANGE_IN_PROGRESS": "PUBLIC_BETA", + "SCALING_CHANGE_UNSPECIFIED": "PUBLIC_BETA" } }, "aisearch.ScanIndexRequest": { @@ -1128,14 +1128,14 @@ "fields": { "page_size": { "description": "Maximum number of rows to return in this page.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] }, "page_token": { "description": "Page token from a previous response; if unset, scanning starts from the beginning.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OPTIONAL" ] @@ -1147,14 +1147,14 @@ "fields": { "data": { "description": "The rows in this page, each a struct of column name to value.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] }, "next_page_token": { "description": "Token for the next page; empty when the scan is exhausted.", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -1178,12 +1178,12 @@ "CHANGE_ADJUSTED" ], "enum_launch_stages": { - "CHANGE_ADJUSTED": "PRIVATE_PREVIEW", - "CHANGE_FAILED": "PRIVATE_PREVIEW", - "CHANGE_IN_PROGRESS": "PRIVATE_PREVIEW", - "CHANGE_REACHED_MAXIMUM": "PRIVATE_PREVIEW", - "CHANGE_REACHED_MINIMUM": "PRIVATE_PREVIEW", - "CHANGE_SUCCESS": "PRIVATE_PREVIEW" + "CHANGE_ADJUSTED": "PUBLIC_BETA", + "CHANGE_FAILED": "PUBLIC_BETA", + "CHANGE_IN_PROGRESS": "PUBLIC_BETA", + "CHANGE_REACHED_MAXIMUM": "PUBLIC_BETA", + "CHANGE_REACHED_MINIMUM": "PUBLIC_BETA", + "CHANGE_SUCCESS": "PUBLIC_BETA" } }, "aisearch.UpdateEndpointRequest": { @@ -1191,11 +1191,11 @@ "endpoint": { "description": "The Endpoint resource to update. `endpoint.name` carries the full resource path.", "ref": "aisearch.Endpoint", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" }, "update_mask": { "description": "The list of fields to update.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" } } }, @@ -1204,7 +1204,7 @@ "fields": { "inputs_json": { "description": "JSON document describing the rows to upsert.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" } } }, @@ -1214,7 +1214,7 @@ "result": { "description": "Per-row outcome of the upsert.", "ref": "aisearch.DataModificationResult", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -1222,7 +1222,7 @@ "status": { "description": "Overall status of the upsert.", "ref": "aisearch.DataModificationStatus", - "launch_stage": "PRIVATE_PREVIEW", + "launch_stage": "PUBLIC_BETA", "behaviors": [ "OUTPUT_ONLY" ] @@ -2305,11 +2305,13 @@ "apps.ComputeSize": { "enum": [ "MEDIUM", - "LARGE" + "LARGE", + "XLARGE" ], "enum_launch_stages": { "LARGE": "GA", - "MEDIUM": "GA" + "MEDIUM": "GA", + "XLARGE": "PRIVATE_PREVIEW" } }, "apps.ComputeState": { @@ -4009,7 +4011,7 @@ "launch_stage": "PRIVATE_PREVIEW" }, "version_id": { - "description": "The version ID the caller expects to create. The server validates\nthis equals `last_version_id + 1` on the deployment. If it doesn't\nmatch, the server returns `ABORTED`.", + "description": "The ID to use for the version, which becomes the final component of\nthe version's resource name. A numeric string (base-10, fits in a\nsigned 64-bit integer) chosen by the caller; must be greater than or\nequal to 1. Must be numerically greater than the deployment's\nmost recent version (see `version.previous_version_id`); it does not\nneed to start at 1 or increase by exactly 1. If the value is not\nnumerically greater, the server returns `INVALID_PARAMETER_VALUE`.", "launch_stage": "PRIVATE_PREVIEW" } } @@ -4367,7 +4369,7 @@ } }, "bundledeployments.Operation": { - "description": "An operation on a single resource performed during a version.\nOperations are append-only and record the result of applying a resource\nchange to the workspace.", + "description": "An operation on a single resource performed during a version. Operations\nrecord the result of applying a resource change to the workspace. Most\nfields are immutable once recorded; `state`, `error_message`, `resource_id`,\nand `status` may be updated afterwards (via UpdateOperation), guarded by\n`sequence_id` for optimistic concurrency control.", "fields": { "action_type": { "description": "The type of operation performed on this resource.", @@ -4385,10 +4387,10 @@ ] }, "error_message": { - "description": "Error message if the operation failed. Set when status is\nOPERATION_STATUS_FAILED. Captures the error encountered while\napplying the resource to the workspace.", + "description": "Error message if the operation failed. Set when status is\nOPERATION_STATUS_FAILED. Captures the error encountered while applying the\nresource to the workspace. Mutable: may be updated after creation via\nUpdateOperation; setting it to an empty string clears it. After an update\nis applied, an operation whose status is OPERATION_STATUS_SUCCEEDED cannot\ncarry an error_message.", "launch_stage": "PRIVATE_PREVIEW", "behaviors": [ - "IMMUTABLE" + "OPTIONAL" ] }, "name": { @@ -4399,10 +4401,9 @@ ] }, "resource_id": { - "description": "ID of the actual resource in the workspace (e.g. the job ID, pipeline ID).\nRequired for every operation except CREATE and RECREATE, which produce a\nnew resource whose ID is not yet known when the operation is recorded.", + "description": "ID of the actual resource in the workspace (e.g. the job ID, pipeline ID).\nOptional at creation: CREATE and RECREATE operations produce a new resource\nwhose ID is not yet known when the operation is recorded. Mutable: may be\nfilled in (or corrected) later via UpdateOperation once the ID is known.", "launch_stage": "PRIVATE_PREVIEW", "behaviors": [ - "IMMUTABLE", "OPTIONAL" ] }, @@ -4422,19 +4423,16 @@ ] }, "state": { - "description": "Serialized local config state after the operation.\nShould be unset for delete operations.", + "description": "Serialized local config state after the operation. Should be unset for\ndelete operations. Mutable: may be updated after creation via\nUpdateOperation. When updating, the caller must echo the last-observed\n`sequence_id` as a concurrency precondition.", "launch_stage": "PRIVATE_PREVIEW", "behaviors": [ - "IMMUTABLE" + "OPTIONAL" ] }, "status": { - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "ref": "bundledeployments.OperationStatus", - "launch_stage": "PRIVATE_PREVIEW", - "behaviors": [ - "IMMUTABLE" - ] + "launch_stage": "PRIVATE_PREVIEW" } } }, @@ -4622,7 +4620,7 @@ ] }, "version_id": { - "description": "Monotonically increasing version identifier within the parent\ndeployment. Assigned by the client on creation.", + "description": "Version identifier within the parent deployment, assigned by the\nclient on creation. A numeric string (base-10, fits in a signed\n64-bit integer) that is greater than or equal to 1. Version IDs are\nstrictly increasing within a deployment but are not required to\nstart at 1 or to be contiguous.", "launch_stage": "PRIVATE_PREVIEW", "behaviors": [ "OUTPUT_ONLY" @@ -4686,6 +4684,10 @@ "bundledeployments.WorkspaceInfo": { "description": "Workspace location of a bundle deployment, captured at deploy time.", "fields": { + "bundle_root_path": { + "description": "Path of the bundle root (the directory containing databricks.yml) relative\nto git_folder_path. Empty when the deployment is not from a Databricks Git\nfolder.", + "launch_stage": "PRIVATE_PREVIEW" + }, "file_path": { "description": "Absolute workspace path where the deployed bundle files live. Mirrors the\nworkspace.file_path field in DABs bundle config.", "launch_stage": "PRIVATE_PREVIEW" @@ -5590,7 +5592,6 @@ } }, "catalog.ConnectionType": { - "description": "Next Id: 127", "enum": [ "UNKNOWN_CONNECTION_TYPE", "MYSQL", @@ -6593,7 +6594,6 @@ } }, "catalog.CredentialType": { - "description": "Next Id: 20", "enum": [ "UNKNOWN_CREDENTIAL_TYPE", "USERNAME_PASSWORD", @@ -10444,7 +10444,6 @@ }, "catalog.RunRefreshRequest": {}, "catalog.SchemaInfo": { - "description": "Next ID: 45", "fields": { "browse_only": { "description": "Indicates whether the principal is limited to retrieving metadata for the associated object through the BROWSE privilege when include_browse is enabled in the request.", @@ -10681,7 +10680,6 @@ } }, "catalog.SecurableKind": { - "description": "Latest kind: CONNECTION_MARKETO_OAUTH_M2M = 347; Next id: 348.\nReserved numbers: 316, 317, 327, 330, 341 (former ENDPOINT_LLM_*,\nMODEL_SERVICE_STANDARD, MODEL_SERVICE_SYSTEM_DELTASHARING, MCP_SERVICE_STANDARD).", "enum": [ "TABLE_STANDARD", "TABLE_EXTERNAL", @@ -12241,7 +12239,6 @@ } }, "catalog.ValidateCredentialRequest": { - "description": "Next ID: 18", "fields": { "aws_iam_role": { "ref": "catalog.AwsIamRole", @@ -13602,6 +13599,22 @@ } } }, + "compute.CancelPendingClusterEnforcementRequest": { + "description": "Request to cancel the pending enforcement for a cluster.", + "fields": { + "allow_missing": { + "description": "If true and no pending enforcement exists, the request will succeed but no action\nwill be taken.", + "launch_stage": "GA" + }, + "cluster_id": { + "description": "The ID of the cluster to cancel the pending enforcement for.", + "launch_stage": "GA" + } + } + }, + "compute.CancelPendingClusterEnforcementResponse": { + "description": "Response for canceling the pending enforcement for a cluster.\nIf the cancel request succeeds, an empty response object is returned.\nOtherwise, an error response is returned." + }, "compute.CancelResponse": {}, "compute.ChangeClusterOwner": { "fields": { @@ -13844,6 +13857,11 @@ "description": "Whether this cluster is in compliance with the latest version of its policy.", "launch_stage": "GA" }, + "pending_enforcement": { + "description": "Information about the pending enforcement for the cluster. Only present if a pending enforcement\nis scheduled for the cluster.", + "ref": "compute.PendingEnforcement", + "launch_stage": "GA" + }, "violations": { "description": "An object containing key-value mappings representing the first 200 policy validation errors.\nThe keys indicate the path where the policy validation error is occurring.\nThe values indicate an error message describing the policy validation error.", "launch_stage": "GA" @@ -15369,6 +15387,11 @@ "description": "The ID of the cluster you want to enforce policy compliance on.", "launch_stage": "GA" }, + "enforce_mode": { + "description": "Determines how changes should be made to clusters that are not in `TERMINATED` state.\n\n- `ENFORCE_IMMEDIATELY`: If the cluster is in a `RUNNING` state, it will be restarted so\nthat the new attributes can take effect. For other states aside from `TERMINATED` state,\nthe request will be rejected.\n- `WAIT_FOR_TERMINATION`: The cluster is not immediately edited. Instead, a pending enforcement\nis scheduled to update the cluster when it terminates or restarts. When this occurs,\n`enforce_result` will contain `DEFERRED`. Only workspace admins can use this mode.\n\nRegardless of the enforce mode, clusters in `TERMINATED` state are immediately edited.", + "ref": "compute.EnforcePolicyComplianceForClusterEnforceMode", + "launch_stage": "GA" + }, "validate_only": { "description": "If set, previews the changes that would be made to a cluster\nto enforce compliance but does not update the cluster.", "launch_stage": "GA" @@ -15381,12 +15404,184 @@ "description": "A list of changes that have been made to the cluster settings for\nthe cluster to become compliant with its policy.", "launch_stage": "GA" }, + "enforce_result": { + "description": "Describes whether changes have been applied to the cluster.", + "ref": "compute.EnforcePolicyComplianceForClusterResponseEnforceResult", + "launch_stage": "GA" + }, "has_changes": { "description": "Whether any changes have been made to the cluster settings for the cluster\nto become compliant with its policy.", "launch_stage": "GA" } } }, + "compute.EnforcePolicyComplianceForClusterEnforceMode": { + "enum": [ + "ENFORCE_IMMEDIATELY", + "WAIT_FOR_TERMINATION" + ], + "enum_launch_stages": { + "ENFORCE_IMMEDIATELY": "GA", + "WAIT_FOR_TERMINATION": "GA" + } + }, + "compute.EnforcePolicyComplianceForClusterResponseClusterSettings": { + "fields": { + "autoscale": { + "description": "Parameters needed in order to automatically scale clusters up and down based on load.\nNote: autoscaling works best with DB runtime versions 3.0 or later.", + "ref": "compute.AutoScale", + "launch_stage": "GA" + }, + "autotermination_minutes": { + "description": "Automatically terminates the cluster after it is inactive for this time in minutes. If not set,\nthis cluster will not be automatically terminated. If specified, the threshold must be between\n10 and 10000 minutes.\nUsers can also set this value to 0 to explicitly disable automatic termination.", + "launch_stage": "GA" + }, + "aws_attributes": { + "description": "Attributes related to clusters running on Amazon Web Services.\nIf not specified at cluster creation, a set of default values will be used.", + "ref": "compute.AwsAttributes", + "launch_stage": "GA" + }, + "azure_attributes": { + "description": "Attributes related to clusters running on Microsoft Azure.\nIf not specified at cluster creation, a set of default values will be used.", + "ref": "compute.AzureAttributes", + "launch_stage": "GA" + }, + "cluster_log_conf": { + "description": "The configuration for delivering spark logs to a long-term storage destination.\nThree kinds of destinations (DBFS, S3 and Unity Catalog volumes) are supported. Only one destination can be specified\nfor one cluster. If the conf is given, the logs will be delivered to the destination every\n`5 mins`. The destination of driver logs is `$destination/$clusterId/driver`, while\nthe destination of executor logs is `$destination/$clusterId/executor`.", + "ref": "compute.ClusterLogConf", + "launch_stage": "GA" + }, + "cluster_name": { + "description": "Cluster name requested by the user. This doesn't have to be unique.\nIf not specified at creation, the cluster name will be an empty string.\nFor job clusters, the cluster name is automatically set based on the job and job run IDs.", + "launch_stage": "GA" + }, + "custom_tags": { + "description": "Additional tags for cluster resources. Databricks will tag all cluster resources (e.g., AWS\ninstances and EBS volumes) with these tags in addition to `default_tags`. Notes:\n\n- Currently, Databricks allows at most 45 custom tags\n\n- Clusters can only reuse cloud resources if the resources' tags are a subset of the cluster tags", + "launch_stage": "GA" + }, + "data_security_mode": { + "ref": "compute.DataSecurityMode", + "launch_stage": "GA" + }, + "docker_image": { + "description": "Custom docker image BYOC", + "ref": "compute.DockerImage", + "launch_stage": "GA" + }, + "driver_instance_pool_id": { + "description": "The optional ID of the instance pool for the driver of the cluster belongs.\nThe pool cluster uses the instance pool with id (instance_pool_id) if the driver pool is not\nassigned.", + "launch_stage": "GA" + }, + "driver_node_type_flexibility": { + "description": "Flexible node type configuration for the driver node.", + "ref": "compute.NodeTypeFlexibility", + "launch_stage": "GA" + }, + "driver_node_type_id": { + "description": "The node type of the Spark driver.\nNote that this field is optional; if unset, the driver node type will be set as the same value\nas `node_type_id` defined above.\n\nThis field, along with node_type_id, should not be set if virtual_cluster_size is set.\nIf both driver_node_type_id, node_type_id, and virtual_cluster_size are specified, driver_node_type_id and node_type_id take precedence.", + "launch_stage": "GA" + }, + "enable_elastic_disk": { + "description": "Autoscaling Local Storage: when enabled, this cluster will dynamically acquire additional disk\nspace when its Spark workers are running low on disk space.", + "launch_stage": "GA" + }, + "enable_local_disk_encryption": { + "description": "Whether to enable LUKS on cluster VMs' local disks", + "launch_stage": "GA" + }, + "gcp_attributes": { + "description": "Attributes related to clusters running on Google Cloud Platform.\nIf not specified at cluster creation, a set of default values will be used.", + "ref": "compute.GcpAttributes", + "launch_stage": "GA" + }, + "init_scripts": { + "description": "The configuration for storing init scripts. Any number of destinations can be specified.\nThe scripts are executed sequentially in the order provided.\nIf `cluster_log_conf` is specified, init script logs are sent to `\u003cdestination\u003e/\u003ccluster-ID\u003e/init_scripts`.", + "launch_stage": "GA" + }, + "instance_pool_id": { + "description": "The optional ID of the instance pool to which the cluster belongs.", + "launch_stage": "GA" + }, + "is_single_node": { + "description": "This field can only be used when `kind = CLASSIC_PREVIEW`.\n\nWhen set to true, Databricks will automatically set single node related `custom_tags`, `spark_conf`, and `num_workers`", + "launch_stage": "GA" + }, + "kind": { + "ref": "compute.Kind", + "launch_stage": "GA" + }, + "node_type_id": { + "description": "This field encodes, through a single value, the resources available to each of\nthe Spark nodes in this cluster. For example, the Spark nodes can be provisioned\nand optimized for memory or compute intensive workloads. A list of available node\ntypes can be retrieved by using the :method:clusters/listNodeTypes API call.", + "launch_stage": "GA" + }, + "num_workers": { + "description": "Number of worker nodes that this cluster should have. A cluster has one Spark Driver\nand `num_workers` Executors for a total of `num_workers` + 1 Spark nodes.\n\nNote: When reading the properties of a cluster, this field reflects the desired number\nof workers rather than the actual current number of workers. For instance, if a cluster\nis resized from 5 to 10 workers, this field will immediately be updated to reflect\nthe target size of 10 workers, whereas the workers listed in `spark_info` will gradually\nincrease from 5 to 10 as the new nodes are provisioned.", + "launch_stage": "GA" + }, + "policy_id": { + "description": "The ID of the cluster policy used to create the cluster if applicable.", + "launch_stage": "GA" + }, + "remote_disk_throughput": { + "description": "If set, what the configurable throughput (in Mb/s) for the remote disk is. Currently only supported for GCP HYPERDISK_BALANCED disks.", + "launch_stage": "GA" + }, + "runtime_engine": { + "description": "Determines the cluster's runtime engine, either standard or Photon.\n\nThis field is not compatible with legacy `spark_version` values that contain `-photon-`.\nRemove `-photon-` from the `spark_version` and set `runtime_engine` to `PHOTON`.\n\nIf left unspecified, the runtime engine defaults to standard unless the spark_version\ncontains -photon-, in which case Photon will be used.", + "ref": "compute.RuntimeEngine", + "launch_stage": "GA" + }, + "single_user_name": { + "description": "Single user name if data_security_mode is `SINGLE_USER`", + "launch_stage": "GA" + }, + "spark_conf": { + "description": "An object containing a set of optional, user-specified Spark configuration key-value pairs.\nUsers can also pass in a string of extra JVM options to the driver and the executors via\n`spark.driver.extraJavaOptions` and `spark.executor.extraJavaOptions` respectively.", + "launch_stage": "GA" + }, + "spark_env_vars": { + "description": "An object containing a set of optional, user-specified environment variable key-value pairs.\nPlease note that key-value pair of the form (X,Y) will be exported as is (i.e.,\n`export X='Y'`) while launching the driver and workers.\n\nIn order to specify an additional set of `SPARK_DAEMON_JAVA_OPTS`, we recommend appending\nthem to `$SPARK_DAEMON_JAVA_OPTS` as shown in the example below. This ensures that all\ndefault databricks managed environmental variables are included as well.\n\nExample Spark environment variables:\n`{\"SPARK_WORKER_MEMORY\": \"28000m\", \"SPARK_LOCAL_DIRS\": \"/local_disk0\"}` or\n`{\"SPARK_DAEMON_JAVA_OPTS\": \"$SPARK_DAEMON_JAVA_OPTS -Dspark.shuffle.service.enabled=true\"}`", + "launch_stage": "GA" + }, + "spark_version": { + "description": "The Spark version of the cluster, e.g. `3.3.x-scala2.11`.\nA list of available Spark versions can be retrieved by using\nthe :method:clusters/sparkVersions API call.", + "launch_stage": "GA" + }, + "ssh_public_keys": { + "description": "SSH public key contents that will be added to each Spark node in this cluster. The\ncorresponding private keys can be used to login with the user name `ubuntu` on port `2200`.\nUp to 10 keys can be specified.", + "launch_stage": "GA" + }, + "total_initial_remote_disk_size": { + "description": "If set, what the total initial volume size (in GB) of the remote disks should be. Currently only supported for GCP HYPERDISK_BALANCED disks.", + "launch_stage": "GA" + }, + "use_ml_runtime": { + "description": "This field can only be used when `kind = CLASSIC_PREVIEW`.\n\n`effective_spark_version` is determined by `spark_version` (DBR release), this field `use_ml_runtime`, and whether `node_type_id` is gpu node or not.", + "launch_stage": "GA" + }, + "worker_node_type_flexibility": { + "description": "Flexible node type configuration for worker nodes.", + "ref": "compute.NodeTypeFlexibility", + "launch_stage": "GA" + }, + "workload_type": { + "ref": "compute.WorkloadType", + "launch_stage": "GA" + } + } + }, + "compute.EnforcePolicyComplianceForClusterResponseEnforceResult": { + "enum": [ + "NO_CHANGES", + "APPLIED", + "DEFERRED" + ], + "enum_launch_stages": { + "APPLIED": "GA", + "DEFERRED": "GA", + "NO_CHANGES": "GA" + } + }, "compute.Environment": { "description": "The environment entity used to preserve serverless environment side panel, jobs' environment for non-notebook task, and SDP's environment for classic and serverless pipelines.\nIn this minimal environment spec, only pip and java dependencies are supported.", "fields": { @@ -15567,6 +15762,8 @@ "CLUSTER_MIGRATED", "DECOMMISSION_STARTED", "DECOMMISSION_ENDED", + "DEFERRED_POLICY_ENFORCEMENT_SCHEDULED", + "DEFERRED_POLICY_ENFORCEMENT_FAILED", "UC_VOLUME_MISCONFIGURED" ], "enum_launch_stages": { @@ -15580,6 +15777,8 @@ "DBFS_DOWN": "GA", "DECOMMISSION_ENDED": "GA", "DECOMMISSION_STARTED": "GA", + "DEFERRED_POLICY_ENFORCEMENT_FAILED": "GA", + "DEFERRED_POLICY_ENFORCEMENT_SCHEDULED": "GA", "DID_NOT_EXPAND_DISK": "GA", "DRIVER_HEALTHY": "GA", "DRIVER_NOT_RESPONDING": "GA", @@ -15681,6 +15880,11 @@ "description": "Whether the cluster is compliant with its policy or not. Clusters could be out\nof compliance if the policy was updated after the cluster was last edited.", "launch_stage": "GA" }, + "pending_enforcement": { + "description": "Information about the pending enforcement for the cluster. Only present if a pending enforcement\nis scheduled for the cluster.", + "ref": "compute.PendingEnforcement", + "launch_stage": "GA" + }, "violations": { "description": "An object containing key-value mappings representing the first 200 policy validation errors.\nThe keys indicate the path where the policy validation error is occurring.\nThe values indicate an error message describing the policy validation error.", "launch_stage": "GA" @@ -16098,7 +16302,7 @@ } }, "compute.InitScriptInfo": { - "description": "Config for an individual init script\nNext ID: 11", + "description": "Config for an individual init script", "fields": { "abfss": { "description": "destination needs to be provided, e.g.\n`abfss://\u003ccontainer-name\u003e@\u003cstorage-account-name\u003e.dfs.core.windows.net/\u003cdirectory-name\u003e`", @@ -17049,6 +17253,43 @@ } } }, + "compute.PendingEnforcement": { + "description": "Represents a pending enforcement on a cluster, which contains the changes to make to the cluster\nconfiguration when the cluster is next terminated or restarted.", + "fields": { + "enforcement_status": { + "description": "Whether the pending enforcement will be applied. A pending enforcement begins in `ACTIVE`\nstate. If the enforcement fails to apply too many times, the state transitions to `INACTIVE`.\nAfterwards, the enforcement must be re-scheduled to become `ACTIVE` again.", + "ref": "compute.PendingEnforcementEnforcementStatus", + "launch_stage": "GA" + }, + "initiate_time": { + "description": "The time the pending enforcement was initiated.", + "launch_stage": "GA" + }, + "initiator_user": { + "description": "The user who initiated the pending enforcement.", + "launch_stage": "GA" + }, + "target_changes": { + "description": "A list of changes that will be made to the cluster configuration when the pending\nenforcement is applied.", + "launch_stage": "GA" + }, + "target_spec": { + "description": "The new configuration to apply upon cluster termination or restart.", + "ref": "compute.EnforcePolicyComplianceForClusterResponseClusterSettings", + "launch_stage": "GA" + } + } + }, + "compute.PendingEnforcementEnforcementStatus": { + "enum": [ + "ACTIVE", + "INACTIVE" + ], + "enum_launch_stages": { + "ACTIVE": "GA", + "INACTIVE": "GA" + } + }, "compute.PendingInstanceError": { "description": "Error message of a failed pending instances", "fields": { @@ -18189,6 +18430,14 @@ } } }, + "dashboards.DownloadMessageAttachmentVisualizationRequest": {}, + "dashboards.DownloadMessageAttachmentVisualizationResponse": { + "fields": { + "contents": { + "launch_stage": "PUBLIC_BETA" + } + } + }, "dashboards.EvaluationStatusType": { "enum": [ "RUNNING", @@ -18240,6 +18489,14 @@ "behaviors": [ "OUTPUT_ONLY" ] + }, + "viz": { + "description": "Visualization generated by Genie, if requested via `enable_visualization`", + "ref": "dashboards.GenieVizAttachment", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OUTPUT_ONLY" + ] } } }, @@ -18312,6 +18569,13 @@ "content": { "description": "User message content.", "launch_stage": "GA" + }, + "enable_visualization": { + "description": "Enable visualization generation.", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OPTIONAL" + ] } } }, @@ -19154,6 +19418,13 @@ "content": { "description": "The text of the message that starts the conversation.", "launch_stage": "GA" + }, + "enable_visualization": { + "description": "Enable visualization generation.", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OPTIONAL" + ] } } }, @@ -19236,6 +19507,25 @@ } } }, + "dashboards.GenieVizAttachment": { + "description": "Visualization generated by Genie for a query result. Use the attachment ID\nwith the download visualization API to retrieve the rendered image.", + "fields": { + "query_attachment_id": { + "description": "The ID of the query attachment the visualization was generated from", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OUTPUT_ONLY" + ] + }, + "title": { + "description": "Name of the visualization", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OUTPUT_ONLY" + ] + } + } + }, "dashboards.GetDashboardRequest": {}, "dashboards.GetPublishedDashboardRequest": {}, "dashboards.GetPublishedDashboardTokenInfoRequest": { @@ -19293,7 +19583,7 @@ "launch_stage": "GA" }, "view": { - "description": "`DASHBOARD_VIEW_BASIC`only includes summary metadata from the dashboard.", + "description": "`DASHBOARD_VIEW_BASIC` only includes summary metadata from the dashboard.", "ref": "dashboards.DashboardView", "launch_stage": "GA" } @@ -21220,7 +21510,7 @@ ] }, "included_schemas": { - "description": "Schemas to include in the scan. Empty list is not supported as it results in a no-op\nscan. If `included_schemas` is not set, all schemas are scanned.", + "description": "Schemas to include in the scan, each named relative to the parent catalog.\nIf specified, only listed schemas will be scanned.\nMutually exclusive with `excluded_schemas`: only one may be set per request.\nIf neither `included_schemas` nor `excluded_schemas` is set, all schemas are scanned.", "ref": "dataclassification.CatalogConfigSchemaNames", "launch_stage": "PUBLIC_BETA", "behaviors": [ @@ -21237,6 +21527,7 @@ "description": "Wrapper message for a list of schema names.", "fields": { "names": { + "description": "Schema names, each relative to the parent catalog. Must not be empty.", "launch_stage": "PUBLIC_BETA" } } @@ -21752,7 +22043,7 @@ "launch_stage": "PUBLIC_PREVIEW" }, "object_type": { - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "launch_stage": "PUBLIC_PREVIEW" }, "refresh_id": { @@ -21963,8 +22254,11 @@ ] }, "etag": { - "description": "Opaque version string for optimistic locking. Server-generated, returned in responses.\nMust be provided on Update requests to prevent concurrent modifications.", - "launch_stage": "PUBLIC_PREVIEW" + "description": "Opaque version string for optimistic locking. Server-generated and returned in responses.", + "launch_stage": "PUBLIC_PREVIEW", + "behaviors": [ + "OUTPUT_ONLY" + ] }, "initial_primary_region": { "description": "Initial primary region. Used only in Create requests to set the starting\nprimary region. Not returned in responses.", @@ -22163,7 +22457,7 @@ ] }, "url": { - "description": "The stable URL endpoint. Generated on creation and\nimmutable thereafter. For non-Private-Link workspaces this is\n`https://\u003cspog_host\u003e/?c=\u003cconnection_id\u003e`. For Private-Link workspaces\nthis is the per-connection hostname.", + "description": "The stable URL endpoint. Generated on creation and\nimmutable thereafter. For non-Private-Link workspaces this is\n`https://\u003cspog_host\u003e/?w=\u003cconnection_id\u003e`. For Private-Link workspaces\nthis is the per-connection hostname.", "launch_stage": "PUBLIC_PREVIEW", "behaviors": [ "IMMUTABLE", @@ -22203,6 +22497,13 @@ }, "disasterrecovery.UpdateFailoverGroupRequest": { "fields": { + "etag": { + "description": "Optional opaque version string for optimistic locking, obtained from a prior read of\nthe failover group. If provided, the update is rejected unless it matches the failover\ngroup's current etag. If omitted, the update proceeds without an optimistic-lock check.", + "launch_stage": "PUBLIC_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + }, "failover_group": { "description": "The failover group with updated fields. The name field identifies the resource\nand is populated from the URL path.", "ref": "disasterrecovery.FailoverGroup", @@ -22222,7 +22523,7 @@ "launch_stage": "PUBLIC_PREVIEW" }, "replicate_workspace_assets": { - "description": "Whether to enable control plane DR (notebooks, jobs, clusters, etc.) for this set.", + "description": "Whether to enable control plane DR (notebooks, jobs, clusters, etc.) for this set.\nDefaults to false.", "launch_stage": "PUBLIC_PREVIEW", "behaviors": [ "OPTIONAL" @@ -22320,6 +22621,25 @@ } }, "environments.DeleteWorkspaceBaseEnvironmentRequest": {}, + "environments.EnvironmentSpec": { + "description": "Environment specification for a WorkspaceBaseEnvironment.\nContains the environment version and dependencies configuration.", + "fields": { + "dependencies": { + "description": "List of pip dependencies, as supported by the version of pip in this environment.\nEach dependency is a valid pip requirements file line per https://pip.pypa.io/en/stable/reference/requirements-file-format/.\nAllowed dependencies include a requirement specifier, an archive URL, a local project path (such as WSFS or UC Volumes in Databricks), or a VCS project URL.", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OPTIONAL" + ] + }, + "environment_version": { + "description": "Environment version used by the environment.\nEach version comes with a specific Python version and a set of Python packages.\nThe version is a string, consisting of an integer.", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OPTIONAL" + ] + } + } + }, "environments.ErrorCode": { "description": "Error codes returned by Databricks APIs to indicate specific failure conditions.", "enum": [ @@ -22635,6 +22955,14 @@ "description": "The resource name of the workspace base environment.\nFormat: workspace-base-environments/{workspace-base-environment}", "launch_stage": "GA" }, + "spec": { + "description": "The environment specification containing version and dependencies.", + "ref": "environments.EnvironmentSpec", + "launch_stage": "PUBLIC_BETA", + "behaviors": [ + "OUTPUT_ONLY" + ] + }, "status": { "description": "The status of the materialized workspace base environment.", "ref": "environments.WorkspaceBaseEnvironmentCacheStatus", @@ -25254,6 +25582,59 @@ "USER_PERMISSION": "PUBLIC_BETA" } }, + "jobs.AiRuntimeTask": { + "description": "AiRuntimeTask: multi-node GPU compute task definition for Databricks AI\nRuntime workloads.\n\nJobs-framework-level concepts (retries, per-task timeout, idempotency\ntoken, usage/budget policy, permissions) live on the surrounding\nTaskSettings / run-submit request and are intentionally NOT duplicated\nhere. Users compose `ai_runtime_task` with the standard Jobs/DABs task\nwrapper to get those.", + "fields": { + "code_source_path": { + "description": "Optional workspace or UC volume path of the uploaded code-source\narchive. The CLI packages the user's local code directory into an\narchive and populates this. Customers calling the Jobs API directly\nshould upload their archive to the workspace or a UC volume first and\nsupply the resulting path here.\n\nWhen set, the training node exposes the value via the `$CODE_SOURCE`\nenvironment variable.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + }, + "deployments": { + "description": "Deployment specs for this task. Exactly one deployment is currently\nsupported (a single entry where every node runs the same command); this\nis a current-Preview constraint. Role-split workloads (driver + worker,\nparameter server, separate eval node, etc.) with multiple entries are the\neventual intent but not yet supported.", + "launch_stage": "PRIVATE_PREVIEW" + }, + "experiment": { + "description": "MLflow experiment name for this run. If an experiment with this name\nalready exists under the calling user, the run is appended to it;\notherwise a new experiment is created. To target a specific MLflow\nstorage location (for example, when running as a service principal), set\n`mlflow_experiment_directory`.", + "launch_stage": "PRIVATE_PREVIEW" + }, + "mlflow_experiment_directory": { + "description": "Optional workspace directory under which the MLflow experiment named in\n`experiment` is created. Must start with `/Workspace`. Set this when\nrunning as a service principal that has no default user directory; for\nregular users the experiment defaults to the user's home directory.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + }, + "mlflow_run": { + "description": "Optional display name for the MLflow run created under `experiment`. If\nomitted, MLflow generates a default name.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + } + } + }, + "jobs.AiRuntimeTaskOutput": { + "description": "AiRuntimeTaskOutput: output identifiers for an AiRuntimeTask run — the\nMLflow experiment and run IDs the task wrote to.\n\nRun lifecycle and termination status are not on this message; they live\non the surrounding `RunTask.status` field (see `runs.proto:RunTask.status`).", + "fields": { + "mlflow_experiment_id": { + "description": "MLflow experiment ID the run was logged to. Use it to look up the\nexperiment in MLflow APIs or the workspace MLflow UI.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OUTPUT_ONLY" + ] + }, + "mlflow_run_id": { + "description": "MLflow run ID for this task execution. Use it to look up the run in\nMLflow APIs or the workspace MLflow UI.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OUTPUT_ONLY" + ] + } + } + }, "jobs.AlertEvaluationState": { "description": "Same alert evaluation state as in redash-v2/api/proto/alertsv2/alerts.proto", "enum": [ @@ -25711,6 +26092,33 @@ } } }, + "jobs.ComputeSpec": { + "description": "ComputeSpec: compute configuration — accelerator type and total\naccelerator count across all nodes.", + "fields": { + "accelerator_count": { + "description": "Total number of accelerators across all nodes. Must be a positive\nmultiple of the per-node accelerator count encoded in `accelerator_type`.\nFor example, `GPU_8xH100` with `accelerator_count: 16` allocates 2 nodes\n(8 GPUs per node).", + "launch_stage": "PRIVATE_PREVIEW" + }, + "accelerator_type": { + "description": "Hardware accelerator type (for example, `GPU_1xA10` or `GPU_8xH100`).\nThe number of accelerators per node is encoded in the enum value —\n`GPU_8xH100` means 8 H100 GPUs per node.", + "ref": "jobs.ComputeSpecAcceleratorType", + "launch_stage": "PRIVATE_PREVIEW" + } + } + }, + "jobs.ComputeSpecAcceleratorType": { + "description": "Customer-facing AcceleratorType: hardware accelerator type for the\nAiRuntime workload. Per-node accelerator count is encoded in the value\nname (e.g. `GPU_8xH100` means 8 H100s per node).", + "enum": [ + "GPU_1xA10", + "GPU_1xH100", + "GPU_8xH100" + ], + "enum_launch_stages": { + "GPU_1xA10": "PRIVATE_PREVIEW", + "GPU_1xH100": "PRIVATE_PREVIEW", + "GPU_8xH100": "PRIVATE_PREVIEW" + } + }, "jobs.Condition": { "enum": [ "ANY_UPDATED", @@ -26153,6 +26561,27 @@ } } }, + "jobs.DeploymentSpec": { + "description": "DeploymentSpec: configuration for one deployment within an AiRuntimeTask.\nEach entry in `AiRuntimeTask.deployments` describes a group of nodes that\nshare the same command and compute. Many single-program training\nalgorithms use a single entry where every node runs the same command;\nrole-split workloads (driver + worker, parameter server, separate eval\nnode, etc.) use multiple entries.", + "fields": { + "command_path": { + "description": "Workspace path of the bash script to execute on each node in this\ndeployment. The CLI uploads the user's script and populates this.\nCustomers calling the Jobs API directly should upload their script to\nthe workspace first and supply the resulting path here.", + "launch_stage": "PRIVATE_PREVIEW" + }, + "compute": { + "description": "Compute resources allocated to each node in this deployment.", + "ref": "jobs.ComputeSpec", + "launch_stage": "PRIVATE_PREVIEW" + }, + "name": { + "description": "Optional human-readable name for this deployment (for example, `driver`,\n`worker`, `param_server`). Used for log and UI display. Distinct names\nare recommended so deployments can be told apart, but uniqueness is not\nenforced.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + } + } + }, "jobs.EnforcePolicyComplianceForJobResponseJobClusterSettingsChange": { "description": "Represents a change to the job cluster's settings that would be required for the\njob clusters to become compliant with their policies.", "fields": { @@ -27757,6 +28186,11 @@ }, "jobs.ResolvedValues": { "fields": { + "ai_runtime_task": { + "description": "Resolved values for an AI Runtime task — env_vars with\n`{{tasks.\u003ckey\u003e.values.\u003cname\u003e}}` references substituted to concrete\nvalues before submission to the training service.", + "ref": "jobs.ResolvedValuesAiRuntimeTaskResolvedValues", + "launch_stage": "PRIVATE_PREVIEW" + }, "condition_task": { "ref": "jobs.ResolvedConditionTaskValues", "launch_stage": "GA" @@ -27803,6 +28237,9 @@ } } }, + "jobs.ResolvedValuesAiRuntimeTaskResolvedValues": { + "description": "Resolved env_vars for an AiRuntimeTask after dynamic-value substitution.\nMirrors the task's `resolved_parameters_field` (env_vars) so Jobs can\nexpand `{{tasks.\u003ckey\u003e.values.\u003cname\u003e}}` references before submission." + }, "jobs.Run": { "description": "Run was retrieved successfully", "fields": { @@ -28236,6 +28673,11 @@ "jobs.RunOutput": { "description": "Run output was retrieved successfully.", "fields": { + "ai_runtime_task_output": { + "description": "The output of an AiRuntimeTask, if available — MLflow identifiers,\nartifact paths, and per-replica allocated compute. Run lifecycle /\ntermination status lives on the surrounding framework `RunTask.status`\n(`runs.proto:RunTask.status` of type `RunStatus`), not on this output.\nSee `tasks/genai/ai_runtime_task.proto:AiRuntimeTaskOutput`.", + "ref": "jobs.AiRuntimeTaskOutput", + "launch_stage": "PRIVATE_PREVIEW" + }, "alert_output": { "description": "The output of an alert task, if available", "ref": "jobs.AlertTaskOutput", @@ -28438,6 +28880,11 @@ "jobs.RunTask": { "description": "Used when outputting a child run, in GetRun or ListRuns.", "fields": { + "ai_runtime_task": { + "description": "The task runs a multi-node GPU compute workload on Databricks AI Runtime.\nExternal-facing surface; mirrors the AIR CLI (fka SGCLI) v2 YAML schema.", + "ref": "jobs.AiRuntimeTask", + "launch_stage": "PRIVATE_PREVIEW" + }, "alert_task": { "description": "The task evaluates a Databricks alert and sends notifications to subscribers\nwhen the `alert_task` field is present.", "ref": "jobs.AlertTask", @@ -29139,6 +29586,11 @@ }, "jobs.SubmitTask": { "fields": { + "ai_runtime_task": { + "description": "The task runs a multi-node GPU compute workload on Databricks AI Runtime.\nExternal-facing surface; mirrors the AIR CLI (fka SGCLI) v2 YAML schema.", + "ref": "jobs.AiRuntimeTask", + "launch_stage": "PRIVATE_PREVIEW" + }, "alert_task": { "description": "The task evaluates a Databricks alert and sends notifications to subscribers\nwhen the `alert_task` field is present.", "ref": "jobs.AlertTask", @@ -29398,6 +29850,11 @@ }, "jobs.Task": { "fields": { + "ai_runtime_task": { + "description": "The task runs a multi-node GPU compute workload on Databricks AI Runtime.\nExternal-facing surface; mirrors the AIR CLI (fka SGCLI) v2 YAML schema.", + "ref": "jobs.AiRuntimeTask", + "launch_stage": "PRIVATE_PREVIEW" + }, "alert_task": { "description": "The task evaluates a Databricks alert and sends notifications to subscribers\nwhen the `alert_task` field is present.", "ref": "jobs.AlertTask", @@ -39958,7 +40415,7 @@ }, "environment_version": { "description": "The environment version of the serverless Python environment used to execute\ncustomer Python code. Each environment version includes a specific Python\nversion and a curated set of pre-installed libraries with defined versions,\nproviding a stable and reproducible execution environment.\n\nDatabricks supports a three-year lifecycle for each environment version.\nFor available versions and their included packages, see\nhttps://docs.databricks.com/aws/en/release-notes/serverless/environment-version/\n\nThe value should be a string representing the environment version number, for example: `\"4\"`.", - "launch_stage": "PRIVATE_PREVIEW" + "launch_stage": "PUBLIC_BETA" } } }, @@ -41091,6 +41548,14 @@ "behaviors": [ "OPTIONAL" ] + }, + "replace_existing": { + "description": "If true, update the database if it already exists instead of returning an\nerror.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "INPUT_ONLY", + "OPTIONAL" + ] } } }, @@ -41130,6 +41595,14 @@ }, "postgres.CreateRoleRequest": { "fields": { + "replace_existing": { + "description": "If true, update the role if it already exists instead of returning an\nerror.\n\nWhen the role already exists, the provided `role` spec fully replaces the\nexisting one: `membership_roles` is overwritten, not merged. Leaving\n`membership_roles` empty clears all of the role's existing memberships,\nincluding `DATABRICKS_SUPERUSER`. Always send the complete desired list of\nmemberships when using this field.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "INPUT_ONLY", + "OPTIONAL" + ] + }, "role": { "description": "The desired specification of a Role.", "ref": "postgres.Role", @@ -42032,9 +42505,35 @@ "postgres.GetProjectRequest": {}, "postgres.GetRoleRequest": {}, "postgres.GetSyncedTableRequest": {}, + "postgres.InitialBranchSpec": { + "description": "Configuration for the initial default branch created during project creation.", + "fields": { + "is_protected": { + "description": "Whether the initial default branch should be protected from deletion.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + } + } + }, "postgres.InitialEndpointSpec": { "description": "Configuration for the initial Read/Write endpoint created during project creation.", "fields": { + "autoscaling_limit_max_cu": { + "description": "The maximum number of Compute Units for the initial endpoint.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + }, + "autoscaling_limit_min_cu": { + "description": "The minimum number of Compute Units for the initial endpoint.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + }, "group": { "description": "Settings for HA configuration of the endpoint.", "ref": "postgres.EndpointGroupSpec", @@ -42042,6 +42541,20 @@ "behaviors": [ "OPTIONAL" ] + }, + "no_suspension": { + "description": "When set to true, explicitly disables automatic suspension (never suspend).\nShould be set to true when provided.\nMutually exclusive with `suspend_timeout_duration`.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] + }, + "suspend_timeout_duration": { + "description": "Duration of inactivity after which the initial endpoint is automatically suspended.\nIf specified, should be between 60s and 604800s (1 minute to 1 week).\nMutually exclusive with `no_suspension`.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OPTIONAL" + ] } } }, @@ -42293,6 +42806,15 @@ "OUTPUT_ONLY" ] }, + "initial_branch_spec": { + "description": "Configuration for the initial default branch created as part of project creation.\nAllows overriding branch protection. These settings only apply at creation time\nand do not affect resources created after project creation.", + "ref": "postgres.InitialBranchSpec", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "INPUT_ONLY", + "OPTIONAL" + ] + }, "initial_endpoint_spec": { "description": "Configuration settings for the initial Read/Write endpoint created inside the initial branch for a newly\ncreated project. If omitted, the initial endpoint created will have default settings, without high availability\nconfigured. This field does not apply to any endpoints created after project creation. Use\nspec.default_endpoint_settings to configure default settings for endpoints created after project creation.", "ref": "postgres.InitialEndpointSpec", @@ -42483,6 +43005,13 @@ "OUTPUT_ONLY" ] }, + "compute_last_active_time": { + "description": "The most recent time when any endpoint of this project was active.", + "launch_stage": "PRIVATE_PREVIEW", + "behaviors": [ + "OUTPUT_ONLY" + ] + }, "custom_tags": { "description": "The effective custom tags associated with the project.", "launch_stage": "PUBLIC_BETA", @@ -44971,6 +45500,11 @@ "tags": { "description": "Tags to be attached to the serving endpoint and automatically propagated to billing logs.", "launch_stage": "GA" + }, + "telemetry_config": { + "description": "Configuration for persisting endpoint telemetry (logs, traces, and metrics) to Unity Catalog tables.", + "ref": "serving.TelemetryConfig", + "launch_stage": "PUBLIC_PREVIEW" } } }, @@ -46249,6 +46783,11 @@ "description": "The task type of the serving endpoint.", "launch_stage": "GA" }, + "telemetry_config": { + "description": "Telemetry configuration for the endpoint, including inference-table payload logging.", + "ref": "serving.TelemetryConfig", + "launch_stage": "PUBLIC_PREVIEW" + }, "usage_policy_id": { "description": "The usage policy associated with serving endpoint.", "launch_stage": "GA" @@ -46379,6 +46918,11 @@ "task": { "description": "The task type of the serving endpoint.", "launch_stage": "GA" + }, + "telemetry_config": { + "description": "Telemetry configuration for the endpoint, including inference-table payload logging.", + "ref": "serving.TelemetryConfig", + "launch_stage": "PUBLIC_PREVIEW" } } }, @@ -46466,6 +47010,31 @@ "MULTIGPU_MEDIUM": "GA" } }, + "serving.TelemetryConfig": { + "fields": { + "inference_table_config": { + "description": "Configuration for inference table payload logging, including sampling.", + "ref": "serving.TelemetryInferenceTableConfig", + "launch_stage": "PUBLIC_PREVIEW" + } + } + }, + "serving.TelemetryInferenceTableConfig": { + "description": "Inference table payload logging configuration", + "fields": { + "name": { + "description": "The full name of the inference table created for this endpoint.", + "launch_stage": "PUBLIC_PREVIEW", + "behaviors": [ + "OUTPUT_ONLY" + ] + }, + "sampling_fraction": { + "description": "Fraction of requests sampled for payload logging, in the range [0.0, 1.0], where 1.0 logs all requests.", + "launch_stage": "PUBLIC_PREVIEW" + } + } + }, "serving.TrafficConfig": { "fields": { "routes": { @@ -48986,6 +49555,7 @@ "fields": { "cidr_blocks": { "description": "The list of stable IP CIDR blocks from which Databricks network traffic originates when accessing your resources.", + "deprecated": true, "launch_stage": "GA" } } @@ -49070,14 +49640,17 @@ "fields": { "subnets": { "description": "The list of subnets from which Databricks network traffic originates when accessing your Azure resources.", + "deprecated": true, "launch_stage": "GA" }, "target_region": { "description": "The Azure region in which this service endpoint rule applies..", + "deprecated": true, "launch_stage": "GA" }, "target_services": { "description": "The Azure services to which this service endpoint rule applies to.", + "deprecated": true, "launch_stage": "GA" } } @@ -49101,10 +49674,12 @@ "fields": { "aws_stable_ip_rule": { "ref": "settings.NccAwsStableIpRule", + "deprecated": true, "launch_stage": "GA" }, "azure_service_endpoint_rule": { "ref": "settings.NccAzureServiceEndpointRule", + "deprecated": true, "launch_stage": "GA" } } @@ -61730,10 +62305,11 @@ "package": { "name": "aisearch" }, - "is_hidden_cli": true, "docs_group": "aisearch", - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "list": { "request": { "pascal_name": "ListEndpointsRequest" @@ -61747,10 +62323,11 @@ "path": "/api/2.0/ai-search/{parent=workspaces/*}/endpoints", "can_use_json": true, "is_crud_create": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "CreateEndpointRequest", "is_object": true, @@ -62163,10 +62740,11 @@ "path": "/api/2.0/ai-search/{parent=workspaces/*/endpoints/*}/indexes", "can_use_json": true, "is_crud_create": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "CreateIndexRequest", "is_object": true, @@ -62575,10 +63153,11 @@ "description": "Delete an AI Search endpoint.", "summary": "Delete an AI Search endpoint.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*}", - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "DeleteEndpointRequest", "is_object": true, @@ -62636,10 +63215,11 @@ "description": "Delete an AI Search index.", "summary": "Delete an AI Search index.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}", - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "DeleteIndexRequest", "is_object": true, @@ -62698,10 +63278,11 @@ "summary": "Get an AI Search endpoint.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*}", "is_crud_read": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "GetEndpointRequest", "is_object": true, @@ -62800,10 +63381,11 @@ "summary": "Get an AI Search index.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}", "is_crud_read": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "GetIndexRequest", "is_object": true, @@ -62919,10 +63501,11 @@ "description": "List AI Search endpoints in a workspace.", "summary": "List AI Search endpoints.", "path": "/api/2.0/ai-search/{parent=workspaces/*}/endpoints", - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "ListEndpointsRequest", "is_object": true, @@ -63009,10 +63592,11 @@ "description": "List AI Search indexes on an endpoint.", "summary": "List AI Search indexes.", "path": "/api/2.0/ai-search/{parent=workspaces/*/endpoints/*}/indexes", - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "ListIndexesRequest", "is_object": true, @@ -63101,10 +63685,11 @@ "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}:query", "can_use_json": true, "must_use_json": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "QueryIndexRequest", "is_object": true, @@ -63309,10 +63894,11 @@ "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}:removeData", "can_use_json": true, "must_use_json": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "RemoveDataRequest", "is_object": true, @@ -63411,10 +63997,11 @@ "summary": "Scan an AI Search index.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}:scan", "can_use_json": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "ScanIndexRequest", "is_object": true, @@ -63489,10 +64076,11 @@ "description": "Synchronize a Delta Sync AI Search index with its source Delta table. Applies only to\nDelta Sync indexes; Direct Access indexes are written via the data-plane upsert path.", "summary": "Synchronize an AI Search index.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}:sync", - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "SyncIndexRequest", "is_object": true, @@ -63552,10 +64140,11 @@ "summary": "Update an AI Search endpoint.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*}", "can_use_json": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "UpdateEndpointRequest", "is_object": true, @@ -63996,10 +64585,11 @@ "summary": "Upsert data into an AI Search index.", "path": "/api/2.0/ai-search/{name=workspaces/*/endpoints/*/indexes/*}:upsertData", "can_use_json": true, - "is_hidden_cli": true, "has_required_positional_arguments": true, - "launch_stage": "PRIVATE_PREVIEW", - "cli_launch_stage_display": "Private Preview", + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", "request": { "pascal_name": "UpsertDataRequest", "is_object": true, @@ -67046,6 +67636,9 @@ }, { "content": "MEDIUM" + }, + { + "content": "XLARGE" } ] } @@ -69477,6 +70070,9 @@ }, { "content": "MEDIUM" + }, + { + "content": "XLARGE" } ] } @@ -73582,7 +74178,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -73639,7 +74235,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -73702,7 +74298,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -73759,7 +74355,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -73827,7 +74423,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -73884,7 +74480,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -73970,7 +74566,7 @@ }, { "name": "error_message", - "description": "Error message if the operation failed. Set when status is\nOPERATION_STATUS_FAILED. Captures the error encountered while\napplying the resource to the workspace.", + "description": "Error message if the operation failed. Set when status is\nOPERATION_STATUS_FAILED. Captures the error encountered while applying the\nresource to the workspace. Mutable: may be updated after creation via\nUpdateOperation; setting it to an empty string clears it. After an update\nis applied, an operation whose status is OPERATION_STATUS_SUCCEEDED cannot\ncarry an error_message.", "is_request_body_field": true, "entity": { "is_string": true @@ -73987,7 +74583,7 @@ }, { "name": "resource_id", - "description": "ID of the actual resource in the workspace (e.g. the job ID, pipeline ID).\nRequired for every operation except CREATE and RECREATE, which produce a\nnew resource whose ID is not yet known when the operation is recorded.", + "description": "ID of the actual resource in the workspace (e.g. the job ID, pipeline ID).\nOptional at creation: CREATE and RECREATE operations produce a new resource\nwhose ID is not yet known when the operation is recorded. Mutable: may be\nfilled in (or corrected) later via UpdateOperation once the ID is known.", "is_request_body_field": true, "entity": { "is_string": true @@ -74083,14 +74679,14 @@ }, { "name": "state", - "description": "Serialized local config state after the operation.\nShould be unset for delete operations.", + "description": "Serialized local config state after the operation. Should be unset for\ndelete operations. Mutable: may be updated after creation via\nUpdateOperation. When updating, the caller must echo the last-observed\n`sequence_id` as a concurrency precondition.", "is_request_body_field": true, "is_optional_object": true, "entity": {} }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -74120,7 +74716,7 @@ }, { "name": "CreateVersion", - "description": "Creates a new version under a deployment.\n\nCreating a version acquires an exclusive lock on the deployment,\npreventing concurrent deploys. The caller provides a `version_id`\nwhich the server validates equals `last_version_id + 1` on the\ndeployment.", + "description": "Creates a new version under a deployment.\n\nCreating a version acquires an exclusive lock on the deployment,\npreventing concurrent deploys. The caller provides a `version_id`,\na numeric string that must be numerically greater than the\ndeployment's most recent version, and sets the version's\n`previous_version_id` to the deployment's most recent version\n(leaving it unset for the first version), which the server validates\nto detect concurrent deploys.", "summary": "Create a version.", "path": "/api/2.0/bundle/{parent=deployments/*}/versions", "can_use_json": true, @@ -74155,7 +74751,7 @@ }, { "name": "version_id", - "description": "The version ID the caller expects to create. The server validates\nthis equals `last_version_id + 1` on the deployment. If it doesn't\nmatch, the server returns `ABORTED`.", + "description": "The ID to use for the version, which becomes the final component of\nthe version's resource name. A numeric string (base-10, fits in a\nsigned 64-bit integer) chosen by the caller; must be greater than or\nequal to 1. Must be numerically greater than the deployment's\nmost recent version (see `version.previous_version_id`); it does not\nneed to start at 1 or increase by exactly 1. If the value is not\nnumerically greater, the server returns `INVALID_PARAMETER_VALUE`.", "required": true, "is_query": true, "entity": { @@ -74175,7 +74771,7 @@ }, { "name": "version_id", - "description": "The version ID the caller expects to create. The server validates\nthis equals `last_version_id + 1` on the deployment. If it doesn't\nmatch, the server returns `ABORTED`.", + "description": "The ID to use for the version, which becomes the final component of\nthe version's resource name. A numeric string (base-10, fits in a\nsigned 64-bit integer) chosen by the caller; must be greater than or\nequal to 1. Must be numerically greater than the deployment's\nmost recent version (see `version.previous_version_id`); it does not\nneed to start at 1 or increase by exactly 1. If the value is not\nnumerically greater, the server returns `INVALID_PARAMETER_VALUE`.", "required": true, "is_query": true, "entity": { @@ -74403,7 +74999,7 @@ }, { "name": "version_id", - "description": "The version ID the caller expects to create. The server validates\nthis equals `last_version_id + 1` on the deployment. If it doesn't\nmatch, the server returns `ABORTED`.", + "description": "The ID to use for the version, which becomes the final component of\nthe version's resource name. A numeric string (base-10, fits in a\nsigned 64-bit integer) chosen by the caller; must be greater than or\nequal to 1. Must be numerically greater than the deployment's\nmost recent version (see `version.previous_version_id`); it does not\nneed to start at 1 or increase by exactly 1. If the value is not\nnumerically greater, the server returns `INVALID_PARAMETER_VALUE`.", "required": true, "is_query": true, "entity": { @@ -74550,7 +75146,7 @@ }, { "name": "version_id", - "description": "Monotonically increasing version identifier within the parent\ndeployment. Assigned by the client on creation.", + "description": "Version identifier within the parent deployment, assigned by the\nclient on creation. A numeric string (base-10, fits in a signed\n64-bit integer) that is greater than or equal to 1. Version IDs are\nstrictly increasing within a deployment but are not required to\nstart at 1 or to be contiguous.", "is_output_only": true, "is_request_body_field": true, "entity": { @@ -74597,7 +75193,7 @@ }, { "name": "version_id", - "description": "The version ID the caller expects to create. The server validates\nthis equals `last_version_id + 1` on the deployment. If it doesn't\nmatch, the server returns `ABORTED`.", + "description": "The ID to use for the version, which becomes the final component of\nthe version's resource name. A numeric string (base-10, fits in a\nsigned 64-bit integer) chosen by the caller; must be greater than or\nequal to 1. Must be numerically greater than the deployment's\nmost recent version (see `version.previous_version_id`); it does not\nneed to start at 1 or increase by exactly 1. If the value is not\nnumerically greater, the server returns `INVALID_PARAMETER_VALUE`.", "required": true, "is_query": true, "entity": { @@ -74837,7 +75433,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -74894,7 +75490,7 @@ }, { "name": "status", - "description": "Whether the operation succeeded or failed.", + "description": "Whether the operation succeeded or failed. Mutable: may be updated after\ncreation via UpdateOperation, e.g. when an operation recorded as failed is\nretried and eventually succeeds. A succeeded operation cannot carry an\n`error_message`.", "required": true, "is_request_body_field": true, "entity": { @@ -75574,7 +76170,7 @@ }, { "name": "ListVersions", - "description": "Lists versions under a deployment, ordered by version_id descending\n(most recent first).", + "description": "Lists versions under a deployment, ordered numerically by\nversion_id descending (most recent first).", "summary": "List versions.", "path": "/api/2.0/bundle/{parent=deployments/*}/versions", "is_hidden_cli": true, @@ -81893,6 +82489,12 @@ { "content": "DECOMMISSION_STARTED" }, + { + "content": "DEFERRED_POLICY_ENFORCEMENT_FAILED" + }, + { + "content": "DEFERRED_POLICY_ENFORCEMENT_SCHEDULED" + }, { "content": "DID_NOT_EXPAND_DISK" }, @@ -89123,7 +89725,7 @@ }, { "name": "included_schemas", - "description": "Schemas to include in the scan. Empty list is not supported as it results in a no-op\nscan. If `included_schemas` is not set, all schemas are scanned.", + "description": "Schemas to include in the scan, each named relative to the parent catalog.\nIf specified, only listed schemas will be scanned.\nMutually exclusive with `excluded_schemas`: only one may be set per request.\nIf neither `included_schemas` nor `excluded_schemas` is set, all schemas are scanned.", "is_request_body_field": true, "is_optional_object": true, "entity": { @@ -89414,7 +90016,7 @@ }, { "name": "included_schemas", - "description": "Schemas to include in the scan. Empty list is not supported as it results in a no-op\nscan. If `included_schemas` is not set, all schemas are scanned.", + "description": "Schemas to include in the scan, each named relative to the parent catalog.\nIf specified, only listed schemas will be scanned.\nMutually exclusive with `excluded_schemas`: only one may be set per request.\nIf neither `included_schemas` nor `excluded_schemas` is set, all schemas are scanned.", "is_request_body_field": true, "is_optional_object": true, "entity": { @@ -89875,7 +90477,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_path": true, "entity": { @@ -89905,7 +90507,7 @@ "required_in_url_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_path": true, "entity": { @@ -89947,7 +90549,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -89967,7 +90569,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -89993,7 +90595,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -90013,7 +90615,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -90043,7 +90645,7 @@ }, { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_path": true, "entity": { @@ -90062,7 +90664,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -90082,7 +90684,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -90130,7 +90732,7 @@ }, { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -90211,7 +90813,7 @@ "required_positional_arguments": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_path": true, "entity": { @@ -90682,7 +91284,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -90702,7 +91304,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91433,7 +92035,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91453,7 +92055,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91479,7 +92081,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91499,7 +92101,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91548,7 +92150,7 @@ "required_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91568,7 +92170,7 @@ "required_request_body_fields": [ { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91634,7 +92236,7 @@ }, { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -91751,7 +92353,7 @@ }, { "name": "object_type", - "description": "The type of the monitored object. Can be one of the following: `schema`or `table`.", + "description": "The type of the monitored object. Can be one of the following: `schema` or `table`.", "required": true, "is_request_body_field": true, "entity": { @@ -98528,7 +99130,8 @@ }, { "name": "etag", - "description": "Opaque version string for optimistic locking. Server-generated, returned in responses.\nMust be provided on Update requests to prevent concurrent modifications.", + "description": "Opaque version string for optimistic locking. Server-generated and returned in responses.", + "is_output_only": true, "is_request_body_field": true, "entity": { "is_string": true @@ -98924,7 +99527,7 @@ }, { "name": "url", - "description": "The stable URL endpoint. Generated on creation and\nimmutable thereafter. For non-Private-Link workspaces this is\n`https://\u003cspog_host\u003e/?c=\u003cconnection_id\u003e`. For Private-Link workspaces\nthis is the per-connection hostname.", + "description": "The stable URL endpoint. Generated on creation and\nimmutable thereafter. For non-Private-Link workspaces this is\n`https://\u003cspog_host\u003e/?w=\u003cconnection_id\u003e`. For Private-Link workspaces\nthis is the per-connection hostname.", "is_output_only": true, "is_request_body_field": true, "entity": { @@ -99980,6 +100583,14 @@ ] }, "all_fields": [ + { + "name": "etag", + "description": "Optional opaque version string for optimistic locking, obtained from a prior read of\nthe failover group. If provided, the update is rejected unless it matches the failover\ngroup's current etag. If omitted, the update proceeds without an optimistic-lock check.", + "is_query": true, + "entity": { + "is_string": true + } + }, { "name": "failover_group", "description": "The failover group with updated fields. The name field identifies the resource\nand is populated from the URL path.", @@ -100102,7 +100713,8 @@ }, { "name": "etag", - "description": "Opaque version string for optimistic locking. Server-generated, returned in responses.\nMust be provided on Update requests to prevent concurrent modifications.", + "description": "Opaque version string for optimistic locking. Server-generated and returned in responses.", + "is_output_only": true, "is_request_body_field": true, "entity": { "is_string": true @@ -103522,6 +104134,17 @@ "is_string": true } }, + { + "name": "spec", + "description": "The environment specification containing version and dependencies.", + "is_output_only": true, + "is_request_body_field": true, + "is_optional_object": true, + "entity": { + "pascal_name": "EnvironmentSpec", + "is_object": true + } + }, { "name": "status", "description": "The status of the materialized workspace base environment.", @@ -104359,6 +104982,17 @@ "is_string": true } }, + { + "name": "spec", + "description": "The environment specification containing version and dependencies.", + "is_output_only": true, + "is_request_body_field": true, + "is_optional_object": true, + "entity": { + "pascal_name": "EnvironmentSpec", + "is_object": true + } + }, { "name": "status", "description": "The status of the materialized workspace base environment.", @@ -119583,6 +120217,14 @@ "is_string": true } }, + { + "name": "enable_visualization", + "description": "Enable visualization generation.", + "is_request_body_field": true, + "entity": { + "is_bool": true + } + }, { "name": "space_id", "description": "The ID associated with the Genie space where the conversation is started.", @@ -120304,6 +120946,74 @@ } ] }, + { + "name": "DownloadMessageAttachmentVisualization", + "description": "Download a rendered image of a message visualization attachment.\nThe response body is the raw PNG image, not a JSON payload.\nThis is only available if the attachment is a visualization and the message status is `COMPLETED`.", + "summary": "Download message attachment visualization.", + "path": "/api/2.0/genie/{name=spaces/*/conversations/*/messages/*/attachments/*}/download-visualization", + "is_crud_read": true, + "is_response_byte_stream": true, + "has_required_positional_arguments": true, + "launch_stage": "PUBLIC_BETA", + "cli_launch_stage_label": "*Beta*", + "cli_launch_stage_banner": "This command is in Beta and may change without notice.", + "cli_launch_stage_display": "Beta", + "request": { + "pascal_name": "DownloadMessageAttachmentVisualizationRequest", + "is_object": true, + "required_fields": [ + { + "name": "name", + "description": "The resource name of the attachment to render, in the format\n`spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}`.", + "required": true, + "is_path": true, + "entity": { + "is_string": true + } + } + ], + "required_in_url_fields": [ + { + "name": "name", + "description": "The resource name of the attachment to render, in the format\n`spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}`.", + "required": true, + "is_path": true, + "entity": { + "is_string": true + } + } + ] + }, + "response": { + "pascal_name": "DownloadMessageAttachmentVisualizationResponse", + "is_object": true + }, + "response_body_field": { + "pascal_name": "Contents" + }, + "all_fields": [ + { + "name": "name", + "description": "The resource name of the attachment to render, in the format\n`spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}`.", + "required": true, + "is_path": true, + "entity": { + "is_string": true + } + } + ], + "required_positional_arguments": [ + { + "name": "name", + "description": "The resource name of the attachment to render, in the format\n`spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}`.", + "required": true, + "is_path": true, + "entity": { + "is_string": true + } + } + ] + }, { "name": "ExecuteMessageAttachmentQuery", "description": "Execute the SQL for a message query attachment. Use this API when the query attachment has expired and needs to be re-executed.", @@ -123259,6 +123969,14 @@ "is_string": true } }, + { + "name": "enable_visualization", + "description": "Enable visualization generation.", + "is_request_body_field": true, + "entity": { + "is_bool": true + } + }, { "name": "space_id", "description": "The ID associated with the Genie space where you want to start a conversation.", @@ -136419,7 +137137,7 @@ }, { "name": "view", - "description": "`DASHBOARD_VIEW_BASIC`only includes summary metadata from the dashboard.", + "description": "`DASHBOARD_VIEW_BASIC` only includes summary metadata from the dashboard.", "is_query": true, "entity": { "pascal_name": "DashboardView", @@ -154015,9 +154733,80 @@ "launch_stage": "GA", "cli_launch_stage_display": "GA", "methods": [ + { + "name": "CancelPendingClusterEnforcement", + "description": "Cancels a pending enforcement on a cluster. After canceling the pending enforcement,\nthe cluster will no longer update on the next termination or restart.\nPending enforcements cannot be canceled when a cluster is in `TERMINATING` state.\nOnly workspace admins can cancel pending enforcements.", + "summary": "Cancel pending policy enforcement for a cluster.", + "path": "/api/2.0/policies/clusters:cancelPendingClusterEnforcement", + "can_use_json": true, + "has_required_positional_arguments": true, + "launch_stage": "GA", + "cli_launch_stage_display": "GA", + "request": { + "pascal_name": "CancelPendingClusterEnforcementRequest", + "is_object": true, + "has_required_request_body_fields": true, + "required_fields": [ + { + "name": "cluster_id", + "description": "The ID of the cluster to cancel the pending enforcement for.", + "required": true, + "is_request_body_field": true, + "entity": { + "is_string": true + } + } + ], + "required_request_body_fields": [ + { + "name": "cluster_id", + "description": "The ID of the cluster to cancel the pending enforcement for.", + "required": true, + "is_request_body_field": true, + "entity": { + "is_string": true + } + } + ] + }, + "response": { + "pascal_name": "CancelPendingClusterEnforcementResponse", + "is_object": true + }, + "all_fields": [ + { + "name": "allow_missing", + "description": "If true and no pending enforcement exists, the request will succeed but no action\nwill be taken.", + "is_request_body_field": true, + "entity": { + "is_bool": true + } + }, + { + "name": "cluster_id", + "description": "The ID of the cluster to cancel the pending enforcement for.", + "required": true, + "is_request_body_field": true, + "entity": { + "is_string": true + } + } + ], + "required_positional_arguments": [ + { + "name": "cluster_id", + "description": "The ID of the cluster to cancel the pending enforcement for.", + "required": true, + "is_request_body_field": true, + "entity": { + "is_string": true + } + } + ] + }, { "name": "EnforceCompliance", - "description": "Updates a cluster to be compliant with the current version of its policy.\nA cluster can be updated if it is in a `RUNNING` or `TERMINATED` state.\n\nIf a cluster is updated while in a `RUNNING` state, it will be restarted so that the new attributes can take effect.\n\nIf a cluster is updated while in a `TERMINATED` state, it will remain `TERMINATED`.\nThe next time the cluster is started, the new attributes will take effect.\n\nClusters created by the Databricks Jobs, SDP, or Models services cannot be enforced by this API.\nInstead, use the \"Enforce job policy compliance\" API to enforce policy compliance on jobs.", + "description": "Updates a cluster to be compliant with the current version of its policy.\n\nIf a cluster is updated while in a `TERMINATED` state, it will remain `TERMINATED`.\nThe next time the cluster is started, the new attributes will take effect.\n\nFor clusters in other states, the behavior depends on the `enforce_mode` used.\n\nClusters created by the Databricks Jobs, SDP, or Models services cannot be enforced by this API.\nInstead, use the \"Enforce job policy compliance\" API to enforce policy compliance on jobs.", "summary": "Enforce cluster policy compliance.", "path": "/api/2.0/policies/clusters/enforce-compliance", "can_use_json": true, @@ -154065,6 +154854,22 @@ "is_string": true } }, + { + "name": "enforce_mode", + "description": "Determines how changes should be made to clusters that are not in `TERMINATED` state.\n\n- `ENFORCE_IMMEDIATELY`: If the cluster is in a `RUNNING` state, it will be restarted so\nthat the new attributes can take effect. For other states aside from `TERMINATED` state,\nthe request will be rejected.\n- `WAIT_FOR_TERMINATION`: The cluster is not immediately edited. Instead, a pending enforcement\nis scheduled to update the cluster when it terminates or restarts. When this occurs,\n`enforce_result` will contain `DEFERRED`. Only workspace admins can use this mode.\n\nRegardless of the enforce mode, clusters in `TERMINATED` state are immediately edited.", + "is_request_body_field": true, + "entity": { + "pascal_name": "EnforcePolicyComplianceForClusterEnforceMode", + "enum": [ + { + "content": "ENFORCE_IMMEDIATELY" + }, + { + "content": "WAIT_FOR_TERMINATION" + } + ] + } + }, { "name": "validate_only", "description": "If set, previews the changes that would be made to a cluster\nto enforce compliance but does not update the cluster.", @@ -155322,6 +156127,14 @@ "is_string": true } }, + { + "name": "replace_existing", + "description": "If true, update the database if it already exists instead of returning an\nerror.", + "is_query": true, + "entity": { + "is_bool": true + } + }, { "name": "create_time", "description": "A timestamp indicating when the database was created.", @@ -155765,6 +156578,16 @@ "is_timestamp": true } }, + { + "name": "initial_branch_spec", + "description": "Configuration for the initial default branch created as part of project creation.\nAllows overriding branch protection. These settings only apply at creation time\nand do not affect resources created after project creation.", + "is_request_body_field": true, + "is_optional_object": true, + "entity": { + "pascal_name": "InitialBranchSpec", + "is_object": true + } + }, { "name": "initial_endpoint_spec", "description": "Configuration settings for the initial Read/Write endpoint created inside the initial branch for a newly\ncreated project. If omitted, the initial endpoint created will have default settings, without high availability\nconfigured. This field does not apply to any endpoints created after project creation. Use\nspec.default_endpoint_settings to configure default settings for endpoints created after project creation.", @@ -155950,6 +156773,14 @@ "is_string": true } }, + { + "name": "replace_existing", + "description": "If true, update the role if it already exists instead of returning an\nerror.\n\nWhen the role already exists, the provided `role` spec fully replaces the\nexisting one: `membership_roles` is overwritten, not merged. Leaving\n`membership_roles` empty clears all of the role's existing memberships,\nincluding `DATABRICKS_SUPERUSER`. Always send the complete desired list of\nmemberships when using this field.", + "is_query": true, + "entity": { + "is_bool": true + } + }, { "name": "role", "description": "The desired specification of a Role.", @@ -159114,6 +159945,16 @@ "is_timestamp": true } }, + { + "name": "initial_branch_spec", + "description": "Configuration for the initial default branch created as part of project creation.\nAllows overriding branch protection. These settings only apply at creation time\nand do not affect resources created after project creation.", + "is_request_body_field": true, + "is_optional_object": true, + "entity": { + "pascal_name": "InitialBranchSpec", + "is_object": true + } + }, { "name": "initial_endpoint_spec", "description": "Configuration settings for the initial Read/Write endpoint created inside the initial branch for a newly\ncreated project. If omitted, the initial endpoint created will have default settings, without high availability\nconfigured. This field does not apply to any endpoints created after project creation. Use\nspec.default_endpoint_settings to configure default settings for endpoints created after project creation.", @@ -176534,6 +177375,16 @@ "is_object": true } } + }, + { + "name": "telemetry_config", + "description": "Configuration for persisting endpoint telemetry (logs, traces, and metrics) to Unity Catalog tables.", + "is_request_body_field": true, + "is_optional_object": true, + "entity": { + "pascal_name": "TelemetryConfig", + "is_object": true + } } ], "required_positional_arguments": [ diff --git a/.github/workflows/tagging.yml b/.github/workflows/tagging.yml index b1a2e3f93ed..6ba5857e941 100644 --- a/.github/workflows/tagging.yml +++ b/.github/workflows/tagging.yml @@ -65,7 +65,7 @@ jobs: git config user.email "DECO-SDK-Tagging[bot]@users.noreply.github.com" - name: Install uv - uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a # v4.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - name: Run script env: @@ -81,7 +81,7 @@ jobs: - name: Upload created tags artifact if: always() - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: created-tags path: created_tags.json diff --git a/acceptance/bundle/refschema/out.fields.txt b/acceptance/bundle/refschema/out.fields.txt index 7d7b4913c9d..7f9cf9c94f5 100644 --- a/acceptance/bundle/refschema/out.fields.txt +++ b/acceptance/bundle/refschema/out.fields.txt @@ -959,6 +959,18 @@ resources.jobs.*.tags map[string]string ALL resources.jobs.*.tags.* string ALL resources.jobs.*.tasks []jobs.Task ALL resources.jobs.*.tasks[*] jobs.Task ALL +resources.jobs.*.tasks[*].ai_runtime_task *jobs.AiRuntimeTask ALL +resources.jobs.*.tasks[*].ai_runtime_task.code_source_path string ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments []jobs.DeploymentSpec ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments[*] jobs.DeploymentSpec ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].command_path string ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].compute jobs.ComputeSpec ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].compute.accelerator_count int ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].compute.accelerator_type jobs.ComputeSpecAcceleratorType ALL +resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].name string ALL +resources.jobs.*.tasks[*].ai_runtime_task.experiment string ALL +resources.jobs.*.tasks[*].ai_runtime_task.mlflow_experiment_directory string ALL +resources.jobs.*.tasks[*].ai_runtime_task.mlflow_run string ALL resources.jobs.*.tasks[*].alert_task *jobs.AlertTask ALL resources.jobs.*.tasks[*].alert_task.alert_id string ALL resources.jobs.*.tasks[*].alert_task.subscribers []jobs.AlertTaskSubscriber ALL @@ -1031,6 +1043,18 @@ resources.jobs.*.tasks[*].for_each_task *jobs.ForEachTask ALL resources.jobs.*.tasks[*].for_each_task.concurrency int ALL resources.jobs.*.tasks[*].for_each_task.inputs string ALL resources.jobs.*.tasks[*].for_each_task.task jobs.Task ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task *jobs.AiRuntimeTask ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.code_source_path string ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments []jobs.DeploymentSpec ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*] jobs.DeploymentSpec ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].command_path string ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].compute jobs.ComputeSpec ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].compute.accelerator_count int ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].compute.accelerator_type jobs.ComputeSpecAcceleratorType ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].name string ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.experiment string ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.mlflow_experiment_directory string ALL +resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.mlflow_run string ALL resources.jobs.*.tasks[*].for_each_task.task.alert_task *jobs.AlertTask ALL resources.jobs.*.tasks[*].for_each_task.task.alert_task.alert_id string ALL resources.jobs.*.tasks[*].for_each_task.task.alert_task.subscribers []jobs.AlertTaskSubscriber ALL @@ -2176,6 +2200,10 @@ resources.model_serving_endpoints.*.endpoint_details.tags[*] serving.EndpointTag resources.model_serving_endpoints.*.endpoint_details.tags[*].key string REMOTE resources.model_serving_endpoints.*.endpoint_details.tags[*].value string REMOTE resources.model_serving_endpoints.*.endpoint_details.task string REMOTE +resources.model_serving_endpoints.*.endpoint_details.telemetry_config *serving.TelemetryConfig REMOTE +resources.model_serving_endpoints.*.endpoint_details.telemetry_config.inference_table_config *serving.TelemetryInferenceTableConfig REMOTE +resources.model_serving_endpoints.*.endpoint_details.telemetry_config.inference_table_config.name string REMOTE +resources.model_serving_endpoints.*.endpoint_details.telemetry_config.inference_table_config.sampling_fraction float64 REMOTE resources.model_serving_endpoints.*.endpoint_id string REMOTE resources.model_serving_endpoints.*.id string INPUT resources.model_serving_endpoints.*.lifecycle resources.Lifecycle INPUT @@ -2192,6 +2220,10 @@ resources.model_serving_endpoints.*.tags []serving.EndpointTag ALL resources.model_serving_endpoints.*.tags[*] serving.EndpointTag ALL resources.model_serving_endpoints.*.tags[*].key string ALL resources.model_serving_endpoints.*.tags[*].value string ALL +resources.model_serving_endpoints.*.telemetry_config *serving.TelemetryConfig ALL +resources.model_serving_endpoints.*.telemetry_config.inference_table_config *serving.TelemetryInferenceTableConfig ALL +resources.model_serving_endpoints.*.telemetry_config.inference_table_config.name string ALL +resources.model_serving_endpoints.*.telemetry_config.inference_table_config.sampling_fraction float64 ALL resources.model_serving_endpoints.*.url string INPUT resources.model_serving_endpoints.*.permissions.object_id string ALL resources.model_serving_endpoints.*.permissions[*] dresources.StatePermission ALL @@ -2979,10 +3011,14 @@ resources.postgres_projects.*.enable_pg_native_login bool ALL resources.postgres_projects.*.history_retention_duration *duration.Duration ALL resources.postgres_projects.*.id string INPUT resources.postgres_projects.*.initial_endpoint_spec *postgres.InitialEndpointSpec REMOTE +resources.postgres_projects.*.initial_endpoint_spec.autoscaling_limit_max_cu float64 REMOTE +resources.postgres_projects.*.initial_endpoint_spec.autoscaling_limit_min_cu float64 REMOTE resources.postgres_projects.*.initial_endpoint_spec.group *postgres.EndpointGroupSpec REMOTE resources.postgres_projects.*.initial_endpoint_spec.group.enable_readable_secondaries bool REMOTE resources.postgres_projects.*.initial_endpoint_spec.group.max int REMOTE resources.postgres_projects.*.initial_endpoint_spec.group.min int REMOTE +resources.postgres_projects.*.initial_endpoint_spec.no_suspension bool REMOTE +resources.postgres_projects.*.initial_endpoint_spec.suspend_timeout_duration *duration.Duration REMOTE resources.postgres_projects.*.lifecycle resources.Lifecycle INPUT resources.postgres_projects.*.lifecycle.prevent_destroy bool INPUT resources.postgres_projects.*.modified_status string INPUT @@ -2994,6 +3030,7 @@ resources.postgres_projects.*.purge_time *time.Time REMOTE resources.postgres_projects.*.status *postgres.ProjectStatus REMOTE resources.postgres_projects.*.status.branch_logical_size_limit_bytes int64 REMOTE resources.postgres_projects.*.status.budget_policy_id string REMOTE +resources.postgres_projects.*.status.compute_last_active_time *time.Time REMOTE resources.postgres_projects.*.status.custom_tags []postgres.ProjectCustomTag REMOTE resources.postgres_projects.*.status.custom_tags[*] postgres.ProjectCustomTag REMOTE resources.postgres_projects.*.status.custom_tags[*].key string REMOTE diff --git a/acceptance/cmd/workspace/apps/output.txt b/acceptance/cmd/workspace/apps/output.txt index aa87cb4c3e0..5b22a4c83a1 100644 --- a/acceptance/cmd/workspace/apps/output.txt +++ b/acceptance/cmd/workspace/apps/output.txt @@ -92,7 +92,7 @@ Flags: --budget-policy-id string --compute-max-instances int Maximum number of app instances. --compute-min-instances int Minimum number of app instances. - --compute-size ComputeSize Supported values: [LARGE, MEDIUM] + --compute-size ComputeSize Supported values: [LARGE, MEDIUM, XLARGE] --description string The description of the app. -h, --help help for update --json JSON either inline JSON string or @path/to/file.json with request body (default JSON (0 bytes)) diff --git a/acceptance/help/output.txt b/acceptance/help/output.txt index c5fe67ce374..e86d8c0907e 100644 --- a/acceptance/help/output.txt +++ b/acceptance/help/output.txt @@ -39,6 +39,9 @@ Vector Search vector-search-endpoints **Endpoint**: Represents the compute resources to host AI Search indexes. vector-search-indexes **Index**: An efficient representation of your embedding vectors that supports real-time and efficient approximate nearest neighbor (ANN) search queries. +AI Search + ai-search *Beta* **AI Search Endpoint**: Represents the compute resources to host AI Search indexes. + Identity and Access Management current-user *Public Preview* This API allows retrieving information about currently authenticated user or service principal. groups Groups simplify identity management, making it easier to assign access to Databricks workspace, data, and other securable objects. diff --git a/bundle/direct/dresources/model_serving_endpoint.go b/bundle/direct/dresources/model_serving_endpoint.go index 0a6c3513741..e8a1917c2f2 100644 --- a/bundle/direct/dresources/model_serving_endpoint.go +++ b/bundle/direct/dresources/model_serving_endpoint.go @@ -101,6 +101,7 @@ func (*ResourceModelServingEndpoint) RemapState(state *ModelServingEndpointRemot Name: state.Name, RouteOptimized: state.RouteOptimized, Tags: state.Tags, + TelemetryConfig: state.TelemetryConfig, ForceSendFields: utils.FilterFields[serving.CreateServingEndpoint](state.EndpointDetails.ForceSendFields), // Rate limits are a deprecated field that are not returned by the API on GET calls. Thus we map them to nil. @@ -123,6 +124,7 @@ type ModelServingEndpointRemote struct { Name string `json:"name,omitempty"` RouteOptimized bool `json:"route_optimized,omitempty"` Tags []serving.EndpointTag `json:"tags,omitempty"` + TelemetryConfig *serving.TelemetryConfig `json:"telemetry_config,omitempty"` } func newModelServingEndpointRemote(details *serving.ServingEndpointDetailed) *ModelServingEndpointRemote { @@ -137,6 +139,7 @@ func newModelServingEndpointRemote(details *serving.ServingEndpointDetailed) *Mo Name: details.Name, RouteOptimized: details.RouteOptimized, Tags: details.Tags, + TelemetryConfig: details.TelemetryConfig, } } diff --git a/bundle/direct/dresources/postgres_database.go b/bundle/direct/dresources/postgres_database.go index 8d98606d70d..4b8e705cc0b 100644 --- a/bundle/direct/dresources/postgres_database.go +++ b/bundle/direct/dresources/postgres_database.go @@ -107,6 +107,9 @@ func (r *ResourcePostgresDatabase) DoCreate(ctx context.Context, config *Postgre UpdateTime: nil, ForceSendFields: nil, }, + // ReplaceExisting adopts an existing database with the same ID instead of + // returning ALREADY_EXISTS. Not exposed in bundle config, so always false. + ReplaceExisting: false, ForceSendFields: nil, }) if err != nil { diff --git a/bundle/direct/dresources/postgres_project.go b/bundle/direct/dresources/postgres_project.go index 02830b5d606..ae9fa51ccb1 100644 --- a/bundle/direct/dresources/postgres_project.go +++ b/bundle/direct/dresources/postgres_project.go @@ -107,6 +107,7 @@ func (r *ResourcePostgresProject) DoCreate(ctx context.Context, config *Postgres ProjectId: config.ProjectId, Project: postgres.Project{ Spec: &config.ProjectSpec, + InitialBranchSpec: nil, InitialEndpointSpec: nil, // Output-only fields. @@ -158,6 +159,7 @@ func (r *ResourcePostgresProject) DoUpdate(ctx context.Context, id string, confi waiter, err := r.client.Postgres.UpdateProject(ctx, postgres.UpdateProjectRequest{ Project: postgres.Project{ Spec: &config.ProjectSpec, + InitialBranchSpec: nil, InitialEndpointSpec: nil, // Output-only fields. diff --git a/bundle/direct/dresources/postgres_role.go b/bundle/direct/dresources/postgres_role.go index 19a6c063247..204474ef108 100644 --- a/bundle/direct/dresources/postgres_role.go +++ b/bundle/direct/dresources/postgres_role.go @@ -128,6 +128,9 @@ func (r *ResourcePostgresRole) DoCreate(ctx context.Context, config *PostgresRol UpdateTime: nil, ForceSendFields: nil, }, + // ReplaceExisting adopts an existing role with the same ID instead of + // returning ALREADY_EXISTS. Not exposed in bundle config, so always false. + ReplaceExisting: false, ForceSendFields: nil, }) if err != nil { diff --git a/bundle/direct/dresources/resources.generated.yml b/bundle/direct/dresources/resources.generated.yml index d1dab12b17d..b438a7cc47a 100644 --- a/bundle/direct/dresources/resources.generated.yml +++ b/bundle/direct/dresources/resources.generated.yml @@ -178,7 +178,11 @@ resources: # jobs: no api field behaviors - # model_serving_endpoints: no api field behaviors + model_serving_endpoints: + + ignore_remote_changes: + - field: telemetry_config.inference_table_config.name + reason: spec:output_only # models: no api field behaviors diff --git a/bundle/internal/validation/generated/enum_fields.go b/bundle/internal/validation/generated/enum_fields.go index d5f62ac45b8..c2f850fc349 100644 --- a/bundle/internal/validation/generated/enum_fields.go +++ b/bundle/internal/validation/generated/enum_fields.go @@ -22,7 +22,7 @@ var EnumFields = map[string][]string{ "resources.apps.*.active_deployment.mode": {"AUTO_SYNC", "SNAPSHOT"}, "resources.apps.*.active_deployment.status.state": {"CANCELLED", "FAILED", "IN_PROGRESS", "SUCCEEDED"}, "resources.apps.*.app_status.state": {"CRASHED", "DEPLOYING", "RUNNING", "UNAVAILABLE"}, - "resources.apps.*.compute_size": {"LARGE", "MEDIUM"}, + "resources.apps.*.compute_size": {"LARGE", "MEDIUM", "XLARGE"}, "resources.apps.*.compute_status.state": {"ACTIVE", "DELETING", "ERROR", "STARTING", "STOPPED", "STOPPING", "UPDATING"}, "resources.apps.*.pending_deployment.mode": {"AUTO_SYNC", "SNAPSHOT"}, "resources.apps.*.pending_deployment.status.state": {"CANCELLED", "FAILED", "IN_PROGRESS", "SUCCEEDED"}, @@ -64,72 +64,74 @@ var EnumFields = map[string][]string{ "resources.genie_spaces.*.permissions[*].level": {"CAN_ATTACH_TO", "CAN_BIND", "CAN_CREATE", "CAN_CREATE_APP", "CAN_EDIT", "CAN_EDIT_METADATA", "CAN_MANAGE", "CAN_MANAGE_PRODUCTION_VERSIONS", "CAN_MANAGE_RUN", "CAN_MANAGE_STAGING_VERSIONS", "CAN_MONITOR", "CAN_MONITOR_ONLY", "CAN_QUERY", "CAN_READ", "CAN_RESTART", "CAN_RUN", "CAN_USE", "CAN_VIEW", "CAN_VIEW_METADATA", "IS_OWNER"}, - "resources.jobs.*.continuous.pause_status": {"PAUSED", "UNPAUSED"}, - "resources.jobs.*.continuous.task_retry_mode": {"NEVER", "ON_FAILURE"}, - "resources.jobs.*.deployment.kind": {"BUNDLE", "SYSTEM_MANAGED"}, - "resources.jobs.*.edit_mode": {"EDITABLE", "UI_LOCKED"}, - "resources.jobs.*.format": {"MULTI_TASK", "SINGLE_TASK"}, - "resources.jobs.*.git_source.git_provider": {"awsCodeCommit", "azureDevOpsServices", "bitbucketCloud", "bitbucketServer", "gitHub", "gitHubEnterprise", "gitLab", "gitLabEnterpriseEdition"}, - "resources.jobs.*.git_source.job_source.dirty_state": {"DISCONNECTED", "NOT_SYNCED"}, - "resources.jobs.*.health.rules[*].metric": {"RUN_DURATION_SECONDS", "STREAMING_BACKLOG_BYTES", "STREAMING_BACKLOG_FILES", "STREAMING_BACKLOG_RECORDS", "STREAMING_BACKLOG_SECONDS"}, - "resources.jobs.*.health.rules[*].op": {"GREATER_THAN"}, - "resources.jobs.*.job_clusters[*].new_cluster.aws_attributes.availability": {"ON_DEMAND", "SPOT", "SPOT_WITH_FALLBACK"}, - "resources.jobs.*.job_clusters[*].new_cluster.aws_attributes.ebs_volume_type": {"GENERAL_PURPOSE_SSD", "THROUGHPUT_OPTIMIZED_HDD"}, - "resources.jobs.*.job_clusters[*].new_cluster.azure_attributes.availability": {"ON_DEMAND_AZURE", "SPOT_AZURE", "SPOT_WITH_FALLBACK_AZURE"}, - "resources.jobs.*.job_clusters[*].new_cluster.data_security_mode": {"DATA_SECURITY_MODE_AUTO", "DATA_SECURITY_MODE_DEDICATED", "DATA_SECURITY_MODE_STANDARD", "LEGACY_PASSTHROUGH", "LEGACY_SINGLE_USER", "LEGACY_SINGLE_USER_STANDARD", "LEGACY_TABLE_ACL", "NONE", "SINGLE_USER", "USER_ISOLATION"}, - "resources.jobs.*.job_clusters[*].new_cluster.gcp_attributes.availability": {"ON_DEMAND_GCP", "PREEMPTIBLE_GCP", "PREEMPTIBLE_WITH_FALLBACK_GCP"}, - "resources.jobs.*.job_clusters[*].new_cluster.gcp_attributes.confidential_compute_type": {"CONFIDENTIAL_COMPUTE_TYPE_NONE", "SEV_SNP"}, - "resources.jobs.*.job_clusters[*].new_cluster.kind": {"CLASSIC_PREVIEW"}, - "resources.jobs.*.job_clusters[*].new_cluster.runtime_engine": {"NULL", "PHOTON", "STANDARD"}, - "resources.jobs.*.performance_target": {"PERFORMANCE_OPTIMIZED", "STANDARD"}, - "resources.jobs.*.permissions[*].level": {"CAN_MANAGE", "CAN_MANAGE_RUN", "CAN_VIEW", "IS_OWNER"}, - "resources.jobs.*.schedule.pause_status": {"PAUSED", "UNPAUSED"}, - "resources.jobs.*.tasks[*].compute.hardware_accelerator": {"GPU_1xA10", "GPU_8xH100"}, - "resources.jobs.*.tasks[*].condition_task.op": {"EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "NOT_EQUAL"}, - "resources.jobs.*.tasks[*].dbt_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].for_each_task.task.compute.hardware_accelerator": {"GPU_1xA10", "GPU_8xH100"}, - "resources.jobs.*.tasks[*].for_each_task.task.condition_task.op": {"EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "NOT_EQUAL"}, - "resources.jobs.*.tasks[*].for_each_task.task.dbt_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].for_each_task.task.gen_ai_compute_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].for_each_task.task.health.rules[*].metric": {"RUN_DURATION_SECONDS", "STREAMING_BACKLOG_BYTES", "STREAMING_BACKLOG_FILES", "STREAMING_BACKLOG_RECORDS", "STREAMING_BACKLOG_SECONDS"}, - "resources.jobs.*.tasks[*].for_each_task.task.health.rules[*].op": {"GREATER_THAN"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.aws_attributes.availability": {"ON_DEMAND", "SPOT", "SPOT_WITH_FALLBACK"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.aws_attributes.ebs_volume_type": {"GENERAL_PURPOSE_SSD", "THROUGHPUT_OPTIMIZED_HDD"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.azure_attributes.availability": {"ON_DEMAND_AZURE", "SPOT_AZURE", "SPOT_WITH_FALLBACK_AZURE"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.data_security_mode": {"DATA_SECURITY_MODE_AUTO", "DATA_SECURITY_MODE_DEDICATED", "DATA_SECURITY_MODE_STANDARD", "LEGACY_PASSTHROUGH", "LEGACY_SINGLE_USER", "LEGACY_SINGLE_USER_STANDARD", "LEGACY_TABLE_ACL", "NONE", "SINGLE_USER", "USER_ISOLATION"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.gcp_attributes.availability": {"ON_DEMAND_GCP", "PREEMPTIBLE_GCP", "PREEMPTIBLE_WITH_FALLBACK_GCP"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.gcp_attributes.confidential_compute_type": {"CONFIDENTIAL_COMPUTE_TYPE_NONE", "SEV_SNP"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.kind": {"CLASSIC_PREVIEW"}, - "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.runtime_engine": {"NULL", "PHOTON", "STANDARD"}, - "resources.jobs.*.tasks[*].for_each_task.task.notebook_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].for_each_task.task.power_bi_task.power_bi_model.authentication_method": {"OAUTH", "PAT"}, - "resources.jobs.*.tasks[*].for_each_task.task.power_bi_task.power_bi_model.storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, - "resources.jobs.*.tasks[*].for_each_task.task.power_bi_task.tables[*].storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, - "resources.jobs.*.tasks[*].for_each_task.task.run_if": {"ALL_DONE", "ALL_FAILED", "ALL_SUCCESS", "AT_LEAST_ONE_FAILED", "AT_LEAST_ONE_SUCCESS", "NONE_FAILED"}, - "resources.jobs.*.tasks[*].for_each_task.task.spark_python_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].for_each_task.task.sql_task.file.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].gen_ai_compute_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].health.rules[*].metric": {"RUN_DURATION_SECONDS", "STREAMING_BACKLOG_BYTES", "STREAMING_BACKLOG_FILES", "STREAMING_BACKLOG_RECORDS", "STREAMING_BACKLOG_SECONDS"}, - "resources.jobs.*.tasks[*].health.rules[*].op": {"GREATER_THAN"}, - "resources.jobs.*.tasks[*].new_cluster.aws_attributes.availability": {"ON_DEMAND", "SPOT", "SPOT_WITH_FALLBACK"}, - "resources.jobs.*.tasks[*].new_cluster.aws_attributes.ebs_volume_type": {"GENERAL_PURPOSE_SSD", "THROUGHPUT_OPTIMIZED_HDD"}, - "resources.jobs.*.tasks[*].new_cluster.azure_attributes.availability": {"ON_DEMAND_AZURE", "SPOT_AZURE", "SPOT_WITH_FALLBACK_AZURE"}, - "resources.jobs.*.tasks[*].new_cluster.data_security_mode": {"DATA_SECURITY_MODE_AUTO", "DATA_SECURITY_MODE_DEDICATED", "DATA_SECURITY_MODE_STANDARD", "LEGACY_PASSTHROUGH", "LEGACY_SINGLE_USER", "LEGACY_SINGLE_USER_STANDARD", "LEGACY_TABLE_ACL", "NONE", "SINGLE_USER", "USER_ISOLATION"}, - "resources.jobs.*.tasks[*].new_cluster.gcp_attributes.availability": {"ON_DEMAND_GCP", "PREEMPTIBLE_GCP", "PREEMPTIBLE_WITH_FALLBACK_GCP"}, - "resources.jobs.*.tasks[*].new_cluster.gcp_attributes.confidential_compute_type": {"CONFIDENTIAL_COMPUTE_TYPE_NONE", "SEV_SNP"}, - "resources.jobs.*.tasks[*].new_cluster.kind": {"CLASSIC_PREVIEW"}, - "resources.jobs.*.tasks[*].new_cluster.runtime_engine": {"NULL", "PHOTON", "STANDARD"}, - "resources.jobs.*.tasks[*].notebook_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].power_bi_task.power_bi_model.authentication_method": {"OAUTH", "PAT"}, - "resources.jobs.*.tasks[*].power_bi_task.power_bi_model.storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, - "resources.jobs.*.tasks[*].power_bi_task.tables[*].storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, - "resources.jobs.*.tasks[*].run_if": {"ALL_DONE", "ALL_FAILED", "ALL_SUCCESS", "AT_LEAST_ONE_FAILED", "AT_LEAST_ONE_SUCCESS", "NONE_FAILED"}, - "resources.jobs.*.tasks[*].spark_python_task.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.tasks[*].sql_task.file.source": {"GIT", "WORKSPACE"}, - "resources.jobs.*.trigger.model.condition": {"MODEL_ALIAS_SET", "MODEL_CREATED", "MODEL_VERSION_READY"}, - "resources.jobs.*.trigger.pause_status": {"PAUSED", "UNPAUSED"}, - "resources.jobs.*.trigger.periodic.unit": {"DAYS", "HOURS", "WEEKS"}, - "resources.jobs.*.trigger.table_update.condition": {"ALL_UPDATED", "ANY_UPDATED"}, + "resources.jobs.*.continuous.pause_status": {"PAUSED", "UNPAUSED"}, + "resources.jobs.*.continuous.task_retry_mode": {"NEVER", "ON_FAILURE"}, + "resources.jobs.*.deployment.kind": {"BUNDLE", "SYSTEM_MANAGED"}, + "resources.jobs.*.edit_mode": {"EDITABLE", "UI_LOCKED"}, + "resources.jobs.*.format": {"MULTI_TASK", "SINGLE_TASK"}, + "resources.jobs.*.git_source.git_provider": {"awsCodeCommit", "azureDevOpsServices", "bitbucketCloud", "bitbucketServer", "gitHub", "gitHubEnterprise", "gitLab", "gitLabEnterpriseEdition"}, + "resources.jobs.*.git_source.job_source.dirty_state": {"DISCONNECTED", "NOT_SYNCED"}, + "resources.jobs.*.health.rules[*].metric": {"RUN_DURATION_SECONDS", "STREAMING_BACKLOG_BYTES", "STREAMING_BACKLOG_FILES", "STREAMING_BACKLOG_RECORDS", "STREAMING_BACKLOG_SECONDS"}, + "resources.jobs.*.health.rules[*].op": {"GREATER_THAN"}, + "resources.jobs.*.job_clusters[*].new_cluster.aws_attributes.availability": {"ON_DEMAND", "SPOT", "SPOT_WITH_FALLBACK"}, + "resources.jobs.*.job_clusters[*].new_cluster.aws_attributes.ebs_volume_type": {"GENERAL_PURPOSE_SSD", "THROUGHPUT_OPTIMIZED_HDD"}, + "resources.jobs.*.job_clusters[*].new_cluster.azure_attributes.availability": {"ON_DEMAND_AZURE", "SPOT_AZURE", "SPOT_WITH_FALLBACK_AZURE"}, + "resources.jobs.*.job_clusters[*].new_cluster.data_security_mode": {"DATA_SECURITY_MODE_AUTO", "DATA_SECURITY_MODE_DEDICATED", "DATA_SECURITY_MODE_STANDARD", "LEGACY_PASSTHROUGH", "LEGACY_SINGLE_USER", "LEGACY_SINGLE_USER_STANDARD", "LEGACY_TABLE_ACL", "NONE", "SINGLE_USER", "USER_ISOLATION"}, + "resources.jobs.*.job_clusters[*].new_cluster.gcp_attributes.availability": {"ON_DEMAND_GCP", "PREEMPTIBLE_GCP", "PREEMPTIBLE_WITH_FALLBACK_GCP"}, + "resources.jobs.*.job_clusters[*].new_cluster.gcp_attributes.confidential_compute_type": {"CONFIDENTIAL_COMPUTE_TYPE_NONE", "SEV_SNP"}, + "resources.jobs.*.job_clusters[*].new_cluster.kind": {"CLASSIC_PREVIEW"}, + "resources.jobs.*.job_clusters[*].new_cluster.runtime_engine": {"NULL", "PHOTON", "STANDARD"}, + "resources.jobs.*.performance_target": {"PERFORMANCE_OPTIMIZED", "STANDARD"}, + "resources.jobs.*.permissions[*].level": {"CAN_MANAGE", "CAN_MANAGE_RUN", "CAN_VIEW", "IS_OWNER"}, + "resources.jobs.*.schedule.pause_status": {"PAUSED", "UNPAUSED"}, + "resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].compute.accelerator_type": {"GPU_1xA10", "GPU_1xH100", "GPU_8xH100"}, + "resources.jobs.*.tasks[*].compute.hardware_accelerator": {"GPU_1xA10", "GPU_8xH100"}, + "resources.jobs.*.tasks[*].condition_task.op": {"EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "NOT_EQUAL"}, + "resources.jobs.*.tasks[*].dbt_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].compute.accelerator_type": {"GPU_1xA10", "GPU_1xH100", "GPU_8xH100"}, + "resources.jobs.*.tasks[*].for_each_task.task.compute.hardware_accelerator": {"GPU_1xA10", "GPU_8xH100"}, + "resources.jobs.*.tasks[*].for_each_task.task.condition_task.op": {"EQUAL_TO", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "LESS_THAN", "LESS_THAN_OR_EQUAL", "NOT_EQUAL"}, + "resources.jobs.*.tasks[*].for_each_task.task.dbt_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].for_each_task.task.gen_ai_compute_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].for_each_task.task.health.rules[*].metric": {"RUN_DURATION_SECONDS", "STREAMING_BACKLOG_BYTES", "STREAMING_BACKLOG_FILES", "STREAMING_BACKLOG_RECORDS", "STREAMING_BACKLOG_SECONDS"}, + "resources.jobs.*.tasks[*].for_each_task.task.health.rules[*].op": {"GREATER_THAN"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.aws_attributes.availability": {"ON_DEMAND", "SPOT", "SPOT_WITH_FALLBACK"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.aws_attributes.ebs_volume_type": {"GENERAL_PURPOSE_SSD", "THROUGHPUT_OPTIMIZED_HDD"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.azure_attributes.availability": {"ON_DEMAND_AZURE", "SPOT_AZURE", "SPOT_WITH_FALLBACK_AZURE"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.data_security_mode": {"DATA_SECURITY_MODE_AUTO", "DATA_SECURITY_MODE_DEDICATED", "DATA_SECURITY_MODE_STANDARD", "LEGACY_PASSTHROUGH", "LEGACY_SINGLE_USER", "LEGACY_SINGLE_USER_STANDARD", "LEGACY_TABLE_ACL", "NONE", "SINGLE_USER", "USER_ISOLATION"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.gcp_attributes.availability": {"ON_DEMAND_GCP", "PREEMPTIBLE_GCP", "PREEMPTIBLE_WITH_FALLBACK_GCP"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.gcp_attributes.confidential_compute_type": {"CONFIDENTIAL_COMPUTE_TYPE_NONE", "SEV_SNP"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.kind": {"CLASSIC_PREVIEW"}, + "resources.jobs.*.tasks[*].for_each_task.task.new_cluster.runtime_engine": {"NULL", "PHOTON", "STANDARD"}, + "resources.jobs.*.tasks[*].for_each_task.task.notebook_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].for_each_task.task.power_bi_task.power_bi_model.authentication_method": {"OAUTH", "PAT"}, + "resources.jobs.*.tasks[*].for_each_task.task.power_bi_task.power_bi_model.storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, + "resources.jobs.*.tasks[*].for_each_task.task.power_bi_task.tables[*].storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, + "resources.jobs.*.tasks[*].for_each_task.task.run_if": {"ALL_DONE", "ALL_FAILED", "ALL_SUCCESS", "AT_LEAST_ONE_FAILED", "AT_LEAST_ONE_SUCCESS", "NONE_FAILED"}, + "resources.jobs.*.tasks[*].for_each_task.task.spark_python_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].for_each_task.task.sql_task.file.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].gen_ai_compute_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].health.rules[*].metric": {"RUN_DURATION_SECONDS", "STREAMING_BACKLOG_BYTES", "STREAMING_BACKLOG_FILES", "STREAMING_BACKLOG_RECORDS", "STREAMING_BACKLOG_SECONDS"}, + "resources.jobs.*.tasks[*].health.rules[*].op": {"GREATER_THAN"}, + "resources.jobs.*.tasks[*].new_cluster.aws_attributes.availability": {"ON_DEMAND", "SPOT", "SPOT_WITH_FALLBACK"}, + "resources.jobs.*.tasks[*].new_cluster.aws_attributes.ebs_volume_type": {"GENERAL_PURPOSE_SSD", "THROUGHPUT_OPTIMIZED_HDD"}, + "resources.jobs.*.tasks[*].new_cluster.azure_attributes.availability": {"ON_DEMAND_AZURE", "SPOT_AZURE", "SPOT_WITH_FALLBACK_AZURE"}, + "resources.jobs.*.tasks[*].new_cluster.data_security_mode": {"DATA_SECURITY_MODE_AUTO", "DATA_SECURITY_MODE_DEDICATED", "DATA_SECURITY_MODE_STANDARD", "LEGACY_PASSTHROUGH", "LEGACY_SINGLE_USER", "LEGACY_SINGLE_USER_STANDARD", "LEGACY_TABLE_ACL", "NONE", "SINGLE_USER", "USER_ISOLATION"}, + "resources.jobs.*.tasks[*].new_cluster.gcp_attributes.availability": {"ON_DEMAND_GCP", "PREEMPTIBLE_GCP", "PREEMPTIBLE_WITH_FALLBACK_GCP"}, + "resources.jobs.*.tasks[*].new_cluster.gcp_attributes.confidential_compute_type": {"CONFIDENTIAL_COMPUTE_TYPE_NONE", "SEV_SNP"}, + "resources.jobs.*.tasks[*].new_cluster.kind": {"CLASSIC_PREVIEW"}, + "resources.jobs.*.tasks[*].new_cluster.runtime_engine": {"NULL", "PHOTON", "STANDARD"}, + "resources.jobs.*.tasks[*].notebook_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].power_bi_task.power_bi_model.authentication_method": {"OAUTH", "PAT"}, + "resources.jobs.*.tasks[*].power_bi_task.power_bi_model.storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, + "resources.jobs.*.tasks[*].power_bi_task.tables[*].storage_mode": {"DIRECT_QUERY", "DUAL", "IMPORT"}, + "resources.jobs.*.tasks[*].run_if": {"ALL_DONE", "ALL_FAILED", "ALL_SUCCESS", "AT_LEAST_ONE_FAILED", "AT_LEAST_ONE_SUCCESS", "NONE_FAILED"}, + "resources.jobs.*.tasks[*].spark_python_task.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.tasks[*].sql_task.file.source": {"GIT", "WORKSPACE"}, + "resources.jobs.*.trigger.model.condition": {"MODEL_ALIAS_SET", "MODEL_CREATED", "MODEL_VERSION_READY"}, + "resources.jobs.*.trigger.pause_status": {"PAUSED", "UNPAUSED"}, + "resources.jobs.*.trigger.periodic.unit": {"DAYS", "HOURS", "WEEKS"}, + "resources.jobs.*.trigger.table_update.condition": {"ALL_UPDATED", "ANY_UPDATED"}, "resources.model_serving_endpoints.*.ai_gateway.guardrails.input.pii.behavior": {"BLOCK", "MASK", "NONE"}, "resources.model_serving_endpoints.*.ai_gateway.guardrails.output.pii.behavior": {"BLOCK", "MASK", "NONE"}, diff --git a/bundle/internal/validation/generated/required_fields.go b/bundle/internal/validation/generated/required_fields.go index 46862290d10..3ff0ba83cdc 100644 --- a/bundle/internal/validation/generated/required_fields.go +++ b/bundle/internal/validation/generated/required_fields.go @@ -88,12 +88,18 @@ var RequiredFields = map[string][]string{ "resources.jobs.*.queue": {"enabled"}, "resources.jobs.*.schedule": {"quartz_cron_expression", "timezone_id"}, "resources.jobs.*.tasks[*]": {"task_key"}, + "resources.jobs.*.tasks[*].ai_runtime_task": {"deployments", "experiment"}, + "resources.jobs.*.tasks[*].ai_runtime_task.deployments[*]": {"command_path", "compute"}, + "resources.jobs.*.tasks[*].ai_runtime_task.deployments[*].compute": {"accelerator_count", "accelerator_type"}, "resources.jobs.*.tasks[*].clean_rooms_notebook_task": {"clean_room_name", "notebook_name"}, "resources.jobs.*.tasks[*].condition_task": {"left", "op", "right"}, "resources.jobs.*.tasks[*].dbt_task": {"commands"}, "resources.jobs.*.tasks[*].depends_on[*]": {"task_key"}, "resources.jobs.*.tasks[*].for_each_task": {"inputs", "task"}, "resources.jobs.*.tasks[*].for_each_task.task": {"task_key"}, + "resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task": {"deployments", "experiment"}, + "resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*]": {"command_path", "compute"}, + "resources.jobs.*.tasks[*].for_each_task.task.ai_runtime_task.deployments[*].compute": {"accelerator_count", "accelerator_type"}, "resources.jobs.*.tasks[*].for_each_task.task.clean_rooms_notebook_task": {"clean_room_name", "notebook_name"}, "resources.jobs.*.tasks[*].for_each_task.task.condition_task": {"left", "op", "right"}, "resources.jobs.*.tasks[*].for_each_task.task.dbt_task": {"commands"}, diff --git a/bundle/schema/jsonschema.json b/bundle/schema/jsonschema.json index 1bbbd3f7246..87154f7945f 100644 --- a/bundle/schema/jsonschema.json +++ b/bundle/schema/jsonschema.json @@ -1260,6 +1260,10 @@ "tags": { "description": "Tags to be attached to the serving endpoint and automatically propagated to billing logs.", "$ref": "#/$defs/slice/github.com/databricks/databricks-sdk-go/service/serving.EndpointTag" + }, + "telemetry_config": { + "description": "[Public Preview] Configuration for persisting endpoint telemetry (logs, traces, and metrics) to Unity Catalog tables.", + "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/serving.TelemetryConfig" } }, "additionalProperties": false, @@ -3942,7 +3946,13 @@ "type": "string", "enum": [ "MEDIUM", - "LARGE" + "LARGE", + "XLARGE" + ], + "enumDescriptions": [ + "", + "", + "[Private Preview]" ] }, { @@ -5410,7 +5420,7 @@ "oneOf": [ { "type": "object", - "description": "Config for an individual init script\nNext ID: 11", + "description": "Config for an individual init script", "properties": { "abfss": { "description": "Contains the Azure Data Lake Storage destination path", @@ -6290,6 +6300,55 @@ } ] }, + "jobs.AiRuntimeTask": { + "oneOf": [ + { + "type": "object", + "description": "AiRuntimeTask: multi-node GPU compute task definition for Databricks AI\nRuntime workloads.\n\nJobs-framework-level concepts (retries, per-task timeout, idempotency\ntoken, usage/budget policy, permissions) live on the surrounding\nTaskSettings / run-submit request and are intentionally NOT duplicated\nhere. Users compose `ai_runtime_task` with the standard Jobs/DABs task\nwrapper to get those.", + "properties": { + "code_source_path": { + "description": "[Private Preview] Optional workspace or UC volume path of the uploaded code-source\narchive. The CLI packages the user's local code directory into an\narchive and populates this. Customers calling the Jobs API directly\nshould upload their archive to the workspace or a UC volume first and\nsupply the resulting path here.\n\nWhen set, the training node exposes the value via the `$CODE_SOURCE`\nenvironment variable.", + "$ref": "#/$defs/string", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "deployments": { + "description": "[Private Preview] Deployment specs for this task. Exactly one deployment is currently\nsupported (a single entry where every node runs the same command); this\nis a current-Preview constraint. Role-split workloads (driver + worker,\nparameter server, separate eval node, etc.) with multiple entries are the\neventual intent but not yet supported.", + "$ref": "#/$defs/slice/github.com/databricks/databricks-sdk-go/service/jobs.DeploymentSpec", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "experiment": { + "description": "[Private Preview] MLflow experiment name for this run. If an experiment with this name\nalready exists under the calling user, the run is appended to it;\notherwise a new experiment is created. To target a specific MLflow\nstorage location (for example, when running as a service principal), set\n`mlflow_experiment_directory`.", + "$ref": "#/$defs/string", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "mlflow_experiment_directory": { + "description": "[Private Preview] Optional workspace directory under which the MLflow experiment named in\n`experiment` is created. Must start with `/Workspace`. Set this when\nrunning as a service principal that has no default user directory; for\nregular users the experiment defaults to the user's home directory.", + "$ref": "#/$defs/string", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "mlflow_run": { + "description": "[Private Preview] Optional display name for the MLflow run created under `experiment`. If\nomitted, MLflow generates a default name.", + "$ref": "#/$defs/string", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + } + }, + "additionalProperties": false, + "required": [ + "deployments", + "experiment" + ] + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, "jobs.AlertTask": { "oneOf": [ { @@ -6450,6 +6509,59 @@ } ] }, + "jobs.ComputeSpec": { + "oneOf": [ + { + "type": "object", + "description": "ComputeSpec: compute configuration — accelerator type and total\naccelerator count across all nodes.", + "properties": { + "accelerator_count": { + "description": "[Private Preview] Total number of accelerators across all nodes. Must be a positive\nmultiple of the per-node accelerator count encoded in `accelerator_type`.\nFor example, `GPU_8xH100` with `accelerator_count: 16` allocates 2 nodes\n(8 GPUs per node).", + "$ref": "#/$defs/int", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "accelerator_type": { + "description": "[Private Preview] Hardware accelerator type (for example, `GPU_1xA10` or `GPU_8xH100`).\nThe number of accelerators per node is encoded in the enum value —\n`GPU_8xH100` means 8 H100 GPUs per node.", + "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/jobs.ComputeSpecAcceleratorType", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + } + }, + "additionalProperties": false, + "required": [ + "accelerator_count", + "accelerator_type" + ] + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, + "jobs.ComputeSpecAcceleratorType": { + "oneOf": [ + { + "type": "string", + "description": "Customer-facing AcceleratorType: hardware accelerator type for the\nAiRuntime workload. Per-node accelerator count is encoded in the value\nname (e.g. `GPU_8xH100` means 8 H100s per node).", + "enum": [ + "GPU_1xA10", + "GPU_1xH100", + "GPU_8xH100" + ], + "enumDescriptions": [ + "[Private Preview]", + "[Private Preview]", + "[Private Preview]" + ] + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, "jobs.Condition": { "oneOf": [ { @@ -6699,6 +6811,43 @@ } ] }, + "jobs.DeploymentSpec": { + "oneOf": [ + { + "type": "object", + "description": "DeploymentSpec: configuration for one deployment within an AiRuntimeTask.\nEach entry in `AiRuntimeTask.deployments` describes a group of nodes that\nshare the same command and compute. Many single-program training\nalgorithms use a single entry where every node runs the same command;\nrole-split workloads (driver + worker, parameter server, separate eval\nnode, etc.) use multiple entries.", + "properties": { + "command_path": { + "description": "[Private Preview] Workspace path of the bash script to execute on each node in this\ndeployment. The CLI uploads the user's script and populates this.\nCustomers calling the Jobs API directly should upload their script to\nthe workspace first and supply the resulting path here.", + "$ref": "#/$defs/string", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "compute": { + "description": "[Private Preview] Compute resources allocated to each node in this deployment.", + "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/jobs.ComputeSpec", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, + "name": { + "description": "[Private Preview] Optional human-readable name for this deployment (for example, `driver`,\n`worker`, `param_server`). Used for log and UI display. Distinct names\nare recommended so deployments can be told apart, but uniqueness is not\nenforced.", + "$ref": "#/$defs/string", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + } + }, + "additionalProperties": false, + "required": [ + "command_path", + "compute" + ] + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, "jobs.FileArrivalTriggerConfiguration": { "oneOf": [ { @@ -8287,6 +8436,12 @@ { "type": "object", "properties": { + "ai_runtime_task": { + "description": "[Private Preview] The task runs a multi-node GPU compute workload on Databricks AI Runtime.\nExternal-facing surface; mirrors the AIR CLI (fka SGCLI) v2 YAML schema.", + "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/jobs.AiRuntimeTask", + "x-databricks-launch-stage": "PRIVATE_PREVIEW", + "doNotSuggest": true + }, "alert_task": { "description": "[Public Preview] The task evaluates a Databricks alert and sends notifications to subscribers\nwhen the `alert_task` field is present.", "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/jobs.AlertTask" @@ -10286,10 +10441,8 @@ "$ref": "#/$defs/slice/string" }, "environment_version": { - "description": "[Private Preview] The environment version of the serverless Python environment used to execute\ncustomer Python code. Each environment version includes a specific Python\nversion and a curated set of pre-installed libraries with defined versions,\nproviding a stable and reproducible execution environment.\n\nDatabricks supports a three-year lifecycle for each environment version.\nFor available versions and their included packages, see\nhttps://docs.databricks.com/aws/en/release-notes/serverless/environment-version/\n\nThe value should be a string representing the environment version number, for example: `\"4\"`.", - "$ref": "#/$defs/string", - "x-databricks-launch-stage": "PRIVATE_PREVIEW", - "doNotSuggest": true + "description": "[Beta] The environment version of the serverless Python environment used to execute\ncustomer Python code. Each environment version includes a specific Python\nversion and a curated set of pre-installed libraries with defined versions,\nproviding a stable and reproducible execution environment.\n\nDatabricks supports a three-year lifecycle for each environment version.\nFor available versions and their included packages, see\nhttps://docs.databricks.com/aws/en/release-notes/serverless/environment-version/\n\nThe value should be a string representing the environment version number, for example: `\"4\"`.", + "$ref": "#/$defs/string" } }, "additionalProperties": false @@ -12420,6 +12573,43 @@ } ] }, + "serving.TelemetryConfig": { + "oneOf": [ + { + "type": "object", + "properties": { + "inference_table_config": { + "description": "[Public Preview] Configuration for inference table payload logging, including sampling.", + "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/serving.TelemetryInferenceTableConfig" + } + }, + "additionalProperties": false + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, + "serving.TelemetryInferenceTableConfig": { + "oneOf": [ + { + "type": "object", + "description": "Inference table payload logging configuration", + "properties": { + "sampling_fraction": { + "description": "[Public Preview] Fraction of requests sampled for payload logging, in the range [0.0, 1.0], where 1.0 logs all requests.", + "$ref": "#/$defs/float64" + } + }, + "additionalProperties": false + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, "serving.TrafficConfig": { "oneOf": [ { @@ -14091,6 +14281,20 @@ } ] }, + "jobs.DeploymentSpec": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/$defs/github.com/databricks/databricks-sdk-go/service/jobs.DeploymentSpec" + } + }, + { + "type": "string", + "pattern": "\\$\\{(var(\\.\\p{L}+([-_]*[\\p{L}\\p{N}]+)*(\\[[0-9]+\\])*)+)\\}" + } + ] + }, "jobs.JobCluster": { "oneOf": [ { diff --git a/bundle/terraform_dabs_map/generated.go b/bundle/terraform_dabs_map/generated.go index dd974dd626e..750a8e1a856 100644 --- a/bundle/terraform_dabs_map/generated.go +++ b/bundle/terraform_dabs_map/generated.go @@ -12,8 +12,9 @@ package terraform_dabs_map // database_instances / databricks_database_instance: 1 tf-only // experiments / databricks_mlflow_experiment: 1 tf-only // jobs / databricks_job: 11 renames -// jobs / databricks_job: 10 dabs-only +// jobs / databricks_job: 32 dabs-only // jobs / databricks_job: 257 tf-only +// model_serving_endpoints / databricks_model_serving: 4 dabs-only // model_serving_endpoints / databricks_model_serving: 2 tf-only // models / databricks_mlflow_model: 1 renames // pipelines / databricks_pipeline: 3 renames @@ -129,8 +130,36 @@ var DABsOnlyFields = map[string]FieldSet{ }, }, "tasks": { + "ai_runtime_task": { + "code_source_path": {}, // jobs.*.tasks.ai_runtime_task.code_source_path + "deployments": { + "command_path": {}, // jobs.*.tasks.ai_runtime_task.deployments.command_path + "compute": { + "accelerator_count": {}, // jobs.*.tasks.ai_runtime_task.deployments.compute.accelerator_count + "accelerator_type": {}, // jobs.*.tasks.ai_runtime_task.deployments.compute.accelerator_type + }, + "name": {}, // jobs.*.tasks.ai_runtime_task.deployments.name + }, + "experiment": {}, // jobs.*.tasks.ai_runtime_task.experiment + "mlflow_experiment_directory": {}, // jobs.*.tasks.ai_runtime_task.mlflow_experiment_directory + "mlflow_run": {}, // jobs.*.tasks.ai_runtime_task.mlflow_run + }, "for_each_task": { "task": { + "ai_runtime_task": { + "code_source_path": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.code_source_path + "deployments": { + "command_path": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.deployments.command_path + "compute": { + "accelerator_count": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.deployments.compute.accelerator_count + "accelerator_type": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.deployments.compute.accelerator_type + }, + "name": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.deployments.name + }, + "experiment": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.experiment + "mlflow_experiment_directory": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.mlflow_experiment_directory + "mlflow_run": {}, // jobs.*.tasks.for_each_task.task.ai_runtime_task.mlflow_run + }, "for_each_task": { "concurrency": {}, // jobs.*.tasks.for_each_task.task.for_each_task.concurrency "inputs": {}, // jobs.*.tasks.for_each_task.task.for_each_task.inputs @@ -152,6 +181,14 @@ var DABsOnlyFields = map[string]FieldSet{ }, }, }, + "model_serving_endpoints": { + "telemetry_config": { + "inference_table_config": { + "name": {}, // model_serving_endpoints.*.telemetry_config.inference_table_config.name + "sampling_fraction": {}, // model_serving_endpoints.*.telemetry_config.inference_table_config.sampling_fraction + }, + }, + }, "pipelines": { "clusters": { "azure_attributes": { diff --git a/cmd/account/disaster-recovery/disaster-recovery.go b/cmd/account/disaster-recovery/disaster-recovery.go index e63997b417d..bbb17e2491c 100644 --- a/cmd/account/disaster-recovery/disaster-recovery.go +++ b/cmd/account/disaster-recovery/disaster-recovery.go @@ -73,7 +73,6 @@ func newCreateFailoverGroup() *cobra.Command { cmd.Flags().Var(&createFailoverGroupJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().BoolVar(&createFailoverGroupReq.ValidateOnly, "validate-only", createFailoverGroupReq.ValidateOnly, `When true, validates the request without creating the failover group.`) - cmd.Flags().StringVar(&createFailoverGroupReq.FailoverGroup.Etag, "etag", createFailoverGroupReq.FailoverGroup.Etag, `Opaque version string for optimistic locking.`) cmd.Flags().StringVar(&createFailoverGroupReq.FailoverGroup.Name, "name", createFailoverGroupReq.FailoverGroup.Name, `Fully qualified resource name in the format accounts/{account_id}/failover-groups/{failover_group_id}.`) // TODO: complex arg: unity_catalog_assets @@ -787,7 +786,7 @@ func newUpdateFailoverGroup() *cobra.Command { cmd.Flags().Var(&updateFailoverGroupJson, "json", `either inline JSON string or @path/to/file.json with request body`) - cmd.Flags().StringVar(&updateFailoverGroupReq.FailoverGroup.Etag, "etag", updateFailoverGroupReq.FailoverGroup.Etag, `Opaque version string for optimistic locking.`) + cmd.Flags().StringVar(&updateFailoverGroupReq.Etag, "etag", updateFailoverGroupReq.Etag, `Optional opaque version string for optimistic locking, obtained from a prior read of the failover group.`) cmd.Flags().StringVar(&updateFailoverGroupReq.FailoverGroup.Name, "name", updateFailoverGroupReq.FailoverGroup.Name, `Fully qualified resource name in the format accounts/{account_id}/failover-groups/{failover_group_id}.`) // TODO: complex arg: unity_catalog_assets diff --git a/cmd/workspace/ai-search/ai-search.go b/cmd/workspace/ai-search/ai-search.go index 2d5e5f9c3d0..4f332372854 100644 --- a/cmd/workspace/ai-search/ai-search.go +++ b/cmd/workspace/ai-search/ai-search.go @@ -22,20 +22,19 @@ var cmdOverrides []func(*cobra.Command) func New() *cobra.Command { cmd := &cobra.Command{ Use: "ai-search", - Short: `**AI Search Endpoint**: Represents the compute resources to host AI Search indexes.`, - Long: `**AI Search Endpoint**: Represents the compute resources to host AI Search + Short: `*Beta* **AI Search Endpoint**: Represents the compute resources to host AI Search indexes.`, + Long: `This command is in Beta and may change without notice. + +**AI Search Endpoint**: Represents the compute resources to host AI Search indexes. AIP-conformant replacement for the legacy VectorSearchEndpoints API; functionally equivalent.`, GroupID: "aisearch", - - // This service is being previewed; hide from help output. - Hidden: true, - RunE: root.ReportUnknownSubcommand, + RunE: root.ReportUnknownSubcommand, } cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" // Add methods cmd.AddCommand(newCreateEndpoint()) @@ -91,8 +90,10 @@ func newCreateEndpoint() *cobra.Command { cmd.Flags().StringVar(&createEndpointReq.Endpoint.UsagePolicyId, "usage-policy-id", createEndpointReq.Endpoint.UsagePolicyId, `The usage policy id applied to the endpoint.`) cmd.Use = "create-endpoint PARENT ENDPOINT_TYPE" - cmd.Short = `Create an AI Search endpoint.` - cmd.Long = `Create an AI Search endpoint. + cmd.Short = `*Beta* Create an AI Search endpoint.` + cmd.Long = `This command is in Beta and may change without notice. + +Create an AI Search endpoint. Create a new AI Search endpoint. @@ -103,8 +104,8 @@ func newCreateEndpoint() *cobra.Command { Supported values: [STANDARD, STORAGE_OPTIMIZED]` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { if cmd.Flags().Changed("json") { @@ -190,8 +191,10 @@ func newCreateIndex() *cobra.Command { // TODO: complex arg: status cmd.Use = "create-index PARENT PRIMARY_KEY INDEX_TYPE" - cmd.Short = `Create an AI Search index.` - cmd.Long = `Create an AI Search index. + cmd.Short = `*Beta* Create an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Create an AI Search index. Create a new AI Search index. @@ -203,8 +206,8 @@ func newCreateIndex() *cobra.Command { Supported values: [DELTA_SYNC, DIRECT_ACCESS]` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { if cmd.Flags().Changed("json") { @@ -282,16 +285,18 @@ func newDeleteEndpoint() *cobra.Command { var deleteEndpointReq aisearch.DeleteEndpointRequest cmd.Use = "delete-endpoint NAME" - cmd.Short = `Delete an AI Search endpoint.` - cmd.Long = `Delete an AI Search endpoint. + cmd.Short = `*Beta* Delete an AI Search endpoint.` + cmd.Long = `This command is in Beta and may change without notice. + +Delete an AI Search endpoint. Arguments: NAME: Full resource name of the endpoint to delete. Format: workspaces/{workspace_id}/endpoints/{endpoint_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -339,16 +344,18 @@ func newDeleteIndex() *cobra.Command { var deleteIndexReq aisearch.DeleteIndexRequest cmd.Use = "delete-index NAME" - cmd.Short = `Delete an AI Search index.` - cmd.Long = `Delete an AI Search index. + cmd.Short = `*Beta* Delete an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Delete an AI Search index. Arguments: NAME: Full resource name of the index to delete. Format: workspaces/{workspace_id}/endpoints/{endpoint_id}/indexes/{index_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -396,8 +403,10 @@ func newGetEndpoint() *cobra.Command { var getEndpointReq aisearch.GetEndpointRequest cmd.Use = "get-endpoint NAME" - cmd.Short = `Get an AI Search endpoint.` - cmd.Long = `Get an AI Search endpoint. + cmd.Short = `*Beta* Get an AI Search endpoint.` + cmd.Long = `This command is in Beta and may change without notice. + +Get an AI Search endpoint. Get details for a single AI Search endpoint. @@ -406,8 +415,8 @@ func newGetEndpoint() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -456,8 +465,10 @@ func newGetIndex() *cobra.Command { var getIndexReq aisearch.GetIndexRequest cmd.Use = "get-index NAME" - cmd.Short = `Get an AI Search index.` - cmd.Long = `Get an AI Search index. + cmd.Short = `*Beta* Get an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Get an AI Search index. Get details for a single AI Search index. @@ -466,8 +477,8 @@ func newGetIndex() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}/indexes/{index_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -529,8 +540,10 @@ func newListEndpoints() *cobra.Command { cmd.Flags().Lookup("page-token").Hidden = true cmd.Use = "list-endpoints PARENT" - cmd.Short = `List AI Search endpoints.` - cmd.Long = `List AI Search endpoints. + cmd.Short = `*Beta* List AI Search endpoints.` + cmd.Long = `This command is in Beta and may change without notice. + +List AI Search endpoints. List AI Search endpoints in a workspace. @@ -539,8 +552,8 @@ func newListEndpoints() *cobra.Command { workspaces/{workspace_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -605,8 +618,10 @@ func newListIndexes() *cobra.Command { cmd.Flags().Lookup("page-token").Hidden = true cmd.Use = "list-indexes PARENT" - cmd.Short = `List AI Search indexes.` - cmd.Long = `List AI Search indexes. + cmd.Short = `*Beta* List AI Search indexes.` + cmd.Long = `This command is in Beta and may change without notice. + +List AI Search indexes. List AI Search indexes on an endpoint. @@ -615,8 +630,8 @@ func newListIndexes() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -683,8 +698,10 @@ func newQueryIndex() *cobra.Command { // TODO: array: sort_columns cmd.Use = "query-index NAME" - cmd.Short = `Query an AI Search index.` - cmd.Long = `Query an AI Search index. + cmd.Short = `*Beta* Query an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Query an AI Search index. Query (search) an AI Search index. Read-only, so a read-scoped token may invoke it. @@ -694,8 +711,8 @@ func newQueryIndex() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}/indexes/{index_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -761,8 +778,10 @@ func newRemoveData() *cobra.Command { cmd.Flags().Var(&removeDataJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "remove-data NAME" - cmd.Short = `Remove data from an AI Search index.` - cmd.Long = `Remove data from an AI Search index. + cmd.Short = `*Beta* Remove data from an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Remove data from an AI Search index. Remove rows by primary key from a Direct Access AI Search index. @@ -771,8 +790,8 @@ func newRemoveData() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}/indexes/{index_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -841,8 +860,10 @@ func newScanIndex() *cobra.Command { cmd.Flags().StringVar(&scanIndexReq.PageToken, "page-token", scanIndexReq.PageToken, `Page token from a previous response; if unset, scanning starts from the beginning.`) cmd.Use = "scan-index NAME" - cmd.Short = `Scan an AI Search index.` - cmd.Long = `Scan an AI Search index. + cmd.Short = `*Beta* Scan an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Scan an AI Search index. Scan (paginate over) the rows of an AI Search index. @@ -851,8 +872,8 @@ func newScanIndex() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}/indexes/{index_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -913,8 +934,10 @@ func newSyncIndex() *cobra.Command { var syncIndexReq aisearch.SyncIndexRequest cmd.Use = "sync-index NAME" - cmd.Short = `Synchronize an AI Search index.` - cmd.Long = `Synchronize an AI Search index. + cmd.Short = `*Beta* Synchronize an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Synchronize an AI Search index. Synchronize a Delta Sync AI Search index with its source Delta table. Applies only to Delta Sync indexes; Direct Access indexes are written via the @@ -926,8 +949,8 @@ func newSyncIndex() *cobra.Command { workspaces/{workspace_id}/endpoints/{endpoint_id}/indexes/{index_id}` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { check := root.ExactArgs(1) @@ -990,8 +1013,10 @@ func newUpdateEndpoint() *cobra.Command { cmd.Flags().StringVar(&updateEndpointReq.Endpoint.UsagePolicyId, "usage-policy-id", updateEndpointReq.Endpoint.UsagePolicyId, `The usage policy id applied to the endpoint.`) cmd.Use = "update-endpoint NAME UPDATE_MASK ENDPOINT_TYPE" - cmd.Short = `Update an AI Search endpoint.` - cmd.Long = `Update an AI Search endpoint. + cmd.Short = `*Beta* Update an AI Search endpoint.` + cmd.Long = `This command is in Beta and may change without notice. + +Update an AI Search endpoint. Update an existing AI Search endpoint. Multi-bucket masks are supported and dispatched in deterministic bucket order: budget policy, custom tags, @@ -1010,8 +1035,8 @@ func newUpdateEndpoint() *cobra.Command { Supported values: [STANDARD, STORAGE_OPTIMIZED]` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { if cmd.Flags().Changed("json") { @@ -1093,8 +1118,10 @@ func newUpsertData() *cobra.Command { cmd.Flags().Var(&upsertDataJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Use = "upsert-data NAME INPUTS_JSON" - cmd.Short = `Upsert data into an AI Search index.` - cmd.Long = `Upsert data into an AI Search index. + cmd.Short = `*Beta* Upsert data into an AI Search index.` + cmd.Long = `This command is in Beta and may change without notice. + +Upsert data into an AI Search index. Upsert rows into a Direct Access AI Search index. @@ -1104,8 +1131,8 @@ func newUpsertData() *cobra.Command { INPUTS_JSON: JSON document describing the rows to upsert.` cmd.Annotations = make(map[string]string) - cmd.Annotations["launch_stage"] = "PRIVATE_PREVIEW" - cmd.Annotations["launch_stage_display"] = "Private Preview" + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" cmd.Args = func(cmd *cobra.Command, args []string) error { if cmd.Flags().Changed("json") { diff --git a/cmd/workspace/apps/apps.go b/cmd/workspace/apps/apps.go index 1e1a88df328..83d706f4d5d 100644 --- a/cmd/workspace/apps/apps.go +++ b/cmd/workspace/apps/apps.go @@ -100,7 +100,7 @@ func newCreate() *cobra.Command { cmd.Flags().StringVar(&createReq.App.BudgetPolicyId, "budget-policy-id", createReq.App.BudgetPolicyId, ``) cmd.Flags().IntVar(&createReq.App.ComputeMaxInstances, "compute-max-instances", createReq.App.ComputeMaxInstances, `Maximum number of app instances.`) cmd.Flags().IntVar(&createReq.App.ComputeMinInstances, "compute-min-instances", createReq.App.ComputeMinInstances, `Minimum number of app instances.`) - cmd.Flags().Var(&createReq.App.ComputeSize, "compute-size", `Supported values: [LARGE, MEDIUM]`) + cmd.Flags().Var(&createReq.App.ComputeSize, "compute-size", `Supported values: [LARGE, MEDIUM, XLARGE]`) // TODO: complex arg: compute_status cmd.Flags().StringVar(&createReq.App.Description, "description", createReq.App.Description, `The description of the app.`) // TODO: array: effective_user_api_scopes @@ -1695,7 +1695,7 @@ func newUpdate() *cobra.Command { cmd.Flags().StringVar(&updateReq.App.BudgetPolicyId, "budget-policy-id", updateReq.App.BudgetPolicyId, ``) cmd.Flags().IntVar(&updateReq.App.ComputeMaxInstances, "compute-max-instances", updateReq.App.ComputeMaxInstances, `Maximum number of app instances.`) cmd.Flags().IntVar(&updateReq.App.ComputeMinInstances, "compute-min-instances", updateReq.App.ComputeMinInstances, `Minimum number of app instances.`) - cmd.Flags().Var(&updateReq.App.ComputeSize, "compute-size", `Supported values: [LARGE, MEDIUM]`) + cmd.Flags().Var(&updateReq.App.ComputeSize, "compute-size", `Supported values: [LARGE, MEDIUM, XLARGE]`) // TODO: complex arg: compute_status cmd.Flags().StringVar(&updateReq.App.Description, "description", updateReq.App.Description, `The description of the app.`) // TODO: array: effective_user_api_scopes diff --git a/cmd/workspace/bundle-deployments/bundle-deployments.go b/cmd/workspace/bundle-deployments/bundle-deployments.go index e9afda790e7..204cf2dd738 100644 --- a/cmd/workspace/bundle-deployments/bundle-deployments.go +++ b/cmd/workspace/bundle-deployments/bundle-deployments.go @@ -364,15 +364,22 @@ func newCreateVersion() *cobra.Command { Creates a new version under a deployment. Creating a version acquires an exclusive lock on the deployment, preventing - concurrent deploys. The caller provides a version_id which the server - validates equals last_version_id + 1 on the deployment. + concurrent deploys. The caller provides a version_id, a numeric string that + must be numerically greater than the deployment's most recent version, and + sets the version's previous_version_id to the deployment's most recent + version (leaving it unset for the first version), which the server validates + to detect concurrent deploys. Arguments: PARENT: The parent deployment where this version will be created. Format: deployments/{deployment_id} - VERSION_ID: The version ID the caller expects to create. The server validates this - equals last_version_id + 1 on the deployment. If it doesn't match, the - server returns ABORTED. + VERSION_ID: The ID to use for the version, which becomes the final component of the + version's resource name. A numeric string (base-10, fits in a signed + 64-bit integer) chosen by the caller; must be greater than or equal to 1. + Must be numerically greater than the deployment's most recent version (see + version.previous_version_id); it does not need to start at 1 or increase + by exactly 1. If the value is not numerically greater, the server returns + INVALID_PARAMETER_VALUE. CLI_VERSION: CLI version used to initiate the version. VERSION_TYPE: Type of version (deploy or destroy). Supported values: [VERSION_TYPE_DEPLOY, VERSION_TYPE_DESTROY]` @@ -1063,8 +1070,8 @@ func newListVersions() *cobra.Command { cmd.Short = `List versions.` cmd.Long = `List versions. - Lists versions under a deployment, ordered by version_id descending (most - recent first). + Lists versions under a deployment, ordered numerically by version_id + descending (most recent first). Arguments: PARENT: The parent deployment. Format: deployments/{deployment_id}` diff --git a/cmd/workspace/data-quality/data-quality.go b/cmd/workspace/data-quality/data-quality.go index 47234a41df2..7d3e85a110d 100644 --- a/cmd/workspace/data-quality/data-quality.go +++ b/cmd/workspace/data-quality/data-quality.go @@ -305,7 +305,7 @@ Create a refresh. the table. Arguments: - OBJECT_TYPE: The type of the monitored object. Can be one of the following: schemaor + OBJECT_TYPE: The type of the monitored object. Can be one of the following: schema or table. OBJECT_ID: The UUID of the request object. It is schema_id for schema, and table_id for table. @@ -1096,7 +1096,7 @@ Update a refresh. [table_id]: https://docs.databricks.com/api/workspace/tables/get#table_id REFRESH_ID: Unique id of the refresh operation. UPDATE_MASK: The field mask to specify which fields to update. - OBJECT_TYPE: The type of the monitored object. Can be one of the following: schemaor + OBJECT_TYPE: The type of the monitored object. Can be one of the following: schema or table. OBJECT_ID: The UUID of the request object. It is schema_id for schema, and table_id for table. diff --git a/cmd/workspace/environments/environments.go b/cmd/workspace/environments/environments.go index 97fc52874a7..2b317a13450 100644 --- a/cmd/workspace/environments/environments.go +++ b/cmd/workspace/environments/environments.go @@ -87,6 +87,7 @@ func newCreateWorkspaceBaseEnvironment() *cobra.Command { cmd.Flags().Var(&createWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.BaseEnvironmentType, "base-environment-type", `The type of base environment (CPU or GPU). Supported values: [CPU, GPU]`) cmd.Flags().StringVar(&createWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Filepath, "filepath", createWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Filepath, `The WSFS or UC Volumes path to the environment YAML file.`) cmd.Flags().StringVar(&createWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Name, "name", createWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Name, `The resource name of the workspace base environment.`) + // TODO: complex arg: spec cmd.Use = "create-workspace-base-environment DISPLAY_NAME" cmd.Short = `Create a workspace base environment.` @@ -743,6 +744,7 @@ func newUpdateWorkspaceBaseEnvironment() *cobra.Command { cmd.Flags().Var(&updateWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.BaseEnvironmentType, "base-environment-type", `The type of base environment (CPU or GPU). Supported values: [CPU, GPU]`) cmd.Flags().StringVar(&updateWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Filepath, "filepath", updateWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Filepath, `The WSFS or UC Volumes path to the environment YAML file.`) cmd.Flags().StringVar(&updateWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Name, "name", updateWorkspaceBaseEnvironmentReq.WorkspaceBaseEnvironment.Name, `The resource name of the workspace base environment.`) + // TODO: complex arg: spec cmd.Use = "update-workspace-base-environment NAME DISPLAY_NAME" cmd.Short = `Update a workspace base environment.` diff --git a/cmd/workspace/genie/genie.go b/cmd/workspace/genie/genie.go index 57b130bb10c..ae4d9ad32ed 100644 --- a/cmd/workspace/genie/genie.go +++ b/cmd/workspace/genie/genie.go @@ -41,6 +41,7 @@ func New() *cobra.Command { cmd.AddCommand(newCreateSpace()) cmd.AddCommand(newDeleteConversation()) cmd.AddCommand(newDeleteConversationMessage()) + cmd.AddCommand(newDownloadMessageAttachmentVisualization()) cmd.AddCommand(newExecuteMessageAttachmentQuery()) cmd.AddCommand(newExecuteMessageQuery()) cmd.AddCommand(newGenerateDownloadFullQueryResult()) @@ -96,6 +97,8 @@ func newCreateMessage() *cobra.Command { cmd.Flags().Var(&createMessageJson, "json", `either inline JSON string or @path/to/file.json with request body`) + cmd.Flags().BoolVar(&createMessageReq.EnableVisualization, "enable-visualization", createMessageReq.EnableVisualization, `Enable visualization generation.`) + cmd.Use = "create-message SPACE_ID CONVERSATION_ID CONTENT" cmd.Short = `Create conversation message.` cmd.Long = `Create conversation message. @@ -488,6 +491,71 @@ func newDeleteConversationMessage() *cobra.Command { return cmd } +// start download-message-attachment-visualization command + +// Slice with functions to override default command behavior. +// Functions can be added from the `init()` function in manually curated files in this directory. +var downloadMessageAttachmentVisualizationOverrides []func( + *cobra.Command, + *dashboards.DownloadMessageAttachmentVisualizationRequest, +) + +func newDownloadMessageAttachmentVisualization() *cobra.Command { + cmd := &cobra.Command{} + + var downloadMessageAttachmentVisualizationReq dashboards.DownloadMessageAttachmentVisualizationRequest + + cmd.Use = "download-message-attachment-visualization NAME" + cmd.Short = `*Beta* Download message attachment visualization.` + cmd.Long = `This command is in Beta and may change without notice. + +Download message attachment visualization. + + Download a rendered image of a message visualization attachment. The response + body is the raw PNG image, not a JSON payload. This is only available if the + attachment is a visualization and the message status is COMPLETED. + + Arguments: + NAME: The resource name of the attachment to render, in the format + spaces/{space_id}/conversations/{conversation_id}/messages/{message_id}/attachments/{attachment_id}.` + + cmd.Annotations = make(map[string]string) + cmd.Annotations["launch_stage"] = "PUBLIC_BETA" + cmd.Annotations["launch_stage_display"] = "Beta" + + cmd.Args = func(cmd *cobra.Command, args []string) error { + check := root.ExactArgs(1) + return check(cmd, args) + } + + cmd.PreRunE = root.MustWorkspaceClient + cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { + ctx := cmd.Context() + w := cmdctx.WorkspaceClient(ctx) + + downloadMessageAttachmentVisualizationReq.Name = args[0] + + response, err := w.Genie.DownloadMessageAttachmentVisualization(ctx, downloadMessageAttachmentVisualizationReq) + if err != nil { + return err + } + + defer response.Contents.Close() + return cmdio.Render(ctx, response.Contents) + } + + // Disable completions since they are not applicable. + // Can be overridden by manual implementation in `override.go`. + cmd.ValidArgsFunction = cobra.NoFileCompletions + + // Apply optional overrides to this command. + for _, fn := range downloadMessageAttachmentVisualizationOverrides { + fn(cmd, &downloadMessageAttachmentVisualizationReq) + } + + return cmd +} + // start execute-message-attachment-query command // Slice with functions to override default command behavior. @@ -1907,6 +1975,8 @@ func newStartConversation() *cobra.Command { cmd.Flags().Var(&startConversationJson, "json", `either inline JSON string or @path/to/file.json with request body`) + cmd.Flags().BoolVar(&startConversationReq.EnableVisualization, "enable-visualization", startConversationReq.EnableVisualization, `Enable visualization generation.`) + cmd.Use = "start-conversation SPACE_ID CONTENT" cmd.Short = `Start conversation.` cmd.Long = `Start conversation. diff --git a/cmd/workspace/lakeview/lakeview.go b/cmd/workspace/lakeview/lakeview.go index 0f4695039f8..7c0e40c1320 100644 --- a/cmd/workspace/lakeview/lakeview.go +++ b/cmd/workspace/lakeview/lakeview.go @@ -704,7 +704,7 @@ func newList() *cobra.Command { cmd.Flags().IntVar(&listReq.PageSize, "page-size", listReq.PageSize, `The number of dashboards to return per page.`) cmd.Flags().BoolVar(&listReq.ShowTrashed, "show-trashed", listReq.ShowTrashed, `The flag to include dashboards located in the trash.`) - cmd.Flags().Var(&listReq.View, "view", `DASHBOARD_VIEW_BASIConly includes summary metadata from the dashboard. Supported values: [DASHBOARD_VIEW_BASIC]`) + cmd.Flags().Var(&listReq.View, "view", `DASHBOARD_VIEW_BASIC only includes summary metadata from the dashboard. Supported values: [DASHBOARD_VIEW_BASIC]`) // Limit flag for total result capping. cmd.Flags().IntVar(&listLimit, "limit", 0, `Maximum number of results to return.`) diff --git a/cmd/workspace/policy-compliance-for-clusters/policy-compliance-for-clusters.go b/cmd/workspace/policy-compliance-for-clusters/policy-compliance-for-clusters.go index ce93a72d82d..f6bf30078de 100644 --- a/cmd/workspace/policy-compliance-for-clusters/policy-compliance-for-clusters.go +++ b/cmd/workspace/policy-compliance-for-clusters/policy-compliance-for-clusters.go @@ -40,6 +40,7 @@ func New() *cobra.Command { cmd.Annotations["launch_stage_display"] = "GA" // Add methods + cmd.AddCommand(newCancelPendingClusterEnforcement()) cmd.AddCommand(newEnforceCompliance()) cmd.AddCommand(newGetCompliance()) cmd.AddCommand(newListCompliance()) @@ -52,6 +53,94 @@ func New() *cobra.Command { return cmd } +// start cancel-pending-cluster-enforcement command + +// Slice with functions to override default command behavior. +// Functions can be added from the `init()` function in manually curated files in this directory. +var cancelPendingClusterEnforcementOverrides []func( + *cobra.Command, + *compute.CancelPendingClusterEnforcementRequest, +) + +func newCancelPendingClusterEnforcement() *cobra.Command { + cmd := &cobra.Command{} + + var cancelPendingClusterEnforcementReq compute.CancelPendingClusterEnforcementRequest + var cancelPendingClusterEnforcementJson flags.JsonFlag + + cmd.Flags().Var(&cancelPendingClusterEnforcementJson, "json", `either inline JSON string or @path/to/file.json with request body`) + + cmd.Flags().BoolVar(&cancelPendingClusterEnforcementReq.AllowMissing, "allow-missing", cancelPendingClusterEnforcementReq.AllowMissing, `If true and no pending enforcement exists, the request will succeed but no action will be taken.`) + + cmd.Use = "cancel-pending-cluster-enforcement CLUSTER_ID" + cmd.Short = `Cancel pending policy enforcement for a cluster.` + cmd.Long = `Cancel pending policy enforcement for a cluster. + + Cancels a pending enforcement on a cluster. After canceling the pending + enforcement, the cluster will no longer update on the next termination or + restart. Pending enforcements cannot be canceled when a cluster is in + TERMINATING state. Only workspace admins can cancel pending enforcements. + + Arguments: + CLUSTER_ID: The ID of the cluster to cancel the pending enforcement for.` + + cmd.Annotations = make(map[string]string) + cmd.Annotations["launch_stage"] = "GA" + cmd.Annotations["launch_stage_display"] = "GA" + + cmd.Args = func(cmd *cobra.Command, args []string) error { + if cmd.Flags().Changed("json") { + err := root.ExactArgs(0)(cmd, args) + if err != nil { + return fmt.Errorf("when --json flag is specified, no positional arguments are allowed. Provide 'cluster_id' in your JSON input") + } + return nil + } + check := root.ExactArgs(1) + return check(cmd, args) + } + + cmd.PreRunE = root.MustWorkspaceClient + cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { + ctx := cmd.Context() + w := cmdctx.WorkspaceClient(ctx) + + if cmd.Flags().Changed("json") { + diags := cancelPendingClusterEnforcementJson.Unmarshal(&cancelPendingClusterEnforcementReq) + if diags.HasError() { + return diags.Error() + } + if len(diags) > 0 { + err := cmdio.RenderDiagnostics(ctx, diags) + if err != nil { + return err + } + } + } + if !cmd.Flags().Changed("json") { + cancelPendingClusterEnforcementReq.ClusterId = args[0] + } + + response, err := w.PolicyComplianceForClusters.CancelPendingClusterEnforcement(ctx, cancelPendingClusterEnforcementReq) + if err != nil { + return err + } + + return cmdio.Render(ctx, response) + } + + // Disable completions since they are not applicable. + // Can be overridden by manual implementation in `override.go`. + cmd.ValidArgsFunction = cobra.NoFileCompletions + + // Apply optional overrides to this command. + for _, fn := range cancelPendingClusterEnforcementOverrides { + fn(cmd, &cancelPendingClusterEnforcementReq) + } + + return cmd +} + // start enforce-compliance command // Slice with functions to override default command behavior. @@ -69,22 +158,21 @@ func newEnforceCompliance() *cobra.Command { cmd.Flags().Var(&enforceComplianceJson, "json", `either inline JSON string or @path/to/file.json with request body`) + cmd.Flags().Var(&enforceComplianceReq.EnforceMode, "enforce-mode", `Determines how changes should be made to clusters that are not in TERMINATED state. Supported values: [ENFORCE_IMMEDIATELY, WAIT_FOR_TERMINATION]`) cmd.Flags().BoolVar(&enforceComplianceReq.ValidateOnly, "validate-only", enforceComplianceReq.ValidateOnly, `If set, previews the changes that would be made to a cluster to enforce compliance but does not update the cluster.`) cmd.Use = "enforce-compliance CLUSTER_ID" cmd.Short = `Enforce cluster policy compliance.` cmd.Long = `Enforce cluster policy compliance. - Updates a cluster to be compliant with the current version of its policy. A - cluster can be updated if it is in a RUNNING or TERMINATED state. - - If a cluster is updated while in a RUNNING state, it will be restarted so - that the new attributes can take effect. + Updates a cluster to be compliant with the current version of its policy. If a cluster is updated while in a TERMINATED state, it will remain TERMINATED. The next time the cluster is started, the new attributes will take effect. + For clusters in other states, the behavior depends on the enforce_mode used. + Clusters created by the Databricks Jobs, SDP, or Models services cannot be enforced by this API. Instead, use the "Enforce job policy compliance" API to enforce policy compliance on jobs. diff --git a/cmd/workspace/postgres/postgres.go b/cmd/workspace/postgres/postgres.go index f66c43fb722..738171cc7d8 100644 --- a/cmd/workspace/postgres/postgres.go +++ b/cmd/workspace/postgres/postgres.go @@ -496,6 +496,7 @@ func newCreateDatabase() *cobra.Command { cmd.Flags().Var(&createDatabaseJson, "json", `either inline JSON string or @path/to/file.json with request body`) cmd.Flags().StringVar(&createDatabaseReq.DatabaseId, "database-id", createDatabaseReq.DatabaseId, `The ID to use for the Database, which will become the final component of the database's resource name.`) + cmd.Flags().BoolVar(&createDatabaseReq.ReplaceExisting, "replace-existing", createDatabaseReq.ReplaceExisting, `If true, update the database if it already exists instead of returning an error.`) cmd.Flags().StringVar(&createDatabaseReq.Database.Name, "name", createDatabaseReq.Database.Name, `The resource name of the database.`) // TODO: complex arg: spec // TODO: complex arg: status @@ -752,6 +753,7 @@ func newCreateProject() *cobra.Command { cmd.Flags().Var(&createProjectJson, "json", `either inline JSON string or @path/to/file.json with request body`) + // TODO: complex arg: initial_branch_spec // TODO: complex arg: initial_endpoint_spec cmd.Flags().StringVar(&createProjectReq.Project.Name, "name", createProjectReq.Project.Name, `Output only.`) // TODO: complex arg: spec @@ -879,6 +881,7 @@ func newCreateRole() *cobra.Command { cmd.Flags().Var(&createRoleJson, "json", `either inline JSON string or @path/to/file.json with request body`) + cmd.Flags().BoolVar(&createRoleReq.ReplaceExisting, "replace-existing", createRoleReq.ReplaceExisting, `If true, update the role if it already exists instead of returning an error.`) cmd.Flags().StringVar(&createRoleReq.RoleId, "role-id", createRoleReq.RoleId, `The ID to use for the Role, which will become the final component of the role's resource name.`) cmd.Flags().StringVar(&createRoleReq.Role.Name, "name", createRoleReq.Role.Name, `Output only.`) // TODO: complex arg: spec @@ -3728,6 +3731,7 @@ func newUpdateProject() *cobra.Command { cmd.Flags().Var(&updateProjectJson, "json", `either inline JSON string or @path/to/file.json with request body`) + // TODO: complex arg: initial_branch_spec // TODO: complex arg: initial_endpoint_spec cmd.Flags().StringVar(&updateProjectReq.Project.Name, "name", updateProjectReq.Project.Name, `Output only.`) // TODO: complex arg: spec diff --git a/cmd/workspace/serving-endpoints/serving-endpoints.go b/cmd/workspace/serving-endpoints/serving-endpoints.go index 4462a0d488c..2c3982b7821 100644 --- a/cmd/workspace/serving-endpoints/serving-endpoints.go +++ b/cmd/workspace/serving-endpoints/serving-endpoints.go @@ -168,6 +168,7 @@ func newCreate() *cobra.Command { // TODO: array: rate_limits cmd.Flags().BoolVar(&createReq.RouteOptimized, "route-optimized", createReq.RouteOptimized, `Enable route optimization for the serving endpoint.`) // TODO: array: tags + // TODO: complex arg: telemetry_config cmd.Use = "create NAME" cmd.Short = `Create a new serving endpoint.` diff --git a/go.mod b/go.mod index e719158ba3b..e44a9a55acb 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/charmbracelet/huh v1.0.0 // MIT github.com/charmbracelet/lipgloss v1.1.0 // MIT github.com/charmbracelet/x/ansi v0.11.7 // MIT - github.com/databricks/databricks-sdk-go v0.147.0 // Apache-2.0 + github.com/databricks/databricks-sdk-go v0.152.0 // Apache-2.0 github.com/google/jsonschema-go v0.4.3 // MIT github.com/google/uuid v1.6.0 // BSD-3-Clause github.com/gorilla/websocket v1.5.3 // BSD-2-Clause diff --git a/go.sum b/go.sum index 5edc25837b3..3ca67e4d50a 100644 --- a/go.sum +++ b/go.sum @@ -69,8 +69,8 @@ github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22r github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= -github.com/databricks/databricks-sdk-go v0.147.0 h1:B6Qk0LVvazg/qdvqoINzipnl0QhXKwgdw35JH905LCg= -github.com/databricks/databricks-sdk-go v0.147.0/go.mod h1:C5LNgGe6hGuRrTwoxFmuup3XtQQEaqtq0e+K8IFDIS4= +github.com/databricks/databricks-sdk-go v0.152.0 h1:47bWm4lNSEMai9YzYukwGayibRjyjPChy+k3hly19R0= +github.com/databricks/databricks-sdk-go v0.152.0/go.mod h1:C5LNgGe6hGuRrTwoxFmuup3XtQQEaqtq0e+K8IFDIS4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/internal/genkit/tagging.py b/internal/genkit/tagging.py index a3897bbeedf..0c8cd582296 100644 --- a/internal/genkit/tagging.py +++ b/internal/genkit/tagging.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # /// script # dependencies = ["PyGithub>=2,<3", "pyjwt<2.12.0", "charset-normalizer<3.4.6"] # /// diff --git a/libs/structs/structwalk/walktype_test.go b/libs/structs/structwalk/walktype_test.go index 78ccc6c3f61..8c92f4390b0 100644 --- a/libs/structs/structwalk/walktype_test.go +++ b/libs/structs/structwalk/walktype_test.go @@ -136,7 +136,7 @@ func TestTypeJobSettings(t *testing.T) { func TestTypeRoot(t *testing.T) { testStruct(t, reflect.TypeFor[config.Root](), - 5000, 6000, // 5813 after genie_space resource added + 5000, 7000, // 6019 after SDK v0.152.0 (ai_runtime_task, telemetry_config, etc.) map[string]any{ "bundle.target": "", `variables.*.lookup.dashboard`: "", diff --git a/python/codegen/uv.lock b/python/codegen/uv.lock index 681ead3c4f0..8eb9074216e 100644 --- a/python/codegen/uv.lock +++ b/python/codegen/uv.lock @@ -20,52 +20,52 @@ dev = [{ name = "pytest" }] [[package]] name = "colorama" version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +source = { registry = "https://pypi-proxy.dev.databricks.com/simple/" } +sdist = { url = "https://pypi-proxy.dev.databricks.com/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, + { url = "https://pypi-proxy.dev.databricks.com/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "iniconfig" version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +source = { registry = "https://pypi-proxy.dev.databricks.com/simple/" } +sdist = { url = "https://pypi-proxy.dev.databricks.com/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", upload-time = "2025-03-19T20:09:59.721Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://pypi-proxy.dev.databricks.com/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", upload-time = "2025-03-19T20:10:01.071Z" }, ] [[package]] name = "packaging" version = "24.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } +source = { registry = "https://pypi-proxy.dev.databricks.com/simple/" } +sdist = { url = "https://pypi-proxy.dev.databricks.com/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", upload-time = "2024-11-08T09:47:47.202Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, + { url = "https://pypi-proxy.dev.databricks.com/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", upload-time = "2024-11-08T09:47:44.722Z" }, ] [[package]] name = "pluggy" version = "1.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955, upload-time = "2024-04-20T21:34:42.531Z" } +source = { registry = "https://pypi-proxy.dev.databricks.com/simple/" } +sdist = { url = "https://pypi-proxy.dev.databricks.com/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", upload-time = "2024-04-20T21:34:42.531Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556, upload-time = "2024-04-20T21:34:40.434Z" }, + { url = "https://pypi-proxy.dev.databricks.com/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", upload-time = "2024-04-20T21:34:40.434Z" }, ] [[package]] name = "pygments" version = "2.20.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +source = { registry = "https://pypi-proxy.dev.databricks.com/simple/" } +sdist = { url = "https://pypi-proxy.dev.databricks.com/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", upload-time = "2026-03-29T13:29:33.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, + { url = "https://pypi-proxy.dev.databricks.com/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", upload-time = "2026-03-29T13:29:30.038Z" }, ] [[package]] name = "pytest" version = "9.0.3" -source = { registry = "https://pypi.org/simple" } +source = { registry = "https://pypi-proxy.dev.databricks.com/simple/" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "iniconfig" }, @@ -73,7 +73,7 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } +sdist = { url = "https://pypi-proxy.dev.databricks.com/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", upload-time = "2026-04-07T17:16:18.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, + { url = "https://pypi-proxy.dev.databricks.com/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", upload-time = "2026-04-07T17:16:16.13Z" }, ] diff --git a/python/databricks/bundles/jobs/__init__.py b/python/databricks/bundles/jobs/__init__.py index 5ed6b101421..8257b3a1245 100644 --- a/python/databricks/bundles/jobs/__init__.py +++ b/python/databricks/bundles/jobs/__init__.py @@ -2,6 +2,9 @@ "Adlsgen2Info", "Adlsgen2InfoDict", "Adlsgen2InfoParam", + "AiRuntimeTask", + "AiRuntimeTaskDict", + "AiRuntimeTaskParam", "AlertTask", "AlertTaskDict", "AlertTaskParam", @@ -41,6 +44,11 @@ "ComputeConfigParam", "ComputeDict", "ComputeParam", + "ComputeSpec", + "ComputeSpecAcceleratorType", + "ComputeSpecAcceleratorTypeParam", + "ComputeSpecDict", + "ComputeSpecParam", "Condition", "ConditionParam", "ConditionTask", @@ -70,6 +78,9 @@ "DbtTask", "DbtTaskDict", "DbtTaskParam", + "DeploymentSpec", + "DeploymentSpecDict", + "DeploymentSpecParam", "DockerBasicAuth", "DockerBasicAuthDict", "DockerBasicAuthParam", @@ -307,6 +318,11 @@ Adlsgen2InfoDict, Adlsgen2InfoParam, ) +from databricks.bundles.jobs._models.ai_runtime_task import ( + AiRuntimeTask, + AiRuntimeTaskDict, + AiRuntimeTaskParam, +) from databricks.bundles.jobs._models.alert_task import ( AlertTask, AlertTaskDict, @@ -370,6 +386,15 @@ ComputeConfigDict, ComputeConfigParam, ) +from databricks.bundles.jobs._models.compute_spec import ( + ComputeSpec, + ComputeSpecDict, + ComputeSpecParam, +) +from databricks.bundles.jobs._models.compute_spec_accelerator_type import ( + ComputeSpecAcceleratorType, + ComputeSpecAcceleratorTypeParam, +) from databricks.bundles.jobs._models.condition import Condition, ConditionParam from databricks.bundles.jobs._models.condition_task import ( ConditionTask, @@ -414,6 +439,11 @@ DbtPlatformTaskParam, ) from databricks.bundles.jobs._models.dbt_task import DbtTask, DbtTaskDict, DbtTaskParam +from databricks.bundles.jobs._models.deployment_spec import ( + DeploymentSpec, + DeploymentSpecDict, + DeploymentSpecParam, +) from databricks.bundles.jobs._models.docker_basic_auth import ( DockerBasicAuth, DockerBasicAuthDict, diff --git a/python/databricks/bundles/jobs/_models/ai_runtime_task.py b/python/databricks/bundles/jobs/_models/ai_runtime_task.py new file mode 100644 index 00000000000..1125797f9fe --- /dev/null +++ b/python/databricks/bundles/jobs/_models/ai_runtime_task.py @@ -0,0 +1,155 @@ +from dataclasses import dataclass, field +from typing import TYPE_CHECKING, TypedDict + +from databricks.bundles.core._transform import _transform +from databricks.bundles.core._transform_to_json import _transform_to_json_value +from databricks.bundles.core._variable import ( + VariableOr, + VariableOrList, + VariableOrOptional, +) +from databricks.bundles.jobs._models.deployment_spec import ( + DeploymentSpec, + DeploymentSpecParam, +) + +if TYPE_CHECKING: + from typing_extensions import Self + + +@dataclass(kw_only=True) +class AiRuntimeTask: + """ + :meta private: [EXPERIMENTAL] + + AiRuntimeTask: multi-node GPU compute task definition for Databricks AI + Runtime workloads. + + Jobs-framework-level concepts (retries, per-task timeout, idempotency + token, usage/budget policy, permissions) live on the surrounding + TaskSettings / run-submit request and are intentionally NOT duplicated + here. Users compose `ai_runtime_task` with the standard Jobs/DABs task + wrapper to get those. + """ + + experiment: VariableOr[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] MLflow experiment name for this run. If an experiment with this name + already exists under the calling user, the run is appended to it; + otherwise a new experiment is created. To target a specific MLflow + storage location (for example, when running as a service principal), set + `mlflow_experiment_directory`. + """ + + code_source_path: VariableOrOptional[str] = None + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional workspace or UC volume path of the uploaded code-source + archive. The CLI packages the user's local code directory into an + archive and populates this. Customers calling the Jobs API directly + should upload their archive to the workspace or a UC volume first and + supply the resulting path here. + + When set, the training node exposes the value via the `$CODE_SOURCE` + environment variable. + """ + + deployments: VariableOrList[DeploymentSpec] = field(default_factory=list) + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Deployment specs for this task. Exactly one deployment is currently + supported (a single entry where every node runs the same command); this + is a current-Preview constraint. Role-split workloads (driver + worker, + parameter server, separate eval node, etc.) with multiple entries are the + eventual intent but not yet supported. + """ + + mlflow_experiment_directory: VariableOrOptional[str] = None + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional workspace directory under which the MLflow experiment named in + `experiment` is created. Must start with `/Workspace`. Set this when + running as a service principal that has no default user directory; for + regular users the experiment defaults to the user's home directory. + """ + + mlflow_run: VariableOrOptional[str] = None + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional display name for the MLflow run created under `experiment`. If + omitted, MLflow generates a default name. + """ + + @classmethod + def from_dict(cls, value: "AiRuntimeTaskDict") -> "Self": + return _transform(cls, value) + + def as_dict(self) -> "AiRuntimeTaskDict": + return _transform_to_json_value(self) # type:ignore + + +class AiRuntimeTaskDict(TypedDict, total=False): + """""" + + experiment: VariableOr[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] MLflow experiment name for this run. If an experiment with this name + already exists under the calling user, the run is appended to it; + otherwise a new experiment is created. To target a specific MLflow + storage location (for example, when running as a service principal), set + `mlflow_experiment_directory`. + """ + + code_source_path: VariableOrOptional[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional workspace or UC volume path of the uploaded code-source + archive. The CLI packages the user's local code directory into an + archive and populates this. Customers calling the Jobs API directly + should upload their archive to the workspace or a UC volume first and + supply the resulting path here. + + When set, the training node exposes the value via the `$CODE_SOURCE` + environment variable. + """ + + deployments: VariableOrList[DeploymentSpecParam] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Deployment specs for this task. Exactly one deployment is currently + supported (a single entry where every node runs the same command); this + is a current-Preview constraint. Role-split workloads (driver + worker, + parameter server, separate eval node, etc.) with multiple entries are the + eventual intent but not yet supported. + """ + + mlflow_experiment_directory: VariableOrOptional[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional workspace directory under which the MLflow experiment named in + `experiment` is created. Must start with `/Workspace`. Set this when + running as a service principal that has no default user directory; for + regular users the experiment defaults to the user's home directory. + """ + + mlflow_run: VariableOrOptional[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional display name for the MLflow run created under `experiment`. If + omitted, MLflow generates a default name. + """ + + +AiRuntimeTaskParam = AiRuntimeTaskDict | AiRuntimeTask diff --git a/python/databricks/bundles/jobs/_models/compute_spec.py b/python/databricks/bundles/jobs/_models/compute_spec.py new file mode 100644 index 00000000000..9b3a3c41397 --- /dev/null +++ b/python/databricks/bundles/jobs/_models/compute_spec.py @@ -0,0 +1,75 @@ +from dataclasses import dataclass +from typing import TYPE_CHECKING, TypedDict + +from databricks.bundles.core._transform import _transform +from databricks.bundles.core._transform_to_json import _transform_to_json_value +from databricks.bundles.core._variable import VariableOr +from databricks.bundles.jobs._models.compute_spec_accelerator_type import ( + ComputeSpecAcceleratorType, + ComputeSpecAcceleratorTypeParam, +) + +if TYPE_CHECKING: + from typing_extensions import Self + + +@dataclass(kw_only=True) +class ComputeSpec: + """ + :meta private: [EXPERIMENTAL] + + ComputeSpec: compute configuration — accelerator type and total + accelerator count across all nodes. + """ + + accelerator_count: VariableOr[int] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Total number of accelerators across all nodes. Must be a positive + multiple of the per-node accelerator count encoded in `accelerator_type`. + For example, `GPU_8xH100` with `accelerator_count: 16` allocates 2 nodes + (8 GPUs per node). + """ + + accelerator_type: VariableOr[ComputeSpecAcceleratorType] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Hardware accelerator type (for example, `GPU_1xA10` or `GPU_8xH100`). + The number of accelerators per node is encoded in the enum value — + `GPU_8xH100` means 8 H100 GPUs per node. + """ + + @classmethod + def from_dict(cls, value: "ComputeSpecDict") -> "Self": + return _transform(cls, value) + + def as_dict(self) -> "ComputeSpecDict": + return _transform_to_json_value(self) # type:ignore + + +class ComputeSpecDict(TypedDict, total=False): + """""" + + accelerator_count: VariableOr[int] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Total number of accelerators across all nodes. Must be a positive + multiple of the per-node accelerator count encoded in `accelerator_type`. + For example, `GPU_8xH100` with `accelerator_count: 16` allocates 2 nodes + (8 GPUs per node). + """ + + accelerator_type: VariableOr[ComputeSpecAcceleratorTypeParam] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Hardware accelerator type (for example, `GPU_1xA10` or `GPU_8xH100`). + The number of accelerators per node is encoded in the enum value — + `GPU_8xH100` means 8 H100 GPUs per node. + """ + + +ComputeSpecParam = ComputeSpecDict | ComputeSpec diff --git a/python/databricks/bundles/jobs/_models/compute_spec_accelerator_type.py b/python/databricks/bundles/jobs/_models/compute_spec_accelerator_type.py new file mode 100644 index 00000000000..4c0e09cc3dd --- /dev/null +++ b/python/databricks/bundles/jobs/_models/compute_spec_accelerator_type.py @@ -0,0 +1,21 @@ +from enum import Enum +from typing import Literal + + +class ComputeSpecAcceleratorType(Enum): + """ + :meta private: [EXPERIMENTAL] + + Customer-facing AcceleratorType: hardware accelerator type for the + AiRuntime workload. Per-node accelerator count is encoded in the value + name (e.g. `GPU_8xH100` means 8 H100s per node). + """ + + GPU_1X_A10 = "GPU_1xA10" + GPU_1X_H100 = "GPU_1xH100" + GPU_8X_H100 = "GPU_8xH100" + + +ComputeSpecAcceleratorTypeParam = ( + Literal["GPU_1xA10", "GPU_1xH100", "GPU_8xH100"] | ComputeSpecAcceleratorType +) diff --git a/python/databricks/bundles/jobs/_models/dashboard_task.py b/python/databricks/bundles/jobs/_models/dashboard_task.py index 4fb86a325ca..d1959d44f74 100644 --- a/python/databricks/bundles/jobs/_models/dashboard_task.py +++ b/python/databricks/bundles/jobs/_models/dashboard_task.py @@ -4,7 +4,10 @@ from databricks.bundles.core._transform import _transform from databricks.bundles.core._transform_to_json import _transform_to_json_value from databricks.bundles.core._variable import VariableOrDict, VariableOrOptional -from databricks.bundles.jobs._models.subscription import Subscription, SubscriptionParam +from databricks.bundles.jobs._models.subscription import ( + Subscription, + SubscriptionParam, +) if TYPE_CHECKING: from typing_extensions import Self diff --git a/python/databricks/bundles/jobs/_models/deployment_spec.py b/python/databricks/bundles/jobs/_models/deployment_spec.py new file mode 100644 index 00000000000..23a07f9adaa --- /dev/null +++ b/python/databricks/bundles/jobs/_models/deployment_spec.py @@ -0,0 +1,95 @@ +from dataclasses import dataclass +from typing import TYPE_CHECKING, TypedDict + +from databricks.bundles.core._transform import _transform +from databricks.bundles.core._transform_to_json import _transform_to_json_value +from databricks.bundles.core._variable import VariableOr, VariableOrOptional +from databricks.bundles.jobs._models.compute_spec import ( + ComputeSpec, + ComputeSpecParam, +) + +if TYPE_CHECKING: + from typing_extensions import Self + + +@dataclass(kw_only=True) +class DeploymentSpec: + """ + :meta private: [EXPERIMENTAL] + + DeploymentSpec: configuration for one deployment within an AiRuntimeTask. + Each entry in `AiRuntimeTask.deployments` describes a group of nodes that + share the same command and compute. Many single-program training + algorithms use a single entry where every node runs the same command; + role-split workloads (driver + worker, parameter server, separate eval + node, etc.) use multiple entries. + """ + + command_path: VariableOr[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Workspace path of the bash script to execute on each node in this + deployment. The CLI uploads the user's script and populates this. + Customers calling the Jobs API directly should upload their script to + the workspace first and supply the resulting path here. + """ + + compute: VariableOr[ComputeSpec] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Compute resources allocated to each node in this deployment. + """ + + name: VariableOrOptional[str] = None + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional human-readable name for this deployment (for example, `driver`, + `worker`, `param_server`). Used for log and UI display. Distinct names + are recommended so deployments can be told apart, but uniqueness is not + enforced. + """ + + @classmethod + def from_dict(cls, value: "DeploymentSpecDict") -> "Self": + return _transform(cls, value) + + def as_dict(self) -> "DeploymentSpecDict": + return _transform_to_json_value(self) # type:ignore + + +class DeploymentSpecDict(TypedDict, total=False): + """""" + + command_path: VariableOr[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Workspace path of the bash script to execute on each node in this + deployment. The CLI uploads the user's script and populates this. + Customers calling the Jobs API directly should upload their script to + the workspace first and supply the resulting path here. + """ + + compute: VariableOr[ComputeSpecParam] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Compute resources allocated to each node in this deployment. + """ + + name: VariableOrOptional[str] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] Optional human-readable name for this deployment (for example, `driver`, + `worker`, `param_server`). Used for log and UI display. Distinct names + are recommended so deployments can be told apart, but uniqueness is not + enforced. + """ + + +DeploymentSpecParam = DeploymentSpecDict | DeploymentSpec diff --git a/python/databricks/bundles/jobs/_models/init_script_info.py b/python/databricks/bundles/jobs/_models/init_script_info.py index f14f1854879..7e125c63dff 100644 --- a/python/databricks/bundles/jobs/_models/init_script_info.py +++ b/python/databricks/bundles/jobs/_models/init_script_info.py @@ -41,7 +41,6 @@ class InitScriptInfo: """ Config for an individual init script - Next ID: 11 """ abfss: VariableOrOptional[Adlsgen2Info] = None diff --git a/python/databricks/bundles/jobs/_models/job.py b/python/databricks/bundles/jobs/_models/job.py index b34da5ce021..850070a7b6c 100644 --- a/python/databricks/bundles/jobs/_models/job.py +++ b/python/databricks/bundles/jobs/_models/job.py @@ -17,7 +17,10 @@ CronSchedule, CronScheduleParam, ) -from databricks.bundles.jobs._models.git_source import GitSource, GitSourceParam +from databricks.bundles.jobs._models.git_source import ( + GitSource, + GitSourceParam, +) from databricks.bundles.jobs._models.job_cluster import JobCluster, JobClusterParam from databricks.bundles.jobs._models.job_email_notifications import ( JobEmailNotifications, diff --git a/python/databricks/bundles/jobs/_models/task.py b/python/databricks/bundles/jobs/_models/task.py index 6fde86e05d8..51776b7ed5e 100644 --- a/python/databricks/bundles/jobs/_models/task.py +++ b/python/databricks/bundles/jobs/_models/task.py @@ -8,6 +8,10 @@ VariableOrList, VariableOrOptional, ) +from databricks.bundles.jobs._models.ai_runtime_task import ( + AiRuntimeTask, + AiRuntimeTaskParam, +) from databricks.bundles.jobs._models.alert_task import AlertTask, AlertTaskParam from databricks.bundles.jobs._models.clean_rooms_notebook_task import ( CleanRoomsNotebookTask, @@ -28,10 +32,7 @@ DbtPlatformTaskParam, ) from databricks.bundles.jobs._models.dbt_task import DbtTask, DbtTaskParam -from databricks.bundles.jobs._models.for_each_task import ( - ForEachTask, - ForEachTaskParam, -) +from databricks.bundles.jobs._models.for_each_task import ForEachTask, ForEachTaskParam from databricks.bundles.jobs._models.gen_ai_compute_task import ( GenAiComputeTask, GenAiComputeTaskParam, @@ -108,6 +109,14 @@ class Task: On Update or Reset, this field is used to reference the tasks to be updated or reset. """ + ai_runtime_task: VariableOrOptional[AiRuntimeTask] = None + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] The task runs a multi-node GPU compute workload on Databricks AI Runtime. + External-facing surface; mirrors the AIR CLI (fka SGCLI) v2 YAML schema. + """ + alert_task: VariableOrOptional[AlertTask] = None """ [Public Preview] The task evaluates a Databricks alert and sends notifications to subscribers @@ -338,6 +347,14 @@ class TaskDict(TypedDict, total=False): On Update or Reset, this field is used to reference the tasks to be updated or reset. """ + ai_runtime_task: VariableOrOptional[AiRuntimeTaskParam] + """ + :meta private: [EXPERIMENTAL] + + [Private Preview] The task runs a multi-node GPU compute workload on Databricks AI Runtime. + External-facing surface; mirrors the AIR CLI (fka SGCLI) v2 YAML schema. + """ + alert_task: VariableOrOptional[AlertTaskParam] """ [Public Preview] The task evaluates a Databricks alert and sends notifications to subscribers diff --git a/python/databricks/bundles/pipelines/_models/init_script_info.py b/python/databricks/bundles/pipelines/_models/init_script_info.py index 6a6297a30bf..60e72762837 100644 --- a/python/databricks/bundles/pipelines/_models/init_script_info.py +++ b/python/databricks/bundles/pipelines/_models/init_script_info.py @@ -41,7 +41,6 @@ class InitScriptInfo: """ Config for an individual init script - Next ID: 11 """ abfss: VariableOrOptional[Adlsgen2Info] = None diff --git a/python/databricks/bundles/pipelines/_models/pipelines_environment.py b/python/databricks/bundles/pipelines/_models/pipelines_environment.py index 6f1850b9eb4..c56eccdea8a 100644 --- a/python/databricks/bundles/pipelines/_models/pipelines_environment.py +++ b/python/databricks/bundles/pipelines/_models/pipelines_environment.py @@ -25,9 +25,7 @@ class PipelinesEnvironment: environment_version: VariableOrOptional[str] = None """ - :meta private: [EXPERIMENTAL] - - [Private Preview] The environment version of the serverless Python environment used to execute + [Beta] The environment version of the serverless Python environment used to execute customer Python code. Each environment version includes a specific Python version and a curated set of pre-installed libraries with defined versions, providing a stable and reproducible execution environment. @@ -59,9 +57,7 @@ class PipelinesEnvironmentDict(TypedDict, total=False): environment_version: VariableOrOptional[str] """ - :meta private: [EXPERIMENTAL] - - [Private Preview] The environment version of the serverless Python environment used to execute + [Beta] The environment version of the serverless Python environment used to execute customer Python code. Each environment version includes a specific Python version and a curated set of pre-installed libraries with defined versions, providing a stable and reproducible execution environment.