From 3636f5d63047b5740138547049ef2940969522a5 Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sat, 26 Apr 2025 22:38:37 -0700 Subject: [PATCH 01/10] First --- specification/ai/Azure.AI.Projects/client.tsp | 11 +++++++++++ .../ai/Azure.AI.Projects/servicepatterns.tsp | 16 ++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/specification/ai/Azure.AI.Projects/client.tsp b/specification/ai/Azure.AI.Projects/client.tsp index 1428265619ad..5c0d2cf6af88 100644 --- a/specification/ai/Azure.AI.Projects/client.tsp +++ b/specification/ai/Azure.AI.Projects/client.tsp @@ -4,3 +4,14 @@ import "./main.tsp"; using Azure.ClientGenerator.Core; @@clientName(Azure.AI.Projects, "AIProjectClient"); + +@@clientName(Azure.AI.Projects.Datasets.listLatest, "list"); +@@clientName(Azure.AI.Projects.Datasets.getVersion, "get"); +@@clientName(Azure.AI.Projects.Datasets.deleteVersion, "delete"); +@@clientName(Azure.AI.Projects.Datasets.createOrUpdateVersion, "createOrUpdate"); +@@clientName(Azure.AI.Projects.Datasets.startPendingUploadVersion, "pendingUpload"); + +@@clientName(Azure.AI.Projects.Indexes.listLatest, "list"); +@@clientName(Azure.AI.Projects.Indexes.getVersion, "get"); +@@clientName(Azure.AI.Projects.Indexes.deleteVersion, "delete"); +@@clientName(Azure.AI.Projects.Indexes.createOrUpdateVersion, "createOrUpdate"); \ No newline at end of file diff --git a/specification/ai/Azure.AI.Projects/servicepatterns.tsp b/specification/ai/Azure.AI.Projects/servicepatterns.tsp index 376184787b32..9569025702ed 100644 --- a/specification/ai/Azure.AI.Projects/servicepatterns.tsp +++ b/specification/ai/Azure.AI.Projects/servicepatterns.tsp @@ -80,6 +80,10 @@ namespace Azure.AI.Projects.ServicePatterns { createOrUpdateVersion is Azure.Core.Foundations.ResourceOperation< TEntityType, { + @doc("The definition of the {name} to create or update", TEntityType) + @Http.bodyRoot + body: TEntityType; + @doc( "The specific version id of the {name} to create or replace.", TEntityType @@ -87,10 +91,6 @@ namespace Azure.AI.Projects.ServicePatterns { @Rest.segment("versions") @Http.path version: string; - - @doc("The definition of the {name} to create or update", TEntityType) - @Http.bodyRoot - body: TEntityType; }, Azure.Core.Foundations.ResourceCreatedOrOkResponse >; @@ -104,14 +104,14 @@ namespace Azure.AI.Projects.ServicePatterns { > is Azure.Core.Foundations.ResourceOperation< TEntityType, { + @doc("Parameters for the action") + @Http.bodyRoot + body: TParams; + @doc("The specific version id of the {name} to operate on.", TEntityType) @Rest.segment("versions") @Http.path version: string; - - @doc("Parameters for the action") - @Http.bodyRoot - body: TParams; }, TResponse >; From aa13a282f3e680a528af0062c2220adc84cc2883 Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sat, 26 Apr 2025 22:39:37 -0700 Subject: [PATCH 02/10] Auto format fix --- specification/ai/Azure.AI.Projects/client.tsp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/specification/ai/Azure.AI.Projects/client.tsp b/specification/ai/Azure.AI.Projects/client.tsp index 5c0d2cf6af88..56611523184d 100644 --- a/specification/ai/Azure.AI.Projects/client.tsp +++ b/specification/ai/Azure.AI.Projects/client.tsp @@ -8,10 +8,14 @@ using Azure.ClientGenerator.Core; @@clientName(Azure.AI.Projects.Datasets.listLatest, "list"); @@clientName(Azure.AI.Projects.Datasets.getVersion, "get"); @@clientName(Azure.AI.Projects.Datasets.deleteVersion, "delete"); -@@clientName(Azure.AI.Projects.Datasets.createOrUpdateVersion, "createOrUpdate"); -@@clientName(Azure.AI.Projects.Datasets.startPendingUploadVersion, "pendingUpload"); +@@clientName(Azure.AI.Projects.Datasets.createOrUpdateVersion, + "createOrUpdate" +); +@@clientName(Azure.AI.Projects.Datasets.startPendingUploadVersion, + "pendingUpload" +); @@clientName(Azure.AI.Projects.Indexes.listLatest, "list"); @@clientName(Azure.AI.Projects.Indexes.getVersion, "get"); @@clientName(Azure.AI.Projects.Indexes.deleteVersion, "delete"); -@@clientName(Azure.AI.Projects.Indexes.createOrUpdateVersion, "createOrUpdate"); \ No newline at end of file +@@clientName(Azure.AI.Projects.Indexes.createOrUpdateVersion, "createOrUpdate"); From a0265a8e4fee8ea7ee3e7991fd38311d81a911d1 Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sat, 26 Apr 2025 23:36:27 -0700 Subject: [PATCH 03/10] More --- specification/ai/Azure.AI.Projects/client.tsp | 18 ++++++++++++++++++ .../Azure.AI.Projects/connections/models.tsp | 2 +- .../azure-ai-projects-1dp.json | 2 +- .../2025-05-01/azure-ai-projects-1dp.json | 2 +- .../stable/latest/azure-ai-projects-1dp.json | 2 +- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/specification/ai/Azure.AI.Projects/client.tsp b/specification/ai/Azure.AI.Projects/client.tsp index 56611523184d..8a1cb641cdba 100644 --- a/specification/ai/Azure.AI.Projects/client.tsp +++ b/specification/ai/Azure.AI.Projects/client.tsp @@ -5,6 +5,7 @@ using Azure.ClientGenerator.Core; @@clientName(Azure.AI.Projects, "AIProjectClient"); +// Shorter method names for SDK datasets operations @@clientName(Azure.AI.Projects.Datasets.listLatest, "list"); @@clientName(Azure.AI.Projects.Datasets.getVersion, "get"); @@clientName(Azure.AI.Projects.Datasets.deleteVersion, "delete"); @@ -15,7 +16,24 @@ using Azure.ClientGenerator.Core; "pendingUpload" ); +// Shorter method names for SDK Index operations @@clientName(Azure.AI.Projects.Indexes.listLatest, "list"); @@clientName(Azure.AI.Projects.Indexes.getVersion, "get"); @@clientName(Azure.AI.Projects.Indexes.deleteVersion, "delete"); @@clientName(Azure.AI.Projects.Indexes.createOrUpdateVersion, "createOrUpdate"); + +// In Python, the emitter changes "keys" to "keys_property", since there is already +// a "keys" method in the generated code due to usage of MutableMapping. Call it credential_keys instead. +@@clientName(Azure.AI.Projects.CustomCredential.keys, + "credential_keys", + "python" +); + +// All SDKs hand-write a single public method with boolean "includeCredentials" input parameters +// that calls either on of the internal methods below +@@access(Azure.AI.Projects.Connections.get, Access.internal); +@@access(Azure.AI.Projects.Connections.getWithCredentials, Access.internal); + +// For some reason for Python the emitter creates an empty ServicePatternsOperations operation +// class. Mark it as internal here. Apply to all languages just in case. +@@access(Azure.AI.Projects.ServicePatterns, Access.internal); diff --git a/specification/ai/Azure.AI.Projects/connections/models.tsp b/specification/ai/Azure.AI.Projects/connections/models.tsp index 57ec759cea54..2c968865b2c0 100644 --- a/specification/ai/Azure.AI.Projects/connections/models.tsp +++ b/specification/ai/Azure.AI.Projects/connections/models.tsp @@ -68,7 +68,7 @@ model EntraIDCredentials extends BaseCredentials { type: CredentialType.entraId; } -@doc("Custom credential defintion") +@doc("Custom credential definition") model CustomCredential extends BaseCredentials { @doc("The credential type") @visibility(Lifecycle.Read) diff --git a/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json index 4931aa558888..f5e91b3caa77 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json @@ -2379,7 +2379,7 @@ }, "CustomCredential": { "type": "object", - "description": "Custom credential defintion", + "description": "Custom credential definition", "properties": { "keys": { "type": "object", diff --git a/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json index 6ec38b170bae..80653d1c7fab 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json @@ -1683,7 +1683,7 @@ }, "CustomCredential": { "type": "object", - "description": "Custom credential defintion", + "description": "Custom credential definition", "properties": { "keys": { "type": "object", diff --git a/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json index d862e14ebd47..e9ab5ad46d27 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json @@ -1683,7 +1683,7 @@ }, "CustomCredential": { "type": "object", - "description": "Custom credential defintion", + "description": "Custom credential definition", "properties": { "keys": { "type": "object", From 33a99c9b046fee4577627e5904edf93369f71ac0 Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sat, 26 Apr 2025 23:51:28 -0700 Subject: [PATCH 04/10] Update comment --- specification/ai/Azure.AI.Projects/client.tsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/ai/Azure.AI.Projects/client.tsp b/specification/ai/Azure.AI.Projects/client.tsp index 8a1cb641cdba..ca535d2410e4 100644 --- a/specification/ai/Azure.AI.Projects/client.tsp +++ b/specification/ai/Azure.AI.Projects/client.tsp @@ -29,8 +29,8 @@ using Azure.ClientGenerator.Core; "python" ); -// All SDKs hand-write a single public method with boolean "includeCredentials" input parameters -// that calls either on of the internal methods below +// Make these two internal, since all SDKs hand-write a single public method with boolean "includeCredentials" +// input parameter that calls either on these two. @@access(Azure.AI.Projects.Connections.get, Access.internal); @@access(Azure.AI.Projects.Connections.getWithCredentials, Access.internal); From d51244c452f2168f1968cf0ff6cbceabdc6847db Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sun, 27 Apr 2025 00:16:51 -0700 Subject: [PATCH 05/10] Revert ServicePatterns change --- specification/ai/Azure.AI.Projects/client.tsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/ai/Azure.AI.Projects/client.tsp b/specification/ai/Azure.AI.Projects/client.tsp index ca535d2410e4..f90a88b505a4 100644 --- a/specification/ai/Azure.AI.Projects/client.tsp +++ b/specification/ai/Azure.AI.Projects/client.tsp @@ -36,4 +36,4 @@ using Azure.ClientGenerator.Core; // For some reason for Python the emitter creates an empty ServicePatternsOperations operation // class. Mark it as internal here. Apply to all languages just in case. -@@access(Azure.AI.Projects.ServicePatterns, Access.internal); +//@@access(Azure.AI.Projects.ServicePatterns, Access.internal); <== this did not work. It makes all methods internal. From 6c8d028cf4c068612e1e5e1a25b8faf55fd41d90 Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sun, 27 Apr 2025 01:02:58 -0700 Subject: [PATCH 06/10] Do not auto-gen samples for Python --- specification/ai/Azure.AI.Projects/tspconfig.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/ai/Azure.AI.Projects/tspconfig.yaml b/specification/ai/Azure.AI.Projects/tspconfig.yaml index f83b1a79b6a9..a7a1ae384b5a 100644 --- a/specification/ai/Azure.AI.Projects/tspconfig.yaml +++ b/specification/ai/Azure.AI.Projects/tspconfig.yaml @@ -17,7 +17,7 @@ options: api-version: "2025-05-15-preview" flavor: azure generate-test: true - generate-sample: true + generate-sample: false "@azure-tools/typespec-csharp": package-mode: "dataplane" package-dir: "Azure.AI.Projects.1DP" From c66bd6de7e92593f8f64618a5dd916053b9a9b97 Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sun, 27 Apr 2025 21:56:46 -0700 Subject: [PATCH 07/10] Update docs string for dataset getCredentials --- specification/ai/Azure.AI.Projects/datasets/routes.tsp | 2 +- .../preview/2025-05-15-preview/azure-ai-projects-1dp.json | 2 +- .../stable/2025-05-01/azure-ai-projects-1dp.json | 2 +- .../Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/specification/ai/Azure.AI.Projects/datasets/routes.tsp b/specification/ai/Azure.AI.Projects/datasets/routes.tsp index cbf22eba4739..db4357aa6446 100644 --- a/specification/ai/Azure.AI.Projects/datasets/routes.tsp +++ b/specification/ai/Azure.AI.Projects/datasets/routes.tsp @@ -60,7 +60,7 @@ interface Datasets #suppress "@azure-tools/typespec-azure-core/operation-missing-api-version" #suppress "@azure-tools/typespec-azure-core/use-standard-operations" - @doc("Get download sas for dataset version.") + @doc("Get the SAS token credential of a Dataset version.") @post @Rest.action("credentials") @Rest.actionSeparator("/") diff --git a/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json index f5e91b3caa77..54447bb6941d 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json @@ -663,7 +663,7 @@ "/datasets/{name}/versions/{version}/credentials": { "post": { "operationId": "Datasets_GetCredentials", - "description": "Get download sas for dataset version.", + "description": "Get the SAS token credential of a Dataset version.", "parameters": [ { "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" diff --git a/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json index 80653d1c7fab..035a333bb4a0 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json @@ -663,7 +663,7 @@ "/datasets/{name}/versions/{version}/credentials": { "post": { "operationId": "Datasets_GetCredentials", - "description": "Get download sas for dataset version.", + "description": "Get the SAS token credential of a Dataset version.", "parameters": [ { "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" diff --git a/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json index e9ab5ad46d27..928caa168451 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json @@ -663,7 +663,7 @@ "/datasets/{name}/versions/{version}/credentials": { "post": { "operationId": "Datasets_GetCredentials", - "description": "Get download sas for dataset version.", + "description": "Get the SAS token credential of a Dataset version.", "parameters": [ { "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" From 6471f8e63b8f38c0e31265b43abfb0bd4e45ed7f Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Sun, 27 Apr 2025 22:03:05 -0700 Subject: [PATCH 08/10] More updates to the same doc string --- specification/ai/Azure.AI.Projects/datasets/routes.tsp | 2 +- .../preview/2025-05-15-preview/azure-ai-projects-1dp.json | 2 +- .../stable/2025-05-01/azure-ai-projects-1dp.json | 2 +- .../Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/specification/ai/Azure.AI.Projects/datasets/routes.tsp b/specification/ai/Azure.AI.Projects/datasets/routes.tsp index db4357aa6446..dc283e2a7c79 100644 --- a/specification/ai/Azure.AI.Projects/datasets/routes.tsp +++ b/specification/ai/Azure.AI.Projects/datasets/routes.tsp @@ -60,7 +60,7 @@ interface Datasets #suppress "@azure-tools/typespec-azure-core/operation-missing-api-version" #suppress "@azure-tools/typespec-azure-core/use-standard-operations" - @doc("Get the SAS token credential of a Dataset version.") + @doc("Get the SAS credential to access the storage account associated with a Dataset version.") @post @Rest.action("credentials") @Rest.actionSeparator("/") diff --git a/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json index 54447bb6941d..e1fa8477e5f5 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/preview/2025-05-15-preview/azure-ai-projects-1dp.json @@ -663,7 +663,7 @@ "/datasets/{name}/versions/{version}/credentials": { "post": { "operationId": "Datasets_GetCredentials", - "description": "Get the SAS token credential of a Dataset version.", + "description": "Get the SAS credential to access the storage account associated with a Dataset version.", "parameters": [ { "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" diff --git a/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json index 035a333bb4a0..6828e8cba4f4 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/stable/2025-05-01/azure-ai-projects-1dp.json @@ -663,7 +663,7 @@ "/datasets/{name}/versions/{version}/credentials": { "post": { "operationId": "Datasets_GetCredentials", - "description": "Get the SAS token credential of a Dataset version.", + "description": "Get the SAS credential to access the storage account associated with a Dataset version.", "parameters": [ { "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" diff --git a/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json b/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json index 928caa168451..2b347f367445 100644 --- a/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json +++ b/specification/ai/data-plane/Azure.AI.Projects/stable/latest/azure-ai-projects-1dp.json @@ -663,7 +663,7 @@ "/datasets/{name}/versions/{version}/credentials": { "post": { "operationId": "Datasets_GetCredentials", - "description": "Get the SAS token credential of a Dataset version.", + "description": "Get the SAS credential to access the storage account associated with a Dataset version.", "parameters": [ { "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" From 4cbed096053ac6c125f749dcd3d1a03f578212cf Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Mon, 28 Apr 2025 08:21:14 -0700 Subject: [PATCH 09/10] Comment out unused alias --- specification/ai/Azure.AI.Projects/servicepatterns.tsp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specification/ai/Azure.AI.Projects/servicepatterns.tsp b/specification/ai/Azure.AI.Projects/servicepatterns.tsp index 9569025702ed..35e53d56c8c0 100644 --- a/specification/ai/Azure.AI.Projects/servicepatterns.tsp +++ b/specification/ai/Azure.AI.Projects/servicepatterns.tsp @@ -135,8 +135,10 @@ namespace Azure.AI.Projects.ServicePatterns { namespace BuildingBlocks { alias CoreOps = Azure.Core.StandardResourceOperations; + /* alias RepeatableCoreOps = Azure.Core.ResourceOperations; + */ } } From bd512396d3467b312323ccdfe5a926a46311ec3c Mon Sep 17 00:00:00 2001 From: Darren Cohen <39422044+dargilco@users.noreply.github.com> Date: Mon, 28 Apr 2025 23:20:13 -0700 Subject: [PATCH 10/10] Suppress error related to not generating python samples --- specification/ai/Azure.AI.Projects/suppressions.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/specification/ai/Azure.AI.Projects/suppressions.yaml b/specification/ai/Azure.AI.Projects/suppressions.yaml index a816f7f88a71..0c482b38e9ad 100644 --- a/specification/ai/Azure.AI.Projects/suppressions.yaml +++ b/specification/ai/Azure.AI.Projects/suppressions.yaml @@ -12,4 +12,6 @@ # Suppress JS package & dir names related to RLC, which require "rest" in the name. We do not use RLC. - options.@azure-tools/typespec-ts.package-dir - options.@azure-tools/typespec-ts.package-details.name - reason: 'We do not yet have a Go client library. We do not use RLC for JS.' + # Do not force me to generate Python samples + - options.@azure-tools/typespec-python.generate-sample + reason: 'See above comments for details'