diff --git a/WORKSPACE b/WORKSPACE index 86a950ff0adfab..ed97b5b45a2429 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -194,13 +194,11 @@ rules_proto_toolchains() # rules_gapic also depends on rules_go, so it must come after our own dependency on rules_go. # It must also come before gapic-generator-go so as to ensure that it does not bring in an old # version of rules_gapic. -_rules_gapic_version = "0.29.1" +_rules_gapic_version = "0.29.4" -_rules_gapic_sha256 = "0bb255e848d042ca0173922368477a63d95f1789c6aa5f119c88fc54546e28a1" http_archive( name = "rules_gapic", - sha256 = _rules_gapic_sha256, strip_prefix = "rules_gapic-%s" % _rules_gapic_version, urls = ["https://github.com/googleapis/rules_gapic/archive/v%s.tar.gz" % _rules_gapic_version], ) @@ -227,7 +225,7 @@ local_repository( path = ".", ) -_gapic_generator_go_version = "0.39.2" +_gapic_generator_go_version = "0.39.3" http_archive( name = "com_googleapis_gapic_generator_go", @@ -361,9 +359,9 @@ gapic_generator_register_toolchains() # TypeScript ############################################################################## -_gapic_generator_typescript_version = "4.1.0" +_gapic_generator_typescript_version = "4.2.0" -_gapic_generator_typescript_sha256 = "c55fcc6c19a19111fe6369c0288dc768656f829a7ded27d73241b0541794b50b" +_gapic_generator_typescript_sha256 = "bcf2dcdc112f1a8bf24f0ab3b36c10bbf9a7bab22d947ca9cfb7f613fa6992ab" ### TypeScript generator http_archive( @@ -477,7 +475,7 @@ gapic_generator_ruby_repositories() # Discovery ############################################################################## -_disco_to_proto3_converter_version = "96e1e63d3c1ddc546a57ac78b28893ee1013266a" +_disco_to_proto3_converter_version = "86444dbff202cf16c80eda1ae9bd1e5d54d4915d" http_archive( name = "com_google_disco_to_proto3_converter", diff --git a/api-index-v1.json b/api-index-v1.json index dac5e604dd0b6b..0e0777240b7236 100644 --- a/api-index-v1.json +++ b/api-index-v1.json @@ -7520,51 +7520,51 @@ "options": { "csharp_namespace": { "valueCounts": { - "Google.Ads.SearchAds360.V0.Common": 12, - "Google.Ads.SearchAds360.V0.Enums": 66, - "Google.Ads.SearchAds360.V0.Resources": 40, + "Google.Ads.SearchAds360.V0.Common": 13, + "Google.Ads.SearchAds360.V0.Enums": 85, + "Google.Ads.SearchAds360.V0.Resources": 52, "Google.Ads.SearchAds360.V0.Services": 4 } }, "go_package": { "valueCounts": { - "google.golang.org/genproto/googleapis/ads/searchads360/v0/common;common": 12, - "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums": 66, - "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources": 40, + "google.golang.org/genproto/googleapis/ads/searchads360/v0/common;common": 13, + "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums": 85, + "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources": 52, "google.golang.org/genproto/googleapis/ads/searchads360/v0/services;services": 4 } }, "java_multiple_files": { "valueCounts": { - "true": 122 + "true": 154 } }, "java_package": { "valueCounts": { - "com.google.ads.searchads360.v0.common": 12, - "com.google.ads.searchads360.v0.enums": 66, - "com.google.ads.searchads360.v0.resources": 40, + "com.google.ads.searchads360.v0.common": 13, + "com.google.ads.searchads360.v0.enums": 85, + "com.google.ads.searchads360.v0.resources": 52, "com.google.ads.searchads360.v0.services": 4 } }, "objc_class_prefix": { "valueCounts": { - "GASA360": 122 + "GASA360": 154 } }, "php_namespace": { "valueCounts": { - "Google\\Ads\\SearchAds360\\V0\\Common": 12, - "Google\\Ads\\SearchAds360\\V0\\Enums": 66, - "Google\\Ads\\SearchAds360\\V0\\Resources": 40, + "Google\\Ads\\SearchAds360\\V0\\Common": 13, + "Google\\Ads\\SearchAds360\\V0\\Enums": 85, + "Google\\Ads\\SearchAds360\\V0\\Resources": 52, "Google\\Ads\\SearchAds360\\V0\\Services": 4 } }, "ruby_package": { "valueCounts": { - "Google::Ads::SearchAds360::V0::Common": 12, - "Google::Ads::SearchAds360::V0::Enums": 66, - "Google::Ads::SearchAds360::V0::Resources": 40, + "Google::Ads::SearchAds360::V0::Common": 13, + "Google::Ads::SearchAds360::V0::Enums": 85, + "Google::Ads::SearchAds360::V0::Resources": 52, "Google::Ads::SearchAds360::V0::Services": 4 } } @@ -10253,6 +10253,17 @@ "path": "/v1alpha/{property=properties/*}:runFunnelReport" } ] + }, + { + "shortName": "SheetExportAudienceList", + "fullName": "google.analytics.data.v1alpha.AlphaAnalyticsData.SheetExportAudienceList", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1alpha/{name=properties/*/audienceLists/*}:exportSheet" + } + ] } ] } @@ -14140,7 +14151,7 @@ "options": { "csharp_namespace": { "valueCounts": { - "Google.Cloud.AIPlatform.V1": 83, + "Google.Cloud.AIPlatform.V1": 91, "Google.Cloud.AIPlatform.V1.Schema.Predict.Instance": 9, "Google.Cloud.AIPlatform.V1.Schema.Predict.Params": 6, "Google.Cloud.AIPlatform.V1.Schema.Predict.Prediction": 10, @@ -14149,7 +14160,7 @@ }, "go_package": { "valueCounts": { - "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb": 83, + "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb": 91, "cloud.google.com/go/aiplatform/apiv1/schema/predict/instance/instancepb;instancepb": 9, "cloud.google.com/go/aiplatform/apiv1/schema/predict/params/paramspb;paramspb": 6, "cloud.google.com/go/aiplatform/apiv1/schema/predict/prediction/predictionpb;predictionpb": 10, @@ -14158,12 +14169,12 @@ }, "java_multiple_files": { "valueCounts": { - "true": 119 + "true": 127 } }, "java_package": { "valueCounts": { - "com.google.cloud.aiplatform.v1": 83, + "com.google.cloud.aiplatform.v1": 91, "com.google.cloud.aiplatform.v1.schema.predict.instance": 9, "com.google.cloud.aiplatform.v1.schema.predict.params": 6, "com.google.cloud.aiplatform.v1.schema.predict.prediction": 10, @@ -14172,7 +14183,7 @@ }, "php_namespace": { "valueCounts": { - "Google\\Cloud\\AIPlatform\\V1": 83, + "Google\\Cloud\\AIPlatform\\V1": 91, "Google\\Cloud\\AIPlatform\\V1\\Schema\\Predict\\Instance": 9, "Google\\Cloud\\AIPlatform\\V1\\Schema\\Predict\\Params": 6, "Google\\Cloud\\AIPlatform\\V1\\Schema\\Predict\\Prediction": 10, @@ -14181,11 +14192,12 @@ }, "ruby_package": { "valueCounts": { - "Google::Cloud::AIPlatform::V1": 83, + "Google::Cloud::AIPlatform::V1": 90, "Google::Cloud::AIPlatform::V1::Schema::Predict::Instance": 9, "Google::Cloud::AIPlatform::V1::Schema::Predict::Params": 6, "Google::Cloud::AIPlatform::V1::Schema::Predict::Prediction": 10, - "Google::Cloud::AIPlatform::V1::Schema::TrainingJob::Definition": 11 + "Google::Cloud::AIPlatform::V1::Schema::TrainingJob::Definition": 11, + "Google::Cloud::Aiplatform::V1": 1 } } }, @@ -14488,6 +14500,288 @@ } ] }, + { + "shortName": "FeatureOnlineStoreAdminService", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService", + "methods": [ + { + "shortName": "CreateFeatureOnlineStore", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.CreateFeatureOnlineStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*}/featureOnlineStores" + } + ] + }, + { + "shortName": "CreateFeatureView", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.CreateFeatureView", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/featureOnlineStores/*}/featureViews" + } + ] + }, + { + "shortName": "DeleteFeatureOnlineStore", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.DeleteFeatureOnlineStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/featureOnlineStores/*}" + } + ] + }, + { + "shortName": "DeleteFeatureView", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.DeleteFeatureView", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*}" + } + ] + }, + { + "shortName": "GetFeatureOnlineStore", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.GetFeatureOnlineStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/featureOnlineStores/*}" + } + ] + }, + { + "shortName": "GetFeatureView", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.GetFeatureView", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*}" + } + ] + }, + { + "shortName": "GetFeatureViewSync", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.GetFeatureViewSync", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/featureViewSyncs/*}" + } + ] + }, + { + "shortName": "ListFeatureOnlineStores", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureOnlineStores", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/featureOnlineStores" + } + ] + }, + { + "shortName": "ListFeatureViewSyncs", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViewSyncs", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/featureOnlineStores/*/featureViews/*}/featureViewSyncs" + } + ] + }, + { + "shortName": "ListFeatureViews", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViews", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/featureOnlineStores/*}/featureViews" + } + ] + }, + { + "shortName": "SyncFeatureView", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.SyncFeatureView", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{feature_view=projects/*/locations/*/featureOnlineStores/*/featureViews/*}:sync" + } + ] + }, + { + "shortName": "UpdateFeatureOnlineStore", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.UpdateFeatureOnlineStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{feature_online_store.name=projects/*/locations/*/featureOnlineStores/*}" + } + ] + }, + { + "shortName": "UpdateFeatureView", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.UpdateFeatureView", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{feature_view.name=projects/*/locations/*/featureOnlineStores/*/featureViews/*}" + } + ] + } + ] + }, + { + "shortName": "FeatureOnlineStoreService", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreService", + "methods": [ + { + "shortName": "FetchFeatureValues", + "fullName": "google.cloud.aiplatform.v1.FeatureOnlineStoreService.FetchFeatureValues", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{feature_view=projects/*/locations/*/featureOnlineStores/*/featureViews/*}:fetchFeatureValues" + } + ] + } + ] + }, + { + "shortName": "FeatureRegistryService", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService", + "methods": [ + { + "shortName": "CreateFeature", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.CreateFeature", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/featureGroups/*}/features" + } + ] + }, + { + "shortName": "CreateFeatureGroup", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.CreateFeatureGroup", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*}/featureGroups" + } + ] + }, + { + "shortName": "DeleteFeature", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.DeleteFeature", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/featureGroups/*/features/*}" + } + ] + }, + { + "shortName": "DeleteFeatureGroup", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.DeleteFeatureGroup", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/featureGroups/*}" + } + ] + }, + { + "shortName": "GetFeature", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.GetFeature", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/featureGroups/*/features/*}" + } + ] + }, + { + "shortName": "GetFeatureGroup", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.GetFeatureGroup", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/featureGroups/*}" + } + ] + }, + { + "shortName": "ListFeatureGroups", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatureGroups", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/featureGroups" + } + ] + }, + { + "shortName": "ListFeatures", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatures", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/featureGroups/*}/features" + } + ] + }, + { + "shortName": "UpdateFeature", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.UpdateFeature", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{feature.name=projects/*/locations/*/featureGroups/*/features/*}" + } + ] + }, + { + "shortName": "UpdateFeatureGroup", + "fullName": "google.cloud.aiplatform.v1.FeatureRegistryService.UpdateFeatureGroup", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{feature_group.name=projects/*/locations/*/featureGroups/*}" + } + ] + } + ] + }, { "shortName": "FeaturestoreOnlineServingService", "fullName": "google.cloud.aiplatform.v1.FeaturestoreOnlineServingService", @@ -15332,6 +15626,42 @@ } ] }, + { + "shortName": "LlmUtilityService", + "fullName": "google.cloud.aiplatform.v1.LlmUtilityService", + "methods": [ + { + "shortName": "ComputeTokens", + "fullName": "google.cloud.aiplatform.v1.LlmUtilityService.ComputeTokens", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{endpoint=projects/*/locations/*/endpoints/*}:computeTokens" + }, + { + "httpMethod": "POST", + "path": "/v1/{endpoint=projects/*/locations/*/publishers/*/models/*}:computeTokens" + } + ] + }, + { + "shortName": "CountTokens", + "fullName": "google.cloud.aiplatform.v1.LlmUtilityService.CountTokens", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{endpoint=projects/*/locations/*/endpoints/*}:countTokens" + }, + { + "httpMethod": "POST", + "path": "/v1/{endpoint=projects/*/locations/*/publishers/*/models/*}:countTokens" + } + ] + } + ] + }, { "shortName": "MatchService", "fullName": "google.cloud.aiplatform.v1.MatchService", @@ -16801,11 +17131,15 @@ "serviceConfigApiNames": [ "google.cloud.aiplatform.v1.DatasetService", "google.cloud.aiplatform.v1.EndpointService", + "google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService", + "google.cloud.aiplatform.v1.FeatureOnlineStoreService", + "google.cloud.aiplatform.v1.FeatureRegistryService", "google.cloud.aiplatform.v1.FeaturestoreOnlineServingService", "google.cloud.aiplatform.v1.FeaturestoreService", "google.cloud.aiplatform.v1.IndexEndpointService", "google.cloud.aiplatform.v1.IndexService", "google.cloud.aiplatform.v1.JobService", + "google.cloud.aiplatform.v1.LlmUtilityService", "google.cloud.aiplatform.v1.MatchService", "google.cloud.aiplatform.v1.MetadataService", "google.cloud.aiplatform.v1.MigrationService", @@ -16845,7 +17179,7 @@ "options": { "csharp_namespace": { "valueCounts": { - "Google.Cloud.AIPlatform.V1Beta1": 94, + "Google.Cloud.AIPlatform.V1Beta1": 95, "Google.Cloud.AIPlatform.V1Beta1.Schema": 6, "Google.Cloud.AIPlatform.V1Beta1.Schema.Predict.Instance": 9, "Google.Cloud.AIPlatform.V1Beta1.Schema.Predict.Params": 6, @@ -16855,7 +17189,7 @@ }, "go_package": { "valueCounts": { - "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb;aiplatformpb": 94, + "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb;aiplatformpb": 95, "cloud.google.com/go/aiplatform/apiv1beta1/schema/predict/instance/instancepb;instancepb": 9, "cloud.google.com/go/aiplatform/apiv1beta1/schema/predict/params/paramspb;paramspb": 6, "cloud.google.com/go/aiplatform/apiv1beta1/schema/predict/prediction/predictionpb;predictionpb": 11, @@ -16865,12 +17199,12 @@ }, "java_multiple_files": { "valueCounts": { - "true": 138 + "true": 139 } }, "java_package": { "valueCounts": { - "com.google.cloud.aiplatform.v1beta1": 94, + "com.google.cloud.aiplatform.v1beta1": 95, "com.google.cloud.aiplatform.v1beta1.schema": 6, "com.google.cloud.aiplatform.v1beta1.schema.predict.instance": 9, "com.google.cloud.aiplatform.v1beta1.schema.predict.params": 6, @@ -16880,7 +17214,7 @@ }, "php_namespace": { "valueCounts": { - "Google\\Cloud\\AIPlatform\\V1beta1": 94, + "Google\\Cloud\\AIPlatform\\V1beta1": 95, "Google\\Cloud\\AIPlatform\\V1beta1\\Schema": 6, "Google\\Cloud\\AIPlatform\\V1beta1\\Schema\\Predict\\Instance": 9, "Google\\Cloud\\AIPlatform\\V1beta1\\Schema\\Predict\\Params": 6, @@ -16890,7 +17224,7 @@ }, "ruby_package": { "valueCounts": { - "Google::Cloud::AIPlatform::V1beta1": 93, + "Google::Cloud::AIPlatform::V1beta1": 94, "Google::Cloud::AIPlatform::V1beta1::Schema": 6, "Google::Cloud::AIPlatform::V1beta1::Schema::Predict::Instance": 9, "Google::Cloud::AIPlatform::V1beta1::Schema::Predict::Params": 6, @@ -18397,6 +18731,27 @@ } ] }, + { + "shortName": "LlmUtilityService", + "fullName": "google.cloud.aiplatform.v1beta1.LlmUtilityService", + "methods": [ + { + "shortName": "ComputeTokens", + "fullName": "google.cloud.aiplatform.v1beta1.LlmUtilityService.ComputeTokens", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1beta1/{endpoint=projects/*/locations/*/endpoints/*}:computeTokens" + }, + { + "httpMethod": "POST", + "path": "/v1beta1/{endpoint=projects/*/locations/*/publishers/*/models/*}:computeTokens" + } + ] + } + ] + }, { "shortName": "MatchService", "fullName": "google.cloud.aiplatform.v1beta1.MatchService", @@ -19108,6 +19463,17 @@ "shortName": "PipelineService", "fullName": "google.cloud.aiplatform.v1beta1.PipelineService", "methods": [ + { + "shortName": "BatchDeletePipelineJobs", + "fullName": "google.cloud.aiplatform.v1beta1.PipelineService.BatchDeletePipelineJobs", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1beta1/{parent=projects/*/locations/*}/pipelineJobs:batchDelete" + } + ] + }, { "shortName": "CancelPipelineJob", "fullName": "google.cloud.aiplatform.v1beta1.PipelineService.CancelPipelineJob", @@ -19962,6 +20328,7 @@ "google.cloud.aiplatform.v1beta1.IndexEndpointService", "google.cloud.aiplatform.v1beta1.IndexService", "google.cloud.aiplatform.v1beta1.JobService", + "google.cloud.aiplatform.v1beta1.LlmUtilityService", "google.cloud.aiplatform.v1beta1.MatchService", "google.cloud.aiplatform.v1beta1.MetadataService", "google.cloud.aiplatform.v1beta1.MigrationService", @@ -53219,37 +53586,37 @@ "options": { "csharp_namespace": { "valueCounts": { - "Google.Cloud.DiscoveryEngine.V1Alpha": 15 + "Google.Cloud.DiscoveryEngine.V1Alpha": 19 } }, "go_package": { "valueCounts": { - "cloud.google.com/go/discoveryengine/apiv1alpha/discoveryenginepb;discoveryenginepb": 15 + "cloud.google.com/go/discoveryengine/apiv1alpha/discoveryenginepb;discoveryenginepb": 19 } }, "java_multiple_files": { "valueCounts": { - "true": 15 + "true": 19 } }, "java_package": { "valueCounts": { - "com.google.cloud.discoveryengine.v1alpha": 15 + "com.google.cloud.discoveryengine.v1alpha": 19 } }, "objc_class_prefix": { "valueCounts": { - "DISCOVERYENGINE": 15 + "DISCOVERYENGINE": 19 } }, "php_namespace": { "valueCounts": { - "Google\\Cloud\\DiscoveryEngine\\V1alpha": 15 + "Google\\Cloud\\DiscoveryEngine\\V1alpha": 19 } }, "ruby_package": { "valueCounts": { - "Google::Cloud::DiscoveryEngine::V1alpha": 15 + "Google::Cloud::DiscoveryEngine::V1alpha": 19 } } }, @@ -53371,6 +53738,87 @@ } ] }, + { + "shortName": "DataStoreService", + "fullName": "google.cloud.discoveryengine.v1alpha.DataStoreService", + "methods": [ + { + "shortName": "CreateDataStore", + "fullName": "google.cloud.discoveryengine.v1alpha.DataStoreService.CreateDataStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1alpha/{parent=projects/*/locations/*}/dataStores" + }, + { + "httpMethod": "POST", + "path": "/v1alpha/{parent=projects/*/locations/*/collections/*}/dataStores" + } + ] + }, + { + "shortName": "DeleteDataStore", + "fullName": "google.cloud.discoveryengine.v1alpha.DataStoreService.DeleteDataStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1alpha/{name=projects/*/locations/*/dataStores/*}" + }, + { + "httpMethod": "DELETE", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/dataStores/*}" + } + ] + }, + { + "shortName": "GetDataStore", + "fullName": "google.cloud.discoveryengine.v1alpha.DataStoreService.GetDataStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1alpha/{name=projects/*/locations/*/dataStores/*}" + }, + { + "httpMethod": "GET", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/dataStores/*}" + } + ] + }, + { + "shortName": "ListDataStores", + "fullName": "google.cloud.discoveryengine.v1alpha.DataStoreService.ListDataStores", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1alpha/{parent=projects/*/locations/*}/dataStores" + }, + { + "httpMethod": "GET", + "path": "/v1alpha/{parent=projects/*/locations/*/collections/*}/dataStores" + } + ] + }, + { + "shortName": "UpdateDataStore", + "fullName": "google.cloud.discoveryengine.v1alpha.DataStoreService.UpdateDataStore", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1alpha/{data_store.name=projects/*/locations/*/dataStores/*}" + }, + { + "httpMethod": "PATCH", + "path": "/v1alpha/{data_store.name=projects/*/locations/*/collections/*/dataStores/*}" + } + ] + } + ] + }, { "shortName": "DocumentService", "fullName": "google.cloud.discoveryengine.v1alpha.DocumentService", @@ -53482,6 +53930,100 @@ } ] }, + { + "shortName": "EngineService", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService", + "methods": [ + { + "shortName": "CreateEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.CreateEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1alpha/{parent=projects/*/locations/*/collections/*}/engines" + } + ] + }, + { + "shortName": "DeleteEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.DeleteEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}" + } + ] + }, + { + "shortName": "GetEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.GetEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}" + } + ] + }, + { + "shortName": "ListEngines", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.ListEngines", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1alpha/{parent=projects/*/locations/*/collections/*}/engines" + } + ] + }, + { + "shortName": "PauseEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.PauseEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}:pause" + } + ] + }, + { + "shortName": "ResumeEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.ResumeEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}:resume" + } + ] + }, + { + "shortName": "TuneEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.TuneEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}:tune" + } + ] + }, + { + "shortName": "UpdateEngine", + "fullName": "google.cloud.discoveryengine.v1alpha.EngineService.UpdateEngine", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1alpha/{engine.name=projects/*/locations/*/collections/*/engines/*}" + } + ] + } + ] + }, { "shortName": "RecommendationService", "fullName": "google.cloud.discoveryengine.v1alpha.RecommendationService", @@ -53705,7 +54247,9 @@ "serviceConfigApiNames": [ "google.cloud.discoveryengine.v1alpha.CompletionService", "google.cloud.discoveryengine.v1alpha.ConversationalSearchService", + "google.cloud.discoveryengine.v1alpha.DataStoreService", "google.cloud.discoveryengine.v1alpha.DocumentService", + "google.cloud.discoveryengine.v1alpha.EngineService", "google.cloud.discoveryengine.v1alpha.RecommendationService", "google.cloud.discoveryengine.v1alpha.SchemaService", "google.cloud.discoveryengine.v1alpha.SearchService", @@ -55869,6 +56413,354 @@ ], "nameInServiceConfig": "edgecontainer.googleapis.com" }, + { + "id": "google.cloud.edgenetwork.v1", + "directory": "google/cloud/edgenetwork/v1", + "version": "v1", + "majorVersion": "v1", + "hostName": "edgenetwork.googleapis.com", + "title": "Distributed Cloud Edge Network API", + "description": "Network management API for Distributed Cloud Edge.", + "importDirectories": [ + "google/api", + "google/cloud/edgenetwork/v1", + "google/longrunning", + "google/protobuf" + ], + "options": { + "csharp_namespace": { + "valueCounts": { + "Google.Cloud.EdgeNetwork.V1": 2 + } + }, + "go_package": { + "valueCounts": { + "cloud.google.com/go/edgenetwork/apiv1/edgenetworkpb;edgenetworkpb": 2 + } + }, + "java_multiple_files": { + "valueCounts": { + "true": 2 + } + }, + "java_package": { + "valueCounts": { + "google.cloud.edgenetwork.v1": 2 + } + }, + "php_namespace": { + "valueCounts": { + "Google\\Cloud\\EdgeNetwork\\V1": 2 + } + }, + "ruby_package": { + "valueCounts": { + "Google::Cloud::EdgeNetwork::V1": 2 + } + } + }, + "services": [ + { + "shortName": "EdgeNetwork", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork", + "methods": [ + { + "shortName": "CreateInterconnectAttachment", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.CreateInterconnectAttachment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/interconnectAttachments" + } + ] + }, + { + "shortName": "CreateNetwork", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.CreateNetwork", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/networks" + } + ] + }, + { + "shortName": "CreateRouter", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.CreateRouter", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/routers" + } + ] + }, + { + "shortName": "CreateSubnet", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.CreateSubnet", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/subnets" + } + ] + }, + { + "shortName": "DeleteInterconnectAttachment", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DeleteInterconnectAttachment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/zones/*/interconnectAttachments/*}" + } + ] + }, + { + "shortName": "DeleteNetwork", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DeleteNetwork", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/zones/*/networks/*}" + } + ] + }, + { + "shortName": "DeleteRouter", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DeleteRouter", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/zones/*/routers/*}" + } + ] + }, + { + "shortName": "DeleteSubnet", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DeleteSubnet", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/zones/*/subnets/*}" + } + ] + }, + { + "shortName": "DiagnoseInterconnect", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DiagnoseInterconnect", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/interconnects/*}:diagnose" + } + ] + }, + { + "shortName": "DiagnoseNetwork", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DiagnoseNetwork", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/networks/*}:diagnose" + } + ] + }, + { + "shortName": "DiagnoseRouter", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.DiagnoseRouter", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/routers/*}:diagnose" + } + ] + }, + { + "shortName": "GetInterconnect", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.GetInterconnect", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/interconnects/*}" + } + ] + }, + { + "shortName": "GetInterconnectAttachment", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.GetInterconnectAttachment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/interconnectAttachments/*}" + } + ] + }, + { + "shortName": "GetNetwork", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.GetNetwork", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/networks/*}" + } + ] + }, + { + "shortName": "GetRouter", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.GetRouter", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/routers/*}" + } + ] + }, + { + "shortName": "GetSubnet", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.GetSubnet", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*/subnets/*}" + } + ] + }, + { + "shortName": "GetZone", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.GetZone", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/zones/*}" + } + ] + }, + { + "shortName": "InitializeZone", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.InitializeZone", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/zones/*}:initialize" + } + ] + }, + { + "shortName": "ListInterconnectAttachments", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.ListInterconnectAttachments", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/interconnectAttachments" + } + ] + }, + { + "shortName": "ListInterconnects", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.ListInterconnects", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/interconnects" + } + ] + }, + { + "shortName": "ListNetworks", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.ListNetworks", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/networks" + } + ] + }, + { + "shortName": "ListRouters", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.ListRouters", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/routers" + } + ] + }, + { + "shortName": "ListSubnets", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.ListSubnets", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/zones/*}/subnets" + } + ] + }, + { + "shortName": "ListZones", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.ListZones", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/zones" + } + ] + }, + { + "shortName": "UpdateRouter", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.UpdateRouter", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{router.name=projects/*/locations/*/zones/*/routers/*}" + } + ] + }, + { + "shortName": "UpdateSubnet", + "fullName": "google.cloud.edgenetwork.v1.EdgeNetwork.UpdateSubnet", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{subnet.name=projects/*/locations/*/zones/*/subnets/*}" + } + ] + } + ] + } + ], + "configFile": "edgenetwork_v1.yaml", + "serviceConfigApiNames": [ + "google.cloud.edgenetwork.v1.EdgeNetwork", + "google.cloud.location.Locations", + "google.longrunning.Operations" + ], + "nameInServiceConfig": "edgenetwork.googleapis.com" + }, { "id": "google.cloud.enterpriseknowledgegraph.v1", "directory": "google/cloud/enterpriseknowledgegraph/v1", @@ -56755,6 +57647,17 @@ } ] }, + { + "shortName": "RevertInstance", + "fullName": "google.cloud.filestore.v1.CloudFilestoreManager.RevertInstance", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/instances/*}:revert" + } + ] + }, { "shortName": "UpdateBackup", "fullName": "google.cloud.filestore.v1.CloudFilestoreManager.UpdateBackup", @@ -56793,7 +57696,9 @@ ], "configFile": "file_v1.yaml", "serviceConfigApiNames": [ - "google.cloud.filestore.v1.CloudFilestoreManager" + "google.cloud.filestore.v1.CloudFilestoreManager", + "google.cloud.location.Locations", + "google.longrunning.Operations" ], "nameInServiceConfig": "file.googleapis.com" }, @@ -72097,6 +73002,11 @@ "valueCounts": { "com.google.cloud.redis.cluster.v1": 1 } + }, + "ruby_package": { + "valueCounts": { + "Google::Cloud::Redis::Cluster::V1": 1 + } } }, "services": [ @@ -84332,6 +85242,463 @@ ], "nameInServiceConfig": "cloudtasks.googleapis.com" }, + { + "id": "google.cloud.telcoautomation.v1", + "directory": "google/cloud/telcoautomation/v1", + "version": "v1", + "majorVersion": "v1", + "hostName": "telcoautomation.googleapis.com", + "title": "Telco Automation API", + "description": "APIs to automate 5G deployment and management of cloud infrastructure and network functions.", + "importDirectories": [ + "google/api", + "google/longrunning", + "google/protobuf" + ], + "options": { + "csharp_namespace": { + "valueCounts": { + "Google.Cloud.TelcoAutomation.V1": 1 + } + }, + "go_package": { + "valueCounts": { + "cloud.google.com/go/telcoautomation/apiv1/telcoautomationpb;telcoautomationpb": 1 + } + }, + "java_multiple_files": { + "valueCounts": { + "true": 1 + } + }, + "java_package": { + "valueCounts": { + "com.google.cloud.telcoautomation.v1": 1 + } + }, + "php_namespace": { + "valueCounts": { + "Google\\Cloud\\TelcoAutomation\\V1": 1 + } + }, + "ruby_package": { + "valueCounts": { + "Google::Cloud::TelcoAutomation::V1": 1 + } + } + }, + "services": [ + { + "shortName": "TelcoAutomation", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation", + "methods": [ + { + "shortName": "ApplyDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ApplyDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:apply" + } + ] + }, + { + "shortName": "ApplyHydratedDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ApplyHydratedDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*/hydratedDeployments/*}:apply" + } + ] + }, + { + "shortName": "ApproveBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ApproveBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:approve" + } + ] + }, + { + "shortName": "ComputeDeploymentStatus", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ComputeDeploymentStatus", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:computeDeploymentStatus" + } + ] + }, + { + "shortName": "CreateBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.CreateBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/blueprints" + } + ] + }, + { + "shortName": "CreateDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.CreateDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/deployments" + } + ] + }, + { + "shortName": "CreateEdgeSlm", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.CreateEdgeSlm", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*}/edgeSlms" + } + ] + }, + { + "shortName": "CreateOrchestrationCluster", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.CreateOrchestrationCluster", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*}/orchestrationClusters" + } + ] + }, + { + "shortName": "DeleteBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.DeleteBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}" + } + ] + }, + { + "shortName": "DeleteEdgeSlm", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.DeleteEdgeSlm", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/edgeSlms/*}" + } + ] + }, + { + "shortName": "DeleteOrchestrationCluster", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.DeleteOrchestrationCluster", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*}" + } + ] + }, + { + "shortName": "DiscardBlueprintChanges", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.DiscardBlueprintChanges", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:discard" + } + ] + }, + { + "shortName": "DiscardDeploymentChanges", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.DiscardDeploymentChanges", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:discard" + } + ] + }, + { + "shortName": "GetBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.GetBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}" + } + ] + }, + { + "shortName": "GetDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.GetDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}" + } + ] + }, + { + "shortName": "GetEdgeSlm", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.GetEdgeSlm", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/edgeSlms/*}" + } + ] + }, + { + "shortName": "GetHydratedDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.GetHydratedDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*/hydratedDeployments/*}" + } + ] + }, + { + "shortName": "GetOrchestrationCluster", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.GetOrchestrationCluster", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*}" + } + ] + }, + { + "shortName": "GetPublicBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.GetPublicBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/publicBlueprints/*}" + } + ] + }, + { + "shortName": "ListBlueprintRevisions", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListBlueprintRevisions", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:listRevisions" + } + ] + }, + { + "shortName": "ListBlueprints", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListBlueprints", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/blueprints" + } + ] + }, + { + "shortName": "ListDeploymentRevisions", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListDeploymentRevisions", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:listRevisions" + } + ] + }, + { + "shortName": "ListDeployments", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListDeployments", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/deployments" + } + ] + }, + { + "shortName": "ListEdgeSlms", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListEdgeSlms", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/edgeSlms" + } + ] + }, + { + "shortName": "ListHydratedDeployments", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListHydratedDeployments", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*/deployments/*}/hydratedDeployments" + } + ] + }, + { + "shortName": "ListOrchestrationClusters", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListOrchestrationClusters", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/orchestrationClusters" + } + ] + }, + { + "shortName": "ListPublicBlueprints", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ListPublicBlueprints", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/publicBlueprints" + } + ] + }, + { + "shortName": "ProposeBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.ProposeBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:propose" + } + ] + }, + { + "shortName": "RejectBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.RejectBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:reject" + } + ] + }, + { + "shortName": "RemoveDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.RemoveDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:remove" + } + ] + }, + { + "shortName": "RollbackDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.RollbackDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:rollback" + } + ] + }, + { + "shortName": "SearchBlueprintRevisions", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.SearchBlueprintRevisions", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/blueprints:searchRevisions" + } + ] + }, + { + "shortName": "SearchDeploymentRevisions", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.SearchDeploymentRevisions", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/deployments:searchRevisions" + } + ] + }, + { + "shortName": "UpdateBlueprint", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.UpdateBlueprint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{blueprint.name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}" + } + ] + }, + { + "shortName": "UpdateDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.UpdateDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{deployment.name=projects/*/locations/*/orchestrationClusters/*/deployments/*}" + } + ] + }, + { + "shortName": "UpdateHydratedDeployment", + "fullName": "google.cloud.telcoautomation.v1.TelcoAutomation.UpdateHydratedDeployment", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{hydrated_deployment.name=projects/*/locations/*/orchestrationClusters/*/deployments/*/hydratedDeployments/*}" + } + ] + } + ] + } + ], + "configFile": "telcoautomation_v1.yaml", + "serviceConfigApiNames": [ + "google.cloud.location.Locations", + "google.cloud.telcoautomation.v1.TelcoAutomation", + "google.longrunning.Operations" + ], + "nameInServiceConfig": "telcoautomation.googleapis.com" + }, { "id": "google.cloud.telcoautomation.v1alpha1", "directory": "google/cloud/telcoautomation/v1alpha1", @@ -89050,6 +90417,39 @@ "shortName": "Warehouse", "fullName": "google.cloud.visionai.v1.Warehouse", "methods": [ + { + "shortName": "AddCollectionItem", + "fullName": "google.cloud.visionai.v1.Warehouse.AddCollectionItem", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{item.collection=projects/*/locations/*/corpora/*/collections/*}:addCollectionItem" + } + ] + }, + { + "shortName": "AnalyzeAsset", + "fullName": "google.cloud.visionai.v1.Warehouse.AnalyzeAsset", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:analyze" + } + ] + }, + { + "shortName": "AnalyzeCorpus", + "fullName": "google.cloud.visionai.v1.Warehouse.AnalyzeCorpus", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/corpora/*}:analyze" + } + ] + }, { "shortName": "ClipAsset", "fullName": "google.cloud.visionai.v1.Warehouse.ClipAsset", @@ -89083,6 +90483,17 @@ } ] }, + { + "shortName": "CreateCollection", + "fullName": "google.cloud.visionai.v1.Warehouse.CreateCollection", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/corpora/*}/collections" + } + ] + }, { "shortName": "CreateCorpus", "fullName": "google.cloud.visionai.v1.Warehouse.CreateCorpus", @@ -89105,6 +90516,28 @@ } ] }, + { + "shortName": "CreateIndex", + "fullName": "google.cloud.visionai.v1.Warehouse.CreateIndex", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/corpora/*}/indexes" + } + ] + }, + { + "shortName": "CreateIndexEndpoint", + "fullName": "google.cloud.visionai.v1.Warehouse.CreateIndexEndpoint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*}/indexEndpoints" + } + ] + }, { "shortName": "CreateSearchConfig", "fullName": "google.cloud.visionai.v1.Warehouse.CreateSearchConfig", @@ -89149,6 +90582,17 @@ } ] }, + { + "shortName": "DeleteCollection", + "fullName": "google.cloud.visionai.v1.Warehouse.DeleteCollection", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/corpora/*/collections/*}" + } + ] + }, { "shortName": "DeleteCorpus", "fullName": "google.cloud.visionai.v1.Warehouse.DeleteCorpus", @@ -89171,6 +90615,28 @@ } ] }, + { + "shortName": "DeleteIndex", + "fullName": "google.cloud.visionai.v1.Warehouse.DeleteIndex", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/corpora/*/indexes/*}" + } + ] + }, + { + "shortName": "DeleteIndexEndpoint", + "fullName": "google.cloud.visionai.v1.Warehouse.DeleteIndexEndpoint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "DELETE", + "path": "/v1/{name=projects/*/locations/*/indexEndpoints/*}" + } + ] + }, { "shortName": "DeleteSearchConfig", "fullName": "google.cloud.visionai.v1.Warehouse.DeleteSearchConfig", @@ -89193,6 +90659,17 @@ } ] }, + { + "shortName": "DeployIndex", + "fullName": "google.cloud.visionai.v1.Warehouse.DeployIndex", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{index_endpoint=projects/*/locations/*/indexEndpoints/*}:deployIndex" + } + ] + }, { "shortName": "GenerateHlsUri", "fullName": "google.cloud.visionai.v1.Warehouse.GenerateHlsUri", @@ -89204,6 +90681,17 @@ } ] }, + { + "shortName": "GenerateRetrievalUrl", + "fullName": "google.cloud.visionai.v1.Warehouse.GenerateRetrievalUrl", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:generateRetrievalUrl" + } + ] + }, { "shortName": "GetAnnotation", "fullName": "google.cloud.visionai.v1.Warehouse.GetAnnotation", @@ -89226,6 +90714,17 @@ } ] }, + { + "shortName": "GetCollection", + "fullName": "google.cloud.visionai.v1.Warehouse.GetCollection", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/corpora/*/collections/*}" + } + ] + }, { "shortName": "GetCorpus", "fullName": "google.cloud.visionai.v1.Warehouse.GetCorpus", @@ -89248,6 +90747,28 @@ } ] }, + { + "shortName": "GetIndex", + "fullName": "google.cloud.visionai.v1.Warehouse.GetIndex", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/corpora/*/indexes/*}" + } + ] + }, + { + "shortName": "GetIndexEndpoint", + "fullName": "google.cloud.visionai.v1.Warehouse.GetIndexEndpoint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{name=projects/*/locations/*/indexEndpoints/*}" + } + ] + }, { "shortName": "GetSearchConfig", "fullName": "google.cloud.visionai.v1.Warehouse.GetSearchConfig", @@ -89270,6 +90791,28 @@ } ] }, + { + "shortName": "ImportAssets", + "fullName": "google.cloud.visionai.v1.Warehouse.ImportAssets", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{parent=projects/*/locations/*/corpora/*}/assets:import" + } + ] + }, + { + "shortName": "IndexAsset", + "fullName": "google.cloud.visionai.v1.Warehouse.IndexAsset", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:index" + } + ] + }, { "shortName": "IngestAsset", "fullName": "google.cloud.visionai.v1.Warehouse.IngestAsset", @@ -89297,6 +90840,17 @@ } ] }, + { + "shortName": "ListCollections", + "fullName": "google.cloud.visionai.v1.Warehouse.ListCollections", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/corpora/*}/collections" + } + ] + }, { "shortName": "ListCorpora", "fullName": "google.cloud.visionai.v1.Warehouse.ListCorpora", @@ -89319,6 +90873,28 @@ } ] }, + { + "shortName": "ListIndexEndpoints", + "fullName": "google.cloud.visionai.v1.Warehouse.ListIndexEndpoints", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*}/indexEndpoints" + } + ] + }, + { + "shortName": "ListIndexes", + "fullName": "google.cloud.visionai.v1.Warehouse.ListIndexes", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{parent=projects/*/locations/*/corpora/*}/indexes" + } + ] + }, { "shortName": "ListSearchConfigs", "fullName": "google.cloud.visionai.v1.Warehouse.ListSearchConfigs", @@ -89341,6 +90917,28 @@ } ] }, + { + "shortName": "RemoveCollectionItem", + "fullName": "google.cloud.visionai.v1.Warehouse.RemoveCollectionItem", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{item.collection=projects/*/locations/*/corpora/*/collections/*}:removeCollectionItem" + } + ] + }, + { + "shortName": "RemoveIndexAsset", + "fullName": "google.cloud.visionai.v1.Warehouse.RemoveIndexAsset", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:removeIndex" + } + ] + }, { "shortName": "SearchAssets", "fullName": "google.cloud.visionai.v1.Warehouse.SearchAssets", @@ -89352,6 +90950,28 @@ } ] }, + { + "shortName": "SearchIndexEndpoint", + "fullName": "google.cloud.visionai.v1.Warehouse.SearchIndexEndpoint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{index_endpoint=projects/*/locations/*/indexEndpoints/*}:searchIndexEndpoint" + } + ] + }, + { + "shortName": "UndeployIndex", + "fullName": "google.cloud.visionai.v1.Warehouse.UndeployIndex", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{index_endpoint=projects/*/locations/*/indexEndpoints/*}:undeployIndex" + } + ] + }, { "shortName": "UpdateAnnotation", "fullName": "google.cloud.visionai.v1.Warehouse.UpdateAnnotation", @@ -89374,6 +90994,17 @@ } ] }, + { + "shortName": "UpdateCollection", + "fullName": "google.cloud.visionai.v1.Warehouse.UpdateCollection", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{collection.name=projects/*/locations/*/corpora/*/collections/*}" + } + ] + }, { "shortName": "UpdateCorpus", "fullName": "google.cloud.visionai.v1.Warehouse.UpdateCorpus", @@ -89396,6 +91027,28 @@ } ] }, + { + "shortName": "UpdateIndex", + "fullName": "google.cloud.visionai.v1.Warehouse.UpdateIndex", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{index.name=projects/*/locations/*/corpora/*/indexes/*}" + } + ] + }, + { + "shortName": "UpdateIndexEndpoint", + "fullName": "google.cloud.visionai.v1.Warehouse.UpdateIndexEndpoint", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "PATCH", + "path": "/v1/{index_endpoint.name=projects/*/locations/*/indexEndpoints/*}" + } + ] + }, { "shortName": "UpdateSearchConfig", "fullName": "google.cloud.visionai.v1.Warehouse.UpdateSearchConfig", @@ -89417,6 +91070,39 @@ "path": "/v1/{search_hypernym.name=projects/*/locations/*/corpora/*/searchHypernyms/*}" } ] + }, + { + "shortName": "UploadAsset", + "fullName": "google.cloud.visionai.v1.Warehouse.UploadAsset", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "POST", + "path": "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:upload" + } + ] + }, + { + "shortName": "ViewCollectionItems", + "fullName": "google.cloud.visionai.v1.Warehouse.ViewCollectionItems", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{collection=projects/*/locations/*/corpora/*/collections/*}:viewCollectionItems" + } + ] + }, + { + "shortName": "ViewIndexedAssets", + "fullName": "google.cloud.visionai.v1.Warehouse.ViewIndexedAssets", + "mode": "UNARY", + "bindings": [ + { + "httpMethod": "GET", + "path": "/v1/{index=projects/*/locations/*/corpora/*/indexes/*}:viewAssets" + } + ] } ] } @@ -96834,7 +98520,7 @@ }, "go_package": { "valueCounts": { - "google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2;cloudprofiler": 1 + "cloud.google.com/go/cloudprofiler/apiv2/cloudprofilerpb;cloudprofilerpb": 1 } }, "java_multiple_files": { diff --git a/google/ads/admob/v1/BUILD.bazel b/google/ads/admob/v1/BUILD.bazel index 2d6e1dcb359007..977992dd232ab3 100644 --- a/google/ads/admob/v1/BUILD.bazel +++ b/google/ads/admob/v1/BUILD.bazel @@ -195,8 +195,6 @@ py_gapic_assembly_pkg( name = "ads-admob-v1-py", deps = [ ":admob_py_gapic", - ":admob_py_grpc", - ":admob_py_proto", ], ) diff --git a/google/ads/googleads/v13/BUILD.bazel b/google/ads/googleads/v13/BUILD.bazel index 8bac5066ebc357..b4f468402c72bd 100644 --- a/google/ads/googleads/v13/BUILD.bazel +++ b/google/ads/googleads/v13/BUILD.bazel @@ -233,12 +233,6 @@ py_gapic_assembly_pkg( name = "googleads-py", deps = [ ":googleads_py_gapic", - "//google/ads/googleads/v13/common:common_py_proto", - "//google/ads/googleads/v13/enums:enums_py_proto", - "//google/ads/googleads/v13/errors:errors_py_proto", - "//google/ads/googleads/v13/resources:resources_py_proto", - "//google/ads/googleads/v13/services:services_py_grpc", - "//google/ads/googleads/v13/services:services_py_proto", ], ) diff --git a/google/ads/googleads/v14/BUILD.bazel b/google/ads/googleads/v14/BUILD.bazel index d61b3a9fd4419e..3214ca8e692d74 100644 --- a/google/ads/googleads/v14/BUILD.bazel +++ b/google/ads/googleads/v14/BUILD.bazel @@ -233,12 +233,6 @@ py_gapic_assembly_pkg( name = "googleads-py", deps = [ ":googleads_py_gapic", - "//google/ads/googleads/v14/common:common_py_proto", - "//google/ads/googleads/v14/enums:enums_py_proto", - "//google/ads/googleads/v14/errors:errors_py_proto", - "//google/ads/googleads/v14/resources:resources_py_proto", - "//google/ads/googleads/v14/services:services_py_grpc", - "//google/ads/googleads/v14/services:services_py_proto", ], ) diff --git a/google/ads/googleads/v15/BUILD.bazel b/google/ads/googleads/v15/BUILD.bazel index 439fba08d6419c..acc8fceff51a3f 100644 --- a/google/ads/googleads/v15/BUILD.bazel +++ b/google/ads/googleads/v15/BUILD.bazel @@ -233,12 +233,6 @@ py_gapic_assembly_pkg( name = "googleads-py", deps = [ ":googleads_py_gapic", - "//google/ads/googleads/v15/common:common_py_proto", - "//google/ads/googleads/v15/enums:enums_py_proto", - "//google/ads/googleads/v15/errors:errors_py_proto", - "//google/ads/googleads/v15/resources:resources_py_proto", - "//google/ads/googleads/v15/services:services_py_grpc", - "//google/ads/googleads/v15/services:services_py_proto", ], ) diff --git a/google/ads/searchads360/v0/BUILD.bazel b/google/ads/searchads360/v0/BUILD.bazel index c80ac7f4a9d01e..40c71a16325dfd 100644 --- a/google/ads/searchads360/v0/BUILD.bazel +++ b/google/ads/searchads360/v0/BUILD.bazel @@ -112,12 +112,6 @@ py_gapic_assembly_pkg( name = "searchads360-py", deps = [ ":searchads360_py_gapic", - "//google/ads/searchads360/v0:searchads360_proto", - "//google/ads/searchads360/v0/enums:enums_py_proto", - "//google/ads/searchads360/v0/common:common_py_proto", - "//google/ads/searchads360/v0/resources:resources_py_proto", - "//google/ads/searchads360/v0/services:services_py_proto", - "//google/ads/searchads360/v0/services:services_py_grpc", ], ) diff --git a/google/ads/searchads360/v0/common/asset_types.proto b/google/ads/searchads360/v0/common/asset_types.proto index 0c99d95b9b293c..687c5788ec89ca 100644 --- a/google/ads/searchads360/v0/common/asset_types.proto +++ b/google/ads/searchads360/v0/common/asset_types.proto @@ -18,7 +18,9 @@ package google.ads.searchads360.v0.common; import "google/ads/searchads360/v0/common/criteria.proto"; import "google/ads/searchads360/v0/enums/call_conversion_reporting_state.proto"; +import "google/ads/searchads360/v0/enums/call_to_action_type.proto"; import "google/ads/searchads360/v0/enums/location_ownership_type.proto"; +import "google/ads/searchads360/v0/enums/mime_type.proto"; import "google/ads/searchads360/v0/enums/mobile_app_vendor.proto"; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; @@ -34,6 +36,46 @@ option ruby_package = "Google::Ads::SearchAds360::V0::Common"; // Proto file containing info messages for specific asset types. +// A YouTube asset. +message YoutubeVideoAsset { + // YouTube video id. This is the 11 character string value used in the + // YouTube video URL. + optional string youtube_video_id = 2; + + // YouTube video title. + string youtube_video_title = 3; +} + +// An Image asset. +message ImageAsset { + // File size of the image asset in bytes. + optional int64 file_size = 6; + + // MIME type of the image asset. + google.ads.searchads360.v0.enums.MimeTypeEnum.MimeType mime_type = 3; + + // Metadata for this image at its original size. + ImageDimension full_size = 4; +} + +// Metadata for an image at a certain size, either original or resized. +message ImageDimension { + // Height of the image. + optional int64 height_pixels = 4; + + // Width of the image. + optional int64 width_pixels = 5; + + // A URL that returns the image with this height and width. + optional string url = 6; +} + +// A Text asset. +message TextAsset { + // Text content of the text asset. + optional string text = 2; +} + // A unified callout asset. message UnifiedCalloutAsset { // The callout text. @@ -170,6 +212,13 @@ message UnifiedCallAsset { string end_date = 11; } +// A call to action asset. +message CallToActionAsset { + // Call to action. + google.ads.searchads360.v0.enums.CallToActionTypeEnum.CallToActionType + call_to_action = 1; +} + // A unified location asset. message UnifiedLocationAsset { // Place IDs uniquely identify a place in the Google Places database and on diff --git a/google/ads/searchads360/v0/common/asset_usage.proto b/google/ads/searchads360/v0/common/asset_usage.proto new file mode 100644 index 00000000000000..fe3a828bc96ce9 --- /dev/null +++ b/google/ads/searchads360/v0/common/asset_usage.proto @@ -0,0 +1,40 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.common; + +import "google/ads/searchads360/v0/enums/served_asset_field_type.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Common"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/common;common"; +option java_multiple_files = true; +option java_outer_classname = "AssetUsageProto"; +option java_package = "com.google.ads.searchads360.v0.common"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Common"; +option ruby_package = "Google::Ads::SearchAds360::V0::Common"; + +// Proto file describing asset usage. + +// Contains the usage information of the asset. +message AssetUsage { + // Resource name of the asset. + string asset = 1; + + // The served field type of the asset. + google.ads.searchads360.v0.enums.ServedAssetFieldTypeEnum.ServedAssetFieldType + served_asset_field_type = 2; +} diff --git a/google/ads/searchads360/v0/common/criteria.proto b/google/ads/searchads360/v0/common/criteria.proto index 4d73f134b3df0f..f0480347b46fc8 100644 --- a/google/ads/searchads360/v0/common/criteria.proto +++ b/google/ads/searchads360/v0/common/criteria.proto @@ -198,3 +198,9 @@ message LocationGroupInfo { // set in CREATE operations. repeated string feed_item_sets = 8; } + +// An audience criterion. +message AudienceInfo { + // The Audience resource name. + string audience = 1; +} diff --git a/google/ads/searchads360/v0/common/metrics.proto b/google/ads/searchads360/v0/common/metrics.proto index dfb17d4aba0861..f72ea9b0d29e2e 100644 --- a/google/ads/searchads360/v0/common/metrics.proto +++ b/google/ads/searchads360/v0/common/metrics.proto @@ -375,4 +375,270 @@ message Metrics { // completes a conversion on your site without interacting with (for example, // clicking on) another ad. optional int64 client_account_view_through_conversions = 155; + + // Client account cross-sell cost of goods sold (COGS) is the total cost + // of products sold as a result of advertising a different product. + // How it works: You report conversions with cart data for + // completed purchases on your website. If the ad that was interacted with + // before the purchase has an associated product (see Shopping Ads) then this + // product is considered the advertised product. Any product included in the + // order the customer places is a sold product. If these products don't match + // then this is considered cross-sell. Cross-sell cost of goods sold is the + // total cost of the products sold that weren't advertised. Example: Someone + // clicked on a Shopping ad for a hat then bought the same hat and a shirt. + // The hat has a cost of goods sold value of $3, the shirt has a cost of goods + // sold value of $5. The cross-sell cost of goods sold for this order is $5. + // This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 client_account_cross_sell_cost_of_goods_sold_micros = 321; + + // Cross-sell cost of goods sold (COGS) is the total cost of products sold as + // a result of advertising a different product. + // How it works: You report conversions with cart data for + // completed purchases on your website. If the ad that was interacted with + // before the purchase has an associated product (see Shopping Ads) then this + // product is considered the advertised product. Any product included in the + // order the customer places is a sold product. If these products don't match + // then this is considered cross-sell. Cross-sell cost of goods sold is the + // total cost of the products sold that weren't advertised. Example: Someone + // clicked on a Shopping ad for a hat then bought the same hat and a shirt. + // The hat has a cost of goods sold value of $3, the shirt has a cost of goods + // sold value of $5. The cross-sell cost of goods sold for this order is $5. + // This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 cross_sell_cost_of_goods_sold_micros = 327; + + // Client account cross-sell gross profit is the profit you made from + // products sold as a result of advertising a different product, minus cost of + // goods sold (COGS). + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the purchase is a sold + // product. If these products don't match then this is considered cross-sell. + // Cross-sell gross profit is the revenue you made from cross-sell attributed + // to your ads minus the cost of the goods sold. Example: Someone clicked on a + // Shopping ad for a hat then bought the same hat and a shirt. The shirt is + // priced $20 and has a cost of goods sold value of $5. The cross-sell gross + // profit of this order is $15 = $20 - $5. This metric is only available if + // you report conversions with cart data. This metric is a monetary value and + // returned in the customer's currency by default. See the metrics_currency + // parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 client_account_cross_sell_gross_profit_micros = 322; + + // Cross-sell gross profit is the profit you made from products sold as a + // result of advertising a different product, minus cost of goods sold (COGS). + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the purchase is a sold + // product. If these products don't match then this is considered cross-sell. + // Cross-sell gross profit is the revenue you made from cross-sell attributed + // to your ads minus the cost of the goods sold. + // Example: Someone clicked on a Shopping ad for a hat then bought the same + // hat and a shirt. The shirt is priced $20 and has a cost of goods sold value + // of $5. The cross-sell gross profit of this order is $15 = $20 - $5. + // This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 cross_sell_gross_profit_micros = 328; + + // Client account cross-sell revenue is the total amount you made from + // products sold as a result of advertising a different product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If these products don't match then this is + // considered cross-sell. Cross-sell revenue is the total value you made from + // cross-sell attributed to your ads. Example: Someone clicked on a Shopping + // ad for a hat then bought the same hat and a shirt. The hat is priced $10 + // and the shirt is priced $20. The cross-sell revenue of this order is $20. + // This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 client_account_cross_sell_revenue_micros = 323; + + // Cross-sell revenue is the total amount you made from products sold as a + // result of advertising a different product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If these products don't match then this is + // considered cross-sell. Cross-sell revenue is the total value you made from + // cross-sell attributed to your ads. Example: Someone clicked on a Shopping + // ad for a hat then bought the same hat and a shirt. The hat is priced $10 + // and the shirt is priced $20. The cross-sell revenue of this order is $20. + // This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 cross_sell_revenue_micros = 329; + + // Client account cross-sell units sold is + // the total number of products sold as a result of advertising a different + // product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If these products don't match then this is + // considered cross-sell. Cross-sell units sold is the total number of + // cross-sold products from all orders attributed to your ads. + // Example: Someone clicked on a Shopping ad for a hat then bought the same + // hat, a shirt and a jacket. The cross-sell units sold in this order is 2. + // This metric is only available if you report conversions with cart data. + optional double client_account_cross_sell_units_sold = 307; + + // Cross-sell units sold is the total number of products sold as a result of + // advertising a different product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If these products don't match then this is + // considered cross-sell. Cross-sell units sold is the total number of + // cross-sold products from all orders attributed to your ads. + // Example: Someone clicked on a Shopping ad for a hat then bought the same + // hat, a shirt and a jacket. The cross-sell units sold in this order is 2. + // This metric is only available if you report conversions with cart data. + optional double cross_sell_units_sold = 330; + + // Client account lead cost of goods sold (COGS) is the total cost of + // products sold as a result of advertising the same product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with has an associated + // product (see Shopping Ads) then this product is considered the advertised + // product. Any product included in the order the customer places is a sold + // product. If the advertised and sold products match, then the cost of these + // goods is counted under lead cost of goods sold. Example: Someone clicked on + // a Shopping ad for a hat then bought the same hat and a shirt. The hat has a + // cost of goods sold value of $3, the shirt has a cost of goods sold value of + // $5. The lead cost of goods sold for this order is $3. This metric is only + // available if you report conversions with cart data. This metric is a + // monetary value and returned in the customer's currency by default. See the + // metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 client_account_lead_cost_of_goods_sold_micros = 324; + + // Lead cost of goods sold (COGS) is the total cost of products sold as a + // result of advertising the same product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with has an associated + // product (see Shopping Ads) then this product is considered the advertised + // product. Any product included in the order the customer places is a sold + // product. If the advertised and sold products match, then the cost of these + // goods is counted under lead cost of goods sold. Example: Someone clicked on + // a Shopping ad for a hat then bought the same hat and a shirt. The hat has a + // cost of goods sold value of $3, the shirt has a cost of goods sold value of + // $5. The lead cost of goods sold for this order is $3. This metric is only + // available if you report conversions with cart data. This metric is a + // monetary value and returned in the customer's currency by default. See the + // metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 lead_cost_of_goods_sold_micros = 332; + + // Client account lead gross profit is the profit you made from products + // sold as a result of advertising the same product, minus cost of goods sold + // (COGS). + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If the advertised and sold products match, then + // the revenue you made from these sales minus the cost of goods sold is your + // lead gross profit. Example: Someone clicked on a Shopping ad for a hat then + // bought the same hat and a shirt. The hat is priced $10 and has a cost of + // goods sold value of $3. The lead gross profit of this order is $7 = $10 - + // $3. This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 client_account_lead_gross_profit_micros = 325; + + // Lead gross profit is the profit you made from products sold as a result of + // advertising the same product, minus cost of goods sold (COGS). + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If the advertised and sold products match, then + // the revenue you made from these sales minus the cost of goods sold is your + // lead gross profit. Example: Someone clicked on a Shopping ad for a hat then + // bought the same hat and a shirt. The hat is priced $10 and has a cost of + // goods sold value of $3. The lead gross profit of this order is $7 = $10 - + // $3. This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 lead_gross_profit_micros = 333; + + // Client account lead revenue is the total amount you made from + // products sold as a result of advertising the same product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If the advertised and sold products match, then + // the total value you made from the sales of these products is shown under + // lead revenue. Example: Someone clicked on a Shopping ad for a hat then + // bought the same hat and a shirt. The hat is priced $10 and the shirt is + // priced $20. The lead revenue of this order is $10. This metric is only + // available if you report conversions with cart data. This metric is a + // monetary value and returned in the customer's currency by default. See the + // metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 client_account_lead_revenue_micros = 326; + + // Lead revenue is the total amount you made from products sold as a result of + // advertising the same product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If the advertised and sold products match, then + // the total value you made from the sales of these products is shown under + // lead revenue. + // Example: Someone clicked on a Shopping ad for a hat then bought the same + // hat and a shirt. The hat is priced $10 and the shirt is priced $20. The + // lead revenue of this order is $10. + // This metric is only available if you report conversions with cart data. + // This metric is a monetary value and returned in the customer's currency by + // default. See the metrics_currency parameter at + // https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause + optional int64 lead_revenue_micros = 334; + + // Client account lead units sold is the total number of + // products sold as a result of advertising the same product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If the advertised and sold products match, then + // the total number of these products sold is shown under lead units sold. + // Example: Someone clicked on a Shopping ad for a hat then bought the same + // hat, a shirt and a jacket. The lead units sold in this order is 1. + // This metric is only available if you report conversions with cart data. + optional double client_account_lead_units_sold = 311; + + // Lead units sold is the total number of products sold as a result of + // advertising the same product. + // How it works: You report conversions with cart data for completed purchases + // on your website. If the ad that was interacted with before the purchase has + // an associated product (see Shopping Ads) then this product is considered + // the advertised product. Any product included in the order the customer + // places is a sold product. If the advertised and sold products match, then + // the total number of these products sold is shown under lead units sold. + // Example: Someone clicked on a Shopping ad for a hat then bought the same + // hat, a shirt and a jacket. The lead units sold in this order is 1. + // This metric is only available if you report conversions with cart data. + optional double lead_units_sold = 335; } diff --git a/google/ads/searchads360/v0/common/segments.proto b/google/ads/searchads360/v0/common/segments.proto index 634128a5dd1f49..22b2d9d625a8f5 100644 --- a/google/ads/searchads360/v0/common/segments.proto +++ b/google/ads/searchads360/v0/common/segments.proto @@ -21,6 +21,9 @@ import "google/ads/searchads360/v0/enums/ad_network_type.proto"; import "google/ads/searchads360/v0/enums/conversion_action_category.proto"; import "google/ads/searchads360/v0/enums/day_of_week.proto"; import "google/ads/searchads360/v0/enums/device.proto"; +import "google/ads/searchads360/v0/enums/product_channel.proto"; +import "google/ads/searchads360/v0/enums/product_channel_exclusivity.proto"; +import "google/ads/searchads360/v0/enums/product_condition.proto"; import "google/api/resource.proto"; option csharp_namespace = "Google.Ads.SearchAds360.V0.Common"; @@ -69,6 +72,140 @@ message Segments { // yyyy-MM-dd. optional string month = 90; + // Bidding category (level 1) of the product. + optional string product_bidding_category_level1 = 92; + + // Bidding category (level 2) of the product. + optional string product_bidding_category_level2 = 93; + + // Bidding category (level 3) of the product. + optional string product_bidding_category_level3 = 94; + + // Bidding category (level 4) of the product. + optional string product_bidding_category_level4 = 95; + + // Bidding category (level 5) of the product. + optional string product_bidding_category_level5 = 96; + + // Brand of the product. + optional string product_brand = 97; + + // Channel of the product. + google.ads.searchads360.v0.enums.ProductChannelEnum.ProductChannel + product_channel = 30; + + // Channel exclusivity of the product. + google.ads.searchads360.v0.enums.ProductChannelExclusivityEnum + .ProductChannelExclusivity product_channel_exclusivity = 31; + + // Condition of the product. + google.ads.searchads360.v0.enums.ProductConditionEnum.ProductCondition + product_condition = 32; + + // Resource name of the geo target constant for the country of sale of the + // product. + optional string product_country = 98; + + // Custom attribute 0 of the product. + optional string product_custom_attribute0 = 99; + + // Custom attribute 1 of the product. + optional string product_custom_attribute1 = 100; + + // Custom attribute 2 of the product. + optional string product_custom_attribute2 = 101; + + // Custom attribute 3 of the product. + optional string product_custom_attribute3 = 102; + + // Custom attribute 4 of the product. + optional string product_custom_attribute4 = 103; + + // Item ID of the product. + optional string product_item_id = 104; + + // Resource name of the language constant for the language of the product. + optional string product_language = 105; + + // Bidding category (level 1) of the product sold. + optional string product_sold_bidding_category_level1 = 166; + + // Bidding category (level 2) of the product sold. + optional string product_sold_bidding_category_level2 = 167; + + // Bidding category (level 3) of the product sold. + optional string product_sold_bidding_category_level3 = 168; + + // Bidding category (level 4) of the product sold. + optional string product_sold_bidding_category_level4 = 169; + + // Bidding category (level 5) of the product sold. + optional string product_sold_bidding_category_level5 = 170; + + // Brand of the product sold. + optional string product_sold_brand = 171; + + // Condition of the product sold. + google.ads.searchads360.v0.enums.ProductConditionEnum.ProductCondition + product_sold_condition = 172; + + // Custom attribute 0 of the product sold. + optional string product_sold_custom_attribute0 = 173; + + // Custom attribute 1 of the product sold. + optional string product_sold_custom_attribute1 = 174; + + // Custom attribute 2 of the product sold. + optional string product_sold_custom_attribute2 = 175; + + // Custom attribute 3 of the product sold. + optional string product_sold_custom_attribute3 = 176; + + // Custom attribute 4 of the product sold. + optional string product_sold_custom_attribute4 = 177; + + // Item ID of the product sold. + optional string product_sold_item_id = 178; + + // Title of the product sold. + optional string product_sold_title = 179; + + // Type (level 1) of the product sold. + optional string product_sold_type_l1 = 180; + + // Type (level 2) of the product sold. + optional string product_sold_type_l2 = 181; + + // Type (level 3) of the product sold. + optional string product_sold_type_l3 = 182; + + // Type (level 4) of the product sold. + optional string product_sold_type_l4 = 183; + + // Type (level 5) of the product sold. + optional string product_sold_type_l5 = 184; + + // Store ID of the product. + optional string product_store_id = 106; + + // Title of the product. + optional string product_title = 107; + + // Type (level 1) of the product. + optional string product_type_l1 = 108; + + // Type (level 2) of the product. + optional string product_type_l2 = 109; + + // Type (level 3) of the product. + optional string product_type_l3 = 110; + + // Type (level 4) of the product. + optional string product_type_l4 = 111; + + // Type (level 5) of the product. + optional string product_type_l5 = 112; + // Quarter as represented by the date of the first day of a quarter. // Uses the calendar year for quarters, for example, the second quarter of // 2018 starts on 2018-04-01. Formatted as yyyy-MM-dd. diff --git a/google/ads/searchads360/v0/enums/ad_strength.proto b/google/ads/searchads360/v0/enums/ad_strength.proto new file mode 100644 index 00000000000000..57077bef615b64 --- /dev/null +++ b/google/ads/searchads360/v0/enums/ad_strength.proto @@ -0,0 +1,58 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "AdStrengthProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing ad strengths. + +// Container for enum describing possible ad strengths. +message AdStrengthEnum { + // Enum listing the possible ad strengths. + enum AdStrength { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The ad strength is currently pending. + PENDING = 2; + + // No ads could be generated. + NO_ADS = 3; + + // Poor strength. + POOR = 4; + + // Average strength. + AVERAGE = 5; + + // Good strength. + GOOD = 6; + + // Excellent strength. + EXCELLENT = 7; + } +} diff --git a/google/ads/searchads360/v0/enums/asset_group_status.proto b/google/ads/searchads360/v0/enums/asset_group_status.proto new file mode 100644 index 00000000000000..e288b3e66619d9 --- /dev/null +++ b/google/ads/searchads360/v0/enums/asset_group_status.proto @@ -0,0 +1,49 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "AssetGroupStatusProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing asset group status. + +// Container for enum describing possible statuses of an asset group. +message AssetGroupStatusEnum { + // The possible statuses of an asset group. + enum AssetGroupStatus { + // The status has not been specified. + UNSPECIFIED = 0; + + // The received value is not known in this version. + UNKNOWN = 1; + + // The asset group is enabled. + ENABLED = 2; + + // The asset group is paused. + PAUSED = 3; + + // The asset group is removed. + REMOVED = 4; + } +} diff --git a/google/ads/searchads360/v0/enums/attribution_type.proto b/google/ads/searchads360/v0/enums/attribution_type.proto new file mode 100644 index 00000000000000..85abef605580af --- /dev/null +++ b/google/ads/searchads360/v0/enums/attribution_type.proto @@ -0,0 +1,44 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "AttributionTypeProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Container for enum describing conversion attribution type in SearchAds360 +message AttributionTypeEnum { + // Conversion attribution type in SearchAds360 + enum AttributionType { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The conversion is attributed to a visit. + VISIT = 2; + + // The conversion is attributed to a criterion and ad pair. + CRITERION_AD = 3; + } +} diff --git a/google/ads/searchads360/v0/enums/budget_period.proto b/google/ads/searchads360/v0/enums/budget_period.proto index 2eb5aa07c87851..eaf0da7b116d30 100644 --- a/google/ads/searchads360/v0/enums/budget_period.proto +++ b/google/ads/searchads360/v0/enums/budget_period.proto @@ -43,8 +43,7 @@ message BudgetPeriodEnum { // Fixed daily budget. FIXED_DAILY = 4; - // Custom budget, added back in V5. - // Custom bugdet can be used with total_amount to specify lifetime budget + // Custom budget can be used with total_amount to specify lifetime budget // limit. CUSTOM_PERIOD = 5; } diff --git a/google/ads/searchads360/v0/enums/call_to_action_type.proto b/google/ads/searchads360/v0/enums/call_to_action_type.proto new file mode 100644 index 00000000000000..dc109d828e1d5d --- /dev/null +++ b/google/ads/searchads360/v0/enums/call_to_action_type.proto @@ -0,0 +1,91 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "CallToActionTypeProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing call to action type. + +// Container for enum describing the call to action types. +message CallToActionTypeEnum { + // Enum describing possible types of call to action. + enum CallToActionType { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The call to action type is learn more. + LEARN_MORE = 2; + + // The call to action type is get quote. + GET_QUOTE = 3; + + // The call to action type is apply now. + APPLY_NOW = 4; + + // The call to action type is sign up. + SIGN_UP = 5; + + // The call to action type is contact us. + CONTACT_US = 6; + + // The call to action type is subscribe. + SUBSCRIBE = 7; + + // The call to action type is download. + DOWNLOAD = 8; + + // The call to action type is book now. + BOOK_NOW = 9; + + // The call to action type is shop now. + SHOP_NOW = 10; + + // The call to action type is buy now. + BUY_NOW = 11; + + // The call to action type is donate now. + DONATE_NOW = 12; + + // The call to action type is order now. + ORDER_NOW = 13; + + // The call to action type is play now. + PLAY_NOW = 14; + + // The call to action type is see more. + SEE_MORE = 15; + + // The call to action type is start now. + START_NOW = 16; + + // The call to action type is visit site. + VISIT_SITE = 17; + + // The call to action type is watch now. + WATCH_NOW = 18; + } +} diff --git a/google/ads/searchads360/v0/enums/conversion_status.proto b/google/ads/searchads360/v0/enums/conversion_status.proto new file mode 100644 index 00000000000000..c1e507fa0f0aa6 --- /dev/null +++ b/google/ads/searchads360/v0/enums/conversion_status.proto @@ -0,0 +1,46 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ConversionStatusProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing conversion status. + +// Container for enum describing possible statuses of a conversion. +message ConversionStatusEnum { + // Possible statuses of a conversion. + enum ConversionStatus { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The conversion is enabled. + ENABLED = 2; + + // The conversion has been removed. + REMOVED = 3; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_bidding_category_level.proto b/google/ads/searchads360/v0/enums/listing_group_filter_bidding_category_level.proto new file mode 100644 index 00000000000000..71bfa0c2b55656 --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_bidding_category_level.proto @@ -0,0 +1,56 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterBiddingCategoryLevelProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Container for enum describing the levels of bidding category used in +// ListingGroupFilterDimension. +message ListingGroupFilterBiddingCategoryLevelEnum { + // The level of the listing group filter bidding category. + enum ListingGroupFilterBiddingCategoryLevel { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // Level 1. + LEVEL1 = 2; + + // Level 2. + LEVEL2 = 3; + + // Level 3. + LEVEL3 = 4; + + // Level 4. + LEVEL4 = 5; + + // Level 5. + LEVEL5 = 6; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_custom_attribute_index.proto b/google/ads/searchads360/v0/enums/listing_group_filter_custom_attribute_index.proto new file mode 100644 index 00000000000000..a8e705849c0b67 --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_custom_attribute_index.proto @@ -0,0 +1,56 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterCustomAttributeIndexProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Container for enum describing the indexes of custom attribute used in +// ListingGroupFilterDimension. +message ListingGroupFilterCustomAttributeIndexEnum { + // The index of customer attributes. + enum ListingGroupFilterCustomAttributeIndex { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // First listing group filter custom attribute. + INDEX0 = 2; + + // Second listing group filter custom attribute. + INDEX1 = 3; + + // Third listing group filter custom attribute. + INDEX2 = 4; + + // Fourth listing group filter custom attribute. + INDEX3 = 5; + + // Fifth listing group filter custom attribute. + INDEX4 = 6; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_product_channel.proto b/google/ads/searchads360/v0/enums/listing_group_filter_product_channel.proto new file mode 100644 index 00000000000000..8b12d1536bbc7f --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_product_channel.proto @@ -0,0 +1,46 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterProductChannelProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Locality of a product offer. +message ListingGroupFilterProductChannelEnum { + // Enum describing the locality of a product offer. + enum ListingGroupFilterProductChannel { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The item is sold online. + ONLINE = 2; + + // The item is sold in local stores. + LOCAL = 3; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_product_condition.proto b/google/ads/searchads360/v0/enums/listing_group_filter_product_condition.proto new file mode 100644 index 00000000000000..7afb7b4c6e38c7 --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_product_condition.proto @@ -0,0 +1,49 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterProductConditionProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Condition of a product offer. +message ListingGroupFilterProductConditionEnum { + // Enum describing the condition of a product offer. + enum ListingGroupFilterProductCondition { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The product condition is new. + NEW = 2; + + // The product condition is refurbished. + REFURBISHED = 3; + + // The product condition is used. + USED = 4; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_product_type_level.proto b/google/ads/searchads360/v0/enums/listing_group_filter_product_type_level.proto new file mode 100644 index 00000000000000..dd741abc49532f --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_product_type_level.proto @@ -0,0 +1,55 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterProductTypeLevelProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Level of the type of a product offer. +message ListingGroupFilterProductTypeLevelEnum { + // Enum describing the level of the type of a product offer. + enum ListingGroupFilterProductTypeLevel { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // Level 1. + LEVEL1 = 2; + + // Level 2. + LEVEL2 = 3; + + // Level 3. + LEVEL3 = 4; + + // Level 4. + LEVEL4 = 5; + + // Level 5. + LEVEL5 = 6; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_type_enum.proto b/google/ads/searchads360/v0/enums/listing_group_filter_type_enum.proto new file mode 100644 index 00000000000000..fdf59536f9defe --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_type_enum.proto @@ -0,0 +1,49 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterTypeEnumProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Container for enum describing the type of the listing group filter node. +message ListingGroupFilterTypeEnum { + // The type of the listing group filter. + enum ListingGroupFilterType { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // Subdivision of products along some listing dimensions. + SUBDIVISION = 2; + + // An included listing group filter leaf node. + UNIT_INCLUDED = 3; + + // An excluded listing group filter leaf node. + UNIT_EXCLUDED = 4; + } +} diff --git a/google/ads/searchads360/v0/enums/listing_group_filter_vertical.proto b/google/ads/searchads360/v0/enums/listing_group_filter_vertical.proto new file mode 100644 index 00000000000000..7c69e2494eb176 --- /dev/null +++ b/google/ads/searchads360/v0/enums/listing_group_filter_vertical.proto @@ -0,0 +1,44 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ListingGroupFilterVerticalProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing listing groups. + +// Container for enum describing the type of the vertical a listing group filter +// tree represents. +message ListingGroupFilterVerticalEnum { + // The type of the listing group filter vertical. + enum ListingGroupFilterVertical { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // Represents the shopping vertical. + SHOPPING = 2; + } +} diff --git a/google/ads/searchads360/v0/enums/mime_type.proto b/google/ads/searchads360/v0/enums/mime_type.proto new file mode 100644 index 00000000000000..b74cebce3f5388 --- /dev/null +++ b/google/ads/searchads360/v0/enums/mime_type.proto @@ -0,0 +1,78 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "MimeTypeProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing mime types. + +// Container for enum describing the mime types. +message MimeTypeEnum { + // The mime type + enum MimeType { + // The mime type has not been specified. + UNSPECIFIED = 0; + + // The received value is not known in this version. + // + // This is a response-only value. + UNKNOWN = 1; + + // MIME type of image/jpeg. + IMAGE_JPEG = 2; + + // MIME type of image/gif. + IMAGE_GIF = 3; + + // MIME type of image/png. + IMAGE_PNG = 4; + + // MIME type of application/x-shockwave-flash. + FLASH = 5; + + // MIME type of text/html. + TEXT_HTML = 6; + + // MIME type of application/pdf. + PDF = 7; + + // MIME type of application/msword. + MSWORD = 8; + + // MIME type of application/vnd.ms-excel. + MSEXCEL = 9; + + // MIME type of application/rtf. + RTF = 10; + + // MIME type of audio/wav. + AUDIO_WAV = 11; + + // MIME type of audio/mp3. + AUDIO_MP3 = 12; + + // MIME type of application/x-html5-ad-zip. + HTML5_AD_ZIP = 13; + } +} diff --git a/google/ads/searchads360/v0/enums/product_bidding_category_level.proto b/google/ads/searchads360/v0/enums/product_bidding_category_level.proto new file mode 100644 index 00000000000000..368c5ddda18bff --- /dev/null +++ b/google/ads/searchads360/v0/enums/product_bidding_category_level.proto @@ -0,0 +1,53 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ProductBiddingCategoryLevelProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Level of a product bidding category. +message ProductBiddingCategoryLevelEnum { + // Enum describing the level of the product bidding category. + enum ProductBiddingCategoryLevel { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // Level 1. + LEVEL1 = 2; + + // Level 2. + LEVEL2 = 3; + + // Level 3. + LEVEL3 = 4; + + // Level 4. + LEVEL4 = 5; + + // Level 5. + LEVEL5 = 6; + } +} diff --git a/google/ads/searchads360/v0/enums/product_bidding_category_status.proto b/google/ads/searchads360/v0/enums/product_bidding_category_status.proto new file mode 100644 index 00000000000000..79a7782c4491f9 --- /dev/null +++ b/google/ads/searchads360/v0/enums/product_bidding_category_status.proto @@ -0,0 +1,46 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ProductBiddingCategoryStatusProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing bidding schemes. + +// Status of the product bidding category. +message ProductBiddingCategoryStatusEnum { + // Enum describing the status of the product bidding category. + enum ProductBiddingCategoryStatus { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The category is active and can be used for bidding. + ACTIVE = 2; + + // The category is obsolete. Used only for reporting purposes. + OBSOLETE = 3; + } +} diff --git a/google/ads/searchads360/v0/enums/product_channel.proto b/google/ads/searchads360/v0/enums/product_channel.proto new file mode 100644 index 00000000000000..f74c6fdc368b5c --- /dev/null +++ b/google/ads/searchads360/v0/enums/product_channel.proto @@ -0,0 +1,46 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ProductChannelProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing bidding schemes. + +// Locality of a product offer. +message ProductChannelEnum { + // Enum describing the locality of a product offer. + enum ProductChannel { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The item is sold online. + ONLINE = 2; + + // The item is sold in local stores. + LOCAL = 3; + } +} diff --git a/google/ads/searchads360/v0/enums/product_channel_exclusivity.proto b/google/ads/searchads360/v0/enums/product_channel_exclusivity.proto new file mode 100644 index 00000000000000..f83c780b7d5b8e --- /dev/null +++ b/google/ads/searchads360/v0/enums/product_channel_exclusivity.proto @@ -0,0 +1,48 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ProductChannelExclusivityProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing bidding schemes. + +// Availability of a product offer. +message ProductChannelExclusivityEnum { + // Enum describing the availability of a product offer. + enum ProductChannelExclusivity { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The item is sold through one channel only, either local stores or online + // as indicated by its ProductChannel. + SINGLE_CHANNEL = 2; + + // The item is matched to its online or local stores counterpart, indicating + // it is available for purchase in both ShoppingProductChannels. + MULTI_CHANNEL = 3; + } +} diff --git a/google/ads/searchads360/v0/enums/product_condition.proto b/google/ads/searchads360/v0/enums/product_condition.proto new file mode 100644 index 00000000000000..16306d468f9a21 --- /dev/null +++ b/google/ads/searchads360/v0/enums/product_condition.proto @@ -0,0 +1,52 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ProductConditionProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing bidding schemes. + +// Condition of a product offer. +message ProductConditionEnum { + // Enum describing the condition of a product offer. + enum ProductCondition { + // Not specified. + UNSPECIFIED = 0; + + // Used for return value only. Represents value unknown in this version. + UNKNOWN = 1; + + // The product condition is old. + OLD = 2; + + // The product condition is new. + NEW = 3; + + // The product condition is refurbished. + REFURBISHED = 4; + + // The product condition is used. + USED = 5; + } +} diff --git a/google/ads/searchads360/v0/enums/served_asset_field_type.proto b/google/ads/searchads360/v0/enums/served_asset_field_type.proto new file mode 100644 index 00000000000000..18ac58cc3a6368 --- /dev/null +++ b/google/ads/searchads360/v0/enums/served_asset_field_type.proto @@ -0,0 +1,136 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.enums; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Enums"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/enums;enums"; +option java_multiple_files = true; +option java_outer_classname = "ServedAssetFieldTypeProto"; +option java_package = "com.google.ads.searchads360.v0.enums"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Enums"; +option ruby_package = "Google::Ads::SearchAds360::V0::Enums"; + +// Proto file describing policy review statuses. + +// Container for enum describing possible asset field types. +message ServedAssetFieldTypeEnum { + // The possible asset field types. + enum ServedAssetFieldType { + // No value has been specified. + UNSPECIFIED = 0; + + // The received value is not known in this version. + // + // This is a response-only value. + UNKNOWN = 1; + + // The asset is used in headline 1. + HEADLINE_1 = 2; + + // The asset is used in headline 2. + HEADLINE_2 = 3; + + // The asset is used in headline 3. + HEADLINE_3 = 4; + + // The asset is used in description 1. + DESCRIPTION_1 = 5; + + // The asset is used in description 2. + DESCRIPTION_2 = 6; + + // The asset was used in a headline. Use this only if there is only one + // headline in the ad. Otherwise, use the HEADLINE_1, HEADLINE_2 or + // HEADLINE_3 enums + HEADLINE = 7; + + // The asset was used as a headline in portrait image. + HEADLINE_IN_PORTRAIT = 8; + + // The asset was used in a long headline (used in MultiAssetResponsiveAd). + LONG_HEADLINE = 9; + + // The asset was used in a description. Use this only if there is only one + // description in the ad. Otherwise, use the DESCRIPTION_1 or DESCRIPTION_@ + // enums + DESCRIPTION = 10; + + // The asset was used as description in portrait image. + DESCRIPTION_IN_PORTRAIT = 11; + + // The asset was used as business name in portrait image. + BUSINESS_NAME_IN_PORTRAIT = 12; + + // The asset was used as business name. + BUSINESS_NAME = 13; + + // The asset was used as a marketing image. + MARKETING_IMAGE = 14; + + // The asset was used as a marketing image in portrait image. + MARKETING_IMAGE_IN_PORTRAIT = 15; + + // The asset was used as a square marketing image. + SQUARE_MARKETING_IMAGE = 16; + + // The asset was used as a portrait marketing image. + PORTRAIT_MARKETING_IMAGE = 17; + + // The asset was used as a logo. + LOGO = 18; + + // The asset was used as a landscape logo. + LANDSCAPE_LOGO = 19; + + // The asset was used as a call-to-action. + CALL_TO_ACTION = 20; + + // The asset was used as a YouTube video. + YOU_TUBE_VIDEO = 21; + + // This asset is used as a sitelink. + SITELINK = 22; + + // This asset is used as a call. + CALL = 23; + + // This asset is used as a mobile app. + MOBILE_APP = 24; + + // This asset is used as a callout. + CALLOUT = 25; + + // This asset is used as a structured snippet. + STRUCTURED_SNIPPET = 26; + + // This asset is used as a price. + PRICE = 27; + + // This asset is used as a promotion. + PROMOTION = 28; + + // This asset is used as an image. + AD_IMAGE = 29; + + // The asset is used as a lead form. + LEAD_FORM = 30; + + // The asset is used as a business logo. + BUSINESS_LOGO = 31; + } +} diff --git a/google/ads/searchads360/v0/resources/asset.proto b/google/ads/searchads360/v0/resources/asset.proto index 027b49f4a0559e..8923bb587a3095 100644 --- a/google/ads/searchads360/v0/resources/asset.proto +++ b/google/ads/searchads360/v0/resources/asset.proto @@ -58,6 +58,9 @@ message Asset { // Output only. The ID of the asset. optional int64 id = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Optional name of the asset. + optional string name = 12; + // Output only. Type of the asset. google.ads.searchads360.v0.enums.AssetTypeEnum.AssetType type = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -87,6 +90,18 @@ message Asset { // The specific type of the asset. oneof asset_data { + // Immutable. A YouTube video asset. + google.ads.searchads360.v0.common.YoutubeVideoAsset youtube_video_asset = 5 + [(google.api.field_behavior) = IMMUTABLE]; + + // Output only. An image asset. + google.ads.searchads360.v0.common.ImageAsset image_asset = 7 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. A text asset. + google.ads.searchads360.v0.common.TextAsset text_asset = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; + // Output only. A unified callout asset. google.ads.searchads360.v0.common.UnifiedCalloutAsset callout_asset = 48 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -106,6 +121,10 @@ message Asset { google.ads.searchads360.v0.common.UnifiedCallAsset call_asset = 47 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Immutable. A call to action asset. + google.ads.searchads360.v0.common.CallToActionAsset call_to_action_asset = + 29 [(google.api.field_behavior) = IMMUTABLE]; + // Output only. A unified location asset. google.ads.searchads360.v0.common.UnifiedLocationAsset location_asset = 49 [(google.api.field_behavior) = OUTPUT_ONLY]; diff --git a/google/ads/searchads360/v0/resources/asset_group.proto b/google/ads/searchads360/v0/resources/asset_group.proto new file mode 100644 index 00000000000000..5e5c724d55a4fb --- /dev/null +++ b/google/ads/searchads360/v0/resources/asset_group.proto @@ -0,0 +1,93 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/enums/ad_strength.proto"; +import "google/ads/searchads360/v0/enums/asset_group_status.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "AssetGroupProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// An asset group. +// AssetGroupAsset is used to link an asset to the asset group. +// AssetGroupSignal is used to associate a signal to an asset group. +message AssetGroup { + option (google.api.resource) = { + type: "searchads360.googleapis.com/AssetGroup" + pattern: "customers/{customer_id}/assetGroups/{asset_group_id}" + }; + + // Immutable. The resource name of the asset group. + // Asset group resource names have the form: + // + // `customers/{customer_id}/assetGroups/{asset_group_id}` + string resource_name = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroup" + } + ]; + + // Output only. The ID of the asset group. + int64 id = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Immutable. The campaign with which this asset group is associated. + // The asset which is linked to the asset group. + string campaign = 2 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/Campaign" + } + ]; + + // Required. Name of the asset group. Required. It must have a minimum length + // of 1 and maximum length of 128. It must be unique under a campaign. + string name = 3 [(google.api.field_behavior) = REQUIRED]; + + // A list of final URLs after all cross domain redirects. In performance max, + // by default, the urls are eligible for expansion unless opted out. + repeated string final_urls = 4; + + // A list of final mobile URLs after all cross domain redirects. In + // performance max, by default, the urls are eligible for expansion + // unless opted out. + repeated string final_mobile_urls = 5; + + // The status of the asset group. + google.ads.searchads360.v0.enums.AssetGroupStatusEnum.AssetGroupStatus + status = 6; + + // First part of text that may appear appended to the url displayed in + // the ad. + string path1 = 7; + + // Second part of text that may appear appended to the url displayed in + // the ad. This field can only be set when path1 is set. + string path2 = 8; + + // Output only. Overall ad strength of this asset group. + google.ads.searchads360.v0.enums.AdStrengthEnum.AdStrength ad_strength = 10 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/ads/searchads360/v0/resources/asset_group_asset.proto b/google/ads/searchads360/v0/resources/asset_group_asset.proto new file mode 100644 index 00000000000000..d78de7f9eb61b3 --- /dev/null +++ b/google/ads/searchads360/v0/resources/asset_group_asset.proto @@ -0,0 +1,76 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/enums/asset_field_type.proto"; +import "google/ads/searchads360/v0/enums/asset_link_status.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "AssetGroupAssetProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// AssetGroupAsset is the link between an asset and an asset group. +// Adding an AssetGroupAsset links an asset with an asset group. +message AssetGroupAsset { + option (google.api.resource) = { + type: "searchads360.googleapis.com/AssetGroupAsset" + pattern: "customers/{customer_id}/assetGroupAssets/{asset_group_id}~{asset_id}~{field_type}" + }; + + // Immutable. The resource name of the asset group asset. + // Asset group asset resource name have the form: + // + // `customers/{customer_id}/assetGroupAssets/{asset_group_id}~{asset_id}~{field_type}` + string resource_name = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroupAsset" + } + ]; + + // Immutable. The asset group which this asset group asset is linking. + string asset_group = 2 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroup" + } + ]; + + // Immutable. The asset which this asset group asset is linking. + string asset = 3 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/Asset" + } + ]; + + // The description of the placement of the asset within the asset group. For + // example: HEADLINE, YOUTUBE_VIDEO etc + google.ads.searchads360.v0.enums.AssetFieldTypeEnum.AssetFieldType + field_type = 4; + + // The status of the link between an asset and asset group. + google.ads.searchads360.v0.enums.AssetLinkStatusEnum.AssetLinkStatus status = + 5; +} diff --git a/google/ads/searchads360/v0/resources/asset_group_listing_group_filter.proto b/google/ads/searchads360/v0/resources/asset_group_listing_group_filter.proto new file mode 100644 index 00000000000000..ac96115af4e7b2 --- /dev/null +++ b/google/ads/searchads360/v0/resources/asset_group_listing_group_filter.proto @@ -0,0 +1,194 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/enums/listing_group_filter_bidding_category_level.proto"; +import "google/ads/searchads360/v0/enums/listing_group_filter_custom_attribute_index.proto"; +import "google/ads/searchads360/v0/enums/listing_group_filter_product_channel.proto"; +import "google/ads/searchads360/v0/enums/listing_group_filter_product_condition.proto"; +import "google/ads/searchads360/v0/enums/listing_group_filter_product_type_level.proto"; +import "google/ads/searchads360/v0/enums/listing_group_filter_type_enum.proto"; +import "google/ads/searchads360/v0/enums/listing_group_filter_vertical.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "AssetGroupListingGroupFilterProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// AssetGroupListingGroupFilter represents a listing group filter tree node in +// an asset group. +message AssetGroupListingGroupFilter { + option (google.api.resource) = { + type: "searchads360.googleapis.com/AssetGroupListingGroupFilter" + pattern: "customers/{customer_id}/assetGroupListingGroupFilters/{asset_group_id}~{listing_group_filter_id}" + }; + + // Immutable. The resource name of the asset group listing group filter. + // Asset group listing group filter resource name have the form: + // + // `customers/{customer_id}/assetGroupListingGroupFilters/{asset_group_id}~{listing_group_filter_id}` + string resource_name = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroupListingGroupFilter" + } + ]; + + // Immutable. The asset group which this asset group listing group filter is + // part of. + string asset_group = 2 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroup" + } + ]; + + // Output only. The ID of the ListingGroupFilter. + int64 id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Immutable. Type of a listing group filter node. + google.ads.searchads360.v0.enums.ListingGroupFilterTypeEnum + .ListingGroupFilterType type = 4 + [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. The vertical the current node tree represents. All nodes in the + // same tree must belong to the same vertical. + google.ads.searchads360.v0.enums.ListingGroupFilterVerticalEnum + .ListingGroupFilterVertical vertical = 5 + [(google.api.field_behavior) = IMMUTABLE]; + + // Dimension value with which this listing group is refining its parent. + // Undefined for the root group. + ListingGroupFilterDimension case_value = 6; + + // Immutable. Resource name of the parent listing group subdivision. Null for + // the root listing group filter node. + string parent_listing_group_filter = 7 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroupListingGroupFilter" + } + ]; + + // Output only. The path of dimensions defining this listing group filter. + ListingGroupFilterDimensionPath path = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// The path defining of dimensions defining a listing group filter. +message ListingGroupFilterDimensionPath { + // Output only. The complete path of dimensions through the listing group + // filter hierarchy (excluding the root node) to this listing group filter. + repeated ListingGroupFilterDimension dimensions = 1 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Listing dimensions for the asset group listing group filter. +message ListingGroupFilterDimension { + // One element of a bidding category at a certain level. Top-level categories + // are at level 1, their children at level 2, and so on. We currently support + // up to 5 levels. The user must specify a dimension type that indicates the + // level of the category. All cases of the same subdivision must have the same + // dimension type (category level). + message ProductBiddingCategory { + // ID of the product bidding category. + // + // This ID is equivalent to the google_product_category ID as described in + // this article: https://support.google.com/merchants/answer/6324436 + optional int64 id = 1; + + // Indicates the level of the category in the taxonomy. + google.ads.searchads360.v0.enums.ListingGroupFilterBiddingCategoryLevelEnum + .ListingGroupFilterBiddingCategoryLevel level = 2; + } + + // Brand of the product. + message ProductBrand { + // String value of the product brand. + optional string value = 1; + } + + // Locality of a product offer. + message ProductChannel { + // Value of the locality. + google.ads.searchads360.v0.enums.ListingGroupFilterProductChannelEnum + .ListingGroupFilterProductChannel channel = 1; + } + + // Condition of a product offer. + message ProductCondition { + // Value of the condition. + google.ads.searchads360.v0.enums.ListingGroupFilterProductConditionEnum + .ListingGroupFilterProductCondition condition = 1; + } + + // Custom attribute of a product offer. + message ProductCustomAttribute { + // String value of the product custom attribute. + optional string value = 1; + + // Indicates the index of the custom attribute. + google.ads.searchads360.v0.enums.ListingGroupFilterCustomAttributeIndexEnum + .ListingGroupFilterCustomAttributeIndex index = 2; + } + + // Item id of a product offer. + message ProductItemId { + // Value of the id. + optional string value = 1; + } + + // Type of a product offer. + message ProductType { + // Value of the type. + optional string value = 1; + + // Level of the type. + google.ads.searchads360.v0.enums.ListingGroupFilterProductTypeLevelEnum + .ListingGroupFilterProductTypeLevel level = 2; + } + + // Dimension of one of the types below is always present. + oneof dimension { + // Bidding category of a product offer. + ProductBiddingCategory product_bidding_category = 1; + + // Brand of a product offer. + ProductBrand product_brand = 2; + + // Locality of a product offer. + ProductChannel product_channel = 3; + + // Condition of a product offer. + ProductCondition product_condition = 4; + + // Custom attribute of a product offer. + ProductCustomAttribute product_custom_attribute = 5; + + // Item id of a product offer. + ProductItemId product_item_id = 6; + + // Type of a product offer. + ProductType product_type = 7; + } +} diff --git a/google/ads/searchads360/v0/resources/asset_group_signal.proto b/google/ads/searchads360/v0/resources/asset_group_signal.proto new file mode 100644 index 00000000000000..0ac8783fc316d7 --- /dev/null +++ b/google/ads/searchads360/v0/resources/asset_group_signal.proto @@ -0,0 +1,68 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/common/criteria.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "AssetGroupSignalProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// AssetGroupSignal represents a signal in an asset group. The existence of a +// signal tells the performance max campaign who's most likely to convert. +// Performance Max uses the signal to look for new people with similar or +// stronger intent to find conversions across Search, Display, Video, and more. +message AssetGroupSignal { + option (google.api.resource) = { + type: "searchads360.googleapis.com/AssetGroupSignal" + pattern: "customers/{customer_id}/assetGroupSignals/{asset_group_id}~{criterion_id}" + }; + + // Immutable. The resource name of the asset group signal. + // Asset group signal resource name have the form: + // + // `customers/{customer_id}/assetGroupSignals/{asset_group_id}~{signal_id}` + string resource_name = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroupSignal" + } + ]; + + // Immutable. The asset group which this asset group signal belongs to. + string asset_group = 2 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroup" + } + ]; + + // The signal of the asset group. + oneof signal { + // Immutable. The audience signal to be used by the performance max + // campaign. + google.ads.searchads360.v0.common.AudienceInfo audience = 4 + [(google.api.field_behavior) = IMMUTABLE]; + } +} diff --git a/google/ads/searchads360/v0/resources/asset_group_top_combination_view.proto b/google/ads/searchads360/v0/resources/asset_group_top_combination_view.proto new file mode 100644 index 00000000000000..281254d770c39a --- /dev/null +++ b/google/ads/searchads360/v0/resources/asset_group_top_combination_view.proto @@ -0,0 +1,62 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/common/asset_usage.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "AssetGroupTopCombinationViewProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the asset group top combination view resource. + +// A view on the usage of ad group ad asset combination. +message AssetGroupTopCombinationView { + option (google.api.resource) = { + type: "searchads360.googleapis.com/AssetGroupTopCombinationView" + pattern: "customers/{customer_id}/assetGroupTopCombinationViews/{asset_group_id}~{asset_combination_category}" + }; + + // Output only. The resource name of the asset group top combination view. + // AssetGroup Top Combination view resource names have the form: + // `"customers/{customer_id}/assetGroupTopCombinationViews/{asset_group_id}~{asset_combination_category}" + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/AssetGroupTopCombinationView" + } + ]; + + // Output only. The top combinations of assets that served together. + repeated AssetGroupAssetCombinationData asset_group_top_combinations = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Asset group asset combination data +message AssetGroupAssetCombinationData { + // Output only. Served assets. + repeated google.ads.searchads360.v0.common.AssetUsage + asset_combination_served_assets = 1 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/ads/searchads360/v0/resources/audience.proto b/google/ads/searchads360/v0/resources/audience.proto new file mode 100644 index 00000000000000..d6c7eb3953bde6 --- /dev/null +++ b/google/ads/searchads360/v0/resources/audience.proto @@ -0,0 +1,64 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "AudienceProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the Audience resource. + +// Audience is an effective targeting option that lets you +// intersect different segment attributes, such as detailed demographics and +// affinities, to create audiences that represent sections of your target +// segments. +message Audience { + option (google.api.resource) = { + type: "searchads360.googleapis.com/Audience" + pattern: "customers/{customer_id}/audiences/{audience_id}" + }; + + // Immutable. The resource name of the audience. + // Audience names have the form: + // + // `customers/{customer_id}/audiences/{audience_id}` + string resource_name = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/Audience" + } + ]; + + // Output only. ID of the audience. + int64 id = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Required. Name of the audience. It should be unique across all + // audiences. It must have a minimum length of 1 and + // maximum length of 255. + string name = 4 [(google.api.field_behavior) = REQUIRED]; + + // Description of this audience. + string description = 5; +} diff --git a/google/ads/searchads360/v0/resources/cart_data_sales_view.proto b/google/ads/searchads360/v0/resources/cart_data_sales_view.proto new file mode 100644 index 00000000000000..e9d4286f738b0c --- /dev/null +++ b/google/ads/searchads360/v0/resources/cart_data_sales_view.proto @@ -0,0 +1,49 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "CartDataSalesViewProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the CartDataSalesView resource. + +// Cart data sales view. +message CartDataSalesView { + option (google.api.resource) = { + type: "searchads360.googleapis.com/CartDataSalesView" + pattern: "customers/{customer_id}/cartDataSalesView" + }; + + // Output only. The resource name of the Cart data sales view. + // Cart data sales view resource names have the form: + // `customers/{customer_id}/cartDataSalesView` + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/CartDataSalesView" + } + ]; +} diff --git a/google/ads/searchads360/v0/resources/conversion.proto b/google/ads/searchads360/v0/resources/conversion.proto new file mode 100644 index 00000000000000..9d860deb6f275e --- /dev/null +++ b/google/ads/searchads360/v0/resources/conversion.proto @@ -0,0 +1,162 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/enums/asset_field_type.proto"; +import "google/ads/searchads360/v0/enums/attribution_type.proto"; +import "google/ads/searchads360/v0/enums/conversion_status.proto"; +import "google/ads/searchads360/v0/enums/product_channel.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "ConversionProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the Conversion resource. + +// A conversion. +message Conversion { + option (google.api.resource) = { + type: "searchads360.googleapis.com/Conversion" + pattern: "customers/{customer_id}/conversions/{ad_group_id}~{criteria_id}~{ds_conversion_id}" + }; + + // Output only. The resource name of the conversion. + // Conversion resource names have the form: + // + // `customers/{customer_id}/conversions/{ad_group_id}~{criterion_id}~{ds_conversion_id}` + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/Conversion" + } + ]; + + // Output only. The ID of the conversion + optional int64 id = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Search Ads 360 criterion ID. A value of 0 indicates that the + // criterion is unattributed. + optional int64 criterion_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The SearchAds360 inventory account ID containing the product + // that was clicked on. SearchAds360 generates this ID when you link an + // inventory account in SearchAds360. + optional int64 merchant_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Ad ID. A value of 0 indicates that the ad is unattributed. + optional int64 ad_id = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. A unique string, for the visit that the conversion is + // attributed to, that is passed to the landing page as the click id URL + // parameter. + optional string click_id = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The SearchAds360 visit ID that the conversion is attributed + // to. + optional int64 visit_id = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. For offline conversions, this is an ID provided by + // advertisers. If an advertiser doesn't specify such an ID, Search Ads 360 + // generates one. For online conversions, this is equal to the id column or + // the floodlight_order_id column depending on the advertiser's Floodlight + // instructions. + optional string advertiser_conversion_id = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The ID of the product clicked on. + optional string product_id = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The sales channel of the product that was clicked on: Online + // or Local. + optional google.ads.searchads360.v0.enums.ProductChannelEnum.ProductChannel + product_channel = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The language (ISO-639-1) that has been set for the Merchant + // Center feed containing data about the product. + optional string product_language_code = 11 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The store in the Local Inventory Ad that was clicked on. This + // should match the store IDs used in your local products feed. + optional string product_store_id = 12 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The country (ISO-3166-format) registered for the inventory + // feed that contains the product clicked on. + optional string product_country_code = 13 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. What the conversion is attributed to: Visit or Keyword+Ad. + optional google.ads.searchads360.v0.enums.AttributionTypeEnum.AttributionType + attribution_type = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp of the conversion event. + optional string conversion_date_time = 15 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp of the last time the conversion was modified. + optional string conversion_last_modified_date_time = 16 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp of the visit that the conversion is attributed + // to. + optional string conversion_visit_date_time = 17 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The quantity of items recorded by the conversion, as + // determined by the qty url parameter. The advertiser is responsible for + // dynamically populating the parameter (such as number of items sold in the + // conversion), otherwise it defaults to 1. + optional int64 conversion_quantity = 18 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The adjusted revenue in micros for the conversion event. This + // will always be in the currency of the serving account. + optional int64 conversion_revenue_micros = 19 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The original, unchanged revenue associated with the Floodlight + // event (in the currency of the current report), before Floodlight currency + // instruction modifications. + optional int64 floodlight_original_revenue = 20 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The Floodlight order ID provided by the advertiser for the + // conversion. + optional string floodlight_order_id = 21 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The status of the conversion, either ENABLED or REMOVED.. + optional + google.ads.searchads360.v0.enums.ConversionStatusEnum.ConversionStatus + status = 22 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. ID of the asset which was interacted with during the + // conversion event. + optional int64 asset_id = 23 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Asset field type of the conversion event. + optional google.ads.searchads360.v0.enums.AssetFieldTypeEnum.AssetFieldType + asset_field_type = 24 [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/ads/searchads360/v0/resources/language_constant.proto b/google/ads/searchads360/v0/resources/language_constant.proto new file mode 100644 index 00000000000000..16b16acb352960 --- /dev/null +++ b/google/ads/searchads360/v0/resources/language_constant.proto @@ -0,0 +1,64 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "LanguageConstantProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the language constant resource. + +// A language. +message LanguageConstant { + option (google.api.resource) = { + type: "searchads360.googleapis.com/LanguageConstant" + pattern: "languageConstants/{criterion_id}" + }; + + // Output only. The resource name of the language constant. + // Language constant resource names have the form: + // + // `languageConstants/{criterion_id}` + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/LanguageConstant" + } + ]; + + // Output only. The ID of the language constant. + optional int64 id = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The language code, for example, "en_US", "en_AU", "es", "fr", + // etc. + optional string code = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The full name of the language in English, for example, + // "English (US)", "Spanish", etc. + optional string name = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Whether the language is targetable. + optional bool targetable = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/ads/searchads360/v0/resources/product_bidding_category_constant.proto b/google/ads/searchads360/v0/resources/product_bidding_category_constant.proto new file mode 100644 index 00000000000000..8d3cb86aa2afdf --- /dev/null +++ b/google/ads/searchads360/v0/resources/product_bidding_category_constant.proto @@ -0,0 +1,89 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/enums/product_bidding_category_level.proto"; +import "google/ads/searchads360/v0/enums/product_bidding_category_status.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "ProductBiddingCategoryConstantProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the ProductBiddingCategoryConstant resource. + +// A Product Bidding Category. +message ProductBiddingCategoryConstant { + option (google.api.resource) = { + type: "searchads360.googleapis.com/ProductBiddingCategoryConstant" + pattern: "productBiddingCategoryConstants/{country_code}~{level}~{canonical_value}" + }; + + // Output only. The resource name of the product bidding category. + // Product bidding category resource names have the form: + // + // `productBiddingCategoryConstants/{country_code}~{level}~{id}` + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/ProductBiddingCategoryConstant" + } + ]; + + // Output only. ID of the product bidding category. + // + // This ID is equivalent to the google_product_category ID as described in + // this article: https://support.google.com/merchants/answer/6324436. + optional int64 id = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Two-letter upper-case country code of the product bidding + // category. + optional string country_code = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Resource name of the parent product bidding category. + optional string product_bidding_category_constant_parent = 12 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/ProductBiddingCategoryConstant" + } + ]; + + // Output only. Level of the product bidding category. + google.ads.searchads360.v0.enums.ProductBiddingCategoryLevelEnum + .ProductBiddingCategoryLevel level = 5 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Status of the product bidding category. + google.ads.searchads360.v0.enums.ProductBiddingCategoryStatusEnum + .ProductBiddingCategoryStatus status = 6 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Language code of the product bidding category. + optional string language_code = 13 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Display value of the product bidding category localized + // according to language_code. + optional string localized_name = 14 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/ads/searchads360/v0/resources/shopping_performance_view.proto b/google/ads/searchads360/v0/resources/shopping_performance_view.proto new file mode 100644 index 00000000000000..81ae296b5dc941 --- /dev/null +++ b/google/ads/searchads360/v0/resources/shopping_performance_view.proto @@ -0,0 +1,54 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "ShoppingPerformanceViewProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the ShoppingPerformanceView resource. + +// Shopping performance view. +// Provides Shopping campaign statistics aggregated at several product dimension +// levels. Product dimension values from Merchant Center such as brand, +// category, custom attributes, product condition and product type will reflect +// the state of each dimension as of the date and time when the corresponding +// event was recorded. +message ShoppingPerformanceView { + option (google.api.resource) = { + type: "searchads360.googleapis.com/ShoppingPerformanceView" + pattern: "customers/{customer_id}/shoppingPerformanceView" + }; + + // Output only. The resource name of the Shopping performance view. + // Shopping performance view resource names have the form: + // `customers/{customer_id}/shoppingPerformanceView` + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/ShoppingPerformanceView" + } + ]; +} diff --git a/google/ads/searchads360/v0/resources/visit.proto b/google/ads/searchads360/v0/resources/visit.proto new file mode 100644 index 00000000000000..84c885fb21ec67 --- /dev/null +++ b/google/ads/searchads360/v0/resources/visit.proto @@ -0,0 +1,107 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.ads.searchads360.v0.resources; + +import "google/ads/searchads360/v0/enums/asset_field_type.proto"; +import "google/ads/searchads360/v0/enums/product_channel.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Ads.SearchAds360.V0.Resources"; +option go_package = "google.golang.org/genproto/googleapis/ads/searchads360/v0/resources;resources"; +option java_multiple_files = true; +option java_outer_classname = "VisitProto"; +option java_package = "com.google.ads.searchads360.v0.resources"; +option objc_class_prefix = "GASA360"; +option php_namespace = "Google\\Ads\\SearchAds360\\V0\\Resources"; +option ruby_package = "Google::Ads::SearchAds360::V0::Resources"; + +// Proto file describing the Visit resource. + +// A visit. +message Visit { + option (google.api.resource) = { + type: "searchads360.googleapis.com/Visit" + pattern: "customers/{customer_id}/visits/{ad_group_id}~{criteria_id}~{ds_visit_id}" + }; + + // Output only. The resource name of the visit. + // Visit resource names have the form: + // + // `customers/{customer_id}/visits/{ad_group_id}~{criterion_id}~{ds_visit_id}` + string resource_name = 1 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { + type: "searchads360.googleapis.com/Visit" + } + ]; + + // Output only. The ID of the visit. + optional int64 id = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Search Ads 360 keyword ID. A value of 0 indicates that the + // keyword is unattributed. + optional int64 criterion_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The Search Ads 360 inventory account ID containing the product + // that was clicked on. Search Ads 360 generates this ID when you link an + // inventory account in Search Ads 360. + optional int64 merchant_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Ad ID. A value of 0 indicates that the ad is unattributed. + optional int64 ad_id = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. A unique string for each visit that is passed to the landing + // page as the click id URL parameter. + optional string click_id = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp of the visit event. The timestamp is in the + // customer's time zone and in "yyyy-MM-dd HH:mm:ss" format. + optional string visit_date_time = 7 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The ID of the product clicked on. + optional string product_id = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The sales channel of the product that was clicked on: Online + // or Local. + optional google.ads.searchads360.v0.enums.ProductChannelEnum.ProductChannel + product_channel = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The language (ISO-639-1) that has been set for the Merchant + // Center feed containing data about the product. + optional string product_language_code = 10 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The store in the Local Inventory Ad that was clicked on. This + // should match the store IDs used in your local products feed. + optional string product_store_id = 11 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The country (ISO-3166 format) registered for the inventory + // feed that contains the product clicked on. + optional string product_country_code = 12 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. ID of the asset which was interacted with during the visit + // event. + optional int64 asset_id = 13 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Asset field type of the visit event. + optional google.ads.searchads360.v0.enums.AssetFieldTypeEnum.AssetFieldType + asset_field_type = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/ads/searchads360/v0/searchads360_grpc_service_config.json b/google/ads/searchads360/v0/searchads360_grpc_service_config.json index 4c9b2571be9029..9677960ac4f19b 100644 --- a/google/ads/searchads360/v0/searchads360_grpc_service_config.json +++ b/google/ads/searchads360/v0/searchads360_grpc_service_config.json @@ -5,6 +5,9 @@ { "service": "google.ads.searchads360.v0.services.CustomColumnService" }, + { + "service": "google.ads.searchads360.v0.services.CustomerService" + }, { "service": "google.ads.searchads360.v0.services.SearchAds360FieldService" }, diff --git a/google/ads/searchads360/v0/searchads360_v0.yaml b/google/ads/searchads360/v0/searchads360_v0.yaml index 026662d3188fca..eb93eeb2bf27cf 100644 --- a/google/ads/searchads360/v0/searchads360_v0.yaml +++ b/google/ads/searchads360/v0/searchads360_v0.yaml @@ -14,23 +14,6 @@ documentation: The Search Ads 360 API allows developers to automate downloading reports from Search Ads 360. -backend: - rules: - - selector: google.ads.searchads360.v0.services.CustomColumnService.GetCustomColumn - deadline: 600.0 - - selector: google.ads.searchads360.v0.services.CustomColumnService.ListCustomColumns - deadline: 600.0 - - selector: google.ads.searchads360.v0.services.CustomerService.ListAccessibleCustomers - deadline: 600.0 - - selector: google.ads.searchads360.v0.services.SearchAds360FieldService.GetSearchAds360Field - deadline: 600.0 - - selector: google.ads.searchads360.v0.services.SearchAds360FieldService.SearchSearchAds360Fields - deadline: 600.0 - - selector: google.ads.searchads360.v0.services.SearchAds360Service.Search - deadline: 3600.0 - - selector: google.ads.searchads360.v0.services.SearchAds360Service.SearchStream - deadline: 3600.0 - authentication: rules: - selector: google.ads.searchads360.v0.services.CustomColumnService.GetCustomColumn diff --git a/google/ads/searchads360/v0/services/search_ads360_service.proto b/google/ads/searchads360/v0/services/search_ads360_service.proto index b802b1ffad64c6..1a3f52617c91e3 100644 --- a/google/ads/searchads360/v0/services/search_ads360_service.proto +++ b/google/ads/searchads360/v0/services/search_ads360_service.proto @@ -32,8 +32,14 @@ import "google/ads/searchads360/v0/resources/ad_group_criterion_label.proto"; import "google/ads/searchads360/v0/resources/ad_group_label.proto"; import "google/ads/searchads360/v0/resources/age_range_view.proto"; import "google/ads/searchads360/v0/resources/asset.proto"; +import "google/ads/searchads360/v0/resources/asset_group.proto"; +import "google/ads/searchads360/v0/resources/asset_group_asset.proto"; +import "google/ads/searchads360/v0/resources/asset_group_listing_group_filter.proto"; +import "google/ads/searchads360/v0/resources/asset_group_signal.proto"; +import "google/ads/searchads360/v0/resources/asset_group_top_combination_view.proto"; import "google/ads/searchads360/v0/resources/asset_set.proto"; import "google/ads/searchads360/v0/resources/asset_set_asset.proto"; +import "google/ads/searchads360/v0/resources/audience.proto"; import "google/ads/searchads360/v0/resources/bidding_strategy.proto"; import "google/ads/searchads360/v0/resources/campaign.proto"; import "google/ads/searchads360/v0/resources/campaign_asset.proto"; @@ -42,6 +48,8 @@ import "google/ads/searchads360/v0/resources/campaign_audience_view.proto"; import "google/ads/searchads360/v0/resources/campaign_budget.proto"; import "google/ads/searchads360/v0/resources/campaign_criterion.proto"; import "google/ads/searchads360/v0/resources/campaign_label.proto"; +import "google/ads/searchads360/v0/resources/cart_data_sales_view.proto"; +import "google/ads/searchads360/v0/resources/conversion.proto"; import "google/ads/searchads360/v0/resources/conversion_action.proto"; import "google/ads/searchads360/v0/resources/customer.proto"; import "google/ads/searchads360/v0/resources/customer_asset.proto"; @@ -53,9 +61,13 @@ import "google/ads/searchads360/v0/resources/gender_view.proto"; import "google/ads/searchads360/v0/resources/geo_target_constant.proto"; import "google/ads/searchads360/v0/resources/keyword_view.proto"; import "google/ads/searchads360/v0/resources/label.proto"; +import "google/ads/searchads360/v0/resources/language_constant.proto"; import "google/ads/searchads360/v0/resources/location_view.proto"; +import "google/ads/searchads360/v0/resources/product_bidding_category_constant.proto"; import "google/ads/searchads360/v0/resources/product_group_view.proto"; +import "google/ads/searchads360/v0/resources/shopping_performance_view.proto"; import "google/ads/searchads360/v0/resources/user_list.proto"; +import "google/ads/searchads360/v0/resources/visit.proto"; import "google/ads/searchads360/v0/resources/webpage_view.proto"; import "google/api/annotations.proto"; import "google/api/client.proto"; @@ -263,6 +275,24 @@ message SearchAds360Row { // The asset referenced in the query. google.ads.searchads360.v0.resources.Asset asset = 105; + // The asset group asset referenced in the query. + google.ads.searchads360.v0.resources.AssetGroupAsset asset_group_asset = 173; + + // The asset group signal referenced in the query. + google.ads.searchads360.v0.resources.AssetGroupSignal asset_group_signal = + 191; + + // The asset group listing group filter referenced in the query. + google.ads.searchads360.v0.resources.AssetGroupListingGroupFilter + asset_group_listing_group_filter = 182; + + // The asset group top combination view referenced in the query. + google.ads.searchads360.v0.resources.AssetGroupTopCombinationView + asset_group_top_combination_view = 199; + + // The asset group referenced in the query. + google.ads.searchads360.v0.resources.AssetGroup asset_group = 172; + // The asset set asset referenced in the query. google.ads.searchads360.v0.resources.AssetSetAsset asset_set_asset = 180; @@ -296,6 +326,13 @@ message SearchAds360Row { // The campaign label referenced in the query. google.ads.searchads360.v0.resources.CampaignLabel campaign_label = 108; + // The cart data sales view referenced in the query. + google.ads.searchads360.v0.resources.CartDataSalesView cart_data_sales_view = + 221; + + // The Audience referenced in the query. + google.ads.searchads360.v0.resources.Audience audience = 190; + // The conversion action referenced in the query. google.ads.searchads360.v0.resources.ConversionAction conversion_action = 103; @@ -333,18 +370,35 @@ message SearchAds360Row { // The label referenced in the query. google.ads.searchads360.v0.resources.Label label = 52; + // The language constant referenced in the query. + google.ads.searchads360.v0.resources.LanguageConstant language_constant = 55; + // The location view referenced in the query. google.ads.searchads360.v0.resources.LocationView location_view = 123; + // The Product Bidding Category referenced in the query. + google.ads.searchads360.v0.resources.ProductBiddingCategoryConstant + product_bidding_category_constant = 109; + // The product group view referenced in the query. google.ads.searchads360.v0.resources.ProductGroupView product_group_view = 54; + // The shopping performance view referenced in the query. + google.ads.searchads360.v0.resources.ShoppingPerformanceView + shopping_performance_view = 117; + // The user list referenced in the query. google.ads.searchads360.v0.resources.UserList user_list = 38; // The webpage view referenced in the query. google.ads.searchads360.v0.resources.WebpageView webpage_view = 162; + // The event level visit referenced in the query. + google.ads.searchads360.v0.resources.Visit visit = 203; + + // The event level conversion referenced in the query. + google.ads.searchads360.v0.resources.Conversion conversion = 206; + // The metrics. google.ads.searchads360.v0.common.Metrics metrics = 4; diff --git a/google/analytics/data/v1alpha/BUILD.bazel b/google/analytics/data/v1alpha/BUILD.bazel index 5a4328aa9da66f..f4abc87970399e 100644 --- a/google/analytics/data/v1alpha/BUILD.bazel +++ b/google/analytics/data/v1alpha/BUILD.bazel @@ -322,7 +322,6 @@ load( csharp_proto_library( name = "data_csharp_proto", - extra_opts = [], deps = [":data_proto"], ) diff --git a/google/analytics/data/v1alpha/analytics_data_api.proto b/google/analytics/data/v1alpha/analytics_data_api.proto index ef0f8bbe9dc0b3..9faf7f9bcbb2a8 100644 --- a/google/analytics/data/v1alpha/analytics_data_api.proto +++ b/google/analytics/data/v1alpha/analytics_data_api.proto @@ -30,7 +30,7 @@ option java_outer_classname = "AnalyticsDataApiProto"; option java_package = "com.google.analytics.data.v1alpha"; option (google.api.resource_definition) = { type: "analyticsadmin.googleapis.com/Property" - pattern: "properties/{propertyId}" + pattern: "properties/{property}" }; // Google Analytics reporting data service. @@ -38,7 +38,10 @@ service AlphaAnalyticsData { option (google.api.default_host) = "analyticsdata.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/analytics," - "https://www.googleapis.com/auth/analytics.readonly"; + "https://www.googleapis.com/auth/analytics.readonly," + "https://www.googleapis.com/auth/drive," + "https://www.googleapis.com/auth/drive.file," + "https://www.googleapis.com/auth/spreadsheets"; // Returns a customized funnel report of your Google Analytics event data. The // data returned from the API is as a table with columns for the requested @@ -70,6 +73,10 @@ service AlphaAnalyticsData { // first create the audience list through this method and then send the // audience resource name to the `QueryAudienceList` method. // + // See [Creating an Audience + // List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) + // for an introduction to Audience Lists with examples. + // // An audience list is a snapshot of the users currently in the audience at // the time of audience list creation. Creating audience lists for one // audience on different days will return different results as users enter and @@ -79,6 +86,12 @@ service AlphaAnalyticsData { // that are important to your business. To learn more, see // https://support.google.com/analytics/answer/9267572. Audience lists contain // the users in each audience. + // + // This method is introduced at alpha stability with the intention of + // gathering feedback on syntax and capabilities before entering beta. To give + // your feedback on this API, complete the + // [Google Analytics Audience Export API + // Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form. rpc CreateAudienceList(CreateAudienceListRequest) returns (google.longrunning.Operation) { option (google.api.http) = { @@ -95,11 +108,22 @@ service AlphaAnalyticsData { // Retrieves an audience list of users. After creating an audience, the users // are not immediately available for listing. First, a request to // `CreateAudienceList` is necessary to create an audience list of users, and - // then second, this method is used to retrieve the users in the audience. + // then second, this method is used to retrieve the users in the audience + // list. + // + // See [Creating an Audience + // List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) + // for an introduction to Audience Lists with examples. // // Audiences in Google Analytics 4 allow you to segment your users in the ways // that are important to your business. To learn more, see // https://support.google.com/analytics/answer/9267572. + // + // This method is introduced at alpha stability with the intention of + // gathering feedback on syntax and capabilities before entering beta. To give + // your feedback on this API, complete the + // [Google Analytics Audience Export API + // Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form. rpc QueryAudienceList(QueryAudienceListRequest) returns (QueryAudienceListResponse) { option (google.api.http) = { @@ -109,8 +133,46 @@ service AlphaAnalyticsData { option (google.api.method_signature) = "name"; } + // Exports an audience list of users to a Google Sheet. After creating an + // audience, the users are not immediately available for listing. First, a + // request to `CreateAudienceList` is necessary to create an audience list of + // users, and then second, this method is used to export those users in the + // audience list to a Google Sheet. + // + // See [Creating an Audience + // List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) + // for an introduction to Audience Lists with examples. + // + // Audiences in Google Analytics 4 allow you to segment your users in the ways + // that are important to your business. To learn more, see + // https://support.google.com/analytics/answer/9267572. + // + // This method is introduced at alpha stability with the intention of + // gathering feedback on syntax and capabilities before entering beta. To give + // your feedback on this API, complete the + // [Google Analytics Audience Export API + // Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form. + rpc SheetExportAudienceList(SheetExportAudienceListRequest) + returns (SheetExportAudienceListResponse) { + option (google.api.http) = { + post: "/v1alpha/{name=properties/*/audienceLists/*}:exportSheet" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + // Gets configuration metadata about a specific audience list. This method // can be used to understand an audience list after it has been created. + // + // See [Creating an Audience + // List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) + // for an introduction to Audience Lists with examples. + // + // This method is introduced at alpha stability with the intention of + // gathering feedback on syntax and capabilities before entering beta. To give + // your feedback on this API, complete the + // [Google Analytics Audience Export API + // Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form. rpc GetAudienceList(GetAudienceListRequest) returns (AudienceList) { option (google.api.http) = { get: "/v1alpha/{name=properties/*/audienceLists/*}" @@ -122,6 +184,16 @@ service AlphaAnalyticsData { // find and reuse existing audience lists rather than creating unnecessary new // audience lists. The same audience can have multiple audience lists that // represent the list of users that were in an audience on different days. + // + // See [Creating an Audience + // List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) + // for an introduction to Audience Lists with examples. + // + // This method is introduced at alpha stability with the intention of + // gathering feedback on syntax and capabilities before entering beta. To give + // your feedback on this API, complete the + // [Google Analytics Audience Export API + // Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form. rpc ListAudienceLists(ListAudienceListsRequest) returns (ListAudienceListsResponse) { option (google.api.http) = { @@ -134,7 +206,7 @@ service AlphaAnalyticsData { // A request to retrieve configuration metadata about a specific audience list. message GetAudienceListRequest { // Required. The audience list resource name. - // Format: `properties/{propertyId}/audienceLists/{audienceListId}` + // Format: `properties/{property}/audienceLists/{audience_list}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -146,7 +218,7 @@ message GetAudienceListRequest { // A request to list all audience lists for a property. message ListAudienceListsRequest { // Required. All audience lists for this property will be listed in the - // response. Format: `properties/{propertyId}` + // response. Format: `properties/{property}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -154,18 +226,18 @@ message ListAudienceListsRequest { } ]; - // The maximum number of audience lists to return. The service may return - // fewer than this value. If unspecified, at most 200 audience lists will be - // returned. The maximum value is 1000 (higher values will be coerced to the - // maximum). - int32 page_size = 2; + // Optional. The maximum number of audience lists to return. The service may + // return fewer than this value. If unspecified, at most 200 audience lists + // will be returned. The maximum value is 1000 (higher values will be coerced + // to the maximum). + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - // A page token, received from a previous `ListAudienceLists` call. Provide - // this to retrieve the subsequent page. + // Optional. A page token, received from a previous `ListAudienceLists` call. + // Provide this to retrieve the subsequent page. // // When paginating, all other parameters provided to `ListAudienceLists` must // match the call that provided the page token. - string page_token = 3; + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; } // A list of all audience lists for a property. @@ -181,7 +253,7 @@ message ListAudienceListsResponse { // A request to create a new audience list. message CreateAudienceListRequest { // Required. The parent resource where this audience list will be created. - // Format: `properties/{propertyId}` + // Format: `properties/{property}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -199,7 +271,9 @@ message CreateAudienceListRequest { message AudienceList { option (google.api.resource) = { type: "analyticsdata.googleapis.com/AudienceList" - pattern: "properties/{propertyId}/audienceLists/{audienceListId}" + pattern: "properties/{property}/audienceLists/{audience_list}" + plural: "audienceLists" + singular: "audienceList" }; // The AudienceList currently exists in this state. @@ -221,17 +295,20 @@ message AudienceList { FAILED = 3; } - // Output only. The audience list resource name assigned during creation. This - // resource name identifies this `AudienceList`. + // Output only. Identifier. The audience list resource name assigned during + // creation. This resource name identifies this `AudienceList`. // - // Format: `properties/{propertyId}/audienceLists/{audienceListId}` - string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Format: `properties/{property}/audienceLists/{audience_list}` + string name = 1 [ + (google.api.field_behavior) = IDENTIFIER, + (google.api.field_behavior) = OUTPUT_ONLY + ]; // Required. The audience resource name. This resource name identifies the // audience being listed and is shared between the Analytics Data & Admin // APIs. // - // Format: `properties/{propertyId}/audiences/{audienceId}` + // Format: `properties/{property}/audiences/{audience}` string audience = 2 [(google.api.field_behavior) = REQUIRED]; // Output only. The descriptive display name for this audience. For example, @@ -249,6 +326,20 @@ message AudienceList { // AudienceList began the `CREATING` state. optional google.protobuf.Timestamp begin_creating_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The total quota tokens charged during creation of the + // AudienceList. Because this token count is based on activity from the + // `CREATING` state, this tokens charged will be fixed once an AudienceList + // enters the `ACTIVE` or `FAILED` states. + int32 creation_quota_tokens_charged = 7 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The total number of rows in the AudienceList result. + optional int32 row_count = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Error message is populated when an audience list fails during + // creation. A common reason for such a failure is quota exhaustion. + optional string error_message = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; } // This metadata is currently blank. @@ -256,11 +347,12 @@ message AudienceListMetadata {} // A request to list users in an audience list. message QueryAudienceListRequest { - // The name of the audience list to retrieve users from. - // Format: `properties/{propertyId}/audienceLists/{audienceListId}` - string name = 1; + // Required. The name of the audience list to retrieve users from. + // Format: `properties/{property}/audienceLists/{audience_list}` + string name = 1 [(google.api.field_behavior) = REQUIRED]; - // The row count of the start row. The first row is counted as row 0. + // Optional. The row count of the start row. The first row is counted as row + // 0. // // When paging, the first request does not specify offset; or equivalently, // sets offset to 0; the first request returns the first `limit` of rows. The @@ -269,18 +361,18 @@ message QueryAudienceListRequest { // // To learn more about this pagination parameter, see // [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination). - int64 offset = 2; + int64 offset = 2 [(google.api.field_behavior) = OPTIONAL]; - // The number of rows to return. If unspecified, 10,000 rows are returned. The - // API returns a maximum of 250,000 rows per request, no matter how many you - // ask for. `limit` must be positive. + // Optional. The number of rows to return. If unspecified, 10,000 rows are + // returned. The API returns a maximum of 250,000 rows per request, no matter + // how many you ask for. `limit` must be positive. // // The API can also return fewer rows than the requested `limit`, if there // aren't as many dimension values as the `limit`. // // To learn more about this pagination parameter, see // [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination). - int64 limit = 3; + int64 limit = 3 [(google.api.field_behavior) = OPTIONAL]; } // A list of users in an audience list. @@ -294,10 +386,10 @@ message QueryAudienceListResponse { // response will be less than or equal to request's page size. repeated AudienceRow audience_rows = 2; - // The total number of rows in the query result. `rowCount` is independent of - // the number of rows returned in the response, the `limit` request - // parameter, and the `offset` request parameter. For example if a query - // returns 175 rows and includes `limit` of 50 in the API request, the + // The total number of rows in the AudienceList result. `rowCount` is + // independent of the number of rows returned in the response, the `limit` + // request parameter, and the `offset` request parameter. For example if a + // query returns 175 rows and includes `limit` of 50 in the API request, the // response will contain `rowCount` of 175 but only 50 rows. // // To learn more about this pagination parameter, see @@ -305,6 +397,69 @@ message QueryAudienceListResponse { optional int32 row_count = 3; } +// A request to export users in an audience list to a Google Sheet. +message SheetExportAudienceListRequest { + // Required. The name of the audience list to retrieve users from. + // Format: `properties/{property}/audienceLists/{audience_list}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "analyticsdata.googleapis.com/AudienceList" + } + ]; + + // Optional. The row count of the start row. The first row is counted as row + // 0. + // + // When paging, the first request does not specify offset; or equivalently, + // sets offset to 0; the first request returns the first `limit` of rows. The + // second request sets offset to the `limit` of the first request; the second + // request returns the second `limit` of rows. + // + // To learn more about this pagination parameter, see + // [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination). + int64 offset = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The number of rows to return. If unspecified, 10,000 rows are + // returned. The API returns a maximum of 250,000 rows per request, no matter + // how many you ask for. `limit` must be positive. + // + // The API can also return fewer rows than the requested `limit`, if there + // aren't as many dimension values as the `limit`. + // + // To learn more about this pagination parameter, see + // [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination). + int64 limit = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// The created Google Sheet with the list of users in an audience list. +message SheetExportAudienceListResponse { + // A uri for you to visit in your browser to view the Google Sheet. + optional string spreadsheet_uri = 1; + + // An ID that identifies the created Google Sheet resource. + optional string spreadsheet_id = 2; + + // The total number of rows in the AudienceList result. `rowCount` is + // independent of the number of rows returned in the response, the `limit` + // request parameter, and the `offset` request parameter. For example if a + // query returns 175 rows and includes `limit` of 50 in the API request, the + // response will contain `rowCount` of 175 but only 50 rows. + // + // To learn more about this pagination parameter, see + // [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination). + optional int32 row_count = 3; + + // Configuration data about AudienceList being exported. Returned to help + // interpret the AudienceList in the Google Sheet of this response. + // + // For example, the AudienceList may have more rows than are present in the + // Google Sheet, and in that case, you may want to send an additional sheet + // export request with a different `offset` value to retrieve the next page of + // rows in an additional Google Sheet. + optional AudienceList audience_list = 4; +} + // Dimension value attributes for the audience user row. message AudienceRow { // Each dimension value attribute for an audience user. One dimension value @@ -315,10 +470,10 @@ message AudienceRow { // An audience dimension is a user attribute. Specific user attributed are // requested and then later returned in the `QueryAudienceListResponse`. message AudienceDimension { - // The API name of the dimension. See the [API + // Optional. The API name of the dimension. See the [API // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-api-schema#dimensions) // for the list of dimension names. - string dimension_name = 1; + string dimension_name = 1 [(google.api.field_behavior) = OPTIONAL]; } // The value of a dimension. @@ -347,75 +502,79 @@ message RunFunnelReportRequest { TRENDED_FUNNEL = 2; } - // A Google Analytics GA4 property identifier whose events are tracked. - // Specified in the URL path and not the body. To learn more, see [where to - // find your Property + // Optional. A Google Analytics GA4 property identifier whose events are + // tracked. Specified in the URL path and not the body. To learn more, see + // [where to find your Property // ID](https://developers.google.com/analytics/devguides/reporting/data/v1/property-id). // Within a batch request, this property should either be unspecified or // consistent with the batch-level property. // // Example: properties/1234 - string property = 1; - - // Date ranges of data to read. If multiple date ranges are requested, each - // response row will contain a zero based date range index. If two date - // ranges overlap, the event data for the overlapping days is included in the - // response rows for both date ranges. - repeated DateRange date_ranges = 2; - - // The configuration of this request's funnel. This funnel configuration is - // required. - Funnel funnel = 3; - - // If specified, this breakdown adds a dimension to the funnel table sub - // report response. This breakdown dimension expands each funnel step to the - // unique values of the breakdown dimension. For example, a breakdown by the - // `deviceCategory` dimension will create rows for `mobile`, `tablet`, + string property = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Date ranges of data to read. If multiple date ranges are + // requested, each response row will contain a zero based date range index. If + // two date ranges overlap, the event data for the overlapping days is + // included in the response rows for both date ranges. + repeated DateRange date_ranges = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The configuration of this request's funnel. This funnel + // configuration is required. + Funnel funnel = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If specified, this breakdown adds a dimension to the funnel table + // sub report response. This breakdown dimension expands each funnel step to + // the unique values of the breakdown dimension. For example, a breakdown by + // the `deviceCategory` dimension will create rows for `mobile`, `tablet`, // `desktop`, and the total. - FunnelBreakdown funnel_breakdown = 4; + FunnelBreakdown funnel_breakdown = 4 [(google.api.field_behavior) = OPTIONAL]; - // If specified, next action adds a dimension to the funnel visualization sub - // report response. This next action dimension expands each funnel step to the - // unique values of the next action. For example a next action of the - // `eventName` dimension will create rows for several events (for example - // `session_start` & `click`) and the total. + // Optional. If specified, next action adds a dimension to the funnel + // visualization sub report response. This next action dimension expands each + // funnel step to the unique values of the next action. For example a next + // action of the `eventName` dimension will create rows for several events + // (for example `session_start` & `click`) and the total. // // Next action only supports `eventName` and most Page / Screen dimensions // like `pageTitle` and `pagePath`. - FunnelNextAction funnel_next_action = 5; - - // The funnel visualization type controls the dimensions present in the funnel - // visualization sub report response. If not specified, `STANDARD_FUNNEL` is - // used. - FunnelVisualizationType funnel_visualization_type = 6; - - // The configurations of segments. Segments are subsets of a property's data. - // In a funnel report with segments, the funnel is evaluated in each segment. + FunnelNextAction funnel_next_action = 5 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The funnel visualization type controls the dimensions present in + // the funnel visualization sub report response. If not specified, + // `STANDARD_FUNNEL` is used. + FunnelVisualizationType funnel_visualization_type = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The configurations of segments. Segments are subsets of a + // property's data. In a funnel report with segments, the funnel is evaluated + // in each segment. // // Each segment specified in this request // produces a separate row in the response; in the response, each segment // identified by its name. // // The segments parameter is optional. Requests are limited to 4 segments. - repeated Segment segments = 7; + repeated Segment segments = 7 [(google.api.field_behavior) = OPTIONAL]; - // The number of rows to return. If unspecified, 10,000 rows are returned. The - // API returns a maximum of 250,000 rows per request, no matter how many you - // ask for. `limit` must be positive. + // Optional. The number of rows to return. If unspecified, 10,000 rows are + // returned. The API returns a maximum of 250,000 rows per request, no matter + // how many you ask for. `limit` must be positive. // // The API can also return fewer rows than the requested `limit`, if there // aren't as many dimension values as the `limit`. - int64 limit = 9; + int64 limit = 9 [(google.api.field_behavior) = OPTIONAL]; - // Dimension filters allow you to ask for only specific dimension values in - // the report. To learn more, see [Creating a Report: Dimension + // Optional. Dimension filters allow you to ask for only specific dimension + // values in the report. To learn more, see [Creating a Report: Dimension // Filters](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#dimension_filters) // for examples. Metrics cannot be used in this filter. - FilterExpression dimension_filter = 10; + FilterExpression dimension_filter = 10 + [(google.api.field_behavior) = OPTIONAL]; - // Toggles whether to return the current state of this Analytics Property's - // quota. Quota is returned in [PropertyQuota](#PropertyQuota). - bool return_property_quota = 12; + // Optional. Toggles whether to return the current state of this Analytics + // Property's quota. Quota is returned in [PropertyQuota](#PropertyQuota). + bool return_property_quota = 12 [(google.api.field_behavior) = OPTIONAL]; } // The funnel report response contains two sub reports. The two sub reports are diff --git a/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml b/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml index 24d2b4c800e58c..c7d67d0f70173a 100644 --- a/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml +++ b/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml @@ -19,11 +19,6 @@ documentation: Service. These actions can result in immediate termination of your GCP project(s) without any warning. -backend: - rules: - - selector: 'google.analytics.data.v1alpha.AlphaAnalyticsData.*' - deadline: 180.0 - authentication: rules: - selector: 'google.analytics.data.v1alpha.AlphaAnalyticsData.*' @@ -31,3 +26,11 @@ authentication: canonical_scopes: |- https://www.googleapis.com/auth/analytics, https://www.googleapis.com/auth/analytics.readonly + - selector: google.analytics.data.v1alpha.AlphaAnalyticsData.SheetExportAudienceList + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/analytics, + https://www.googleapis.com/auth/analytics.readonly, + https://www.googleapis.com/auth/drive, + https://www.googleapis.com/auth/drive.file, + https://www.googleapis.com/auth/spreadsheets diff --git a/google/analytics/data/v1alpha/data.proto b/google/analytics/data/v1alpha/data.proto index 95e4254a4eb8d6..dc862ddd326368 100644 --- a/google/analytics/data/v1alpha/data.proto +++ b/google/analytics/data/v1alpha/data.proto @@ -23,8 +23,8 @@ option java_multiple_files = true; option java_outer_classname = "ReportingApiProto"; option java_package = "com.google.analytics.data.v1alpha"; -// A contiguous set of days: startDate, startDate + 1, ..., endDate. Requests -// are allowed up to 4 date ranges. +// A contiguous set of days: `startDate`, `startDate + 1`, ..., `endDate`. +// Requests are allowed up to 4 date ranges. message DateRange { // The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot // be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also @@ -51,7 +51,16 @@ message DateRange { message Dimension { // The name of the dimension. See the [API // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions) - // for the list of dimension names. + // for the list of dimension names supported by core reporting methods such + // as `runReport` and `batchRunReports`. See + // [Realtime + // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/realtime-api-schema#dimensions) + // for the list of dimension names supported by the `runRealtimeReport` + // method. See + // [Funnel + // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/exploration-api-schema#dimensions) + // for the list of dimension names supported by the `runFunnelReport` + // method. // // If `dimensionExpression` is specified, `name` can be any string that you // would like within the allowed character set. For example if a @@ -1168,7 +1177,7 @@ message FunnelParameterFilter { // the funnel report. message FunnelResponseMetadata { // If funnel report results are - // [sampled](https://support.google.com/analytics/answer/2637192), this + // [sampled](https://support.google.com/analytics/answer/13331292), this // describes what percentage of events were used in this funnel report. One // `samplingMetadatas` is populated for each date range. Each // `samplingMetadatas` corresponds to a date range in order that date ranges @@ -1179,7 +1188,7 @@ message FunnelResponseMetadata { } // If funnel report results are -// [sampled](https://support.google.com/analytics/answer/2637192), this +// [sampled](https://support.google.com/analytics/answer/13331292), this // metadata describes what percentage of events were used in this funnel // report for a date range. Sampling is the practice of analyzing a subset of // all data in order to uncover the meaningful information in the larger data diff --git a/google/cloud/aiplatform/v1/BUILD.bazel b/google/cloud/aiplatform/v1/BUILD.bazel index e6bd6351f4484f..7b0141d35e2acc 100644 --- a/google/cloud/aiplatform/v1/BUILD.bazel +++ b/google/cloud/aiplatform/v1/BUILD.bazel @@ -54,8 +54,15 @@ proto_library( "explanation.proto", "explanation_metadata.proto", "feature.proto", + "feature_group.proto", "feature_monitoring_stats.proto", + "feature_online_store.proto", + "feature_online_store_admin_service.proto", + "feature_online_store_service.proto", + "feature_registry_service.proto", "feature_selector.proto", + "feature_view.proto", + "feature_view_sync.proto", "featurestore.proto", "featurestore_monitoring.proto", "featurestore_online_service.proto", @@ -69,6 +76,7 @@ proto_library( "job_service.proto", "job_state.proto", "lineage_subgraph.proto", + "llm_utility_service.proto", "machine_resources.proto", "manual_batch_tuning_parameters.proto", "match_service.proto", @@ -209,6 +217,7 @@ java_gapic_test( "com.google.cloud.aiplatform.v1.IndexEndpointServiceClientTest", "com.google.cloud.aiplatform.v1.IndexServiceClientTest", "com.google.cloud.aiplatform.v1.JobServiceClientTest", + "com.google.cloud.aiplatform.v1.LlmUtilityServiceClientTest", "com.google.cloud.aiplatform.v1.MetadataServiceClientTest", "com.google.cloud.aiplatform.v1.MigrationServiceClientTest", "com.google.cloud.aiplatform.v1.ModelServiceClientTest", diff --git a/google/cloud/aiplatform/v1/aiplatform_v1.yaml b/google/cloud/aiplatform/v1/aiplatform_v1.yaml index 1b8bcd148887a6..75b34fa95902ec 100644 --- a/google/cloud/aiplatform/v1/aiplatform_v1.yaml +++ b/google/cloud/aiplatform/v1/aiplatform_v1.yaml @@ -6,11 +6,15 @@ title: Vertex AI API apis: - name: google.cloud.aiplatform.v1.DatasetService - name: google.cloud.aiplatform.v1.EndpointService +- name: google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService +- name: google.cloud.aiplatform.v1.FeatureOnlineStoreService +- name: google.cloud.aiplatform.v1.FeatureRegistryService - name: google.cloud.aiplatform.v1.FeaturestoreOnlineServingService - name: google.cloud.aiplatform.v1.FeaturestoreService - name: google.cloud.aiplatform.v1.IndexEndpointService - name: google.cloud.aiplatform.v1.IndexService - name: google.cloud.aiplatform.v1.JobService +- name: google.cloud.aiplatform.v1.LlmUtilityService - name: google.cloud.aiplatform.v1.MatchService - name: google.cloud.aiplatform.v1.MetadataService - name: google.cloud.aiplatform.v1.MigrationService @@ -41,11 +45,15 @@ types: - name: google.cloud.aiplatform.v1.CreateDatasetVersionOperationMetadata - name: google.cloud.aiplatform.v1.CreateEndpointOperationMetadata - name: google.cloud.aiplatform.v1.CreateEntityTypeOperationMetadata +- name: google.cloud.aiplatform.v1.CreateFeatureGroupOperationMetadata +- name: google.cloud.aiplatform.v1.CreateFeatureOnlineStoreOperationMetadata - name: google.cloud.aiplatform.v1.CreateFeatureOperationMetadata +- name: google.cloud.aiplatform.v1.CreateFeatureViewOperationMetadata - name: google.cloud.aiplatform.v1.CreateFeaturestoreOperationMetadata - name: google.cloud.aiplatform.v1.CreateIndexEndpointOperationMetadata - name: google.cloud.aiplatform.v1.CreateIndexOperationMetadata - name: google.cloud.aiplatform.v1.CreateMetadataStoreOperationMetadata +- name: google.cloud.aiplatform.v1.CreateRegistryFeatureOperationMetadata - name: google.cloud.aiplatform.v1.CreateSpecialistPoolOperationMetadata - name: google.cloud.aiplatform.v1.CreateTensorboardOperationMetadata - name: google.cloud.aiplatform.v1.DeleteFeatureValuesOperationMetadata @@ -86,6 +94,10 @@ types: - name: google.cloud.aiplatform.v1.UndeployModelResponse - name: google.cloud.aiplatform.v1.UpdateExplanationDatasetOperationMetadata - name: google.cloud.aiplatform.v1.UpdateExplanationDatasetResponse +- name: google.cloud.aiplatform.v1.UpdateFeatureGroupOperationMetadata +- name: google.cloud.aiplatform.v1.UpdateFeatureOnlineStoreOperationMetadata +- name: google.cloud.aiplatform.v1.UpdateFeatureOperationMetadata +- name: google.cloud.aiplatform.v1.UpdateFeatureViewOperationMetadata - name: google.cloud.aiplatform.v1.UpdateFeaturestoreOperationMetadata - name: google.cloud.aiplatform.v1.UpdateIndexOperationMetadata - name: google.cloud.aiplatform.v1.UpdateModelDeploymentMonitoringJobOperationMetadata @@ -199,6 +211,8 @@ http: - post: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}:cancel' + - post: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}:cancel' + - post: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}:cancel' @@ -263,6 +277,8 @@ http: - delete: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/extensionControllers/*}/operations' + - delete: '/ui/{name=projects/*/locations/*/extensions/*}/operations' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}' @@ -286,6 +302,10 @@ http: - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' - delete: '/v1/{name=projects/*/locations/*/operations/*}' - delete: '/v1/{name=projects/*/locations/*/datasets/*/operations/*}' - delete: '/v1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}' @@ -316,6 +336,10 @@ http: - delete: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - delete: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - delete: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - delete: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - delete: '/v1/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - delete: '/v1/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' + - delete: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' - selector: google.longrunning.Operations.GetOperation get: '/ui/{name=projects/*/locations/*/operations/*}' additional_bindings: @@ -328,6 +352,8 @@ http: - get: '/ui/{name=projects/*/locations/*/edgeDeploymentJobs/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}' @@ -351,6 +377,10 @@ http: - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/datasets/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}' @@ -381,6 +411,10 @@ http: - get: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - get: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - get: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' + - get: '/v1/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - get: '/v1/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' - selector: google.longrunning.Operations.ListOperations get: '/ui/{name=projects/*/locations/*}/operations' additional_bindings: @@ -392,6 +426,8 @@ http: - get: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*}/operations' - get: '/ui/{name=projects/*/locations/*/edgeDevices/*}/operations' - get: '/ui/{name=projects/*/locations/*/endpoints/*}/operations' + - get: '/ui/{name=projects/*/locations/*/extensionControllers/*}/operations' + - get: '/ui/{name=projects/*/locations/*/extensions/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*}/operations' @@ -415,6 +451,10 @@ http: - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*}/operations' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*}/operations' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*}/operations' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - get: '/v1/{name=projects/*/locations/*}/operations' - get: '/v1/{name=projects/*/locations/*/datasets/*}/operations' - get: '/v1/{name=projects/*/locations/*/datasets/*/dataItems/*}/operations' @@ -445,6 +485,10 @@ http: - get: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*}/operations' - get: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*}/operations' - get: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*}/operations' + - get: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - get: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - get: '/v1/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - get: '/v1/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - selector: google.longrunning.Operations.WaitOperation post: '/ui/{name=projects/*/locations/*/operations/*}:wait' additional_bindings: @@ -456,6 +500,8 @@ http: - post: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}:wait' @@ -479,6 +525,10 @@ http: - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - post: '/v1/{name=projects/*/locations/*/operations/*}:wait' - post: '/v1/{name=projects/*/locations/*/datasets/*/operations/*}:wait' - post: '/v1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}:wait' @@ -509,6 +559,10 @@ http: - post: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}:wait' - post: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}:wait' - post: '/v1/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}:wait' + - post: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - post: '/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - post: '/v1/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - post: '/v1/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' authentication: rules: @@ -520,6 +574,18 @@ authentication: oauth: canonical_scopes: |- https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.aiplatform.v1.FeatureOnlineStoreService.FetchFeatureValues + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.aiplatform.v1.FeatureRegistryService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform - selector: 'google.cloud.aiplatform.v1.FeaturestoreOnlineServingService.*' oauth: canonical_scopes: |- @@ -545,6 +611,14 @@ authentication: canonical_scopes: |- https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/cloud-platform.read-only + - selector: google.cloud.aiplatform.v1.LlmUtilityService.ComputeTokens + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.aiplatform.v1.LlmUtilityService.CountTokens + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform - selector: google.cloud.aiplatform.v1.MatchService.FindNeighbors oauth: canonical_scopes: |- diff --git a/google/cloud/aiplatform/v1/custom_job.proto b/google/cloud/aiplatform/v1/custom_job.proto index 49bb9790b1fd52..b129738b6d59ab 100644 --- a/google/cloud/aiplatform/v1/custom_job.proto +++ b/google/cloud/aiplatform/v1/custom_job.proto @@ -181,6 +181,12 @@ message CustomJobSpec { // * AIP_TENSORBOARD_LOG_DIR = `//logs/` GcsDestination base_output_directory = 6; + // The ID of the location to store protected artifacts. e.g. us-central1. + // Populate only when the location is different than CustomJob location. + // List of supported locations: + // https://cloud.google.com/vertex-ai/docs/general/locations + string protected_artifact_location_id = 19; + // Optional. The name of a Vertex AI // [Tensorboard][google.cloud.aiplatform.v1.Tensorboard] resource to which // this CustomJob will upload Tensorboard logs. Format: diff --git a/google/cloud/aiplatform/v1/feature.proto b/google/cloud/aiplatform/v1/feature.proto index 327ec57d301d31..126a5a5aa6e71c 100644 --- a/google/cloud/aiplatform/v1/feature.proto +++ b/google/cloud/aiplatform/v1/feature.proto @@ -29,13 +29,15 @@ option java_package = "com.google.cloud.aiplatform.v1"; option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; option ruby_package = "Google::Cloud::AIPlatform::V1"; -// Feature Metadata information that describes an attribute of an entity type. -// For example, apple is an entity type, and color is a feature that describes -// apple. +// Feature Metadata information. +// For example, color is a feature that describes an apple. message Feature { option (google.api.resource) = { type: "aiplatform.googleapis.com/Feature" pattern: "projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}" + pattern: "projects/{project}/locations/{location}/featureGroups/{feature_group}/features/{feature}" + plural: "features" + singular: "feature" }; // A list of historical @@ -69,6 +71,7 @@ message Feature { [(google.api.field_behavior) = OUTPUT_ONLY]; } + // Only applicable for Vertex AI Legacy Feature Store. // An enum representing the value type of a feature. enum ValueType { // The value type is unspecified. @@ -105,6 +108,7 @@ message Feature { // Immutable. Name of the Feature. // Format: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}` + // `projects/{project}/locations/{location}/featureGroups/{feature_group}/features/{feature}` // // The last part feature is assigned by the client. The feature can be up to // 64 characters long and can consist only of ASCII Latin letters A-Z and a-z, @@ -115,17 +119,17 @@ message Feature { // Description of the Feature. string description = 2; - // Required. Immutable. Type of Feature value. - ValueType value_type = 3 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; + // Immutable. Only applicable for Vertex AI Feature Store (Legacy). + // Type of Feature value. + ValueType value_type = 3 [(google.api.field_behavior) = IMMUTABLE]; - // Output only. Timestamp when this EntityType was created. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // Timestamp when this EntityType was created. google.protobuf.Timestamp create_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Output only. Timestamp when this EntityType was most recently updated. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // Timestamp when this EntityType was most recently updated. google.protobuf.Timestamp update_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -146,8 +150,10 @@ message Feature { // "overwrite" update happens. string etag = 7; - // Optional. If not set, use the monitoring_config defined for the EntityType - // this Feature belongs to. Only Features with type + // Optional. Only applicable for Vertex AI Feature Store (Legacy). + // If not set, use the monitoring_config defined for the EntityType this + // Feature belongs to. + // Only Features with type // ([Feature.ValueType][google.cloud.aiplatform.v1.Feature.ValueType]) BOOL, // STRING, DOUBLE or INT64 can enable monitoring. // @@ -155,8 +161,13 @@ message Feature { // config on EntityType. bool disable_monitoring = 12 [(google.api.field_behavior) = OPTIONAL]; - // Output only. The list of historical stats and anomalies with specified - // objectives. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // The list of historical stats and anomalies with specified objectives. repeated MonitoringStatsAnomaly monitoring_stats_anomalies = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Only applicable for Vertex AI Feature Store. + // The name of the BigQuery Table/View columnn hosting data for this version. + // If no value is provided, will use feature_id. + string version_column_name = 106; } diff --git a/google/cloud/aiplatform/v1/feature_group.proto b/google/cloud/aiplatform/v1/feature_group.proto new file mode 100644 index 00000000000000..afe8c9ebd7522e --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_group.proto @@ -0,0 +1,95 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/aiplatform/v1/io.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureGroupProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +// Vertex AI Feature Group. +message FeatureGroup { + option (google.api.resource) = { + type: "aiplatform.googleapis.com/FeatureGroup" + pattern: "projects/{project}/locations/{location}/featureGroups/{feature_group}" + plural: "featureGroups" + singular: "featureGroup" + }; + + // Input source type for BigQuery Tables and Views. + message BigQuery { + // Required. Immutable. The BigQuery source URI that points to either a + // BigQuery Table or View. + BigQuerySource big_query_source = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = REQUIRED + ]; + + // Optional. Columns to construct entity_id / row keys. Currently only + // supports 1 entity_id_column. If not provided defaults to `entity_id`. + repeated string entity_id_columns = 2 + [(google.api.field_behavior) = OPTIONAL]; + } + + oneof source { + // Indicates that features for this group come from BigQuery Table/View. + // By default treats the source as a sparse time series source, which is + // required to have an entity_id and a feature_timestamp column in the + // source. + BigQuery big_query = 7; + } + + // Output only. Name of the FeatureGroup. Format: + // `projects/{project}/locations/{location}/featureGroups/{featureGroup}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp when this FeatureGroup was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp when this FeatureGroup was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Used to perform consistent read-modify-write updates. If not set, + // a blind "overwrite" update happens. + string etag = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The labels with user-defined metadata to organize your + // FeatureGroup. + // + // Label keys and values can be no longer than 64 characters + // (Unicode codepoints), can only contain lowercase letters, numeric + // characters, underscores and dashes. International characters are allowed. + // + // See https://goo.gl/xmQnxf for more information on and examples of labels. + // No more than 64 user labels can be associated with one + // FeatureGroup(System labels are excluded)." System reserved label keys + // are prefixed with "aiplatform.googleapis.com/" and are immutable. + map labels = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Description of the FeatureGroup. + string description = 6 [(google.api.field_behavior) = OPTIONAL]; +} diff --git a/google/cloud/aiplatform/v1/feature_online_store.proto b/google/cloud/aiplatform/v1/feature_online_store.proto new file mode 100644 index 00000000000000..38e7169973b023 --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_online_store.proto @@ -0,0 +1,118 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureOnlineStoreProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +// Vertex AI Feature Online Store provides a centralized repository for serving +// ML features and embedding indexes at low latency. The Feature Online Store is +// a top-level container. +message FeatureOnlineStore { + option (google.api.resource) = { + type: "aiplatform.googleapis.com/FeatureOnlineStore" + pattern: "projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}" + }; + + message Bigtable { + message AutoScaling { + // Required. The minimum number of nodes to scale down to. Must be greater + // than or equal to 1. + int32 min_node_count = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The maximum number of nodes to scale up to. Must be greater + // than or equal to min_node_count, and less than or equal to 10 times of + // 'min_node_count'. + int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. A percentage of the cluster's CPU capacity. Can be from 10% + // to 80%. When a cluster's CPU utilization exceeds the target that you + // have set, Bigtable immediately adds nodes to the cluster. When CPU + // utilization is substantially lower than the target, Bigtable removes + // nodes. If not set will default to 50%. + int32 cpu_utilization_target = 3 [(google.api.field_behavior) = OPTIONAL]; + } + + // Required. Autoscaling config applied to Bigtable Instance. + AutoScaling auto_scaling = 1 [(google.api.field_behavior) = REQUIRED]; + } + + // Possible states a featureOnlineStore can have. + enum State { + // Default value. This value is unused. + STATE_UNSPECIFIED = 0; + + // State when the featureOnlineStore configuration is not being updated and + // the fields reflect the current configuration of the featureOnlineStore. + // The featureOnlineStore is usable in this state. + STABLE = 1; + + // The state of the featureOnlineStore configuration when it is being + // updated. During an update, the fields reflect either the original + // configuration or the updated configuration of the featureOnlineStore. The + // featureOnlineStore is still usable in this state. + UPDATING = 2; + } + + oneof storage_type { + // Contains settings for the Cloud Bigtable instance that will be created + // to serve featureValues for all FeatureViews under this + // FeatureOnlineStore. + Bigtable bigtable = 8; + } + + // Output only. Name of the FeatureOnlineStore. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp when this FeatureOnlineStore was created. + google.protobuf.Timestamp create_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp when this FeatureOnlineStore was last updated. + google.protobuf.Timestamp update_time = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Used to perform consistent read-modify-write updates. If not set, + // a blind "overwrite" update happens. + string etag = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The labels with user-defined metadata to organize your + // FeatureOnlineStore. + // + // Label keys and values can be no longer than 64 characters + // (Unicode codepoints), can only contain lowercase letters, numeric + // characters, underscores and dashes. International characters are allowed. + // + // See https://goo.gl/xmQnxf for more information on and examples of labels. + // No more than 64 user labels can be associated with one + // FeatureOnlineStore(System labels are excluded)." System reserved label keys + // are prefixed with "aiplatform.googleapis.com/" and are immutable. + map labels = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. State of the featureOnlineStore. + State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/cloud/aiplatform/v1/feature_online_store_admin_service.proto b/google/cloud/aiplatform/v1/feature_online_store_admin_service.proto new file mode 100644 index 00000000000000..8733cb31c2f346 --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_online_store_admin_service.proto @@ -0,0 +1,618 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/aiplatform/v1/feature_online_store.proto"; +import "google/cloud/aiplatform/v1/feature_view.proto"; +import "google/cloud/aiplatform/v1/feature_view_sync.proto"; +import "google/cloud/aiplatform/v1/operation.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureOnlineStoreAdminServiceProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +// The service that handles CRUD and List for resources for +// FeatureOnlineStore. +service FeatureOnlineStoreAdminService { + option (google.api.default_host) = "aiplatform.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Creates a new FeatureOnlineStore in a given project and location. + rpc CreateFeatureOnlineStore(CreateFeatureOnlineStoreRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*}/featureOnlineStores" + body: "feature_online_store" + }; + option (google.api.method_signature) = + "parent,feature_online_store,feature_online_store_id"; + option (google.longrunning.operation_info) = { + response_type: "FeatureOnlineStore" + metadata_type: "CreateFeatureOnlineStoreOperationMetadata" + }; + } + + // Gets details of a single FeatureOnlineStore. + rpc GetFeatureOnlineStore(GetFeatureOnlineStoreRequest) + returns (FeatureOnlineStore) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/featureOnlineStores/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists FeatureOnlineStores in a given project and location. + rpc ListFeatureOnlineStores(ListFeatureOnlineStoresRequest) + returns (ListFeatureOnlineStoresResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/featureOnlineStores" + }; + option (google.api.method_signature) = "parent"; + } + + // Updates the parameters of a single FeatureOnlineStore. + rpc UpdateFeatureOnlineStore(UpdateFeatureOnlineStoreRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{feature_online_store.name=projects/*/locations/*/featureOnlineStores/*}" + body: "feature_online_store" + }; + option (google.api.method_signature) = "feature_online_store,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "FeatureOnlineStore" + metadata_type: "UpdateFeatureOnlineStoreOperationMetadata" + }; + } + + // Deletes a single FeatureOnlineStore. The FeatureOnlineStore must not + // contain any FeatureViews. + rpc DeleteFeatureOnlineStore(DeleteFeatureOnlineStoreRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/featureOnlineStores/*}" + }; + option (google.api.method_signature) = "name,force"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteOperationMetadata" + }; + } + + // Creates a new FeatureView in a given FeatureOnlineStore. + rpc CreateFeatureView(CreateFeatureViewRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/featureOnlineStores/*}/featureViews" + body: "feature_view" + }; + option (google.api.method_signature) = + "parent,feature_view,feature_view_id"; + option (google.longrunning.operation_info) = { + response_type: "FeatureView" + metadata_type: "CreateFeatureViewOperationMetadata" + }; + } + + // Gets details of a single FeatureView. + rpc GetFeatureView(GetFeatureViewRequest) returns (FeatureView) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists FeatureViews in a given FeatureOnlineStore. + rpc ListFeatureViews(ListFeatureViewsRequest) + returns (ListFeatureViewsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/featureOnlineStores/*}/featureViews" + }; + option (google.api.method_signature) = "parent"; + } + + // Updates the parameters of a single FeatureView. + rpc UpdateFeatureView(UpdateFeatureViewRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{feature_view.name=projects/*/locations/*/featureOnlineStores/*/featureViews/*}" + body: "feature_view" + }; + option (google.api.method_signature) = "feature_view,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "FeatureView" + metadata_type: "UpdateFeatureViewOperationMetadata" + }; + } + + // Deletes a single FeatureView. + rpc DeleteFeatureView(DeleteFeatureViewRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteOperationMetadata" + }; + } + + // Triggers on-demand sync for the FeatureView. + rpc SyncFeatureView(SyncFeatureViewRequest) + returns (SyncFeatureViewResponse) { + option (google.api.http) = { + post: "/v1/{feature_view=projects/*/locations/*/featureOnlineStores/*/featureViews/*}:sync" + body: "*" + }; + option (google.api.method_signature) = "feature_view"; + } + + // Gets details of a single FeatureViewSync. + rpc GetFeatureViewSync(GetFeatureViewSyncRequest) returns (FeatureViewSync) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/featureViewSyncs/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists FeatureViewSyncs in a given FeatureView. + rpc ListFeatureViewSyncs(ListFeatureViewSyncsRequest) + returns (ListFeatureViewSyncsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/featureOnlineStores/*/featureViews/*}/featureViewSyncs" + }; + option (google.api.method_signature) = "parent"; + } +} + +// Request message for +// [FeatureOnlineStoreAdminService.CreateFeatureOnlineStore][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.CreateFeatureOnlineStore]. +message CreateFeatureOnlineStoreRequest { + // Required. The resource name of the Location to create FeatureOnlineStores. + // Format: + // `projects/{project}/locations/{location}'` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/FeatureOnlineStore" + } + ]; + + // Required. The FeatureOnlineStore to create. + FeatureOnlineStore feature_online_store = 2 + [(google.api.field_behavior) = REQUIRED]; + + // Required. The ID to use for this FeatureOnlineStore, which will become the + // final component of the FeatureOnlineStore's resource name. + // + // This value may be up to 60 characters, and valid characters are + // `[a-z0-9_]`. The first character cannot be a number. + // + // The value must be unique within the project and location. + string feature_online_store_id = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request message for +// [FeatureOnlineStoreAdminService.GetFeatureOnlineStore][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.GetFeatureOnlineStore]. +message GetFeatureOnlineStoreRequest { + // Required. The name of the FeatureOnlineStore resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureOnlineStore" + } + ]; +} + +// Request message for +// [FeatureOnlineStoreAdminService.ListFeatureOnlineStores][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureOnlineStores]. +message ListFeatureOnlineStoresRequest { + // Required. The resource name of the Location to list FeatureOnlineStores. + // Format: + // `projects/{project}/locations/{location}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/FeatureOnlineStore" + } + ]; + + // Lists the FeatureOnlineStores that match the filter expression. The + // following fields are supported: + // + // * `create_time`: Supports `=`, `!=`, `<`, `>`, `<=`, and `>=` comparisons. + // Values must be + // in RFC 3339 format. + // * `update_time`: Supports `=`, `!=`, `<`, `>`, `<=`, and `>=` comparisons. + // Values must be + // in RFC 3339 format. + // * `labels`: Supports key-value equality and key presence. + // + // Examples: + // + // * `create_time > "2020-01-01" OR update_time > "2020-01-01"` + // FeatureOnlineStores created or updated after 2020-01-01. + // * `labels.env = "prod"` + // FeatureOnlineStores with label "env" set to "prod". + string filter = 2; + + // The maximum number of FeatureOnlineStores to return. The service may return + // fewer than this value. If unspecified, at most 100 FeatureOnlineStores will + // be returned. The maximum value is 100; any value greater than 100 will be + // coerced to 100. + int32 page_size = 3; + + // A page token, received from a previous + // [FeatureOnlineStoreAdminService.ListFeatureOnlineStores][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureOnlineStores] + // call. Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to + // [FeatureOnlineStoreAdminService.ListFeatureOnlineStores][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureOnlineStores] + // must match the call that provided the page token. + string page_token = 4; + + // A comma-separated list of fields to order by, sorted in ascending order. + // Use "desc" after a field name for descending. + // Supported Fields: + // + // * `create_time` + // * `update_time` + string order_by = 5; +} + +// Response message for +// [FeatureOnlineStoreAdminService.ListFeatureOnlineStores][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureOnlineStores]. +message ListFeatureOnlineStoresResponse { + // The FeatureOnlineStores matching the request. + repeated FeatureOnlineStore feature_online_stores = 1; + + // A token, which can be sent as + // [ListFeatureOnlineStoresRequest.page_token][google.cloud.aiplatform.v1.ListFeatureOnlineStoresRequest.page_token] + // to retrieve the next page. If this field is omitted, there are no + // subsequent pages. + string next_page_token = 2; +} + +// Request message for +// [FeatureOnlineStoreAdminService.UpdateFeatureOnlineStore][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.UpdateFeatureOnlineStore]. +message UpdateFeatureOnlineStoreRequest { + // Required. The FeatureOnlineStore's `name` field is used to identify the + // FeatureOnlineStore to be updated. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}` + FeatureOnlineStore feature_online_store = 1 + [(google.api.field_behavior) = REQUIRED]; + + // Field mask is used to specify the fields to be overwritten in the + // FeatureOnlineStore resource by the update. + // The fields specified in the update_mask are relative to the resource, not + // the full request. A field will be overwritten if it is in the mask. If the + // user does not provide a mask then only the non-empty fields present in the + // request will be overwritten. Set the update_mask to `*` to override all + // fields. + // + // Updatable fields: + // + // * `big_query_source` + // * `labels` + // * `sync_config` + google.protobuf.FieldMask update_mask = 2; +} + +// Request message for +// [FeatureOnlineStoreAdminService.DeleteFeatureOnlineStore][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.DeleteFeatureOnlineStore]. +message DeleteFeatureOnlineStoreRequest { + // Required. The name of the FeatureOnlineStore to be deleted. + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureOnlineStore" + } + ]; + + // If set to true, any FeatureViews and Features for this FeatureOnlineStore + // will also be deleted. (Otherwise, the request will only work if the + // FeatureOnlineStore has no FeatureViews.) + bool force = 2; +} + +// Request message for +// [FeatureOnlineStoreAdminService.CreateFeatureView][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.CreateFeatureView]. +message CreateFeatureViewRequest { + // Required. The resource name of the FeatureOnlineStore to create + // FeatureViews. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureOnlineStore" + } + ]; + + // Required. The FeatureView to create. + FeatureView feature_view = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The ID to use for the FeatureView, which will become the final + // component of the FeatureView's resource name. + // + // This value may be up to 60 characters, and valid characters are + // `[a-z0-9_]`. The first character cannot be a number. + // + // The value must be unique within a FeatureOnlineStore. + string feature_view_id = 3 [(google.api.field_behavior) = REQUIRED]; + + // Immutable. If set to true, one on demand sync will be run immediately, + // regardless whether the + // [FeatureView.sync_config][google.cloud.aiplatform.v1.FeatureView.sync_config] + // is configured or not. + bool run_sync_immediately = 4 [(google.api.field_behavior) = IMMUTABLE]; +} + +// Request message for +// [FeatureOnlineStoreAdminService.GetFeatureView][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.GetFeatureView]. +message GetFeatureViewRequest { + // Required. The name of the FeatureView resource. + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureView" + } + ]; +} + +// Request message for +// [FeatureOnlineStoreAdminService.ListFeatureViews][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViews]. +message ListFeatureViewsRequest { + // Required. The resource name of the FeatureOnlineStore to list FeatureViews. + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/FeatureView" + } + ]; + + // Lists the FeatureViews that match the filter expression. The following + // filters are supported: + // + // * `create_time`: Supports `=`, `!=`, `<`, `>`, `>=`, and `<=` comparisons. + // Values must be in RFC 3339 format. + // * `update_time`: Supports `=`, `!=`, `<`, `>`, `>=`, and `<=` comparisons. + // Values must be in RFC 3339 format. + // * `labels`: Supports key-value equality as well as key presence. + // + // Examples: + // + // * `create_time > \"2020-01-31T15:30:00.000000Z\" OR + // update_time > \"2020-01-31T15:30:00.000000Z\"` --> FeatureViews + // created or updated after 2020-01-31T15:30:00.000000Z. + // * `labels.active = yes AND labels.env = prod` --> FeatureViews having both + // (active: yes) and (env: prod) labels. + // * `labels.env: *` --> Any FeatureView which has a label with 'env' as the + // key. + string filter = 2; + + // The maximum number of FeatureViews to return. The service may return fewer + // than this value. If unspecified, at most 1000 FeatureViews will be + // returned. The maximum value is 1000; any value greater than 1000 will be + // coerced to 1000. + int32 page_size = 3; + + // A page token, received from a previous + // [FeatureOnlineStoreAdminService.ListFeatureViews][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViews] + // call. Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to + // [FeatureOnlineStoreAdminService.ListFeatureViews][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViews] + // must match the call that provided the page token. + string page_token = 4; + + // A comma-separated list of fields to order by, sorted in ascending order. + // Use "desc" after a field name for descending. + // + // Supported fields: + // + // * `feature_view_id` + // * `create_time` + // * `update_time` + string order_by = 5; +} + +// Response message for +// [FeatureOnlineStoreAdminService.ListFeatureViews][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViews]. +message ListFeatureViewsResponse { + // The FeatureViews matching the request. + repeated FeatureView feature_views = 1; + + // A token, which can be sent as + // [ListFeatureViewsRequest.page_token][google.cloud.aiplatform.v1.ListFeatureViewsRequest.page_token] + // to retrieve the next page. If this field is omitted, there are no + // subsequent pages. + string next_page_token = 2; +} + +// Request message for +// [FeatureOnlineStoreAdminService.UpdateFeatureView][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.UpdateFeatureView]. +message UpdateFeatureViewRequest { + // Required. The FeatureView's `name` field is used to identify the + // FeatureView to be updated. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}` + FeatureView feature_view = 1 [(google.api.field_behavior) = REQUIRED]; + + // Field mask is used to specify the fields to be overwritten in the + // FeatureView resource by the update. + // The fields specified in the update_mask are relative to the resource, not + // the full request. A field will be overwritten if it is in the mask. If the + // user does not provide a mask then only the non-empty fields present in the + // request will be overwritten. Set the update_mask to `*` to override all + // fields. + // + // Updatable fields: + // + // * `labels` + google.protobuf.FieldMask update_mask = 2; +} + +// Request message for [FeatureOnlineStoreAdminService.DeleteFeatureViews][]. +message DeleteFeatureViewRequest { + // Required. The name of the FeatureView to be deleted. + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureView" + } + ]; +} + +// Details of operations that perform create FeatureOnlineStore. +message CreateFeatureOnlineStoreOperationMetadata { + // Operation metadata for FeatureOnlineStore. + GenericOperationMetadata generic_metadata = 1; +} + +// Details of operations that perform update FeatureOnlineStore. +message UpdateFeatureOnlineStoreOperationMetadata { + // Operation metadata for FeatureOnlineStore. + GenericOperationMetadata generic_metadata = 1; +} + +// Details of operations that perform create FeatureView. +message CreateFeatureViewOperationMetadata { + // Operation metadata for FeatureView Create. + GenericOperationMetadata generic_metadata = 1; +} + +// Details of operations that perform update FeatureView. +message UpdateFeatureViewOperationMetadata { + // Operation metadata for FeatureView Update. + GenericOperationMetadata generic_metadata = 1; +} + +// Request message for +// [FeatureOnlineStoreAdminService.SyncFeatureView][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.SyncFeatureView]. +message SyncFeatureViewRequest { + // Required. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}` + string feature_view = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureView" + } + ]; +} + +// Respose message for +// [FeatureOnlineStoreAdminService.SyncFeatureView][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.SyncFeatureView]. +message SyncFeatureViewResponse { + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}/featureViewSyncs/{feature_view_sync}` + string feature_view_sync = 1; +} + +// Request message for +// [FeatureOnlineStoreAdminService.GetFeatureViewSync][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.GetFeatureViewSync]. +message GetFeatureViewSyncRequest { + // Required. The name of the FeatureViewSync resource. + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}/featureViewSyncs/{feature_view_sync}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureViewSync" + } + ]; +} + +// Request message for +// [FeatureOnlineStoreAdminService.ListFeatureViewSyncs][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViewSyncs]. +message ListFeatureViewSyncsRequest { + // Required. The resource name of the FeatureView to list FeatureViewSyncs. + // Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureView" + } + ]; + + // Lists the FeatureViewSyncs that match the filter expression. The following + // filters are supported: + // + // * `create_time`: Supports `=`, `!=`, `<`, `>`, `>=`, and `<=` comparisons. + // Values must be in RFC 3339 format. + // + // Examples: + // + // * `create_time > \"2020-01-31T15:30:00.000000Z\"` --> FeatureViewSyncs + // created after 2020-01-31T15:30:00.000000Z. + string filter = 2; + + // The maximum number of FeatureViewSyncs to return. The service may return + // fewer than this value. If unspecified, at most 1000 FeatureViewSyncs will + // be returned. The maximum value is 1000; any value greater than 1000 will be + // coerced to 1000. + int32 page_size = 3; + + // A page token, received from a previous + // [FeatureOnlineStoreAdminService.ListFeatureViewSyncs][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViewSyncs] + // call. Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to + // [FeatureOnlineStoreAdminService.ListFeatureViewSyncs][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViewSyncs] + // must match the call that provided the page token. + string page_token = 4; + + // A comma-separated list of fields to order by, sorted in ascending order. + // Use "desc" after a field name for descending. + // + // Supported fields: + // + // * `create_time` + string order_by = 5; +} + +// Response message for +// [FeatureOnlineStoreAdminService.ListFeatureViewSyncs][google.cloud.aiplatform.v1.FeatureOnlineStoreAdminService.ListFeatureViewSyncs]. +message ListFeatureViewSyncsResponse { + // The FeatureViewSyncs matching the request. + repeated FeatureViewSync feature_view_syncs = 1; + + // A token, which can be sent as + // [ListFeatureViewSyncsRequest.page_token][google.cloud.aiplatform.v1.ListFeatureViewSyncsRequest.page_token] + // to retrieve the next page. If this field is omitted, there are no + // subsequent pages. + string next_page_token = 2; +} diff --git a/google/cloud/aiplatform/v1/feature_online_store_service.proto b/google/cloud/aiplatform/v1/feature_online_store_service.proto new file mode 100644 index 00000000000000..957b4ade4fe5d5 --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_online_store_service.proto @@ -0,0 +1,121 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/aiplatform/v1/featurestore_online_service.proto"; +import "google/protobuf/struct.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureOnlineStoreServiceProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +service FeatureOnlineStoreService { + option (google.api.default_host) = "aiplatform.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Fetch feature values under a FeatureView. + rpc FetchFeatureValues(FetchFeatureValuesRequest) + returns (FetchFeatureValuesResponse) { + option (google.api.http) = { + post: "/v1/{feature_view=projects/*/locations/*/featureOnlineStores/*/featureViews/*}:fetchFeatureValues" + body: "*" + }; + option (google.api.method_signature) = "feature_view, data_key"; + } +} + +// Format of the data in the Feature View. +enum FeatureViewDataFormat { + // Not set. Will be treated as the KeyValue format. + FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED = 0; + + // Return response data in key-value format. + KEY_VALUE = 1; + + // Return response data in proto Struct format. + PROTO_STRUCT = 2; +} + +// Lookup key for a feature view. +message FeatureViewDataKey { + oneof key_oneof { + // String key to use for lookup. + string key = 1; + } +} + +// Request message for +// [FeatureOnlineStoreService.FetchFeatureValues][google.cloud.aiplatform.v1.FeatureOnlineStoreService.FetchFeatureValues]. +// All the features under the requested feature view will be returned. +message FetchFeatureValuesRequest { + // Required. FeatureView resource format + // `projects/{project}/locations/{location}/featureOnlineStores/{featureOnlineStore}/featureViews/{featureView}` + string feature_view = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureView" + } + ]; + + // Optional. The request key to fetch feature values for. + FeatureViewDataKey data_key = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Response data format. If not set, + // [FeatureViewDataFormat.KEY_VALUE][google.cloud.aiplatform.v1.FeatureViewDataFormat.KEY_VALUE] + // will be used. + FeatureViewDataFormat data_format = 7 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for +// [FeatureOnlineStoreService.FetchFeatureValues][google.cloud.aiplatform.v1.FeatureOnlineStoreService.FetchFeatureValues] +message FetchFeatureValuesResponse { + // Response structure in the format of key (feature name) and (feature) value + // pair. + message FeatureNameValuePairList { + // Feature name & value pair. + message FeatureNameValuePair { + oneof data { + // Feature value. + FeatureValue value = 2; + } + + // Feature short name. + string name = 1; + } + + // List of feature names and values. + repeated FeatureNameValuePair features = 1; + } + + oneof format { + // Feature values in KeyValue format. + FeatureNameValuePairList key_values = 3; + + // Feature values in proto Struct format. + google.protobuf.Struct proto_struct = 2; + } +} diff --git a/google/cloud/aiplatform/v1/feature_registry_service.proto b/google/cloud/aiplatform/v1/feature_registry_service.proto new file mode 100644 index 00000000000000..e02ca56c19666d --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_registry_service.proto @@ -0,0 +1,333 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/aiplatform/v1/feature.proto"; +import "google/cloud/aiplatform/v1/feature_group.proto"; +import "google/cloud/aiplatform/v1/featurestore_service.proto"; +import "google/cloud/aiplatform/v1/operation.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureRegistryServiceProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +// The service that handles CRUD and List for resources for +// FeatureRegistry. +service FeatureRegistryService { + option (google.api.default_host) = "aiplatform.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Creates a new FeatureGroup in a given project and location. + rpc CreateFeatureGroup(CreateFeatureGroupRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*}/featureGroups" + body: "feature_group" + }; + option (google.api.method_signature) = + "parent,feature_group,feature_group_id"; + option (google.longrunning.operation_info) = { + response_type: "FeatureGroup" + metadata_type: "CreateFeatureGroupOperationMetadata" + }; + } + + // Gets details of a single FeatureGroup. + rpc GetFeatureGroup(GetFeatureGroupRequest) returns (FeatureGroup) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/featureGroups/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists FeatureGroups in a given project and location. + rpc ListFeatureGroups(ListFeatureGroupsRequest) + returns (ListFeatureGroupsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/featureGroups" + }; + option (google.api.method_signature) = "parent"; + } + + // Updates the parameters of a single FeatureGroup. + rpc UpdateFeatureGroup(UpdateFeatureGroupRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{feature_group.name=projects/*/locations/*/featureGroups/*}" + body: "feature_group" + }; + option (google.api.method_signature) = "feature_group,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "FeatureGroup" + metadata_type: "UpdateFeatureGroupOperationMetadata" + }; + } + + // Deletes a single FeatureGroup. + rpc DeleteFeatureGroup(DeleteFeatureGroupRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/featureGroups/*}" + }; + option (google.api.method_signature) = "name,force"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteOperationMetadata" + }; + } + + // Creates a new Feature in a given FeatureGroup. + rpc CreateFeature(CreateFeatureRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/featureGroups/*}/features" + body: "feature" + }; + option (google.api.method_signature) = "parent,feature,feature_id"; + option (google.longrunning.operation_info) = { + response_type: "Feature" + metadata_type: "CreateFeatureOperationMetadata" + }; + } + + // Gets details of a single Feature. + rpc GetFeature(GetFeatureRequest) returns (Feature) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/featureGroups/*/features/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists Features in a given FeatureGroup. + rpc ListFeatures(ListFeaturesRequest) returns (ListFeaturesResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/featureGroups/*}/features" + }; + option (google.api.method_signature) = "parent"; + } + + // Updates the parameters of a single Feature. + rpc UpdateFeature(UpdateFeatureRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{feature.name=projects/*/locations/*/featureGroups/*/features/*}" + body: "feature" + }; + option (google.api.method_signature) = "feature,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "Feature" + metadata_type: "UpdateFeatureOperationMetadata" + }; + } + + // Deletes a single Feature. + rpc DeleteFeature(DeleteFeatureRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/featureGroups/*/features/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteOperationMetadata" + }; + } +} + +// Request message for +// [FeatureRegistryService.CreateFeatureGroup][google.cloud.aiplatform.v1.FeatureRegistryService.CreateFeatureGroup]. +message CreateFeatureGroupRequest { + // Required. The resource name of the Location to create FeatureGroups. + // Format: + // `projects/{project}/locations/{location}'` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/FeatureGroup" + } + ]; + + // Required. The FeatureGroup to create. + FeatureGroup feature_group = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The ID to use for this FeatureGroup, which will become the final + // component of the FeatureGroup's resource name. + // + // This value may be up to 60 characters, and valid characters are + // `[a-z0-9_]`. The first character cannot be a number. + // + // The value must be unique within the project and location. + string feature_group_id = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request message for +// [FeatureRegistryService.GetFeatureGroup][google.cloud.aiplatform.v1.FeatureRegistryService.GetFeatureGroup]. +message GetFeatureGroupRequest { + // Required. The name of the FeatureGroup resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureGroup" + } + ]; +} + +// Request message for +// [FeatureRegistryService.ListFeatureGroups][google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatureGroups]. +message ListFeatureGroupsRequest { + // Required. The resource name of the Location to list FeatureGroups. + // Format: + // `projects/{project}/locations/{location}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/FeatureGroup" + } + ]; + + // Lists the FeatureGroups that match the filter expression. The + // following fields are supported: + // + // * `create_time`: Supports `=`, `!=`, `<`, `>`, `<=`, and `>=` comparisons. + // Values must be + // in RFC 3339 format. + // * `update_time`: Supports `=`, `!=`, `<`, `>`, `<=`, and `>=` comparisons. + // Values must be + // in RFC 3339 format. + // * `labels`: Supports key-value equality and key presence. + // + // Examples: + // + // * `create_time > "2020-01-01" OR update_time > "2020-01-01"` + // FeatureGroups created or updated after 2020-01-01. + // * `labels.env = "prod"` + // FeatureGroups with label "env" set to "prod". + string filter = 2; + + // The maximum number of FeatureGroups to return. The service may return + // fewer than this value. If unspecified, at most 100 FeatureGroups will + // be returned. The maximum value is 100; any value greater than 100 will be + // coerced to 100. + int32 page_size = 3; + + // A page token, received from a previous + // [FeatureGroupAdminService.ListFeatureGroups][] call. + // Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to + // [FeatureGroupAdminService.ListFeatureGroups][] must + // match the call that provided the page token. + string page_token = 4; + + // A comma-separated list of fields to order by, sorted in ascending order. + // Use "desc" after a field name for descending. + // Supported Fields: + // + // * `create_time` + // * `update_time` + string order_by = 5; +} + +// Response message for +// [FeatureRegistryService.ListFeatureGroups][google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatureGroups]. +message ListFeatureGroupsResponse { + // The FeatureGroups matching the request. + repeated FeatureGroup feature_groups = 1; + + // A token, which can be sent as + // [ListFeatureGroupsRequest.page_token][google.cloud.aiplatform.v1.ListFeatureGroupsRequest.page_token] + // to retrieve the next page. If this field is omitted, there are no + // subsequent pages. + string next_page_token = 2; +} + +// Request message for +// [FeatureRegistryService.UpdateFeatureGroup][google.cloud.aiplatform.v1.FeatureRegistryService.UpdateFeatureGroup]. +message UpdateFeatureGroupRequest { + // Required. The FeatureGroup's `name` field is used to identify the + // FeatureGroup to be updated. Format: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` + FeatureGroup feature_group = 1 [(google.api.field_behavior) = REQUIRED]; + + // Field mask is used to specify the fields to be overwritten in the + // FeatureGroup resource by the update. + // The fields specified in the update_mask are relative to the resource, not + // the full request. A field will be overwritten if it is in the mask. If the + // user does not provide a mask then only the non-empty fields present in the + // request will be overwritten. Set the update_mask to `*` to override all + // fields. + // + // Updatable fields: + // + // * `labels` + google.protobuf.FieldMask update_mask = 2; +} + +// Request message for +// [FeatureRegistryService.DeleteFeatureGroup][google.cloud.aiplatform.v1.FeatureRegistryService.DeleteFeatureGroup]. +message DeleteFeatureGroupRequest { + // Required. The name of the FeatureGroup to be deleted. + // Format: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/FeatureGroup" + } + ]; + + // If set to true, any Features under this FeatureGroup + // will also be deleted. (Otherwise, the request will only work if the + // FeatureGroup has no Features.) + bool force = 2; +} + +// Details of operations that perform create FeatureGroup. +message CreateFeatureGroupOperationMetadata { + // Operation metadata for FeatureGroup. + GenericOperationMetadata generic_metadata = 1; +} + +// Details of operations that perform update FeatureGroup. +message UpdateFeatureGroupOperationMetadata { + // Operation metadata for FeatureGroup. + GenericOperationMetadata generic_metadata = 1; +} + +// Details of operations that perform create FeatureGroup. +message CreateRegistryFeatureOperationMetadata { + // Operation metadata for Feature. + GenericOperationMetadata generic_metadata = 1; +} + +// Details of operations that perform update Feature. +message UpdateFeatureOperationMetadata { + // Operation metadata for Feature Update. + GenericOperationMetadata generic_metadata = 1; +} diff --git a/google/cloud/aiplatform/v1/feature_view.proto b/google/cloud/aiplatform/v1/feature_view.proto new file mode 100644 index 00000000000000..e1aa9978d7ebd8 --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_view.proto @@ -0,0 +1,123 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureViewProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +// FeatureView is representation of values that the FeatureOnlineStore will +// serve based on its syncConfig. +message FeatureView { + option (google.api.resource) = { + type: "aiplatform.googleapis.com/FeatureView" + pattern: "projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}" + }; + + message BigQuerySource { + // Required. The BigQuery view URI that will be materialized on each sync + // trigger based on FeatureView.SyncConfig. + string uri = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Columns to construct entity_id / row keys. Start by supporting + // 1 only. + repeated string entity_id_columns = 2 + [(google.api.field_behavior) = REQUIRED]; + } + + message SyncConfig { + // Cron schedule (https://en.wikipedia.org/wiki/Cron) to launch scheduled + // runs. To explicitly set a timezone to the cron tab, apply a prefix in + // the cron tab: "CRON_TZ=${IANA_TIME_ZONE}" or "TZ=${IANA_TIME_ZONE}". + // The ${IANA_TIME_ZONE} may only be a valid string from IANA time zone + // database. For example, "CRON_TZ=America/New_York 1 * * * *", or + // "TZ=America/New_York 1 * * * *". + string cron = 1; + } + + // A Feature Registry source for features that need to be synced to Online + // Store. + message FeatureRegistrySource { + // Features belonging to a single feature group that will be + // synced to Online Store. + message FeatureGroup { + // Required. Identifier of the feature group. + string feature_group_id = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Identifiers of features under the feature group. + repeated string feature_ids = 2 [(google.api.field_behavior) = REQUIRED]; + } + + // Required. List of features that need to be synced to Online Store. + repeated FeatureGroup feature_groups = 1 + [(google.api.field_behavior) = REQUIRED]; + } + + oneof source { + // Optional. Configures how data is supposed to be extracted from a BigQuery + // source to be loaded onto the FeatureOnlineStore. + BigQuerySource big_query_source = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Configures the features from a Feature Registry source that + // need to be loaded onto the FeatureOnlineStore. + FeatureRegistrySource feature_registry_source = 9 + [(google.api.field_behavior) = OPTIONAL]; + } + + // Output only. Name of the FeatureView. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp when this FeatureView was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp when this FeatureView was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Used to perform consistent read-modify-write updates. If not set, + // a blind "overwrite" update happens. + string etag = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The labels with user-defined metadata to organize your + // FeatureViews. + // + // Label keys and values can be no longer than 64 characters + // (Unicode codepoints), can only contain lowercase letters, numeric + // characters, underscores and dashes. International characters are allowed. + // + // See https://goo.gl/xmQnxf for more information on and examples of labels. + // No more than 64 user labels can be associated with one + // FeatureOnlineStore(System labels are excluded)." System reserved label keys + // are prefixed with "aiplatform.googleapis.com/" and are immutable. + map labels = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Configures when data is to be synced/updated for this FeatureView. At the + // end of the sync the latest featureValues for each entityId of this + // FeatureView are made ready for online serving. + SyncConfig sync_config = 7; +} diff --git a/google/cloud/aiplatform/v1/feature_view_sync.proto b/google/cloud/aiplatform/v1/feature_view_sync.proto new file mode 100644 index 00000000000000..278d1a995d4253 --- /dev/null +++ b/google/cloud/aiplatform/v1/feature_view_sync.proto @@ -0,0 +1,57 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; +import "google/type/interval.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "FeatureViewSyncProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::Aiplatform::V1"; + +// FeatureViewSync is a representation of sync operation which copies data from +// data source to Feature View in Online Store. +message FeatureViewSync { + option (google.api.resource) = { + type: "aiplatform.googleapis.com/FeatureViewSync" + pattern: "projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}/featureViewSyncs/feature_view_sync" + }; + + // Output only. Name of the FeatureViewSync. Format: + // `projects/{project}/locations/{location}/featureOnlineStores/{feature_online_store}/featureViews/{feature_view}/featureViewSyncs/{feature_view_sync}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Time when this FeatureViewSync is created. Creation of a + // FeatureViewSync means that the job is pending / waiting for sufficient + // resources but may not have started the actual data transfer yet. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Time when this FeatureViewSync is finished. + google.type.Interval run_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Final status of the FeatureViewSync. + google.rpc.Status final_status = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/cloud/aiplatform/v1/featurestore_service.proto b/google/cloud/aiplatform/v1/featurestore_service.proto index 424be12a6fc048..c40bd984faef63 100644 --- a/google/cloud/aiplatform/v1/featurestore_service.proto +++ b/google/cloud/aiplatform/v1/featurestore_service.proto @@ -950,10 +950,14 @@ message DeleteEntityTypeRequest { // Request message for // [FeaturestoreService.CreateFeature][google.cloud.aiplatform.v1.FeaturestoreService.CreateFeature]. +// Request message for +// [FeatureRegistryService.CreateFeature][google.cloud.aiplatform.v1.FeatureRegistryService.CreateFeature]. message CreateFeatureRequest { - // Required. The resource name of the EntityType to create a Feature. - // Format: + // Required. The resource name of the EntityType or FeatureGroup to create a + // Feature. Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -970,7 +974,7 @@ message CreateFeatureRequest { // This value may be up to 128 characters, and valid characters are // `[a-z0-9_]`. The first character cannot be a number. // - // The value must be unique within an EntityType. + // The value must be unique within an EntityType/FeatureGroup. string feature_id = 3 [(google.api.field_behavior) = REQUIRED]; } @@ -1005,10 +1009,14 @@ message BatchCreateFeaturesResponse { // Request message for // [FeaturestoreService.GetFeature][google.cloud.aiplatform.v1.FeaturestoreService.GetFeature]. +// Request message for +// [FeatureRegistryService.GetFeature][google.cloud.aiplatform.v1.FeatureRegistryService.GetFeature]. message GetFeatureRequest { // Required. The name of the Feature resource. - // Format: + // Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1019,10 +1027,14 @@ message GetFeatureRequest { // Request message for // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1.FeaturestoreService.ListFeatures]. +// Request message for +// [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatures]. message ListFeaturesRequest { // Required. The resource name of the Location to list Features. - // Format: + // Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1060,10 +1072,14 @@ message ListFeaturesRequest { // A page token, received from a previous // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1.FeaturestoreService.ListFeatures] + // call or + // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatures] // call. Provide this to retrieve the subsequent page. // // When paginating, all other parameters provided to // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1.FeaturestoreService.ListFeatures] + // or or + // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatures] // must match the call that provided the page token. string page_token = 4; @@ -1072,7 +1088,7 @@ message ListFeaturesRequest { // Supported fields: // // * `feature_id` - // * `value_type` + // * `value_type` (Not supported for FeatureRegistry Feature) // * `create_time` // * `update_time` string order_by = 5; @@ -1080,6 +1096,7 @@ message ListFeaturesRequest { // Mask specifying which fields to read. google.protobuf.FieldMask read_mask = 6; + // Only applicable for Vertex AI Feature Store (Legacy). // If set, return the most recent // [ListFeaturesRequest.latest_stats_count][google.cloud.aiplatform.v1.ListFeaturesRequest.latest_stats_count] // of stats for each Feature in response. Valid value is [0, 10]. If number of @@ -1091,6 +1108,8 @@ message ListFeaturesRequest { // Response message for // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1.FeaturestoreService.ListFeatures]. +// Response message for +// [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1.FeatureRegistryService.ListFeatures]. message ListFeaturesResponse { // The Features matching the request. repeated Feature features = 1; @@ -1216,11 +1235,14 @@ message SearchFeaturesResponse { // Request message for // [FeaturestoreService.UpdateFeature][google.cloud.aiplatform.v1.FeaturestoreService.UpdateFeature]. +// Request message for +// [FeatureRegistryService.UpdateFeature][google.cloud.aiplatform.v1.FeatureRegistryService.UpdateFeature]. message UpdateFeatureRequest { // Required. The Feature's `name` field is used to identify the Feature to be // updated. // Format: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}` + // `projects/{project}/locations/{location}/featureGroups/{feature_group}/features/{feature}` Feature feature = 1 [(google.api.field_behavior) = REQUIRED]; // Field mask is used to specify the fields to be overwritten in the @@ -1235,16 +1257,19 @@ message UpdateFeatureRequest { // // * `description` // * `labels` - // * `disable_monitoring` + // * `disable_monitoring` (Not supported for FeatureRegistry Feature) google.protobuf.FieldMask update_mask = 2; } // Request message for // [FeaturestoreService.DeleteFeature][google.cloud.aiplatform.v1.FeaturestoreService.DeleteFeature]. +// Request message for +// [FeatureRegistryService.DeleteFeature][google.cloud.aiplatform.v1.FeatureRegistryService.DeleteFeature]. message DeleteFeatureRequest { // Required. The name of the Features to be deleted. // Format: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}` + // `projects/{project}/locations/{location}/featureGroups/{feature_group}/features/{feature}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { diff --git a/google/cloud/aiplatform/v1/index.proto b/google/cloud/aiplatform/v1/index.proto index 1dfaca9b8ac115..6766741240e720 100644 --- a/google/cloud/aiplatform/v1/index.proto +++ b/google/cloud/aiplatform/v1/index.proto @@ -142,6 +142,55 @@ message IndexDatapoint { repeated string deny_list = 3; } + // This field allows restricts to be based on numeric comparisons rather + // than categorical tokens. + message NumericRestriction { + // Which comparison operator to use. Should be specified for queries only; + // specifying this for a datapoint is an error. + // + // Datapoints for which Operator is true relative to the query's Value + // field will be allowlisted. + enum Operator { + // Default value of the enum. + OPERATOR_UNSPECIFIED = 0; + + // Datapoints are eligible iff their value is < the query's. + LESS = 1; + + // Datapoints are eligible iff their value is <= the query's. + LESS_EQUAL = 2; + + // Datapoints are eligible iff their value is == the query's. + EQUAL = 3; + + // Datapoints are eligible iff their value is >= the query's. + GREATER_EQUAL = 4; + + // Datapoints are eligible iff their value is > the query's. + GREATER = 5; + } + + // The type of Value must be consistent for all datapoints with a given + // namespace name. This is verified at runtime. + oneof Value { + // Represents 64 bit integer. + int64 value_int = 2; + + // Represents 32 bit float. + float value_float = 3; + + // Represents 64 bit float. + double value_double = 4; + } + + // The namespace of this restriction. e.g.: cost. + string namespace = 1; + + // This MUST be specified for queries and must NOT be specified for + // datapoints. + Operator op = 5; + } + // Crowding tag is a constraint on a neighbor list produced by nearest // neighbor search requiring that no more than some value k' of the k // neighbors returned have the same value of crowding_attribute. @@ -167,6 +216,12 @@ message IndexDatapoint { // https://cloud.google.com/vertex-ai/docs/matching-engine/filtering repeated Restriction restricts = 4 [(google.api.field_behavior) = OPTIONAL]; + // Optional. List of Restrict of the datapoint, used to perform "restricted + // searches" where boolean rule are used to filter the subset of the database + // eligible for matching. This uses numeric comparisons. + repeated NumericRestriction numeric_restricts = 6 + [(google.api.field_behavior) = OPTIONAL]; + // Optional. CrowdingTag of the datapoint, the number of neighbors to return // in each crowding can be configured during query. CrowdingTag crowding_tag = 5 [(google.api.field_behavior) = OPTIONAL]; diff --git a/google/cloud/aiplatform/v1/index_endpoint.proto b/google/cloud/aiplatform/v1/index_endpoint.proto index cca3fc3d5dd5cd..d8daf55aff5e3a 100644 --- a/google/cloud/aiplatform/v1/index_endpoint.proto +++ b/google/cloud/aiplatform/v1/index_endpoint.proto @@ -190,10 +190,11 @@ message DeployedIndex { [(google.api.field_behavior) = OPTIONAL]; // Optional. A description of resources that are dedicated to the - // DeployedIndex, and that need a higher degree of manual configuration. If - // min_replica_count is not set, the default value is 2 (we don't provide SLA - // when min_replica_count=1). If max_replica_count is not set, the default - // value is min_replica_count. The max allowed replica count is 1000. + // DeployedIndex, and that need a higher degree of manual configuration. The + // field min_replica_count must be set to a value strictly greater than 0, or + // else validation will fail. We don't provide SLA when min_replica_count=1. + // If max_replica_count is not set, the default value is min_replica_count. + // The max allowed replica count is 1000. // // Available machine types for SMALL shard: // e2-standard-2 and all machine types available for MEDIUM and LARGE shard. diff --git a/google/cloud/aiplatform/v1/llm_utility_service.proto b/google/cloud/aiplatform/v1/llm_utility_service.proto new file mode 100644 index 00000000000000..3cd98bd0837157 --- /dev/null +++ b/google/cloud/aiplatform/v1/llm_utility_service.proto @@ -0,0 +1,100 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/aiplatform/v1/prediction_service.proto"; +import "google/protobuf/struct.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "LlmUtilityServiceProto"; +option java_package = "com.google.cloud.aiplatform.v1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1"; +option ruby_package = "Google::Cloud::AIPlatform::V1"; + +// Service for LLM related utility functions. +service LlmUtilityService { + option (google.api.default_host) = "aiplatform.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Perform a token counting. + rpc CountTokens(CountTokensRequest) returns (CountTokensResponse) { + option (google.api.http) = { + post: "/v1/{endpoint=projects/*/locations/*/endpoints/*}:countTokens" + body: "*" + additional_bindings { + post: "/v1/{endpoint=projects/*/locations/*/publishers/*/models/*}:countTokens" + body: "*" + } + }; + option (google.api.method_signature) = "endpoint,instances"; + } + + // Return a list of tokens based on the input text. + rpc ComputeTokens(ComputeTokensRequest) returns (ComputeTokensResponse) { + option (google.api.http) = { + post: "/v1/{endpoint=projects/*/locations/*/endpoints/*}:computeTokens" + body: "*" + additional_bindings { + post: "/v1/{endpoint=projects/*/locations/*/publishers/*/models/*}:computeTokens" + body: "*" + } + }; + option (google.api.method_signature) = "endpoint,instances"; + } +} + +// Request message for ComputeTokens RPC call. +message ComputeTokensRequest { + // Required. The name of the Endpoint requested to get lists of tokens and + // token ids. + string endpoint = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/Endpoint" + } + ]; + + // Required. The instances that are the input to token computing API call. + // Schema is identical to the prediction schema of the text model, even for + // the non-text models, like chat models, or Codey models. + repeated google.protobuf.Value instances = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Tokens info with a list of tokens and the corresponding list of token ids. +message TokensInfo { + // A list of tokens from the input. + repeated bytes tokens = 1; + + // A list of token ids from the input. + repeated int64 token_ids = 2; +} + +// Response message for ComputeTokens RPC call. +message ComputeTokensResponse { + // Lists of tokens info from the input. A ComputeTokensRequest could have + // multiple instances with a prompt in each instance. We also need to return + // lists of tokens info for the request with multiple instances. + repeated TokensInfo tokens_info = 1; +} diff --git a/google/cloud/aiplatform/v1/machine_resources.proto b/google/cloud/aiplatform/v1/machine_resources.proto index 2a307e51f80905..041ea2e3d0ad5a 100644 --- a/google/cloud/aiplatform/v1/machine_resources.proto +++ b/google/cloud/aiplatform/v1/machine_resources.proto @@ -52,6 +52,10 @@ message MachineSpec { // The number of accelerators to attach to the machine. int32 accelerator_count = 3; + + // Immutable. The topology of the TPUs. Corresponds to the TPU topologies + // available from GKE. (Example: tpu_topology: "2x2x1"). + string tpu_topology = 4 [(google.api.field_behavior) = IMMUTABLE]; } // A description of resources that are dedicated to a DeployedModel, and diff --git a/google/cloud/aiplatform/v1/model.proto b/google/cloud/aiplatform/v1/model.proto index 47db405be7f7c6..05d3ce28380c83 100644 --- a/google/cloud/aiplatform/v1/model.proto +++ b/google/cloud/aiplatform/v1/model.proto @@ -22,6 +22,7 @@ import "google/cloud/aiplatform/v1/deployed_model_ref.proto"; import "google/cloud/aiplatform/v1/encryption_spec.proto"; import "google/cloud/aiplatform/v1/env_var.proto"; import "google/cloud/aiplatform/v1/explanation.proto"; +import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; @@ -690,6 +691,21 @@ message ModelContainerSpec { // [`AIP_DEPLOYED_MODEL_ID` environment // variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) string health_route = 7 [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. Deployment timeout. + // Limit for deployment timeout is 2 hours. + google.protobuf.Duration deployment_timeout = 10 + [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. The amount of the VM memory to reserve as the shared memory for + // the model in megabytes. + int64 shared_memory_size_mb = 11 [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. Specification for Kubernetes startup probe. + Probe startup_probe = 12 [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. Specification for Kubernetes readiness probe. + Probe health_probe = 13 [(google.api.field_behavior) = IMMUTABLE]; } // Represents a network port in a container. @@ -730,3 +746,35 @@ message ModelSourceInfo { // pertains to the original. bool copy = 2; } + +// Probe describes a health check to be performed against a container to +// determine whether it is alive or ready to receive traffic. +message Probe { + // ExecAction specifies a command to execute. + message ExecAction { + // Command is the command line to execute inside the container, the working + // directory for the command is root ('/') in the container's filesystem. + // The command is simply exec'd, it is not run inside a shell, so + // traditional shell instructions ('|', etc) won't work. To use a shell, you + // need to explicitly call out to that shell. Exit status of 0 is treated as + // live/healthy and non-zero is unhealthy. + repeated string command = 1; + } + + oneof probe_type { + // Exec specifies the action to take. + ExecAction exec = 1; + } + + // How often (in seconds) to perform the probe. Default to 10 seconds. + // Minimum value is 1. Must be less than timeout_seconds. + // + // Maps to Kubernetes probe argument 'periodSeconds'. + int32 period_seconds = 2; + + // Number of seconds after which the probe times out. Defaults to 1 second. + // Minimum value is 1. Must be greater or equal to period_seconds. + // + // Maps to Kubernetes probe argument 'timeoutSeconds'. + int32 timeout_seconds = 3; +} diff --git a/google/cloud/aiplatform/v1/prediction_service.proto b/google/cloud/aiplatform/v1/prediction_service.proto index 52b5d6df615496..881f981799edfd 100644 --- a/google/cloud/aiplatform/v1/prediction_service.proto +++ b/google/cloud/aiplatform/v1/prediction_service.proto @@ -312,3 +312,31 @@ message ExplainResponse { // [PredictResponse.predictions][google.cloud.aiplatform.v1.PredictResponse.predictions]. repeated google.protobuf.Value predictions = 3; } + +// Request message for [PredictionService.CountTokens][]. +message CountTokensRequest { + // Required. The name of the Endpoint requested to perform token counting. + // Format: + // `projects/{project}/locations/{location}/endpoints/{endpoint}` + string endpoint = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/Endpoint" + } + ]; + + // Required. The instances that are the input to token counting call. + // Schema is identical to the prediction schema of the underlying model. + repeated google.protobuf.Value instances = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for [PredictionService.CountTokens][]. +message CountTokensResponse { + // The total number of tokens counted across all instances from the request. + int32 total_tokens = 1; + + // The total number of billable characters counted across all instances from + // the request. + int32 total_billable_characters = 2; +} diff --git a/google/cloud/aiplatform/v1/study.proto b/google/cloud/aiplatform/v1/study.proto index d4e33d3f678c33..6e39f3f4038189 100644 --- a/google/cloud/aiplatform/v1/study.proto +++ b/google/cloud/aiplatform/v1/study.proto @@ -21,6 +21,7 @@ import "google/api/resource.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; option csharp_namespace = "Google.Cloud.AIPlatform.V1"; option go_package = "cloud.google.com/go/aiplatform/apiv1/aiplatformpb;aiplatformpb"; @@ -213,6 +214,17 @@ message TrialContext { repeated Trial.Parameter parameters = 2; } +// Time-based Constraint for Study +message StudyTimeConstraint { + oneof constraint { + // Counts the wallclock time passed since the creation of this Study. + google.protobuf.Duration max_duration = 1; + + // Compares the wallclock time to this time. Must use UTC timezone. + google.protobuf.Timestamp end_time = 2; + } +} + // Represents specification of a Study. message StudySpec { // Represents a metric to optimize. @@ -504,6 +516,62 @@ message StudySpec { optional bool update_all_stopped_trials = 6; } + // The configuration (stopping conditions) for automated stopping of a Study. + // Conditions include trial budgets, time budgets, and convergence detection. + message StudyStoppingConfig { + // If true, a Study enters STOPPING_ASAP whenever it would normally enters + // STOPPING state. + // + // The bottom line is: set to true if you want to interrupt on-going + // evaluations of Trials as soon as the study stopping condition is met. + // (Please see Study.State documentation for the source of truth). + google.protobuf.BoolValue should_stop_asap = 1; + + // Each "stopping rule" in this proto specifies an "if" condition. Before + // Vizier would generate a new suggestion, it first checks each specified + // stopping rule, from top to bottom in this list. + // Note that the first few rules (e.g. minimum_runtime_constraint, + // min_num_trials) will prevent other stopping rules from being evaluated + // until they are met. For example, setting `min_num_trials=5` and + // `always_stop_after= 1 hour` means that the Study will ONLY stop after it + // has 5 COMPLETED trials, even if more than an hour has passed since its + // creation. It follows the first applicable rule (whose "if" condition is + // satisfied) to make a stopping decision. If none of the specified rules + // are applicable, then Vizier decides that the study should not stop. + // If Vizier decides that the study should stop, the study enters + // STOPPING state (or STOPPING_ASAP if should_stop_asap = true). + // IMPORTANT: The automatic study state transition happens precisely as + // described above; that is, deleting trials or updating StudyConfig NEVER + // automatically moves the study state back to ACTIVE. If you want to + // _resume_ a Study that was stopped, 1) change the stopping conditions if + // necessary, 2) activate the study, and then 3) ask for suggestions. + // If the specified time or duration has not passed, do not stop the + // study. + StudyTimeConstraint minimum_runtime_constraint = 2; + + // If the specified time or duration has passed, stop the study. + StudyTimeConstraint maximum_runtime_constraint = 3; + + // If there are fewer than this many COMPLETED trials, do not stop the + // study. + google.protobuf.Int32Value min_num_trials = 4; + + // If there are more than this many trials, stop the study. + google.protobuf.Int32Value max_num_trials = 5; + + // If the objective value has not improved for this many consecutive + // trials, stop the study. + // + // WARNING: Effective only for single-objective studies. + google.protobuf.Int32Value max_num_trials_no_progress = 6; + + // If the objective value has not improved for this much time, stop the + // study. + // + // WARNING: Effective only for single-objective studies. + google.protobuf.Duration max_duration_no_progress = 7; + } + // The available search algorithms for the Study. enum Algorithm { // The default algorithm used by Vertex AI for [hyperparameter @@ -589,6 +657,10 @@ message StudySpec { // Describe which measurement selection type will be used MeasurementSelectionType measurement_selection_type = 7; + + // Conditions for automated stopping of a Study. Enable automated stopping by + // configuring at least one condition. + optional StudyStoppingConfig study_stopping_config = 11; } // A message representing a Measurement of a Trial. A Measurement contains diff --git a/google/cloud/aiplatform/v1beta1/BUILD.bazel b/google/cloud/aiplatform/v1beta1/BUILD.bazel index eef4055217a05d..3223dcb6e552b8 100644 --- a/google/cloud/aiplatform/v1beta1/BUILD.bazel +++ b/google/cloud/aiplatform/v1beta1/BUILD.bazel @@ -71,6 +71,7 @@ proto_library( "job_service.proto", "job_state.proto", "lineage_subgraph.proto", + "llm_utility_service.proto", "machine_resources.proto", "manual_batch_tuning_parameters.proto", "match_service.proto", @@ -213,6 +214,7 @@ java_gapic_test( "com.google.cloud.aiplatform.v1beta1.IndexEndpointServiceClientTest", "com.google.cloud.aiplatform.v1beta1.IndexServiceClientTest", "com.google.cloud.aiplatform.v1beta1.JobServiceClientTest", + "com.google.cloud.aiplatform.v1beta1.LlmUtilityServiceClientTest", "com.google.cloud.aiplatform.v1beta1.MetadataServiceClientTest", "com.google.cloud.aiplatform.v1beta1.MigrationServiceClientTest", "com.google.cloud.aiplatform.v1beta1.ModelServiceClientTest", diff --git a/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml b/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml index 786a3f94d6069f..2b33166351c62d 100644 --- a/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml +++ b/google/cloud/aiplatform/v1beta1/aiplatform_v1beta1.yaml @@ -15,6 +15,7 @@ apis: - name: google.cloud.aiplatform.v1beta1.IndexEndpointService - name: google.cloud.aiplatform.v1beta1.IndexService - name: google.cloud.aiplatform.v1beta1.JobService +- name: google.cloud.aiplatform.v1beta1.LlmUtilityService - name: google.cloud.aiplatform.v1beta1.MatchService - name: google.cloud.aiplatform.v1beta1.MetadataService - name: google.cloud.aiplatform.v1beta1.MigrationService @@ -221,6 +222,8 @@ http: - post: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}:cancel' + - post: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}:cancel' + - post: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}:cancel' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}:cancel' @@ -291,6 +294,8 @@ http: - delete: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/extensionControllers/*}/operations' + - delete: '/ui/{name=projects/*/locations/*/extensions/*}/operations' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}' @@ -314,6 +319,10 @@ http: - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - delete: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' + - delete: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' - delete: '/v1beta1/{name=projects/*/locations/*/operations/*}' - delete: '/v1beta1/{name=projects/*/locations/*/datasets/*/operations/*}' - delete: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}' @@ -367,6 +376,8 @@ http: - get: '/ui/{name=projects/*/locations/*/edgeDeploymentJobs/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}' @@ -390,6 +401,10 @@ http: - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}' - get: '/v1beta1/{name=projects/*/locations/*/operations/*}' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*/operations/*}' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}' @@ -442,6 +457,8 @@ http: - get: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*}/operations' - get: '/ui/{name=projects/*/locations/*/edgeDevices/*}/operations' - get: '/ui/{name=projects/*/locations/*/endpoints/*}/operations' + - get: '/ui/{name=projects/*/locations/*/extensionControllers/*}/operations' + - get: '/ui/{name=projects/*/locations/*/extensions/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*}/operations' - get: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*}/operations' @@ -465,6 +482,10 @@ http: - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*}/operations' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*}/operations' - get: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*}/operations' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - get: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - get: '/v1beta1/{name=projects/*/locations/*}/operations' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*}/operations' - get: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*}/operations' @@ -517,6 +538,8 @@ http: - post: '/ui/{name=projects/*/locations/*/deploymentResourcePools/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/edgeDevices/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/endpoints/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/extensionControllers/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/extensions/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/featurestores/*/entityTypes/*/features/*/operations/*}:wait' @@ -540,6 +563,10 @@ http: - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/operations/*}:wait' - post: '/ui/{name=projects/*/locations/*/tensorboards/*/experiments/*/runs/*/timeSeries/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureOnlineStores/*/featureViews/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureGroups/*/operations/*}:wait' + - post: '/ui/{name=projects/*/locations/*/featureGroups/*/features/*/operations/*}:wait' - post: '/v1beta1/{name=projects/*/locations/*/operations/*}:wait' - post: '/v1beta1/{name=projects/*/locations/*/datasets/*/operations/*}:wait' - post: '/v1beta1/{name=projects/*/locations/*/datasets/*/dataItems/*/operations/*}:wait' @@ -636,6 +663,10 @@ authentication: canonical_scopes: |- https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/cloud-platform.read-only + - selector: google.cloud.aiplatform.v1beta1.LlmUtilityService.ComputeTokens + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform - selector: google.cloud.aiplatform.v1beta1.MatchService.FindNeighbors oauth: canonical_scopes: |- diff --git a/google/cloud/aiplatform/v1beta1/custom_job.proto b/google/cloud/aiplatform/v1beta1/custom_job.proto index 399c14eaeb1772..300642aea002ba 100644 --- a/google/cloud/aiplatform/v1beta1/custom_job.proto +++ b/google/cloud/aiplatform/v1beta1/custom_job.proto @@ -195,6 +195,12 @@ message CustomJobSpec { // * AIP_TENSORBOARD_LOG_DIR = `//logs/` GcsDestination base_output_directory = 6; + // The ID of the location to store protected artifacts. e.g. us-central1. + // Populate only when the location is different than CustomJob location. + // List of supported locations: + // https://cloud.google.com/vertex-ai/docs/general/locations + string protected_artifact_location_id = 19; + // Optional. The name of a Vertex AI // [Tensorboard][google.cloud.aiplatform.v1beta1.Tensorboard] resource to // which this CustomJob will upload Tensorboard logs. Format: diff --git a/google/cloud/aiplatform/v1beta1/feature.proto b/google/cloud/aiplatform/v1beta1/feature.proto index e3d3d4656325c3..668324a6e89144 100644 --- a/google/cloud/aiplatform/v1beta1/feature.proto +++ b/google/cloud/aiplatform/v1beta1/feature.proto @@ -30,9 +30,8 @@ option java_package = "com.google.cloud.aiplatform.v1beta1"; option php_namespace = "Google\\Cloud\\AIPlatform\\V1beta1"; option ruby_package = "Google::Cloud::AIPlatform::V1beta1"; -// Feature Metadata information that describes an attribute of an entity type. -// For example, apple is an entity type, and color is a feature that describes -// apple. +// Feature Metadata information. +// For example, color is a feature that describes an apple. message Feature { option (google.api.resource) = { type: "aiplatform.googleapis.com/Feature" @@ -73,6 +72,7 @@ message Feature { [(google.api.field_behavior) = OUTPUT_ONLY]; } + // Only applicable for Vertex AI Legacy Feature Store. // An enum representing the value type of a feature. enum ValueType { // The value type is unspecified. @@ -109,6 +109,7 @@ message Feature { // Immutable. Name of the Feature. // Format: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}/features/{feature}` + // `projects/{project}/locations/{location}/featureGroups/{feature_group}/features/{feature}` // // The last part feature is assigned by the client. The feature can be up to // 64 characters long and can consist only of ASCII Latin letters A-Z and a-z, @@ -119,14 +120,17 @@ message Feature { // Description of the Feature. string description = 2; - // Immutable. Type of Feature value. + // Immutable. Only applicable for Vertex AI Feature Store (Legacy). + // Type of Feature value. ValueType value_type = 3 [(google.api.field_behavior) = IMMUTABLE]; - // Output only. Timestamp when this EntityType was created. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // Timestamp when this EntityType was created. google.protobuf.Timestamp create_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Output only. Timestamp when this EntityType was most recently updated. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // Timestamp when this EntityType was most recently updated. google.protobuf.Timestamp update_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -147,9 +151,11 @@ message Feature { // "overwrite" update happens. string etag = 7; - // Optional. Deprecated: The custom monitoring configuration for this Feature, - // if not set, use the monitoring_config defined for the EntityType this - // Feature belongs to. Only Features with type + // Optional. Only applicable for Vertex AI Feature Store (Legacy). + // Deprecated: The custom monitoring configuration for this Feature, if not + // set, use the monitoring_config defined for the EntityType this Feature + // belongs to. + // Only Features with type // ([Feature.ValueType][google.cloud.aiplatform.v1beta1.Feature.ValueType]) // BOOL, STRING, DOUBLE or INT64 can enable monitoring. // @@ -162,8 +168,10 @@ message Feature { FeaturestoreMonitoringConfig monitoring_config = 9 [deprecated = true, (google.api.field_behavior) = OPTIONAL]; - // Optional. If not set, use the monitoring_config defined for the EntityType - // this Feature belongs to. Only Features with type + // Optional. Only applicable for Vertex AI Feature Store (Legacy). + // If not set, use the monitoring_config defined for the EntityType this + // Feature belongs to. + // Only Features with type // ([Feature.ValueType][google.cloud.aiplatform.v1beta1.Feature.ValueType]) // BOOL, STRING, DOUBLE or INT64 can enable monitoring. // @@ -171,7 +179,8 @@ message Feature { // config on EntityType. bool disable_monitoring = 12 [(google.api.field_behavior) = OPTIONAL]; - // Output only. A list of historical + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // A list of historical // [SnapshotAnalysis][google.cloud.aiplatform.v1beta1.FeaturestoreMonitoringConfig.SnapshotAnalysis] // stats requested by user, sorted by // [FeatureStatsAnomaly.start_time][google.cloud.aiplatform.v1beta1.FeatureStatsAnomaly.start_time] @@ -179,8 +188,13 @@ message Feature { repeated FeatureStatsAnomaly monitoring_stats = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Output only. The list of historical stats and anomalies with specified - // objectives. + // Output only. Only applicable for Vertex AI Feature Store (Legacy). + // The list of historical stats and anomalies with specified objectives. repeated MonitoringStatsAnomaly monitoring_stats_anomalies = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Only applicable for Vertex AI Feature Store. + // The name of the BigQuery Table/View columnn hosting data for this version. + // If no value is provided, will use feature_id. + string version_column_name = 106; } diff --git a/google/cloud/aiplatform/v1beta1/feature_online_store.proto b/google/cloud/aiplatform/v1beta1/feature_online_store.proto index c1609aabc7a7d4..711b024fb1fa3c 100644 --- a/google/cloud/aiplatform/v1beta1/feature_online_store.proto +++ b/google/cloud/aiplatform/v1beta1/feature_online_store.proto @@ -61,7 +61,7 @@ message FeatureOnlineStore { AutoScaling auto_scaling = 1 [(google.api.field_behavior) = REQUIRED]; } - // Optimized storage type to replace lightning + // Optimized storage type message Optimized {} // The dedicated serving endpoint for this FeatureOnlineStore. Only need to diff --git a/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto b/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto index 8b56cc31c0c3ea..d50756188d097a 100644 --- a/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto +++ b/google/cloud/aiplatform/v1beta1/feature_online_store_service.proto @@ -43,7 +43,7 @@ service FeatureOnlineStoreService { post: "/v1beta1/{feature_view=projects/*/locations/*/featureOnlineStores/*/featureViews/*}:fetchFeatureValues" body: "*" }; - option (google.api.method_signature) = "feature_view, id"; + option (google.api.method_signature) = "feature_view, data_key"; } // Search the nearest entities under a FeatureView. @@ -58,12 +58,34 @@ service FeatureOnlineStoreService { } } +// Format of the data in the Feature View. +enum FeatureViewDataFormat { + // Not set. Will be treated as the KeyValue format. + FEATURE_VIEW_DATA_FORMAT_UNSPECIFIED = 0; + + // Return response data in key-value format. + KEY_VALUE = 1; + + // Return response data in proto Struct format. + PROTO_STRUCT = 2; +} + +// Lookup key for a feature view. +message FeatureViewDataKey { + oneof key_oneof { + // String key to use for lookup. + string key = 1; + } +} + // Request message for // [FeatureOnlineStoreService.FetchFeatureValues][google.cloud.aiplatform.v1beta1.FeatureOnlineStoreService.FetchFeatureValues]. // All the features under the requested feature view will be returned. message FetchFeatureValuesRequest { // Format of the response data. enum Format { + option deprecated = true; + // Not set. Will be treated as the KeyValue format. FORMAT_UNSPECIFIED = 0; @@ -75,10 +97,12 @@ message FetchFeatureValuesRequest { } // Entity ID to fetch feature values for. + // Deprecated. Use + // [FetchFeatureValuesRequest.data_key][google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_key]. oneof entity_id { // Simple ID. The whole string will be used as is to identify Entity to // fetch feature values for. - string id = 3; + string id = 3 [deprecated = true]; } // Required. FeatureView resource format @@ -90,8 +114,19 @@ message FetchFeatureValuesRequest { } ]; + // Optional. The request key to fetch feature values for. + FeatureViewDataKey data_key = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Response data format. If not set, + // [FeatureViewDataFormat.KEY_VALUE][google.cloud.aiplatform.v1beta1.FeatureViewDataFormat.KEY_VALUE] + // will be used. + FeatureViewDataFormat data_format = 7 + [(google.api.field_behavior) = OPTIONAL]; + // Specify response data format. If not set, KeyValue format will be used. - Format format = 5; + // Deprecated. Use + // [FetchFeatureValuesRequest.data_format][google.cloud.aiplatform.v1beta1.FetchFeatureValuesRequest.data_format]. + Format format = 5 [deprecated = true]; } // Response message for diff --git a/google/cloud/aiplatform/v1beta1/featurestore_service.proto b/google/cloud/aiplatform/v1beta1/featurestore_service.proto index 465669984e9993..0a3cc0574775da 100644 --- a/google/cloud/aiplatform/v1beta1/featurestore_service.proto +++ b/google/cloud/aiplatform/v1beta1/featurestore_service.proto @@ -953,6 +953,11 @@ message DeleteEntityTypeRequest { // Request message for // [FeatureRegistryService.CreateFeature][google.cloud.aiplatform.v1beta1.FeatureRegistryService.CreateFeature]. message CreateFeatureRequest { + // Required. The resource name of the EntityType or FeatureGroup to create a + // Feature. Format for entity_type as parent: + // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: + // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1008,8 +1013,9 @@ message BatchCreateFeaturesResponse { // [FeatureRegistryService.GetFeature][google.cloud.aiplatform.v1beta1.FeatureRegistryService.GetFeature]. message GetFeatureRequest { // Required. The name of the Feature resource. - // Format: + // Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string name = 1 [ (google.api.field_behavior) = REQUIRED, @@ -1025,8 +1031,9 @@ message GetFeatureRequest { // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1beta1.FeatureRegistryService.ListFeatures]. message ListFeaturesRequest { // Required. The resource name of the Location to list Features. - // Format: + // Format for entity_type as parent: // `projects/{project}/locations/{location}/featurestores/{featurestore}/entityTypes/{entity_type}` + // Format for feature_group as parent: // `projects/{project}/locations/{location}/featureGroups/{feature_group}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, @@ -1065,10 +1072,14 @@ message ListFeaturesRequest { // A page token, received from a previous // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1beta1.FeaturestoreService.ListFeatures] + // call or + // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1beta1.FeatureRegistryService.ListFeatures] // call. Provide this to retrieve the subsequent page. // // When paginating, all other parameters provided to // [FeaturestoreService.ListFeatures][google.cloud.aiplatform.v1beta1.FeaturestoreService.ListFeatures] + // or or + // [FeatureRegistryService.ListFeatures][google.cloud.aiplatform.v1beta1.FeatureRegistryService.ListFeatures] // must match the call that provided the page token. string page_token = 4; @@ -1085,6 +1096,7 @@ message ListFeaturesRequest { // Mask specifying which fields to read. google.protobuf.FieldMask read_mask = 6; + // Only applicable for Vertex AI Feature Store (Legacy). // If set, return the most recent // [ListFeaturesRequest.latest_stats_count][google.cloud.aiplatform.v1beta1.ListFeaturesRequest.latest_stats_count] // of stats for each Feature in response. Valid value is [0, 10]. If number of @@ -1245,7 +1257,7 @@ message UpdateFeatureRequest { // // * `description` // * `labels` - // * `disable_monitoring` + // * `disable_monitoring` (Not supported for FeatureRegistry Feature) google.protobuf.FieldMask update_mask = 2; } diff --git a/google/cloud/aiplatform/v1beta1/index.proto b/google/cloud/aiplatform/v1beta1/index.proto index 15345a7c615e4b..2f191141a6262b 100644 --- a/google/cloud/aiplatform/v1beta1/index.proto +++ b/google/cloud/aiplatform/v1beta1/index.proto @@ -142,6 +142,55 @@ message IndexDatapoint { repeated string deny_list = 3; } + // This field allows restricts to be based on numeric comparisons rather + // than categorical tokens. + message NumericRestriction { + // Which comparison operator to use. Should be specified for queries only; + // specifying this for a datapoint is an error. + // + // Datapoints for which Operator is true relative to the query's Value + // field will be allowlisted. + enum Operator { + // Default value of the enum. + OPERATOR_UNSPECIFIED = 0; + + // Datapoints are eligible iff their value is < the query's. + LESS = 1; + + // Datapoints are eligible iff their value is <= the query's. + LESS_EQUAL = 2; + + // Datapoints are eligible iff their value is == the query's. + EQUAL = 3; + + // Datapoints are eligible iff their value is >= the query's. + GREATER_EQUAL = 4; + + // Datapoints are eligible iff their value is > the query's. + GREATER = 5; + } + + // The type of Value must be consistent for all datapoints with a given + // namespace name. This is verified at runtime. + oneof Value { + // Represents 64 bit integer. + int64 value_int = 2; + + // Represents 32 bit float. + float value_float = 3; + + // Represents 64 bit float. + double value_double = 4; + } + + // The namespace of this restriction. e.g.: cost. + string namespace = 1; + + // This MUST be specified for queries and must NOT be specified for + // datapoints. + Operator op = 5; + } + // Crowding tag is a constraint on a neighbor list produced by nearest // neighbor search requiring that no more than some value k' of the k // neighbors returned have the same value of crowding_attribute. @@ -167,6 +216,12 @@ message IndexDatapoint { // https://cloud.google.com/vertex-ai/docs/matching-engine/filtering repeated Restriction restricts = 4 [(google.api.field_behavior) = OPTIONAL]; + // Optional. List of Restrict of the datapoint, used to perform "restricted + // searches" where boolean rule are used to filter the subset of the database + // eligible for matching. This uses numeric comparisons. + repeated NumericRestriction numeric_restricts = 6 + [(google.api.field_behavior) = OPTIONAL]; + // Optional. CrowdingTag of the datapoint, the number of neighbors to return // in each crowding can be configured during query. CrowdingTag crowding_tag = 5 [(google.api.field_behavior) = OPTIONAL]; diff --git a/google/cloud/aiplatform/v1beta1/index_endpoint.proto b/google/cloud/aiplatform/v1beta1/index_endpoint.proto index 7c55142eacc11b..46dfba3bfc1236 100644 --- a/google/cloud/aiplatform/v1beta1/index_endpoint.proto +++ b/google/cloud/aiplatform/v1beta1/index_endpoint.proto @@ -191,10 +191,11 @@ message DeployedIndex { [(google.api.field_behavior) = OPTIONAL]; // Optional. A description of resources that are dedicated to the - // DeployedIndex, and that need a higher degree of manual configuration. If - // min_replica_count is not set, the default value is 2 (we don't provide SLA - // when min_replica_count=1). If max_replica_count is not set, the default - // value is min_replica_count. The max allowed replica count is 1000. + // DeployedIndex, and that need a higher degree of manual configuration. The + // field min_replica_count must be set to a value strictly greater than 0, or + // else validation will fail. We don't provide SLA when min_replica_count=1. + // If max_replica_count is not set, the default value is min_replica_count. + // The max allowed replica count is 1000. // // Available machine types for SMALL shard: // e2-standard-2 and all machine types available for MEDIUM and LARGE shard. diff --git a/google/cloud/aiplatform/v1beta1/llm_utility_service.proto b/google/cloud/aiplatform/v1beta1/llm_utility_service.proto new file mode 100644 index 00000000000000..3fddf3acc845f9 --- /dev/null +++ b/google/cloud/aiplatform/v1beta1/llm_utility_service.proto @@ -0,0 +1,86 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.aiplatform.v1beta1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/struct.proto"; + +option csharp_namespace = "Google.Cloud.AIPlatform.V1Beta1"; +option go_package = "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb;aiplatformpb"; +option java_multiple_files = true; +option java_outer_classname = "LlmUtilityServiceProto"; +option java_package = "com.google.cloud.aiplatform.v1beta1"; +option php_namespace = "Google\\Cloud\\AIPlatform\\V1beta1"; +option ruby_package = "Google::Cloud::AIPlatform::V1beta1"; + +// Service for LLM related utility functions. +service LlmUtilityService { + option (google.api.default_host) = "aiplatform.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Return a list of tokens based on the input text. + rpc ComputeTokens(ComputeTokensRequest) returns (ComputeTokensResponse) { + option (google.api.http) = { + post: "/v1beta1/{endpoint=projects/*/locations/*/endpoints/*}:computeTokens" + body: "*" + additional_bindings { + post: "/v1beta1/{endpoint=projects/*/locations/*/publishers/*/models/*}:computeTokens" + body: "*" + } + }; + option (google.api.method_signature) = "endpoint,instances"; + } +} + +// Request message for ComputeTokens RPC call. +message ComputeTokensRequest { + // Required. The name of the Endpoint requested to get lists of tokens and + // token ids. + string endpoint = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/Endpoint" + } + ]; + + // Required. The instances that are the input to token computing API call. + // Schema is identical to the prediction schema of the text model, even for + // the non-text models, like chat models, or Codey models. + repeated google.protobuf.Value instances = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Tokens info with a list of tokens and the corresponding list of token ids. +message TokensInfo { + // A list of tokens from the input. + repeated bytes tokens = 1; + + // A list of token ids from the input. + repeated int64 token_ids = 2; +} + +// Response message for ComputeTokens RPC call. +message ComputeTokensResponse { + // Lists of tokens info from the input. A ComputeTokensRequest could have + // multiple instances with a prompt in each instance. We also need to return + // lists of tokens info for the request with multiple instances. + repeated TokensInfo tokens_info = 1; +} diff --git a/google/cloud/aiplatform/v1beta1/machine_resources.proto b/google/cloud/aiplatform/v1beta1/machine_resources.proto index b7e19fa130fece..c51246f854627b 100644 --- a/google/cloud/aiplatform/v1beta1/machine_resources.proto +++ b/google/cloud/aiplatform/v1beta1/machine_resources.proto @@ -52,6 +52,10 @@ message MachineSpec { // The number of accelerators to attach to the machine. int32 accelerator_count = 3; + + // Immutable. The topology of the TPUs. Corresponds to the TPU topologies + // available from GKE. (Example: tpu_topology: "2x2x1"). + string tpu_topology = 4 [(google.api.field_behavior) = IMMUTABLE]; } // A description of resources that are dedicated to a DeployedModel, and diff --git a/google/cloud/aiplatform/v1beta1/model.proto b/google/cloud/aiplatform/v1beta1/model.proto index 0edbee572d5ea9..10bf0807c10724 100644 --- a/google/cloud/aiplatform/v1beta1/model.proto +++ b/google/cloud/aiplatform/v1beta1/model.proto @@ -22,6 +22,7 @@ import "google/cloud/aiplatform/v1beta1/deployed_model_ref.proto"; import "google/cloud/aiplatform/v1beta1/encryption_spec.proto"; import "google/cloud/aiplatform/v1beta1/env_var.proto"; import "google/cloud/aiplatform/v1beta1/explanation.proto"; +import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; @@ -693,6 +694,21 @@ message ModelContainerSpec { // [`AIP_DEPLOYED_MODEL_ID` environment // variable](https://cloud.google.com/vertex-ai/docs/predictions/custom-container-requirements#aip-variables).) string health_route = 7 [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. Deployment timeout. + // Limit for deployment timeout is 2 hours. + google.protobuf.Duration deployment_timeout = 10 + [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. The amount of the VM memory to reserve as the shared memory for + // the model in megabytes. + int64 shared_memory_size_mb = 11 [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. Specification for Kubernetes startup probe. + Probe startup_probe = 12 [(google.api.field_behavior) = IMMUTABLE]; + + // Immutable. Specification for Kubernetes readiness probe. + Probe health_probe = 13 [(google.api.field_behavior) = IMMUTABLE]; } // Represents a network port in a container. @@ -733,3 +749,35 @@ message ModelSourceInfo { // pertains to the original. bool copy = 2; } + +// Probe describes a health check to be performed against a container to +// determine whether it is alive or ready to receive traffic. +message Probe { + // ExecAction specifies a command to execute. + message ExecAction { + // Command is the command line to execute inside the container, the working + // directory for the command is root ('/') in the container's filesystem. + // The command is simply exec'd, it is not run inside a shell, so + // traditional shell instructions ('|', etc) won't work. To use a shell, you + // need to explicitly call out to that shell. Exit status of 0 is treated as + // live/healthy and non-zero is unhealthy. + repeated string command = 1; + } + + oneof probe_type { + // Exec specifies the action to take. + ExecAction exec = 1; + } + + // How often (in seconds) to perform the probe. Default to 10 seconds. + // Minimum value is 1. Must be less than timeout_seconds. + // + // Maps to Kubernetes probe argument 'periodSeconds'. + int32 period_seconds = 2; + + // Number of seconds after which the probe times out. Defaults to 1 second. + // Minimum value is 1. Must be greater or equal to period_seconds. + // + // Maps to Kubernetes probe argument 'timeoutSeconds'. + int32 timeout_seconds = 3; +} diff --git a/google/cloud/aiplatform/v1beta1/pipeline_service.proto b/google/cloud/aiplatform/v1beta1/pipeline_service.proto index 3b6d819d7bb172..4d8695ba0c70ec 100644 --- a/google/cloud/aiplatform/v1beta1/pipeline_service.proto +++ b/google/cloud/aiplatform/v1beta1/pipeline_service.proto @@ -148,6 +148,22 @@ service PipelineService { }; } + // Batch deletes PipelineJobs + // The Operation is atomic. If it fails, none of the PipelineJobs are deleted. + // If it succeeds, all of the PipelineJobs are deleted. + rpc BatchDeletePipelineJobs(BatchDeletePipelineJobsRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1beta1/{parent=projects/*/locations/*}/pipelineJobs:batchDelete" + body: "*" + }; + option (google.api.method_signature) = "parent,names"; + option (google.longrunning.operation_info) = { + response_type: "BatchDeletePipelineJobsResponse" + metadata_type: "DeleteOperationMetadata" + }; + } + // Cancels a PipelineJob. // Starts asynchronous cancellation on the PipelineJob. The server // makes a best effort to cancel the pipeline, but success is not @@ -435,6 +451,37 @@ message DeletePipelineJobRequest { ]; } +// Request message for +// [PipelineService.BatchDeletePipelineJobs][google.cloud.aiplatform.v1beta1.PipelineService.BatchDeletePipelineJobs]. +message BatchDeletePipelineJobsRequest { + // Required. The name of the PipelineJobs' parent resource. + // Format: `projects/{project}/locations/{location}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "aiplatform.googleapis.com/PipelineJob" + } + ]; + + // Required. The names of the PipelineJobs to delete. + // A maximum of 32 PipelineJobs can be deleted in a batch. + // Format: + // `projects/{project}/locations/{location}/pipelineJobs/{pipelineJob}` + repeated string names = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "aiplatform.googleapis.com/PipelineJob" + } + ]; +} + +// Response message for +// [PipelineService.BatchDeletePipelineJobs][google.cloud.aiplatform.v1beta1.PipelineService.BatchDeletePipelineJobs]. +message BatchDeletePipelineJobsResponse { + // PipelineJobs deleted. + repeated PipelineJob pipeline_jobs = 1; +} + // Request message for // [PipelineService.CancelPipelineJob][google.cloud.aiplatform.v1beta1.PipelineService.CancelPipelineJob]. message CancelPipelineJobRequest { diff --git a/google/cloud/aiplatform/v1beta1/prediction_service.proto b/google/cloud/aiplatform/v1beta1/prediction_service.proto index 14a7bca2d4dc68..55b67ed4add614 100644 --- a/google/cloud/aiplatform/v1beta1/prediction_service.proto +++ b/google/cloud/aiplatform/v1beta1/prediction_service.proto @@ -343,7 +343,7 @@ message ExplainResponse { repeated Explanation explanations = 1; // This field stores the results of the explanations run in parallel with - // the default explanation strategy/method. + // The default explanation strategy/method. map concurrent_explanations = 4; // ID of the Endpoint's DeployedModel that served this explanation. diff --git a/google/cloud/aiplatform/v1beta1/study.proto b/google/cloud/aiplatform/v1beta1/study.proto index 1075216a6c218f..7f0d690d1c7cdc 100644 --- a/google/cloud/aiplatform/v1beta1/study.proto +++ b/google/cloud/aiplatform/v1beta1/study.proto @@ -21,6 +21,7 @@ import "google/api/resource.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; option csharp_namespace = "Google.Cloud.AIPlatform.V1Beta1"; option go_package = "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb;aiplatformpb"; @@ -213,6 +214,17 @@ message TrialContext { repeated Trial.Parameter parameters = 2; } +// Time-based Constraint for Study +message StudyTimeConstraint { + oneof constraint { + // Counts the wallclock time passed since the creation of this Study. + google.protobuf.Duration max_duration = 1; + + // Compares the wallclock time to this time. Must use UTC timezone. + google.protobuf.Timestamp end_time = 2; + } +} + // Represents specification of a Study. message StudySpec { // Represents a metric to optimize. @@ -557,6 +569,62 @@ message StudySpec { [(google.api.field_behavior) = OUTPUT_ONLY]; } + // The configuration (stopping conditions) for automated stopping of a Study. + // Conditions include trial budgets, time budgets, and convergence detection. + message StudyStoppingConfig { + // If true, a Study enters STOPPING_ASAP whenever it would normally enters + // STOPPING state. + // + // The bottom line is: set to true if you want to interrupt on-going + // evaluations of Trials as soon as the study stopping condition is met. + // (Please see Study.State documentation for the source of truth). + google.protobuf.BoolValue should_stop_asap = 1; + + // Each "stopping rule" in this proto specifies an "if" condition. Before + // Vizier would generate a new suggestion, it first checks each specified + // stopping rule, from top to bottom in this list. + // Note that the first few rules (e.g. minimum_runtime_constraint, + // min_num_trials) will prevent other stopping rules from being evaluated + // until they are met. For example, setting `min_num_trials=5` and + // `always_stop_after= 1 hour` means that the Study will ONLY stop after it + // has 5 COMPLETED trials, even if more than an hour has passed since its + // creation. It follows the first applicable rule (whose "if" condition is + // satisfied) to make a stopping decision. If none of the specified rules + // are applicable, then Vizier decides that the study should not stop. + // If Vizier decides that the study should stop, the study enters + // STOPPING state (or STOPPING_ASAP if should_stop_asap = true). + // IMPORTANT: The automatic study state transition happens precisely as + // described above; that is, deleting trials or updating StudyConfig NEVER + // automatically moves the study state back to ACTIVE. If you want to + // _resume_ a Study that was stopped, 1) change the stopping conditions if + // necessary, 2) activate the study, and then 3) ask for suggestions. + // If the specified time or duration has not passed, do not stop the + // study. + StudyTimeConstraint minimum_runtime_constraint = 2; + + // If the specified time or duration has passed, stop the study. + StudyTimeConstraint maximum_runtime_constraint = 3; + + // If there are fewer than this many COMPLETED trials, do not stop the + // study. + google.protobuf.Int32Value min_num_trials = 4; + + // If there are more than this many trials, stop the study. + google.protobuf.Int32Value max_num_trials = 5; + + // If the objective value has not improved for this many consecutive + // trials, stop the study. + // + // WARNING: Effective only for single-objective studies. + google.protobuf.Int32Value max_num_trials_no_progress = 6; + + // If the objective value has not improved for this much time, stop the + // study. + // + // WARNING: Effective only for single-objective studies. + google.protobuf.Duration max_duration_no_progress = 7; + } + // The available search algorithms for the Study. enum Algorithm { // The default algorithm used by Vertex AI for [hyperparameter @@ -650,6 +718,10 @@ message StudySpec { // The configuration info/options for transfer learning. Currently supported // for Vertex AI Vizier service, not HyperParameterTuningJob TransferLearningConfig transfer_learning_config = 10; + + // Conditions for automated stopping of a Study. Enable automated stopping by + // configuring at least one condition. + optional StudyStoppingConfig study_stopping_config = 11; } // A message representing a Measurement of a Trial. A Measurement contains diff --git a/google/cloud/asset/v1/BUILD.bazel b/google/cloud/asset/v1/BUILD.bazel index d397584afa9511..80aa9fd656daa8 100644 --- a/google/cloud/asset/v1/BUILD.bazel +++ b/google/cloud/asset/v1/BUILD.bazel @@ -1,3 +1,4 @@ + # This file was automatically generated by BuildFileGenerator # This is an API workspace, having public visibility by default makes perfect sense. @@ -23,6 +24,7 @@ proto_library( "//google/cloud/orgpolicy/v1:orgpolicy_proto", "//google/cloud/osconfig/v1:osconfig_proto", "//google/iam/v1:policy_proto", + "//google/identity/accesscontextmanager/type:type_proto", "//google/identity/accesscontextmanager/v1:accesscontextmanager_proto", "//google/longrunning:operations_proto", "//google/rpc:code_proto", @@ -284,8 +286,11 @@ nodejs_gapic_assembly_pkg( deps = [ ":asset_nodejs_gapic", ":asset_proto", + "//google/cloud/orgpolicy/v1:orgpolicy_proto", "//google/cloud/osconfig/v1:osconfig_proto", - ], + "//google/identity/accesscontextmanager/v1:accesscontextmanager_proto", + "//google/identity/accesscontextmanager/type:type_proto", + ], ) ############################################################################## diff --git a/google/cloud/asset/v1p5beta1/BUILD.bazel b/google/cloud/asset/v1p5beta1/BUILD.bazel index 137f9af2e9a3fe..5134c4cffd00fa 100644 --- a/google/cloud/asset/v1p5beta1/BUILD.bazel +++ b/google/cloud/asset/v1p5beta1/BUILD.bazel @@ -251,6 +251,10 @@ nodejs_gapic_assembly_pkg( deps = [ ":asset_nodejs_gapic", ":asset_proto", + "//google/cloud/orgpolicy/v1:orgpolicy_proto", + "//google/cloud/osconfig/v1:osconfig_proto", + "//google/identity/accesscontextmanager/v1:accesscontextmanager_proto", + "//google/identity/accesscontextmanager/type:type_proto", ], ) diff --git a/google/cloud/asset/v1p7beta1/BUILD.bazel b/google/cloud/asset/v1p7beta1/BUILD.bazel index 8b06109f3c402e..417c19bd7fd907 100644 --- a/google/cloud/asset/v1p7beta1/BUILD.bazel +++ b/google/cloud/asset/v1p7beta1/BUILD.bazel @@ -247,6 +247,10 @@ nodejs_gapic_assembly_pkg( deps = [ ":asset_nodejs_gapic", ":asset_proto", + "//google/cloud/orgpolicy/v1:orgpolicy_proto", + "//google/cloud/osconfig/v1:osconfig_proto", + "//google/identity/accesscontextmanager/v1:accesscontextmanager_proto", + "//google/identity/accesscontextmanager/type:type_proto", ], ) diff --git a/google/cloud/backupdr/logging/v1/reportlog.proto b/google/cloud/backupdr/logging/v1/reportlog.proto new file mode 100644 index 00000000000000..70b716bd31e71d --- /dev/null +++ b/google/cloud/backupdr/logging/v1/reportlog.proto @@ -0,0 +1,164 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.backupdr.logging.v1; + +option go_package = "cloud.google.com/go/backupdr/logging/apiv1/loggingpb;loggingpb"; +option java_multiple_files = true; +option java_outer_classname = "BackupRecoveryJobReportLogProto"; +option java_package = "com.google.cloud.backupdr.logging.v1"; +option csharp_namespace = "Google.Cloud.BackupDR.Logging.V1"; +option php_namespace = "Google\\Cloud\\BackupDR\\Logging\\V1"; +option ruby_package = "Google::Cloud::BackupDR::Logging::V1"; + +// This is a BackupRecoveryJobReportLog published as part of GCBDR Reporting. +message BackupRecoveryJobReportLog { + // The job_name field displays the name of the job being reported. + string job_name = 1; + + // The job_name field displays the category of the job whether it is Backup or + // Recovery Job. + string job_category = 2; + + // The job_type field displays the type of the job. + string job_type = 3; + + // The log_backup field displays whether the backup taken is only for logs, DB + // or both. + string log_backup = 4; + + // The job_status field displays the status of the job. + string job_status = 5; + + // The resource_name field displays the name of the resource. + string resource_name = 6; + + // The resource_type field displays the type of the resource. + string resource_type = 7; + + // The error_code field displays the error code. + int32 error_code = 8; + + // The error_message field displays the error message if the job is not + // successful. + string error_message = 9; + + // The job_initiation_failure_reason field displays the reason for failure, + // if the job was not run. + string job_initiation_failure_reason = 10; + + // The job_start_time field displays the timestamp when the job started. + string job_start_time = 11; + + // The job_end_time field displays the timestamp when the job ended. + string job_end_time = 12; + + // The job_queued_time field displays the timestamp when the job was + // queued for running. + string job_queued_time = 13; + + // The job_duration_in_hours field displays the duration in hours which the + // job took to complete. + double job_duration_in_hours = 14; + + // The hostname field displays the name of the host. + string hostname = 15; + + // The appliance_name field displays the name of the backup appliance. + string appliance_name = 16; + + // The backup_rule_policy_name field displays the policy name which is + // associated with this job. + string backup_rule_policy_name = 17; + + // The backup_template field displays the name of the backup template for + // this application. + string backup_template = 18; + + // The backup_type field displays the type of backup taken: Log, Incremental + // or Full Copy. + string backup_type = 19; + + // The recovery_point field displays the timestamp of recovery point. + string recovery_point = 20; + + // The backup_consistency field displays whether the backup is crash consistent + // or application consistent. + string backup_consistency = 21; + + // The target_host_name field displays the target host name. + string target_host_name = 22; + + // The target_appliance_name field displays the target appliance name. + string target_appliance_name = 23; + + // The target_pool_name field displays target pool name. + string target_pool_name = 24; + + // The resource_data_size_in_gib field displays resource data size in Gib. + double resource_data_size_in_gib = 25; + + // The data_copied_in_gib field displays the amount of the data copied + // during backup in Gib. + double data_copied_in_gib = 26; + + // The onvault_pool_storage_consumed_in_gib field displays the amount of + // onvault pool storage consumed in Gib. + double onvault_pool_storage_consumed_in_gib = 27; + + // The pre_compress_in_gib field displays the size before compression in Gib. + double pre_compress_in_gib = 28; + + // The compression_ratio field displays the ratio of post compression size to + // pre compression size. + double compression_ratio = 29; + + // The data_change_rate field displays the percentage of data copied during + // backup to application size. + double data_change_rate = 30; + + // The resource_volume_size_in_gib field displays the virtual size in Gib. + double resource_volume_size_in_gib = 31; + + // The data_written_in_gib field displays the amount of + // remote data written in Gib. + double data_written_in_gib = 32; + + // The data_sent_in_gib field displays the amount of + // network data sent in Gib. + double data_sent_in_gib = 33; + + // The job_id field displays the id of the job being reported. + string job_id = 34; + + // The host_id field displays the host id. + string host_id = 35; + + // The backup_rule_policy_id field displays the policy id. + string backup_rule_policy_id = 36; + + // The resource_id field displays the resource id. + string resource_id = 37; + + // The target_pool_id field displays the target pool id. + string target_pool_id = 38; + + // The target_host_id field displays the target host id. + string target_host_id = 39; + + // The target_appliance_id field displays the target appliance id. + string target_appliance_id = 40; +} diff --git a/google/cloud/batch/v1alpha/job.proto b/google/cloud/batch/v1alpha/job.proto index b16094126e182d..76ffdecaefc333 100644 --- a/google/cloud/batch/v1alpha/job.proto +++ b/google/cloud/batch/v1alpha/job.proto @@ -114,6 +114,15 @@ message Job { // LogsPolicy describes how outputs from a Job's Tasks (stdout/stderr) will be // preserved. message LogsPolicy { + // CloudLoggingOption contains additional settings for cloud logging generated + // by Batch job. + message CloudLoggingOption { + // Optional. Set this flag to true to use generic_task as monitored resource + // for Batch job generated cloud logging. + bool use_generic_task_monitored_resource = 1 + [(google.api.field_behavior) = OPTIONAL]; + } + // The destination (if any) for logs. enum Destination { // Logs are not preserved. @@ -133,6 +142,11 @@ message LogsPolicy { // local file path on the VM, or under the mount point of a Persistent Disk or // Filestore, or a Cloud Storage path. string logs_path = 2; + + // Optional. Additional settings for Cloud Logging. It will only take effect + // when the destination of LogsPolicy is set to CLOUD_LOGGING. + CloudLoggingOption cloud_logging_option = 3 + [(google.api.field_behavior) = OPTIONAL]; } // JobDependency describes the state of other Jobs that the start of this Job diff --git a/google/cloud/confidentialcomputing/v1/BUILD.bazel b/google/cloud/confidentialcomputing/v1/BUILD.bazel index 943adf5a8bcc86..a87fdb48988be3 100644 --- a/google/cloud/confidentialcomputing/v1/BUILD.bazel +++ b/google/cloud/confidentialcomputing/v1/BUILD.bazel @@ -320,7 +320,6 @@ load( csharp_proto_library( name = "confidentialcomputing_csharp_proto", - extra_opts = [], deps = [":confidentialcomputing_proto"], ) diff --git a/google/cloud/confidentialcomputing/v1/confidentialcomputing_v1.yaml b/google/cloud/confidentialcomputing/v1/confidentialcomputing_v1.yaml index 9e61d2daccb356..86c1d14899e384 100644 --- a/google/cloud/confidentialcomputing/v1/confidentialcomputing_v1.yaml +++ b/google/cloud/confidentialcomputing/v1/confidentialcomputing_v1.yaml @@ -16,17 +16,6 @@ documentation: - selector: google.cloud.location.Locations.ListLocations description: Lists information about the supported locations for this service. -backend: - rules: - - selector: google.cloud.confidentialcomputing.v1.ConfidentialComputing.CreateChallenge - deadline: 60.0 - - selector: google.cloud.confidentialcomputing.v1.ConfidentialComputing.VerifyAttestation - deadline: 60.0 - - selector: google.cloud.location.Locations.GetLocation - deadline: 60.0 - - selector: google.cloud.location.Locations.ListLocations - deadline: 60.0 - http: rules: - selector: google.cloud.location.Locations.GetLocation diff --git a/google/cloud/confidentialcomputing/v1/service.proto b/google/cloud/confidentialcomputing/v1/service.proto index 13f2477b3a79f2..ab348807fb8b7e 100644 --- a/google/cloud/confidentialcomputing/v1/service.proto +++ b/google/cloud/confidentialcomputing/v1/service.proto @@ -71,6 +71,16 @@ enum SigningAlgorithm { ECDSA_P256_SHA256 = 3; } +// Token type enum contains the different types of token responses Confidential +// Space supports +enum TokenType { + // Unspecified token type + TOKEN_TYPE_UNSPECIFIED = 0; + + // OpenID Connect (OIDC) token type + TOKEN_TYPE_OIDC = 1; +} + // A Challenge from the server used to guarantee freshness of attestations message Challenge { option (google.api.resource) = { @@ -173,6 +183,9 @@ message TokenOptions { // claim in the output token. The minimum size for JSON-encoded EATs is 10 // bytes and the maximum size is 74 bytes. repeated string nonce = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Optional token type to select what type of token to return. + TokenType token_type = 3 [(google.api.field_behavior) = OPTIONAL]; } // TPM2 data containing everything necessary to validate any platform state diff --git a/google/cloud/contentwarehouse/v1/BUILD.bazel b/google/cloud/contentwarehouse/v1/BUILD.bazel index 193ff9d84ae830..b90b906666d069 100644 --- a/google/cloud/contentwarehouse/v1/BUILD.bazel +++ b/google/cloud/contentwarehouse/v1/BUILD.bazel @@ -310,6 +310,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":contentwarehouse_nodejs_gapic", ":contentwarehouse_proto", + "//google/cloud/documentai/v1:documentai_proto", ], ) diff --git a/google/cloud/dataplex/v1/data_quality.proto b/google/cloud/dataplex/v1/data_quality.proto index 8f0eb1759f7359..bc2d57403c7754 100644 --- a/google/cloud/dataplex/v1/data_quality.proto +++ b/google/cloud/dataplex/v1/data_quality.proto @@ -108,6 +108,9 @@ message DataQualityResult { bool passed = 5; // A list of results at the dimension level. + // + // A dimension will have a corresponding `DataQualityDimensionResult` if and + // only if there is at least one rule with the 'dimension' field set to it. repeated DataQualityDimensionResult dimensions = 2; // A list of all the rules in a job, and their results. diff --git a/google/cloud/discoveryengine/v1alpha/BUILD.bazel b/google/cloud/discoveryengine/v1alpha/BUILD.bazel index c5fc58cc43db52..434bd3294bfddb 100644 --- a/google/cloud/discoveryengine/v1alpha/BUILD.bazel +++ b/google/cloud/discoveryengine/v1alpha/BUILD.bazel @@ -25,8 +25,12 @@ proto_library( "completion_service.proto", "conversation.proto", "conversational_search_service.proto", + "data_store.proto", + "data_store_service.proto", "document.proto", "document_service.proto", + "engine.proto", + "engine_service.proto", "import_config.proto", "purge_config.proto", "recommendation_service.proto", @@ -112,8 +116,12 @@ java_gapic_test( "com.google.cloud.discoveryengine.v1alpha.CompletionServiceClientTest", "com.google.cloud.discoveryengine.v1alpha.ConversationalSearchServiceClientHttpJsonTest", "com.google.cloud.discoveryengine.v1alpha.ConversationalSearchServiceClientTest", + "com.google.cloud.discoveryengine.v1alpha.DataStoreServiceClientHttpJsonTest", + "com.google.cloud.discoveryengine.v1alpha.DataStoreServiceClientTest", "com.google.cloud.discoveryengine.v1alpha.DocumentServiceClientHttpJsonTest", "com.google.cloud.discoveryengine.v1alpha.DocumentServiceClientTest", + "com.google.cloud.discoveryengine.v1alpha.EngineServiceClientHttpJsonTest", + "com.google.cloud.discoveryengine.v1alpha.EngineServiceClientTest", "com.google.cloud.discoveryengine.v1alpha.RecommendationServiceClientHttpJsonTest", "com.google.cloud.discoveryengine.v1alpha.RecommendationServiceClientTest", "com.google.cloud.discoveryengine.v1alpha.SchemaServiceClientHttpJsonTest", diff --git a/google/cloud/discoveryengine/v1alpha/common.proto b/google/cloud/discoveryengine/v1alpha/common.proto index 92777008834338..bea9bea39605ba 100644 --- a/google/cloud/discoveryengine/v1alpha/common.proto +++ b/google/cloud/discoveryengine/v1alpha/common.proto @@ -32,9 +32,8 @@ option (google.api.resource_definition) = { pattern: "projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}/branches/{branch}" }; option (google.api.resource_definition) = { - type: "discoveryengine.googleapis.com/DataStore" - pattern: "projects/{project}/locations/{location}/dataStores/{data_store}" - pattern: "projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}" + type: "discoveryengine.googleapis.com/Collection" + pattern: "projects/{project}/locations/{location}/collections/{collection}" }; option (google.api.resource_definition) = { type: "discoveryengine.googleapis.com/ServingConfig" @@ -43,11 +42,25 @@ option (google.api.resource_definition) = { pattern: "projects/{project}/locations/{location}/collections/{collection}/engines/{engine}/servingConfigs/{serving_config}" }; option (google.api.resource_definition) = { - type: "discoveryengine.googleapis.com/SiteSearchEngine", + type: "discoveryengine.googleapis.com/SiteSearchEngine" pattern: "projects/{project}/locations/{location}/dataStores/{data_store}/siteSearchEngine" pattern: "projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}/siteSearchEngine" }; +// The industry vertical associated with the +// [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]. +enum IndustryVertical { + // Value used when unset. + INDUSTRY_VERTICAL_UNSPECIFIED = 0; + + // The generic vertical for documents that are not specific to any industry + // vertical. + GENERIC = 1; + + // The media industry vertical. + MEDIA = 2; +} + // The type of solution. enum SolutionType { // Default value. @@ -63,6 +76,28 @@ enum SolutionType { SOLUTION_TYPE_CHAT = 3; } +// Tiers of search features. Different tiers might have different +// pricing. To learn more, please check the pricing documentation. +enum SearchTier { + // Default value when the enum is unspecified. This is invalid to use. + SEARCH_TIER_UNSPECIFIED = 0; + + // Standard tier. + SEARCH_TIER_STANDARD = 1; + + // Enterprise tier. + SEARCH_TIER_ENTERPRISE = 2; +} + +// Add-on that provides additional functionality for search. +enum SearchAddOn { + // Default value when the enum is unspecified. This is invalid to use. + SEARCH_ADD_ON_UNSPECIFIED = 0; + + // Large language model add-on. + SEARCH_ADD_ON_LLM = 1; +} + // A floating point interval. message Interval { // The lower bound of the interval. If neither of the min fields are diff --git a/google/cloud/discoveryengine/v1alpha/data_store.proto b/google/cloud/discoveryengine/v1alpha/data_store.proto new file mode 100644 index 00000000000000..e7809cb1f3b2f4 --- /dev/null +++ b/google/cloud/discoveryengine/v1alpha/data_store.proto @@ -0,0 +1,98 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.discoveryengine.v1alpha; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/discoveryengine/v1alpha/common.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Alpha"; +option go_package = "cloud.google.com/go/discoveryengine/apiv1alpha/discoveryenginepb;discoveryenginepb"; +option java_multiple_files = true; +option java_outer_classname = "DataStoreProto"; +option java_package = "com.google.cloud.discoveryengine.v1alpha"; +option objc_class_prefix = "DISCOVERYENGINE"; +option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1alpha"; +option ruby_package = "Google::Cloud::DiscoveryEngine::V1alpha"; + +// DataStore captures global settings and configs at the DataStore level. +message DataStore { + option (google.api.resource) = { + type: "discoveryengine.googleapis.com/DataStore" + pattern: "projects/{project}/locations/{location}/dataStores/{data_store}" + pattern: "projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}" + }; + + // Content config of the data store. + enum ContentConfig { + // Default value. + CONTENT_CONFIG_UNSPECIFIED = 0; + + // Only contains documents without any + // [Document.content][google.cloud.discoveryengine.v1alpha.Document.content]. + NO_CONTENT = 1; + + // Only contains documents with + // [Document.content][google.cloud.discoveryengine.v1alpha.Document.content]. + CONTENT_REQUIRED = 2; + + // The data store is used for public website search. + PUBLIC_WEBSITE = 3; + } + + // Immutable. The full resource name of the data store. + // Format: + // `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. + // + // This field must be a UTF-8 encoded string with a length limit of 1024 + // characters. + string name = 1 [(google.api.field_behavior) = IMMUTABLE]; + + // Required. The data store display name. + // + // This field must be a UTF-8 encoded string with a length limit of 128 + // characters. Otherwise, an INVALID_ARGUMENT error is returned. + string display_name = 2 [(google.api.field_behavior) = REQUIRED]; + + // Immutable. The industry vertical that the data store registers. + IndustryVertical industry_vertical = 3 + [(google.api.field_behavior) = IMMUTABLE]; + + // The solutions that the data store enrolls. Available solutions for each + // [industry_vertical][google.cloud.discoveryengine.v1alpha.DataStore.industry_vertical]: + // + // * `MEDIA`: `SOLUTION_TYPE_RECOMMENDATION` and `SOLUTION_TYPE_SEARCH`. + // * `SITE_SEARCH`: `SOLUTION_TYPE_SEARCH` is automatically enrolled. Other + // solutions cannot be enrolled. + repeated SolutionType solution_types = 5; + + // Output only. The id of the default + // [Schema][google.cloud.discoveryengine.v1alpha.Schema] asscociated to this + // data store. + string default_schema_id = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Immutable. The content config of the data store. If this field is unset, + // the server behavior defaults to + // [ContentConfig.NO_CONTENT][google.cloud.discoveryengine.v1alpha.DataStore.ContentConfig.NO_CONTENT]. + ContentConfig content_config = 6 [(google.api.field_behavior) = IMMUTABLE]; + + // Output only. Timestamp the + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] was created at. + google.protobuf.Timestamp create_time = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/cloud/discoveryengine/v1alpha/data_store_service.proto b/google/cloud/discoveryengine/v1alpha/data_store_service.proto new file mode 100644 index 00000000000000..2e8967ab2ffeff --- /dev/null +++ b/google/cloud/discoveryengine/v1alpha/data_store_service.proto @@ -0,0 +1,307 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.discoveryengine.v1alpha; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/discoveryengine/v1alpha/data_store.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Alpha"; +option go_package = "cloud.google.com/go/discoveryengine/apiv1alpha/discoveryenginepb;discoveryenginepb"; +option java_multiple_files = true; +option java_outer_classname = "DataStoreServiceProto"; +option java_package = "com.google.cloud.discoveryengine.v1alpha"; +option objc_class_prefix = "DISCOVERYENGINE"; +option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1alpha"; +option ruby_package = "Google::Cloud::DiscoveryEngine::V1alpha"; + +// Service for managing +// [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] configuration. +service DataStoreService { + option (google.api.default_host) = "discoveryengine.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Creates a [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]. + // + // DataStore is for storing + // [Documents][google.cloud.discoveryengine.v1alpha.Document]. To serve these + // documents for Search, or Recommendation use case, an + // [Engine][google.cloud.discoveryengine.v1alpha.Engine] needs to be created + // separately. + rpc CreateDataStore(CreateDataStoreRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1alpha/{parent=projects/*/locations/*}/dataStores" + body: "data_store" + additional_bindings { + post: "/v1alpha/{parent=projects/*/locations/*/collections/*}/dataStores" + body: "data_store" + } + }; + option (google.api.method_signature) = "parent,data_store,data_store_id"; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.discoveryengine.v1alpha.DataStore" + metadata_type: "google.cloud.discoveryengine.v1alpha.CreateDataStoreMetadata" + }; + } + + // Gets a [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]. + rpc GetDataStore(GetDataStoreRequest) returns (DataStore) { + option (google.api.http) = { + get: "/v1alpha/{name=projects/*/locations/*/dataStores/*}" + additional_bindings { + get: "/v1alpha/{name=projects/*/locations/*/collections/*/dataStores/*}" + } + }; + option (google.api.method_signature) = "name"; + } + + // Lists all the [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]s + // associated with the project. + rpc ListDataStores(ListDataStoresRequest) returns (ListDataStoresResponse) { + option (google.api.http) = { + get: "/v1alpha/{parent=projects/*/locations/*}/dataStores" + additional_bindings { + get: "/v1alpha/{parent=projects/*/locations/*/collections/*}/dataStores" + } + }; + option (google.api.method_signature) = "parent"; + } + + // Deletes a [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]. + rpc DeleteDataStore(DeleteDataStoreRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1alpha/{name=projects/*/locations/*/dataStores/*}" + additional_bindings { + delete: "/v1alpha/{name=projects/*/locations/*/collections/*/dataStores/*}" + } + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "google.cloud.discoveryengine.v1alpha.DeleteDataStoreMetadata" + }; + } + + // Updates a [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] + rpc UpdateDataStore(UpdateDataStoreRequest) returns (DataStore) { + option (google.api.http) = { + patch: "/v1alpha/{data_store.name=projects/*/locations/*/dataStores/*}" + body: "data_store" + additional_bindings { + patch: "/v1alpha/{data_store.name=projects/*/locations/*/collections/*/dataStores/*}" + body: "data_store" + } + }; + option (google.api.method_signature) = "data_store,update_mask"; + } +} + +// Request for +// [DataStoreService.CreateDataStore][google.cloud.discoveryengine.v1alpha.DataStoreService.CreateDataStore] +// method. +message CreateDataStoreRequest { + // Required. The parent resource name, such as + // `projects/{project}/locations/{location}/collections/{collection}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Collection" + } + ]; + + // Required. The [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] + // to create. + DataStore data_store = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The ID to use for the + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore], which will + // become the final component of the + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]'s resource + // name. + // + // This field must conform to [RFC-1034](https://tools.ietf.org/html/rfc1034) + // standard with a length limit of 63 characters. Otherwise, an + // INVALID_ARGUMENT error is returned. + string data_store_id = 3 [(google.api.field_behavior) = REQUIRED]; + + // A boolean flag indicating whether user want to directly create an advanced + // data store for site search. + // If the data store is not configured as site + // search (GENERIC vertical and PUBLIC_WEBSITE content_config), this flag will + // be ignored. + bool create_advanced_site_search = 4; +} + +// Request message for +// [DataStoreService.GetDataStore][google.cloud.discoveryengine.v1alpha.DataStoreService.GetDataStore] +// method. +message GetDataStoreRequest { + // Required. Full resource name of + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore], such as + // `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. + // + // If the caller does not have permission to access the + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore], regardless of + // whether or not it exists, a PERMISSION_DENIED error is returned. + // + // If the requested + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] does not exist, + // a NOT_FOUND error is returned. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/DataStore" + } + ]; +} + +// Metadata related to the progress of the +// [DataStoreService.CreateDataStore][google.cloud.discoveryengine.v1alpha.DataStoreService.CreateDataStore] +// operation. This will be returned by the google.longrunning.Operation.metadata +// field. +message CreateDataStoreMetadata { + // Operation create time. + google.protobuf.Timestamp create_time = 1; + + // Operation last update time. If the operation is done, this is also the + // finish time. + google.protobuf.Timestamp update_time = 2; +} + +// Request message for +// [DataStoreService.ListDataStores][google.cloud.discoveryengine.v1alpha.DataStoreService.ListDataStores] +// method. +message ListDataStoresRequest { + // Required. The parent branch resource name, such as + // `projects/{project}/locations/{location}/collections/{collection_id}`. + // + // If the caller does not have permission to list [DataStores][]s under this + // location, regardless of whether or not this data store exists, a + // PERMISSION_DENIED error is returned. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Collection" + } + ]; + + // Maximum number of + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]s to return. If + // unspecified, defaults to 10. The maximum allowed value is 50. Values above + // 50 will be coerced to 50. + // + // If this field is negative, an INVALID_ARGUMENT is returned. + int32 page_size = 2; + + // A page token + // [ListDataStoresResponse.next_page_token][google.cloud.discoveryengine.v1alpha.ListDataStoresResponse.next_page_token], + // received from a previous + // [DataStoreService.ListDataStores][google.cloud.discoveryengine.v1alpha.DataStoreService.ListDataStores] + // call. Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to + // [DataStoreService.ListDataStores][google.cloud.discoveryengine.v1alpha.DataStoreService.ListDataStores] + // must match the call that provided the page token. Otherwise, an + // INVALID_ARGUMENT error is returned. + string page_token = 3; + + // Filter by solution type. For example: filter = + // 'solution_type:SOLUTION_TYPE_SEARCH' + string filter = 4; +} + +// Response message for +// [DataStoreService.ListDataStores][google.cloud.discoveryengine.v1alpha.DataStoreService.ListDataStores] +// method. +message ListDataStoresResponse { + // All the customer's + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]s. + repeated DataStore data_stores = 1; + + // A token that can be sent as + // [ListDataStoresRequest.page_token][google.cloud.discoveryengine.v1alpha.ListDataStoresRequest.page_token] + // to retrieve the next page. If this field is omitted, there are no + // subsequent pages. + string next_page_token = 2; +} + +// Request message for +// [DataStoreService.DeleteDataStore][google.cloud.discoveryengine.v1alpha.DataStoreService.DeleteDataStore] +// method. +message DeleteDataStoreRequest { + // Required. Full resource name of + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore], such as + // `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. + // + // If the caller does not have permission to delete the + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore], regardless of + // whether or not it exists, a PERMISSION_DENIED error is returned. + // + // If the [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] to + // delete does not exist, a NOT_FOUND error is returned. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/DataStore" + } + ]; +} + +// Request message for +// [DataStoreService.UpdateDataStore][google.cloud.discoveryengine.v1alpha.DataStoreService.UpdateDataStore] +// method. +message UpdateDataStoreRequest { + // Required. The [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] + // to update. + // + // If the caller does not have permission to update the + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore], regardless of + // whether or not it exists, a PERMISSION_DENIED error is returned. + // + // If the [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] to + // update does not exist, a NOT_FOUND error is returned. + DataStore data_store = 1 [(google.api.field_behavior) = REQUIRED]; + + // Indicates which fields in the provided + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore] to update. + // + // If an unsupported or unknown field is provided, an INVALID_ARGUMENT error + // is returned. + google.protobuf.FieldMask update_mask = 2; +} + +// Metadata related to the progress of the +// [DataStoreService.DeleteDataStore][google.cloud.discoveryengine.v1alpha.DataStoreService.DeleteDataStore] +// operation. This will be returned by the google.longrunning.Operation.metadata +// field. +message DeleteDataStoreMetadata { + // Operation create time. + google.protobuf.Timestamp create_time = 1; + + // Operation last update time. If the operation is done, this is also the + // finish time. + google.protobuf.Timestamp update_time = 2; +} diff --git a/google/cloud/discoveryengine/v1alpha/discoveryengine_v1alpha.yaml b/google/cloud/discoveryengine/v1alpha/discoveryengine_v1alpha.yaml index 0b7d673f0c04a6..62751545d1dea3 100644 --- a/google/cloud/discoveryengine/v1alpha/discoveryengine_v1alpha.yaml +++ b/google/cloud/discoveryengine/v1alpha/discoveryengine_v1alpha.yaml @@ -6,7 +6,9 @@ title: Discovery Engine API apis: - name: google.cloud.discoveryengine.v1alpha.CompletionService - name: google.cloud.discoveryengine.v1alpha.ConversationalSearchService +- name: google.cloud.discoveryengine.v1alpha.DataStoreService - name: google.cloud.discoveryengine.v1alpha.DocumentService +- name: google.cloud.discoveryengine.v1alpha.EngineService - name: google.cloud.discoveryengine.v1alpha.RecommendationService - name: google.cloud.discoveryengine.v1alpha.SchemaService - name: google.cloud.discoveryengine.v1alpha.SearchService @@ -17,9 +19,14 @@ apis: types: - name: google.cloud.discoveryengine.logging.ErrorLog -- name: google.cloud.discoveryengine.v1alpha.BatchCreateTargetSitesResponse +- name: google.cloud.discoveryengine.v1alpha.CreateDataStoreMetadata +- name: google.cloud.discoveryengine.v1alpha.CreateEngineMetadata - name: google.cloud.discoveryengine.v1alpha.CreateSchemaMetadata +- name: google.cloud.discoveryengine.v1alpha.DataStore +- name: google.cloud.discoveryengine.v1alpha.DeleteDataStoreMetadata +- name: google.cloud.discoveryengine.v1alpha.DeleteEngineMetadata - name: google.cloud.discoveryengine.v1alpha.DeleteSchemaMetadata +- name: google.cloud.discoveryengine.v1alpha.Engine - name: google.cloud.discoveryengine.v1alpha.FieldConfig - name: google.cloud.discoveryengine.v1alpha.ImportDocumentsMetadata - name: google.cloud.discoveryengine.v1alpha.ImportDocumentsResponse @@ -33,6 +40,8 @@ types: - name: google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse - name: google.cloud.discoveryengine.v1alpha.Schema - name: google.cloud.discoveryengine.v1alpha.TargetSite +- name: google.cloud.discoveryengine.v1alpha.TuneEngineMetadata +- name: google.cloud.discoveryengine.v1alpha.TuneEngineResponse - name: google.cloud.discoveryengine.v1alpha.UpdateSchemaMetadata documentation: @@ -81,10 +90,18 @@ authentication: oauth: canonical_scopes: |- https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.discoveryengine.v1alpha.DataStoreService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform - selector: 'google.cloud.discoveryengine.v1alpha.DocumentService.*' oauth: canonical_scopes: |- https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.discoveryengine.v1alpha.EngineService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform - selector: google.cloud.discoveryengine.v1alpha.RecommendationService.Recommend oauth: canonical_scopes: |- diff --git a/google/cloud/discoveryengine/v1alpha/engine.proto b/google/cloud/discoveryengine/v1alpha/engine.proto new file mode 100644 index 00000000000000..0c96b0c3fd5adf --- /dev/null +++ b/google/cloud/discoveryengine/v1alpha/engine.proto @@ -0,0 +1,370 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.discoveryengine.v1alpha; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/discoveryengine/v1alpha/common.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Alpha"; +option go_package = "cloud.google.com/go/discoveryengine/apiv1alpha/discoveryenginepb;discoveryenginepb"; +option java_multiple_files = true; +option java_outer_classname = "EngineProto"; +option java_package = "com.google.cloud.discoveryengine.v1alpha"; +option objc_class_prefix = "DISCOVERYENGINE"; +option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1alpha"; +option ruby_package = "Google::Cloud::DiscoveryEngine::V1alpha"; + +// Metadata that describes the training and serving parameters of an +// [Engine][google.cloud.discoveryengine.v1alpha.Engine]. +message Engine { + option (google.api.resource) = { + type: "discoveryengine.googleapis.com/Engine" + pattern: "projects/{project}/locations/{location}/collections/{collection}/engines/{engine}" + }; + + // Configurations for a Search Engine. + message SearchEngineConfig { + // The search feature tier of this engine. + // + // Different tiers might have different + // pricing. To learn more, please check the pricing documentation. + // + // Defaults to + // [SearchTier.SEARCH_TIER_STANDARD][google.cloud.discoveryengine.v1alpha.SearchTier.SEARCH_TIER_STANDARD] + // if not specified. + SearchTier search_tier = 1; + + // The add-on that this search engine enables. + repeated SearchAddOn search_add_ons = 2; + } + + // Additional config specs for a `similar-items` engine. + message SimilarDocumentsEngineConfig {} + + // Additional config specs for a Media Recommendation engine. + message MediaRecommendationEngineConfig { + // Custom threshold for `cvr` optimization_objective. + message OptimizationObjectiveConfig { + // Required. The name of the field to target. Currently supported + // values: `watch-percentage`, `watch-time`. + string target_field = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The threshold to be applied to the target (e.g., 0.5). + float target_field_value_float = 2 + [(google.api.field_behavior) = REQUIRED]; + } + + // The training state of the engine. + enum TrainingState { + // Unspecified training state. + TRAINING_STATE_UNSPECIFIED = 0; + + // The engine training is paused. + PAUSED = 1; + + // The engine is training. + TRAINING = 2; + } + + // Required. The type of engine e.g. `recommended-for-you`. + // + // This field together with + // [optimization_objective][Engine.optimization_objective] describe engine + // metadata to use to control engine training and serving. + // + // Currently supported values: `recommended-for-you`, `others-you-may-like`, + // `more-like-this`, `most-popular-items`. + string type = 1 [(google.api.field_behavior) = REQUIRED]; + + // The optimization objective e.g. `cvr`. + // + // This field together with + // [optimization_objective][google.cloud.discoveryengine.v1alpha.Engine.MediaRecommendationEngineConfig.type] + // describe engine metadata to use to control engine training and serving. + // + // Currently supported + // values: `ctr`, `cvr`. + // + // If not specified, we choose default based on engine type. + // Default depends on type of recommendation: + // + // `recommended-for-you` => `ctr` + // + // `others-you-may-like` => `ctr` + string optimization_objective = 2; + + // Name and value of the custom threshold for cvr optimization_objective. + // For target_field `watch-time`, target_field_value must be an integer + // value indicating the media progress time in seconds between (0, 86400] + // (excludes 0, includes 86400) (e.g., 90). + // For target_field `watch-percentage`, the target_field_value must be a + // valid float value between (0, 1.0] (excludes 0, includes 1.0) (e.g., + // 0.5). + OptimizationObjectiveConfig optimization_objective_config = 3; + + // The training state that the engine is in (e.g. + // `TRAINING` or `PAUSED`). + // + // Since part of the cost of running the service + // is frequency of training - this can be used to determine when to train + // engine in order to control cost. If not specified: the default value for + // `CreateEngine` method is `TRAINING`. The default value for + // `UpdateEngine` method is to keep the state the same as before. + TrainingState training_state = 4; + } + + // Configurations for a Chat Engine. + message ChatEngineConfig { + // Configurations for generating a Dialogflow agent. + // + // Note that these configurations are one-time consumed by + // and passed to Dialogflow service. It means they cannot be retrieved using + // [EngineService.GetEngine][google.cloud.discoveryengine.v1alpha.EngineService.GetEngine] + // or + // [EngineService.ListEngines][google.cloud.discoveryengine.v1alpha.EngineService.ListEngines] + // API after engine creation. + message AgentCreationConfig { + // Name of the company, organization or other entity that the agent + // represents. Used for knowledge connector LLM prompt and for knowledge + // search. + string business = 1; + + // Required. The default language of the agent as a language tag. + // See [Language + // Support](https://cloud.google.com/dialogflow/docs/reference/language) + // for a list of the currently supported language codes. + string default_language_code = 2; + + // Required. The time zone of the agent from the [time zone + // database](https://www.iana.org/time-zones), e.g., America/New_York, + // Europe/Paris. + string time_zone = 3 [(google.api.field_behavior) = REQUIRED]; + } + + // The configurationt generate the Dialogflow agent that is associated to + // this Engine. + // + // Note that these configurations are one-time consumed by + // and passed to Dialogflow service. It means they cannot be retrieved using + // [EngineService.GetEngine][google.cloud.discoveryengine.v1alpha.EngineService.GetEngine] + // or + // [EngineService.ListEngines][google.cloud.discoveryengine.v1alpha.EngineService.ListEngines] + // API after engine creation. + AgentCreationConfig agent_creation_config = 1; + + // The resource name of an exist Dialogflow agent to link to this Chat + // Engine. Customers can either provide `agent_creation_config` to create + // agent or provide an agent name that links the agent with the Chat engine. + // + // Format: `projects//locations//agents/`. + // + // Note that the `dialogflow_agent_to_link` are one-time consumed by and + // passed to Dialogflow service. It means they cannot be retrieved using + // [EngineService.GetEngine][google.cloud.discoveryengine.v1alpha.EngineService.GetEngine] + // or + // [EngineService.ListEngines][google.cloud.discoveryengine.v1alpha.EngineService.ListEngines] + // API after engine creation. Please use + // [chat_engine_metadata.dialogflow_agent][] for actual agent + // association after Engine is created. + string dialogflow_agent_to_link = 2; + } + + // Common configurations for an Engine. + message CommonConfig { + // The name of the company, business or entity that is associated with the + // engine. Setting this may help improve LLM related features. + string company_name = 1; + } + + // Additional information of a recommendation engine. + message RecommendationMetadata { + // The serving state of the recommendation engine. + enum ServingState { + // Unspecified serving state. + SERVING_STATE_UNSPECIFIED = 0; + + // The engine is not serving. + INACTIVE = 1; + + // The engine is serving and can be queried. + ACTIVE = 2; + + // The engine is trained on tuned hyperparameters and can be + // queried. + TUNED = 3; + } + + // Describes whether this engine have sufficient training data + // to be continuously trained. + enum DataState { + // Unspecified default value, should never be explicitly set. + DATA_STATE_UNSPECIFIED = 0; + + // The engine has sufficient training data. + DATA_OK = 1; + + // The engine does not have sufficient training data. Error + // messages can be queried via Stackdriver. + DATA_ERROR = 2; + } + + // Output only. The serving state of the engine: `ACTIVE`, `NOT_ACTIVE`. + ServingState serving_state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The state of data requirements for this engine: `DATA_OK` + // and `DATA_ERROR`. + // + // Engine cannot be trained if the data is in + // `DATA_ERROR` state. Engine can have `DATA_ERROR` state even + // if serving state is `ACTIVE`: engines were trained successfully before, + // but cannot be refreshed because the underlying engine no longer has + // sufficient data for training. + DataState data_state = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp when the latest successful tune finished. Only + // applicable on Media Recommendation engines. + google.protobuf.Timestamp last_tune_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The latest tune operation id associated with the engine. + // Only applicable on Media Recommendation engines. + // + // If present, this operation id can be used to determine if there is an + // ongoing tune for this engine. To check the operation status, send the + // GetOperation request with this operation id in the engine resource + // format. If no tuning has happened for this engine, the string is empty. + string tuning_operation = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + } + + // Additional information of a Chat Engine. + // Fields in this message are output only. + message ChatEngineMetadata { + // The resource name of a Dialogflow agent, that this Chat Engine refers + // to. + // + // Format: `projects//locations//agents/`. + string dialogflow_agent = 1; + } + + // Additional config specs that defines the behavior of the engine. + oneof engine_config { + // Additional config specs for a `similar-items` engine. + SimilarDocumentsEngineConfig similar_documents_config = 9; + + // Configurations for the Chat Engine. Only applicable if + // [solution_type][google.cloud.discoveryengine.v1alpha.Engine.solution_type] + // is + // [SOLUTION_TYPE_CHAT][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_CHAT]. + ChatEngineConfig chat_engine_config = 11; + + // Configurations for the Search Engine. Only applicable if + // [solution_type][google.cloud.discoveryengine.v1alpha.Engine.solution_type] + // is + // [SOLUTION_TYPE_SEARCH][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_SEARCH]. + SearchEngineConfig search_engine_config = 13; + + // Configurations for the Media Engine. Only applicable on the data + // stores with + // [solution_type][google.cloud.discoveryengine.v1alpha.Engine.solution_type] + // [SOLUTION_TYPE_RECOMMENDATION][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_RECOMMENDATION] + // and + // [IndustryVertical.MEDIA][google.cloud.discoveryengine.v1alpha.IndustryVertical.MEDIA] + // vertical. + MediaRecommendationEngineConfig media_recommendation_engine_config = 14; + } + + // Engine metadata to monitor the status of the engine. + oneof engine_metadata { + // Output only. Additional information of a recommendation engine. Only + // applicable if + // [solution_type][google.cloud.discoveryengine.v1alpha.Engine.solution_type] + // is + // [SOLUTION_TYPE_RECOMMENDATION][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_RECOMMENDATION]. + RecommendationMetadata recommendation_metadata = 10 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Additional information of the Chat Engine. Only applicable + // if + // [solution_type][google.cloud.discoveryengine.v1alpha.Engine.solution_type] + // is + // [SOLUTION_TYPE_CHAT][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_CHAT]. + ChatEngineMetadata chat_engine_metadata = 12 + [(google.api.field_behavior) = OUTPUT_ONLY]; + } + + // Immutable. The fully qualified resource name of the engine. + // + // This field must be a UTF-8 encoded string with a length limit of 1024 + // characters. + // + // Format: + // `projects/{project_number}/locations/{location}/collections/{collection}/engines/{engine}` + // engine should be 1-63 characters, and valid characters are + // /[a-z0-9][a-z0-9-_]*/. Otherwise, an INVALID_ARGUMENT error is returned. + string name = 1 [(google.api.field_behavior) = IMMUTABLE]; + + // Required. The display name of the engine. Should be human readable. UTF-8 + // encoded string with limit of 1024 characters. + string display_name = 2 [(google.api.field_behavior) = REQUIRED]; + + // Output only. Timestamp the Recommendation Engine was created at. + google.protobuf.Timestamp create_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Timestamp the Recommendation Engine was last updated. + google.protobuf.Timestamp update_time = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // The data stores associated with this engine. + // + // For + // [SOLUTION_TYPE_SEARCH][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_SEARCH] + // and + // [SOLUTION_TYPE_RECOMMENDATION][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_RECOMMENDATION] + // type of engines, they can only associate with at most one data store. + // + // If + // [solution_type][google.cloud.discoveryengine.v1alpha.Engine.solution_type] + // is + // [SOLUTION_TYPE_CHAT][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_CHAT], + // multiple [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]s in + // the same [Collection][google.cloud.discoveryengine.v1alpha.Collection] can + // be associated here. + // + // Note that when used in + // [CreateEngineRequest][google.cloud.discoveryengine.v1alpha.CreateEngineRequest], + // one DataStore id must be provided as the system will use it for necessary + // intializations. + repeated string data_store_ids = 5; + + // Required. The solutions of the engine. + SolutionType solution_type = 6 [(google.api.field_behavior) = REQUIRED]; + + // The industry vertical that the engine registers. + // The restriction of the Engine industry vertical is based on + // [DataStore][google.cloud.discoveryengine.v1alpha.DataStore]: If + // unspecified, default to `GENERIC`. Vertical on Engine has to match vertical + // of the DataStore liniked to the engine. + IndustryVertical industry_vertical = 16; + + // Common config spec that specifies the metadata of the engine. + CommonConfig common_config = 15; +} diff --git a/google/cloud/discoveryengine/v1alpha/engine_service.proto b/google/cloud/discoveryengine/v1alpha/engine_service.proto new file mode 100644 index 00000000000000..43bb7c46321206 --- /dev/null +++ b/google/cloud/discoveryengine/v1alpha/engine_service.proto @@ -0,0 +1,336 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.discoveryengine.v1alpha; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/discoveryengine/v1alpha/engine.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Alpha"; +option go_package = "cloud.google.com/go/discoveryengine/apiv1alpha/discoveryenginepb;discoveryenginepb"; +option java_multiple_files = true; +option java_outer_classname = "EngineServiceProto"; +option java_package = "com.google.cloud.discoveryengine.v1alpha"; +option objc_class_prefix = "DISCOVERYENGINE"; +option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1alpha"; +option ruby_package = "Google::Cloud::DiscoveryEngine::V1alpha"; + +// Service for managing [Engine][google.cloud.discoveryengine.v1alpha.Engine] +// configuration. +service EngineService { + option (google.api.default_host) = "discoveryengine.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Creates a [Engine][google.cloud.discoveryengine.v1alpha.Engine]. + rpc CreateEngine(CreateEngineRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1alpha/{parent=projects/*/locations/*/collections/*}/engines" + body: "engine" + }; + option (google.api.method_signature) = "parent,engine,engine_id"; + option (google.longrunning.operation_info) = { + response_type: "google.cloud.discoveryengine.v1alpha.Engine" + metadata_type: "google.cloud.discoveryengine.v1alpha.CreateEngineMetadata" + }; + } + + // Deletes a [Engine][google.cloud.discoveryengine.v1alpha.Engine]. + rpc DeleteEngine(DeleteEngineRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "google.cloud.discoveryengine.v1alpha.DeleteEngineMetadata" + }; + } + + // Updates an [Engine][google.cloud.discoveryengine.v1alpha.Engine] + rpc UpdateEngine(UpdateEngineRequest) returns (Engine) { + option (google.api.http) = { + patch: "/v1alpha/{engine.name=projects/*/locations/*/collections/*/engines/*}" + body: "engine" + }; + option (google.api.method_signature) = "engine,update_mask"; + } + + // Gets a [Engine][google.cloud.discoveryengine.v1alpha.Engine]. + rpc GetEngine(GetEngineRequest) returns (Engine) { + option (google.api.http) = { + get: "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists all the [Engine][google.cloud.discoveryengine.v1alpha.Engine]s + // associated with the project. + rpc ListEngines(ListEnginesRequest) returns (ListEnginesResponse) { + option (google.api.http) = { + get: "/v1alpha/{parent=projects/*/locations/*/collections/*}/engines" + }; + option (google.api.method_signature) = "parent"; + } + + // Pauses the training of an existing engine. Only applicable if + // [solution_type][] is + // [SOLUTION_TYPE_RECOMMENDATION][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_RECOMMENDATION]. + rpc PauseEngine(PauseEngineRequest) returns (Engine) { + option (google.api.http) = { + post: "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}:pause" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Resumes the training of an existing engine. Only applicable if + // [solution_type][] is + // [SOLUTION_TYPE_RECOMMENDATION][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_RECOMMENDATION]. + rpc ResumeEngine(ResumeEngineRequest) returns (Engine) { + option (google.api.http) = { + post: "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}:resume" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Tunes an existing engine. Only applicable if [solution_type][] is + // [SOLUTION_TYPE_RECOMMENDATION][google.cloud.discoveryengine.v1alpha.SolutionType.SOLUTION_TYPE_RECOMMENDATION]. + rpc TuneEngine(TuneEngineRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1alpha/{name=projects/*/locations/*/collections/*/engines/*}:tune" + body: "*" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "TuneEngineResponse" + metadata_type: "TuneEngineMetadata" + }; + } +} + +// Request for +// [EngineService.CreateEngine][google.cloud.discoveryengine.v1alpha.EngineService.CreateEngine] +// method. +message CreateEngineRequest { + // Required. The parent resource name, such as + // `projects/{project}/locations/{location}/collections/{collection}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Collection" + } + ]; + + // Required. The [Engine][google.cloud.discoveryengine.v1alpha.Engine] to + // create. + Engine engine = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The ID to use for the + // [Engine][google.cloud.discoveryengine.v1alpha.Engine], which will become + // the final component of the + // [Engine][google.cloud.discoveryengine.v1alpha.Engine]'s resource name. + // + // This field must conform to [RFC-1034](https://tools.ietf.org/html/rfc1034) + // standard with a length limit of 63 characters. Otherwise, an + // INVALID_ARGUMENT error is returned. + string engine_id = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata related to the progress of the +// [EngineService.CreateEngine][google.cloud.discoveryengine.v1alpha.EngineService.CreateEngine] +// operation. This will be returned by the google.longrunning.Operation.metadata +// field. +message CreateEngineMetadata { + // Operation create time. + google.protobuf.Timestamp create_time = 1; + + // Operation last update time. If the operation is done, this is also the + // finish time. + google.protobuf.Timestamp update_time = 2; +} + +// Request message for +// [EngineService.DeleteEngine][google.cloud.discoveryengine.v1alpha.EngineService.DeleteEngine] +// method. +message DeleteEngineRequest { + // Required. Full resource name of + // [Engine][google.cloud.discoveryengine.v1alpha.Engine], such as + // `projects/{project}/locations/{location}/collections/{collection_id}/engines/{engine_id}`. + // + // If the caller does not have permission to delete the + // [Engine][google.cloud.discoveryengine.v1alpha.Engine], regardless of + // whether or not it exists, a PERMISSION_DENIED error is returned. + // + // If the [Engine][google.cloud.discoveryengine.v1alpha.Engine] to delete does + // not exist, a NOT_FOUND error is returned. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Engine" + } + ]; +} + +// Metadata related to the progress of the +// [EngineService.DeleteEngine][google.cloud.discoveryengine.v1alpha.EngineService.DeleteEngine] +// operation. This will be returned by the google.longrunning.Operation.metadata +// field. +message DeleteEngineMetadata { + // Operation create time. + google.protobuf.Timestamp create_time = 1; + + // Operation last update time. If the operation is done, this is also the + // finish time. + google.protobuf.Timestamp update_time = 2; +} + +// Request message for +// [EngineService.GetEngine][google.cloud.discoveryengine.v1alpha.EngineService.GetEngine] +// method. +message GetEngineRequest { + // Required. Full resource name of + // [Engine][google.cloud.discoveryengine.v1alpha.Engine], such as + // `projects/{project}/locations/{location}/collections/{collection_id}/engines/{engine_id}`. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Engine" + } + ]; +} + +// Request message for +// [EngineService.ListEngines][google.cloud.discoveryengine.v1alpha.EngineService.ListEngines] +// method. +message ListEnginesRequest { + // Required. The parent resource name, such as + // `projects/{project}/locations/{location}/collections/{collection_id}`. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Collection" + } + ]; + + // Optional. Not supported. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Not supported. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Filter by solution type. For example: + // solution_type=SOLUTION_TYPE_SEARCH + string filter = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for +// [EngineService.ListEngines][google.cloud.discoveryengine.v1alpha.EngineService.ListEngines] +// method. +message ListEnginesResponse { + // All the customer's [Engine][google.cloud.discoveryengine.v1alpha.Engine]s. + repeated Engine engines = 1; + + // Not supported. + string next_page_token = 2; +} + +// Request message for +// [EngineService.UpdateEngine][google.cloud.discoveryengine.v1alpha.EngineService.UpdateEngine] +// method. +message UpdateEngineRequest { + // Required. The [Engine][google.cloud.discoveryengine.v1alpha.Engine] to + // update. + // + // If the caller does not have permission to update the + // [Engine][google.cloud.discoveryengine.v1alpha.Engine], regardless of + // whether or not it exists, a PERMISSION_DENIED error is returned. + // + // If the [Engine][google.cloud.discoveryengine.v1alpha.Engine] to update does + // not exist, a NOT_FOUND error is returned. + Engine engine = 1 [(google.api.field_behavior) = REQUIRED]; + + // Indicates which fields in the provided + // [Engine][google.cloud.discoveryengine.v1alpha.Engine] to update. + // + // If an unsupported or unknown field is provided, an INVALID_ARGUMENT error + // is returned. + google.protobuf.FieldMask update_mask = 2; +} + +// Request for pausing training of an engine. +message PauseEngineRequest { + // Required. The name of the engine to pause. + // Format: + // `projects/{project_number}/locations/{location_id}/collections/{collection_id}/engines/{engine_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Engine" + } + ]; +} + +// Request for resuming training of an engine. +message ResumeEngineRequest { + // Required. The name of the engine to resume. + // Format: + // `projects/{project_number}/locations/{location_id}/collections/{collection_id}/engines/{engine_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Engine" + } + ]; +} + +// Request to manually start a tuning process now (instead of waiting for +// the periodically scheduled tuning to happen). +message TuneEngineRequest { + // Required. The resource name of the engine to tune. + // Format: + // `projects/{project_number}/locations/{location_id}/collections/{collection_id}/engines/{engine_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Engine" + } + ]; +} + +// Metadata associated with a tune operation. +message TuneEngineMetadata { + // Required. The resource name of the engine that this tune applies to. + // Format: + // `projects/{project_number}/locations/{location_id}/collections/{collection_id}/engines/{engine_id}` + string engine = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "discoveryengine.googleapis.com/Engine" + } + ]; +} + +// Response associated with a tune operation. +message TuneEngineResponse {} diff --git a/google/cloud/discoveryengine/v1alpha/recommendation_service.proto b/google/cloud/discoveryengine/v1alpha/recommendation_service.proto index 65206827606c6f..bb53f14f8aa345 100644 --- a/google/cloud/discoveryengine/v1alpha/recommendation_service.proto +++ b/google/cloud/discoveryengine/v1alpha/recommendation_service.proto @@ -58,11 +58,17 @@ service RecommendationService { // Request message for Recommend method. message RecommendRequest { - // Required. Full resource name of the format: + // Required. Full resource name of a + // [ServingConfig][google.cloud.discoveryengine.v1alpha.ServingConfig]: + // `projects/*/locations/global/collections/*/engines/*/servingConfigs/*`, or // `projects/*/locations/global/collections/*/dataStores/*/servingConfigs/*` // - // Before you can request recommendations from your model, you must create at - // least one serving config for it. + // One default serving config is created along with your recommendation engine + // creation. The engine ID will be used as the ID of the default serving + // config. For example, for Engine + // `projects/*/locations/global/collections/*/engines/my-engine`, you can use + // `projects/*/locations/global/collections/*/engines/my-engine/servingConfigs/my-engine` + // for your [Recommend][] requests. string serving_config = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { diff --git a/google/cloud/discoveryengine/v1alpha/search_service.proto b/google/cloud/discoveryengine/v1alpha/search_service.proto index 4021b8484b49de..5e74bca9c7251f 100644 --- a/google/cloud/discoveryengine/v1alpha/search_service.proto +++ b/google/cloud/discoveryengine/v1alpha/search_service.proto @@ -463,6 +463,8 @@ message SearchRequest { } // Required. The resource name of the Search serving config, such as + // `projects/*/locations/global/collections/default_collection/engines/*/servingConfigs/default_serving_config`, + // or // `projects/*/locations/global/collections/default_collection/dataStores/default_data_store/servingConfigs/default_serving_config`. // This field is used to identify the serving configuration name, set // of models used to make the search. @@ -521,12 +523,23 @@ message SearchRequest { // expression is case-sensitive. // // If this field is unrecognizable, an `INVALID_ARGUMENT` is returned. + // + // Filtering in Vertex AI Search is done by mapping the LHS filter key to a + // key property defined in the Vertex AI Search backend -- this mapping is + // defined by the customer in their schema. For example a media customer might + // have a field 'name' in their schema. In this case the filter would look + // like this: filter --> name:'ANY("king kong")' + // + // For more information about filtering including syntax and filter + // operators, see + // [Filter](https://cloud.google.com/generative-ai-app-builder/docs/filter-search-metadata) string filter = 7; // The order in which documents are returned. Documents can be ordered by // a field in an [Document][google.cloud.discoveryengine.v1alpha.Document] // object. Leave it unset if ordered by relevance. `order_by` expression is - // case-sensitive. + // case-sensitive. For more information on ordering, see + // [Ordering](https://cloud.google.com/retail/docs/filter-and-order#order) // // If this field is unrecognizable, an `INVALID_ARGUMENT` is returned. string order_by = 8; @@ -544,6 +557,8 @@ message SearchRequest { repeated FacetSpec facet_specs = 9; // Boost specification to boost certain documents. + // For more information on boosting, see + // [Boosting](https://cloud.google.com/retail/docs/boosting#boost) BoostSpec boost_spec = 10; // Additional search parameters. @@ -552,9 +567,17 @@ message SearchRequest { // // * `user_country_code`: string. Default empty. If set to non-empty, results // are restricted or boosted based on the location provided. + // Example: + // user_country_code: "au" + // + // For available codes see [Country + // Codes](https://developers.google.com/custom-search/docs/json_api_reference#countryCodes) + // // * `search_type`: double. Default empty. Enables non-webpage searching - // depending on the value. The only valid non-default value is 1, - // which enables image searching. + // depending on the value. The only valid non-default value is 1, + // which enables image searching. + // Example: + // search_type: 1 map params = 11; // The query expansion specification that specifies the conditions under which diff --git a/google/cloud/edgenetwork/v1/BUILD.bazel b/google/cloud/edgenetwork/v1/BUILD.bazel new file mode 100644 index 00000000000000..ed4a399d5220ac --- /dev/null +++ b/google/cloud/edgenetwork/v1/BUILD.bazel @@ -0,0 +1,382 @@ +# This file was automatically generated by BuildFileGenerator +# https://github.com/googleapis/rules_gapic/tree/master/bazel + +# Most of the manual changes to this file will be overwritten. +# It's **only** allowed to change the following rule attribute values: +# - names of *_gapic_assembly_* rules +# - certain parameters of *_gapic_library rules, including but not limited to: +# * extra_protoc_parameters +# * extra_protoc_file_parameters +# The complete list of preserved parameters can be found in the source code. + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( + name = "edgenetwork_proto", + srcs = [ + "resources.proto", + "service.proto", + ], + deps = [ + "//google/api:annotations_proto", + "//google/api:client_proto", + "//google/api:field_behavior_proto", + "//google/api:resource_proto", + "//google/longrunning:operations_proto", + "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:field_mask_proto", + "@com_google_protobuf//:timestamp_proto", + ], +) + +proto_library_with_info( + name = "edgenetwork_proto_with_info", + deps = [ + ":edgenetwork_proto", + "//google/cloud/location:location_proto", + "//google/cloud:common_resources_proto", + ], +) + +############################################################################## +# Java +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "java_gapic_assembly_gradle_pkg", + "java_gapic_library", + "java_gapic_test", + "java_grpc_library", + "java_proto_library", +) + +java_proto_library( + name = "edgenetwork_java_proto", + deps = [":edgenetwork_proto"], +) + +java_grpc_library( + name = "edgenetwork_java_grpc", + srcs = [":edgenetwork_proto"], + deps = [":edgenetwork_java_proto"], +) + +java_gapic_library( + name = "edgenetwork_java_gapic", + srcs = [":edgenetwork_proto_with_info"], + gapic_yaml = None, + grpc_service_config = "edgenetwork_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "edgenetwork_v1.yaml", + test_deps = [ + "//google/cloud/location:location_java_grpc", + ":edgenetwork_java_grpc", + ], + transport = "grpc+rest", + deps = [ + ":edgenetwork_java_proto", + "//google/api:api_java_proto", + "//google/cloud/location:location_java_proto", + ], +) + +java_gapic_test( + name = "edgenetwork_java_gapic_test_suite", + test_classes = [ + "google.cloud.edgenetwork.v1.EdgeNetworkClientHttpJsonTest", + "google.cloud.edgenetwork.v1.EdgeNetworkClientTest", + ], + runtime_deps = [":edgenetwork_java_gapic_test"], +) + +# Open Source Packages +java_gapic_assembly_gradle_pkg( + name = "google-cloud-edgenetwork-v1-java", + transport = "grpc+rest", + deps = [ + ":edgenetwork_java_gapic", + ":edgenetwork_java_grpc", + ":edgenetwork_java_proto", + ":edgenetwork_proto", + ], + include_samples = True, +) + +############################################################################## +# Go +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "go_gapic_assembly_pkg", + "go_gapic_library", + "go_proto_library", +) + +go_proto_library( + name = "edgenetwork_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "cloud.google.com/go/edgenetwork/apiv1/edgenetworkpb", + protos = [":edgenetwork_proto"], + deps = [ + "//google/api:annotations_go_proto", + "//google/longrunning:longrunning_go_proto", + ], +) + +go_gapic_library( + name = "edgenetwork_go_gapic", + srcs = [":edgenetwork_proto_with_info"], + grpc_service_config = "edgenetwork_grpc_service_config.json", + importpath = "cloud.google.com/go/edgenetwork/apiv1;edgenetwork", + metadata = True, + release_level = "beta", + rest_numeric_enums = True, + service_yaml = "edgenetwork_v1.yaml", + transport = "grpc+rest", + deps = [ + ":edgenetwork_go_proto", + "//google/cloud/location:location_go_proto", + "//google/longrunning:longrunning_go_proto", + "@com_google_cloud_go_longrunning//:go_default_library", + "@com_google_cloud_go_longrunning//autogen:go_default_library", + ], +) + +# Open Source Packages +go_gapic_assembly_pkg( + name = "gapi-cloud-edgenetwork-v1-go", + deps = [ + ":edgenetwork_go_gapic", + ":edgenetwork_go_gapic_srcjar-test.srcjar", + ":edgenetwork_go_gapic_srcjar-metadata.srcjar", + ":edgenetwork_go_gapic_srcjar-snippets.srcjar", + ":edgenetwork_go_proto", + ], +) + +############################################################################## +# Python +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "py_gapic_assembly_pkg", + "py_gapic_library", + "py_test", +) + +py_gapic_library( + name = "edgenetwork_py_gapic", + srcs = [":edgenetwork_proto"], + grpc_service_config = "edgenetwork_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "edgenetwork_v1.yaml", + transport = "grpc+rest", + deps = [], +) + +py_test( + name = "edgenetwork_py_gapic_test", + srcs = [ + "edgenetwork_py_gapic_pytest.py", + "edgenetwork_py_gapic_test.py", + ], + legacy_create_init = False, + deps = [":edgenetwork_py_gapic"], +) + +# Open Source Packages +py_gapic_assembly_pkg( + name = "edgenetwork-v1-py", + deps = [ + ":edgenetwork_py_gapic", + ], +) + +############################################################################## +# PHP +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "php_gapic_assembly_pkg", + "php_gapic_library", + "php_proto_library", +) + +php_proto_library( + name = "edgenetwork_php_proto", + deps = [":edgenetwork_proto"], +) + +php_gapic_library( + name = "edgenetwork_php_gapic", + srcs = [":edgenetwork_proto_with_info"], + grpc_service_config = "edgenetwork_grpc_service_config.json", + rest_numeric_enums = True, + migration_mode = "NEW_SURFACE_ONLY", + service_yaml = "edgenetwork_v1.yaml", + transport = "grpc+rest", + deps = [ + ":edgenetwork_php_proto", + ], +) + +# Open Source Packages +php_gapic_assembly_pkg( + name = "google-cloud-edgenetwork-v1-php", + deps = [ + ":edgenetwork_php_gapic", + ":edgenetwork_php_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) + +nodejs_gapic_library( + name = "edgenetwork_nodejs_gapic", + package_name = "@google-cloud/edgenetwork", + src = ":edgenetwork_proto_with_info", + extra_protoc_parameters = ["metadata"], + grpc_service_config = "edgenetwork_grpc_service_config.json", + package = "google.cloud.edgenetwork.v1", + rest_numeric_enums = True, + service_yaml = "edgenetwork_v1.yaml", + transport = "grpc+rest", + deps = [], +) + +nodejs_gapic_assembly_pkg( + name = "edgenetwork-v1-nodejs", + deps = [ + ":edgenetwork_nodejs_gapic", + ":edgenetwork_proto", + ], +) + +############################################################################## +# Ruby +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "ruby_gapic_assembly_pkg", + "ruby_cloud_gapic_library", + "ruby_grpc_library", + "ruby_proto_library", +) + +ruby_proto_library( + name = "edgenetwork_ruby_proto", + deps = [":edgenetwork_proto"], +) + +ruby_grpc_library( + name = "edgenetwork_ruby_grpc", + srcs = [":edgenetwork_proto"], + deps = [":edgenetwork_ruby_proto"], +) + +ruby_cloud_gapic_library( + name = "edgenetwork_ruby_gapic", + srcs = [":edgenetwork_proto_with_info"], + extra_protoc_parameters = [ + "ruby-cloud-gem-name=google-cloud-edgenetwork-v1", + ], + grpc_service_config = "edgenetwork_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "edgenetwork_v1.yaml", + transport = "grpc+rest", + deps = [ + ":edgenetwork_ruby_grpc", + ":edgenetwork_ruby_proto", + ], +) + +# Open Source Packages +ruby_gapic_assembly_pkg( + name = "google-cloud-edgenetwork-v1-ruby", + deps = [ + ":edgenetwork_ruby_gapic", + ":edgenetwork_ruby_grpc", + ":edgenetwork_ruby_proto", + ], +) + +############################################################################## +# C# +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "csharp_gapic_assembly_pkg", + "csharp_gapic_library", + "csharp_grpc_library", + "csharp_proto_library", +) + +csharp_proto_library( + name = "edgenetwork_csharp_proto", + extra_opts = [], + deps = [":edgenetwork_proto"], +) + +csharp_grpc_library( + name = "edgenetwork_csharp_grpc", + srcs = [":edgenetwork_proto"], + deps = [":edgenetwork_csharp_proto"], +) + +csharp_gapic_library( + name = "edgenetwork_csharp_gapic", + srcs = [":edgenetwork_proto_with_info"], + common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json", + grpc_service_config = "edgenetwork_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "edgenetwork_v1.yaml", + deps = [ + ":edgenetwork_csharp_grpc", + ":edgenetwork_csharp_proto", + ], +) + +# Open Source Packages +csharp_gapic_assembly_pkg( + name = "google-cloud-edgenetwork-v1-csharp", + deps = [ + ":edgenetwork_csharp_gapic", + ":edgenetwork_csharp_grpc", + ":edgenetwork_csharp_proto", + ], +) + +############################################################################## +# C++ +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "cc_grpc_library", + "cc_proto_library", +) + +cc_proto_library( + name = "edgenetwork_cc_proto", + deps = [":edgenetwork_proto"], +) + +cc_grpc_library( + name = "edgenetwork_cc_grpc", + srcs = [":edgenetwork_proto"], + grpc_only = True, + deps = [":edgenetwork_cc_proto"], +) diff --git a/google/cloud/edgenetwork/v1/edgenetwork_grpc_service_config.json b/google/cloud/edgenetwork/v1/edgenetwork_grpc_service_config.json new file mode 100644 index 00000000000000..059d5834c4c694 --- /dev/null +++ b/google/cloud/edgenetwork/v1/edgenetwork_grpc_service_config.json @@ -0,0 +1,46 @@ +{ + "methodConfig": [{ + "name": [ + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "ListNetworks" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "GetNetwork" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DiagnoseNetwork" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "ListSubnets" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "GetSubnet" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "ListInterconnectAttachments" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "GetInterconnectAttachment" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "ListInterconnects" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "GetInterconnect" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DiagnoseInterconnect" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "ListRouters" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "GetRouter" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DiagnoseRouter" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "ListRoutes" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "GetRoute" } + ], + "timeout": "60s", + "retryPolicy": { + "maxAttempts": 5, + "initialBackoff": "1s", + "maxBackoff": "10s", + "backoffMultiplier": 1.3, + "retryableStatusCodes": ["UNAVAILABLE"] + } + }, + { + "name": [ + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "InitializeZone" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "CreateNetwork" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DeleteNetwork" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "CreateSubnet" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DeleteSubnet" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "CreateInterconnectAttachment" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DeleteInterconnectAttachment" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "CreateRouter" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "UpdateRouter" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DeleteRouter" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "CreateRoute" }, + { "service": "google.cloud.edgenetwork.v1.EdgeNetwork", "method": "DeleteRoute" } + ], + "timeout": "60s" + }] +} diff --git a/google/cloud/edgenetwork/v1/edgenetwork_v1.yaml b/google/cloud/edgenetwork/v1/edgenetwork_v1.yaml new file mode 100644 index 00000000000000..a6b4035bfc1338 --- /dev/null +++ b/google/cloud/edgenetwork/v1/edgenetwork_v1.yaml @@ -0,0 +1,100 @@ +type: google.api.Service +config_version: 3 +name: edgenetwork.googleapis.com +title: Distributed Cloud Edge Network API + +apis: +- name: google.cloud.edgenetwork.v1.EdgeNetwork +- name: google.cloud.location.Locations +- name: google.longrunning.Operations + +types: +- name: google.cloud.edgenetwork.v1.OperationMetadata + +documentation: + summary: Network management API for Distributed Cloud Edge. + rules: + - selector: google.cloud.location.Locations.GetLocation + description: Gets information about a location. + + - selector: google.cloud.location.Locations.ListLocations + description: Lists information about the supported locations for this service. + +http: + rules: + - selector: google.cloud.location.Locations.GetLocation + get: '/v1/{name=projects/*/locations/*}' + - selector: google.cloud.location.Locations.ListLocations + get: '/v1/{name=projects/*}/locations' + - selector: google.longrunning.Operations.CancelOperation + post: '/v1/{name=projects/*/locations/*/operations/*}:cancel' + body: '*' + - selector: google.longrunning.Operations.DeleteOperation + delete: '/v1/{name=projects/*/locations/*/operations/*}' + - selector: google.longrunning.Operations.GetOperation + get: '/v1/{name=projects/*/locations/*/operations/*}' + - selector: google.longrunning.Operations.ListOperations + get: '/v1/{name=projects/*/locations/*}/operations' + +authentication: + rules: + - selector: 'google.cloud.edgenetwork.v1.EdgeNetwork.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.location.Locations.GetLocation + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.location.Locations.ListLocations + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.longrunning.Operations.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + +publishing: + new_issue_uri: https://issuetracker.google.com/issues/new?component=187192&template=1162689 + documentation_uri: https://cloud.google.com/distributed-cloud/edge/latest/docs/overview + api_short_name: edgenetwork + github_label: 'api: edgenetwork' + doc_tag_prefix: edgenetwork + organization: CLOUD + library_settings: + - version: google.cloud.edgenetwork.v1 + launch_stage: GA + java_settings: + common: + destinations: + - PACKAGE_MANAGER + cpp_settings: + common: + destinations: + - PACKAGE_MANAGER + php_settings: + common: + destinations: + - PACKAGE_MANAGER + python_settings: + common: + destinations: + - PACKAGE_MANAGER + node_settings: + common: + destinations: + - PACKAGE_MANAGER + dotnet_settings: + common: + destinations: + - PACKAGE_MANAGER + ruby_settings: + common: + destinations: + - PACKAGE_MANAGER + go_settings: + common: + destinations: + - PACKAGE_MANAGER + proto_reference_documentation_uri: https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/rpc diff --git a/google/cloud/edgenetwork/v1/resources.proto b/google/cloud/edgenetwork/v1/resources.proto new file mode 100644 index 00000000000000..db473f42ea839b --- /dev/null +++ b/google/cloud/edgenetwork/v1/resources.proto @@ -0,0 +1,597 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.edgenetwork.v1; + +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.EdgeNetwork.V1"; +option go_package = "cloud.google.com/go/edgenetwork/apiv1/edgenetworkpb;edgenetworkpb"; +option java_multiple_files = true; +option java_outer_classname = "ResourcesProto"; +option java_package = "google.cloud.edgenetwork.v1"; +option php_namespace = "Google\\Cloud\\EdgeNetwork\\V1"; +option ruby_package = "Google::Cloud::EdgeNetwork::V1"; + +// ResourceState describes the state the resource. +// A normal lifecycle of a new resource being created would be: PENDING -> +// PROVISIONING -> RUNNING. A normal lifecycle of an existing resource being +// deleted would be: RUNNING -> DELETING. Any failures during processing will +// result the resource to be in a SUSPENDED state. +enum ResourceState { + // Unspecified state. + STATE_UNKNOWN = 0; + + // The resource is being prepared to be applied to the rack. + STATE_PENDING = 1; + + // The resource has started being applied to the rack. + STATE_PROVISIONING = 2; + + // The resource has been pushed to the rack. + STATE_RUNNING = 3; + + // The resource failed to push to the rack. + STATE_SUSPENDED = 4; + + // The resource is under deletion. + STATE_DELETING = 5; +} + +// A Google Edge Cloud zone. +message Zone { + option (google.api.resource) = { + type: "edgenetwork.googleapis.com/Zone" + pattern: "projects/{project}/locations/{location}/zones/{zone}" + }; + + // Required. The resource name of the zone. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The time when the zone was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time when the zone was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels as key value pairs + map labels = 4; + + // The deployment layout type. + string layout_name = 5; +} + +// Message describing Network object +message Network { + option (google.api.resource) = { + type: "edgenetwork.googleapis.com/Network" + pattern: "projects/{project}/locations/{location}/zones/{zone}/networks/{network}" + }; + + // Required. The canonical resource name of the network. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The time when the network was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time when the network was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels associated with this resource. + map labels = 4; + + // Optional. A free-text description of the resource. Max length 1024 + // characters. + string description = 5 [(google.api.field_behavior) = OPTIONAL]; + + // IP (L3) MTU value of the network. + // Valid values are: 1500 and 9000. + // Default to 1500 if not set. + int32 mtu = 6; +} + +// Message describing Subnet object +message Subnet { + option (google.api.resource) = { + type: "edgenetwork.googleapis.com/Subnet" + pattern: "projects/{project}/locations/{location}/zones/{zone}/subnets/{subnet}" + }; + + // Required. The canonical resource name of the subnet. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The time when the subnet was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time when the subnet was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels associated with this resource. + map labels = 4; + + // Optional. A free-text description of the resource. Max length 1024 + // characters. + string description = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The network that this subnetwork belongs to. + string network = 6 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + } + ]; + + // The ranges of ipv4 addresses that are owned by this subnetwork. + repeated string ipv4_cidr = 7; + + // The ranges of ipv6 addresses that are owned by this subnetwork. + repeated string ipv6_cidr = 8; + + // Optional. VLAN id provided by user. If not specified we assign one + // automatically. + int32 vlan_id = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Current stage of the resource to the device by config push. + ResourceState state = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Message describing Interconnect object +message Interconnect { + option (google.api.resource) = { + type: "edgenetwork.googleapis.com/Interconnect" + pattern: "projects/{project}/locations/{location}/zones/{zone}/interconnects/{interconnect}" + }; + + // Type of interconnect. + enum InterconnectType { + // Unspecified. + INTERCONNECT_TYPE_UNSPECIFIED = 0; + + // Dedicated Interconnect. + DEDICATED = 1; + } + + // Required. The canonical resource name of the interconnect. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The time when the subnet was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time when the subnet was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels associated with this resource. + map labels = 4; + + // Optional. A free-text description of the resource. Max length 1024 + // characters. + string description = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Type of interconnect, which takes only the value 'DEDICATED' for + // now. + InterconnectType interconnect_type = 6 + [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Unique identifier for the link. + string uuid = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Cloud resource name of the switch device. + string device_cloud_resource_name = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Physical ports (e.g., TenGigE0/0/0/1) that form the + // interconnect. + repeated string physical_ports = 9 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Message describing InterconnectAttachment object +message InterconnectAttachment { + option (google.api.resource) = { + type: "edgenetwork.googleapis.com/InterconnectAttachment" + pattern: "projects/{project}/locations/{location}/zones/{zone}/interconnectAttachments/{interconnect_attachment}" + }; + + // Required. The canonical resource name of the interconnect attachment. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The time when the interconnect attachment was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time when the interconnect attachment was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels associated with this resource. + map labels = 4; + + // Optional. A free-text description of the resource. Max length 1024 + // characters. + string description = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The canonical name of underlying Interconnect object that this + // attachment's traffic will traverse through. The name is in the form of + // `projects/{project}/locations/{location}/zones/{zone}/interconnects/{interconnect}`. + string interconnect = 6 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Interconnect" + } + ]; + + // Optional. The canonical Network name in the form of + // `projects/{project}/locations/{location}/zones/{zone}/networks/{network}`. + string network = 11 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + } + ]; + + // Required. VLAN id provided by user. Must be site-wise unique. + int32 vlan_id = 8 [(google.api.field_behavior) = REQUIRED]; + + // IP (L3) MTU value of the virtual edge cloud. + // Valid values are: 1500 and 9000. + // Default to 1500 if not set. + int32 mtu = 9; + + // Output only. Current stage of the resource to the device by config push. + ResourceState state = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Message describing Router object +message Router { + option (google.api.resource) = { + type: "edgenetwork.googleapis.com/Router" + pattern: "projects/{project}/locations/{location}/zones/{zone}/routers/{router}" + }; + + // Router Interface defines the GDCE zone side layer-3 information for + // building the BGP session. + message Interface { + // Name of this interface entry. Unique within the Zones resource. + string name = 1; + + // IP address and range of the interface. + string ipv4_cidr = 3; + + // IPv6 address and range of the interface. + string ipv6_cidr = 6; + + // The canonical name of the linked Interconnect attachment. + string linked_interconnect_attachment = 2; + + // The canonical name of the subnetwork resource that this interface + // belongs to. + string subnetwork = 4; + + // Create loopback interface in the router when specified. + // The number of IP addresses must match the number of TOR devices. + repeated string loopback_ip_addresses = 5; + } + + // BGPPeer defines the peer side layer-3 information for building the BGP + // session. + message BgpPeer { + // Name of this BGP peer. Unique within the Zones resource. + string name = 1; + + // Name of the RouterInterface the BGP peer is associated with. + string interface = 2; + + // IP range of the interface within Google. + string interface_ipv4_cidr = 3; + + // IPv6 range of the interface within Google. + string interface_ipv6_cidr = 7; + + // IP range of the BGP interface outside Google. + string peer_ipv4_cidr = 4; + + // IPv6 range of the BGP interface outside Google. + string peer_ipv6_cidr = 6; + + // Peer BGP Autonomous System Number (ASN). Each BGP interface may use + // a different value. + uint32 peer_asn = 5; + + // Output only. Local BGP Autonomous System Number (ASN). + // This field is ST_NOT_REQUIRED because it stores private ASNs, which are + // meaningless outside the zone in which they are being used. + uint32 local_asn = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; + } + + // BGP information specific to this router. + message Bgp { + // Locally assigned BGP ASN. + uint32 asn = 1; + + // The interval in seconds between BGP keepalive messages that are + // sent to the peer. Default is 20 with value between 20 and 60. + uint32 keepalive_interval_in_seconds = 2; + } + + // Required. The canonical resource name of the router. + string name = 1 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The time when the router was created. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time when the router was last updated. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels associated with this resource. + map labels = 4; + + // Optional. A free-text description of the resource. Max length 1024 + // characters. + string description = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The canonical name of the network to which this router belongs. + // The name is in the form of + // `projects/{project}/locations/{location}/zones/{zone}/networks/{network}`. + string network = 6 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + } + ]; + + // Router interfaces. + repeated Interface interface = 7; + + // BGP peers. + repeated BgpPeer bgp_peer = 8; + + // BGP information specific to this router. + Bgp bgp = 9; + + // Output only. Current stage of the resource to the device by config push. + ResourceState state = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. A list of CIDRs in IP/Length format to advertise northbound as + // static routes from this router. + repeated string route_advertisements = 11 + [(google.api.field_behavior) = OPTIONAL]; +} + +// LinkLayerAddress contains an IP address and corresponding link-layer address. +message LinkLayerAddress { + // The MAC address of this neighbor. + string mac_address = 1; + + // The IP address of this neighbor. + string ip_address = 2; +} + +// SubnetStatus contains detailed and current technical information about this +// subnet resource. +message SubnetStatus { + // The name of CCFE subnet resource. + string name = 1; + + // BVI MAC address. + string mac_address = 2; + + // A list of LinkLayerAddress, describing the ip address and corresponding + // link-layer address of the neighbors for this subnet. + repeated LinkLayerAddress link_layer_addresses = 3; +} + +// Diagnostics information about interconnect, contains detailed and current +// technical information about Google's side of the connection. +message InterconnectDiagnostics { + // Describing the status for each link on the Interconnect. + message LinkStatus { + // The unique ID for this link assigned during turn up by Google. + string circuit_id = 1; + + // Describing the state of a LACP link. + LinkLACPStatus lacp_status = 2; + + // A list of LinkLLDPStatus objects, used to describe LLDP status of each + // peer for each link on the Interconnect. + repeated LinkLLDPStatus lldp_statuses = 3; + + // Packet counts specific statistics for this link. + PacketCounts packet_counts = 4; + } + + // Containing a collection of interface-related statistics objects. + message PacketCounts { + // The number of packets that are delivered. + int64 inbound_unicast = 1; + + // The number of inbound packets that contained errors. + int64 inbound_errors = 2; + + // The number of inbound packets that were chosen to be discarded even + // though no errors had been detected to prevent their being deliverable. + int64 inbound_discards = 3; + + // The total number of packets that are requested be transmitted. + int64 outbound_unicast = 4; + + // The number of outbound packets that could not be transmitted because of + // errors. + int64 outbound_errors = 5; + + // The number of outbound packets that were chosen to be discarded even + // though no errors had been detected to prevent their being transmitted. + int64 outbound_discards = 6; + } + + // Describing the status of a LACP link. + message LinkLACPStatus { + // State enum for LACP link. + enum State { + // The default state indicating state is in unknown state. + UNKNOWN = 0; + + // The link is configured and active within the bundle. + ACTIVE = 1; + + // The link is not configured within the bundle, this means the rest of + // the object should be empty. + DETACHED = 2; + } + + // The state of a LACP link. + State state = 1; + + // System ID of the port on Google's side of the LACP exchange. + string google_system_id = 2; + + // System ID of the port on the neighbor's side of the LACP exchange. + string neighbor_system_id = 3; + + // A true value indicates that the participant will allow the link to be + // used as part of the aggregate. + // A false value indicates the link should be used as an individual link. + bool aggregatable = 4; + + // If true, the participant is collecting incoming frames on the link, + // otherwise false + bool collecting = 5; + + // When true, the participant is distributing outgoing frames; when false, + // distribution is disabled + bool distributing = 6; + } + + // Describing a LLDP link. + message LinkLLDPStatus { + // The peer system's administratively assigned name. + string peer_system_name = 1; + + // The textual description of the network entity of LLDP peer. + string peer_system_description = 2; + + // The peer chassis component of the endpoint identifier associated with the + // transmitting LLDP agent. + string peer_chassis_id = 3; + + // The format and source of the peer chassis identifier string. + string peer_chassis_id_type = 4; + + // The port component of the endpoint identifier associated with the + // transmitting LLDP agent. If the specified port is an IEEE 802.3 Repeater + // port, then this TLV is optional. + string peer_port_id = 5; + + // The format and source of the peer port identifier string. + string peer_port_id_type = 6; + } + + // The MAC address of the Interconnect's bundle interface. + string mac_address = 1; + + // A list of LinkLayerAddress, describing the ip address and corresponding + // link-layer address of the neighbors for this interconnect. + repeated LinkLayerAddress link_layer_addresses = 2; + + // A list of LinkStatus objects, used to describe the status for each link on + // the Interconnect. + repeated LinkStatus links = 3; +} + +// Describing the current status of a router. +message RouterStatus { + // Status of a BGP peer. + message BgpPeerStatus { + // Status of the BGP peer: {UP, DOWN} + enum BgpStatus { + // The default status indicating BGP session is in unknown state. + UNKNOWN = 0; + + // The UP status indicating BGP session is established. + UP = 1; + + // The DOWN state indicating BGP session is not established yet. + DOWN = 2; + } + + // Name of this BGP peer. Unique within the Routers resource. + string name = 1; + + // IP address of the local BGP interface. + string ip_address = 2; + + // IP address of the remote BGP interface. + string peer_ip_address = 3; + + // The current status of BGP. + BgpStatus status = 4; + + // BGP state as specified in RFC1771. + string state = 5; + + // Time this session has been up. + // Format: + // 14 years, 51 weeks, 6 days, 23 hours, 59 minutes, 59 seconds + string uptime = 6; + + // Time this session has been up, in seconds. + int64 uptime_seconds = 7; + + // A collection of counts for prefixes. + PrefixCounter prefix_counter = 8; + } + + // PrefixCounter contains a collection of prefixes related counts. + message PrefixCounter { + // Number of prefixes advertised. + int64 advertised = 1; + + // Number of prefixes denied. + int64 denied = 2; + + // Number of prefixes received. + int64 received = 3; + + // Number of prefixes sent. + int64 sent = 4; + + // Number of prefixes suppressed. + int64 suppressed = 5; + + // Number of prefixes withdrawn. + int64 withdrawn = 6; + } + + // The canonical name of the network to which this router belongs. + string network = 1 [(google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + }]; + + // A list of BgpPeerStatus objects, describing all BGP peers related to this + // router. + repeated BgpPeerStatus bgp_peer_status = 2; +} diff --git a/google/cloud/edgenetwork/v1/service.proto b/google/cloud/edgenetwork/v1/service.proto new file mode 100644 index 00000000000000..22bfae6b197f29 --- /dev/null +++ b/google/cloud/edgenetwork/v1/service.proto @@ -0,0 +1,1005 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.edgenetwork.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/cloud/edgenetwork/v1/resources.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.EdgeNetwork.V1"; +option go_package = "cloud.google.com/go/edgenetwork/apiv1/edgenetworkpb;edgenetworkpb"; +option java_multiple_files = true; +option java_outer_classname = "ServiceProto"; +option java_package = "google.cloud.edgenetwork.v1"; +option php_namespace = "Google\\Cloud\\EdgeNetwork\\V1"; +option ruby_package = "Google::Cloud::EdgeNetwork::V1"; + +// EdgeNetwork API provides managed, highly available cloud dynamic network +// configuration service to the GEC customer to enable edge application and +// network function solutions. This allows the customers to easily define and +// configure the network setup and property to meet the workload requirement. +service EdgeNetwork { + option (google.api.default_host) = "edgenetwork.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // InitializeZone will initialize resources for a zone in a project. + rpc InitializeZone(InitializeZoneRequest) returns (InitializeZoneResponse) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/zones/*}:initialize" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Lists Zones in a given project and location. + rpc ListZones(ListZonesRequest) returns (ListZonesResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/zones" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single Zone. + rpc GetZone(GetZoneRequest) returns (Zone) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists Networks in a given project and location. + rpc ListNetworks(ListNetworksRequest) returns (ListNetworksResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/zones/*}/networks" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single Network. + rpc GetNetwork(GetNetworkRequest) returns (Network) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/networks/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Get the diagnostics of a single network resource. + rpc DiagnoseNetwork(DiagnoseNetworkRequest) + returns (DiagnoseNetworkResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/networks/*}:diagnose" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new Network in a given project and location. + rpc CreateNetwork(CreateNetworkRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/zones/*}/networks" + body: "network" + }; + option (google.api.method_signature) = "parent,network,network_id"; + option (google.longrunning.operation_info) = { + response_type: "Network" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a single Network. + rpc DeleteNetwork(DeleteNetworkRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/zones/*/networks/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } + + // Lists Subnets in a given project and location. + rpc ListSubnets(ListSubnetsRequest) returns (ListSubnetsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/zones/*}/subnets" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single Subnet. + rpc GetSubnet(GetSubnetRequest) returns (Subnet) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/subnets/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new Subnet in a given project and location. + rpc CreateSubnet(CreateSubnetRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/zones/*}/subnets" + body: "subnet" + }; + option (google.api.method_signature) = "parent,subnet,subnet_id"; + option (google.longrunning.operation_info) = { + response_type: "Subnet" + metadata_type: "OperationMetadata" + }; + } + + // Updates the parameters of a single Subnet. + rpc UpdateSubnet(UpdateSubnetRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{subnet.name=projects/*/locations/*/zones/*/subnets/*}" + body: "subnet" + }; + option (google.api.method_signature) = "subnet,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "Subnet" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a single Subnet. + rpc DeleteSubnet(DeleteSubnetRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/zones/*/subnets/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } + + // Lists Interconnects in a given project and location. + rpc ListInterconnects(ListInterconnectsRequest) + returns (ListInterconnectsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/zones/*}/interconnects" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single Interconnect. + rpc GetInterconnect(GetInterconnectRequest) returns (Interconnect) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/interconnects/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Get the diagnostics of a single interconnect resource. + rpc DiagnoseInterconnect(DiagnoseInterconnectRequest) + returns (DiagnoseInterconnectResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/interconnects/*}:diagnose" + }; + option (google.api.method_signature) = "name"; + } + + // Lists InterconnectAttachments in a given project and location. + rpc ListInterconnectAttachments(ListInterconnectAttachmentsRequest) + returns (ListInterconnectAttachmentsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/zones/*}/interconnectAttachments" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single InterconnectAttachment. + rpc GetInterconnectAttachment(GetInterconnectAttachmentRequest) + returns (InterconnectAttachment) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/interconnectAttachments/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new InterconnectAttachment in a given project and location. + rpc CreateInterconnectAttachment(CreateInterconnectAttachmentRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/zones/*}/interconnectAttachments" + body: "interconnect_attachment" + }; + option (google.api.method_signature) = + "parent,interconnect_attachment,interconnect_attachment_id"; + option (google.longrunning.operation_info) = { + response_type: "InterconnectAttachment" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a single InterconnectAttachment. + rpc DeleteInterconnectAttachment(DeleteInterconnectAttachmentRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/zones/*/interconnectAttachments/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } + + // Lists Routers in a given project and location. + rpc ListRouters(ListRoutersRequest) returns (ListRoutersResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/zones/*}/routers" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single Router. + rpc GetRouter(GetRouterRequest) returns (Router) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/routers/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Get the diagnostics of a single router resource. + rpc DiagnoseRouter(DiagnoseRouterRequest) returns (DiagnoseRouterResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/zones/*/routers/*}:diagnose" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new Router in a given project and location. + rpc CreateRouter(CreateRouterRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/zones/*}/routers" + body: "router" + }; + option (google.api.method_signature) = "parent,router,router_id"; + option (google.longrunning.operation_info) = { + response_type: "Router" + metadata_type: "OperationMetadata" + }; + } + + // Updates the parameters of a single Router. + rpc UpdateRouter(UpdateRouterRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{router.name=projects/*/locations/*/zones/*/routers/*}" + body: "router" + }; + option (google.api.method_signature) = "router,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "Router" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a single Router. + rpc DeleteRouter(DeleteRouterRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/zones/*/routers/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } +} + +// Message for requesting list of Zones +message ListZonesRequest { + // Required. Parent value for ListZonesRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Zone" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing Zones +message ListZonesResponse { + // The list of Zone + repeated Zone zones = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a Zone +message GetZoneRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Zone" + } + ]; +} + +// Message for requesting list of Networks +message ListNetworksRequest { + // Required. Parent value for ListNetworksRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Network" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing Networks +message ListNetworksResponse { + // The list of Network + repeated Network networks = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a Network +message GetNetworkRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + } + ]; +} + +// Message for creating a Network +message CreateNetworkRequest { + // Required. Value for parent. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Network" + } + ]; + + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // network_id from the method_signature of Create RPC + string network_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being created + Network network = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for deleting a Network +message DeleteNetworkRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + } + ]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes after the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for requesting list of Subnets +message ListSubnetsRequest { + // Required. Parent value for ListSubnetsRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Subnet" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing Subnets +message ListSubnetsResponse { + // The list of Subnet + repeated Subnet subnets = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a Subnet +message GetSubnetRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Subnet" + } + ]; +} + +// Message for creating a Subnet +message CreateSubnetRequest { + // Required. Value for parent. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Subnet" + } + ]; + + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // subnet_id from the method_signature of Create RPC + string subnet_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being created + Subnet subnet = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for updating a Subnet +message UpdateSubnetRequest { + // Required. Field mask is used to specify the fields to be overwritten in the + // Subnet resource by the update. + // The fields specified in the update_mask are relative to the resource, not + // the full request. A field will be overwritten if it is in the mask. If the + // user does not provide a mask then all fields will be overwritten. + google.protobuf.FieldMask update_mask = 1 + [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being updated + Subnet subnet = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for deleting a Subnet +message DeleteSubnetRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Subnet" + } + ]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes after the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for requesting list of Interconnects +message ListInterconnectsRequest { + // Required. Parent value for ListInterconnectsRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Interconnect" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing Interconnects +message ListInterconnectsResponse { + // The list of Interconnect + repeated Interconnect interconnects = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a Interconnect +message GetInterconnectRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Interconnect" + } + ]; +} + +// Message for requesting list of InterconnectAttachments +message ListInterconnectAttachmentsRequest { + // Required. Parent value for ListInterconnectAttachmentsRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/InterconnectAttachment" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing InterconnectAttachments +message ListInterconnectAttachmentsResponse { + // The list of InterconnectAttachment + repeated InterconnectAttachment interconnect_attachments = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a InterconnectAttachment +message GetInterconnectAttachmentRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/InterconnectAttachment" + } + ]; +} + +// Message for creating a InterconnectAttachment +message CreateInterconnectAttachmentRequest { + // Required. Value for parent. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/InterconnectAttachment" + } + ]; + + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // interconnect_attachment_id from the method_signature of Create RPC + string interconnect_attachment_id = 2 + [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being created + InterconnectAttachment interconnect_attachment = 3 + [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for deleting a InterconnectAttachment +message DeleteInterconnectAttachmentRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/InterconnectAttachment" + } + ]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes after the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for requesting list of Routers +message ListRoutersRequest { + // Required. Parent value for ListRoutersRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Router" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing Routers +message ListRoutersResponse { + // The list of Router + repeated Router routers = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a Router +message GetRouterRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Router" + } + ]; +} + +// Message for creating a Router +message CreateRouterRequest { + // Required. Value for parent. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "edgenetwork.googleapis.com/Router" + } + ]; + + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // router_id from the method_signature of Create RPC + string router_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being created + Router router = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for updating a Router +message UpdateRouterRequest { + // Required. Field mask is used to specify the fields to be overwritten in the + // Router resource by the update. + // The fields specified in the update_mask are relative to the resource, not + // the full request. A field will be overwritten if it is in the mask. If the + // user does not provide a mask then all fields will be overwritten. + google.protobuf.FieldMask update_mask = 1 + [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being updated + Router router = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for deleting a Router +message DeleteRouterRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Router" + } + ]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes after the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Represents the metadata of the long-running operation. +message OperationMetadata { + // Output only. The time the operation was created. + google.protobuf.Timestamp create_time = 1 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time the operation finished running. + google.protobuf.Timestamp end_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Server-defined resource path for the target of the operation. + string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Name of the verb executed by the operation. + string verb = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Human-readable status of the operation, if any. + string status_message = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Identifies whether the user has requested cancellation + // of the operation. Operations that have been cancelled successfully + // have [Operation.error][] value with a + // [google.rpc.Status.code][google.rpc.Status.code] of 1, corresponding to + // `Code.CANCELLED`. + bool requested_cancellation = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. API version used to start the operation. + string api_version = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Message for requesting the diagnostics of a network within a specific zone. +message DiagnoseNetworkRequest { + // Required. The name of the network resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Network" + } + ]; +} + +// DiagnoseNetworkResponse contains the current status for a specific network. +message DiagnoseNetworkResponse { + // NetworkStatus has a list of status for the subnets under the current + // network. + message NetworkStatus { + // A list of status for the subnets under the current network. + repeated SubnetStatus subnet_status = 1; + } + + // The time when the network status was last updated. + google.protobuf.Timestamp update_time = 1; + + // The network status of a specific network. + NetworkStatus result = 2; +} + +// Message for requesting the diagnostics of an interconnect within a specific +// zone. +message DiagnoseInterconnectRequest { + // Required. The name of the interconnect resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Interconnect" + } + ]; +} + +// DiagnoseInterconnectResponse contains the current diagnostics for a +// specific interconnect. +message DiagnoseInterconnectResponse { + // The time when the interconnect diagnostics was last updated. + google.protobuf.Timestamp update_time = 1; + + // The network status of a specific interconnect. + InterconnectDiagnostics result = 2; +} + +// Message for requesting diagnositcs of a router within a specific zone. +message DiagnoseRouterRequest { + // Required. The name of the router resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Router" + } + ]; +} + +// DiagnoseRouterResponse contains the current status for a specific router. +message DiagnoseRouterResponse { + // The time when the router status was last updated. + google.protobuf.Timestamp update_time = 1; + + // The network status of a specific router. + RouterStatus result = 2; +} + +// Message for initializing a specified zone +message InitializeZoneRequest { + // Required. The name of the zone resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "edgenetwork.googleapis.com/Zone" + } + ]; +} + +// The response of initializing a zone +message InitializeZoneResponse {} diff --git a/google/cloud/filestore/v1/BUILD.bazel b/google/cloud/filestore/v1/BUILD.bazel index ffcfdbea4625d3..40d1cbe49c4d41 100644 --- a/google/cloud/filestore/v1/BUILD.bazel +++ b/google/cloud/filestore/v1/BUILD.bazel @@ -144,6 +144,7 @@ go_gapic_library( deps = [ ":filestore_go_proto", "//google/cloud/common:common_go_proto", + "//google/cloud/location:location_go_proto", "//google/longrunning:longrunning_go_proto", "@com_google_cloud_go_longrunning//:go_default_library", "@com_google_cloud_go_longrunning//autogen:go_default_library", diff --git a/google/cloud/filestore/v1/cloud_filestore_service.proto b/google/cloud/filestore/v1/cloud_filestore_service.proto index 0cd1a295e14648..1981d345945dff 100644 --- a/google/cloud/filestore/v1/cloud_filestore_service.proto +++ b/google/cloud/filestore/v1/cloud_filestore_service.proto @@ -123,6 +123,19 @@ service CloudFilestoreManager { }; } + // Revert an existing instance's file system to a specified snapshot. + rpc RevertInstance(RevertInstanceRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/instances/*}:revert" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "Instance" + metadata_type: "google.cloud.common.OperationMetadata" + }; + } + // Deletes an instance. rpc DeleteInstance(DeleteInstanceRequest) returns (google.longrunning.Operation) { @@ -317,7 +330,10 @@ message NetworkConfig { // File share configuration for the instance. message FileShareConfig { - // The name of the file share (must be 16 characters or less). + // Required. The name of the file share. Must use 1-16 characters for the + // basic service tier and 1-63 characters for all other service tiers. + // Must use lowercase letters, numbers, or underscores `[a-z0-9_]`. Must + // start with a letter. Immutable. string name = 1; // File share capacity in gigabytes (GB). @@ -442,6 +458,9 @@ message Instance { // The instance is in the process of becoming active. RESUMING = 10; + + // The instance is reverting to a snapshot. + REVERTING = 12; } // Available service tiers. @@ -472,6 +491,14 @@ message Instance { // ENTERPRISE instances offer the features and availability needed for // mission-critical workloads. ENTERPRISE = 6; + + // ZONAL instances offer expanded capacity and performance scaling + // capabilities. + ZONAL = 7; + + // REGIONAL instances offer the features and availability needed for + // mission-critical workloads. + REGIONAL = 8; } // SuspensionReason contains the possible reasons for a suspension. @@ -522,6 +549,9 @@ message Instance { google.protobuf.BoolValue satisfies_pzs = 13 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Output only. Reserved for future use. + bool satisfies_pzi = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; + // KMS key name used for data encryption. string kms_key_name = 14; @@ -599,6 +629,23 @@ message RestoreInstanceRequest { } } +// RevertInstanceRequest reverts the given instance's file share to the +// specified snapshot. +message RevertInstanceRequest { + // Required. + // `projects/{project_id}/locations/{location_id}/instances/{instance_id}`. + // The resource name of the instance, in the format + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "file.googleapis.com/Instance" } + ]; + + // Required. The snapshot resource ID, in the format 'my-snapshot', where the + // specified ID is the {snapshot_id} of the fully qualified name like + // `projects/{project_id}/locations/{location_id}/instances/{instance_id}/snapshots/{snapshot_id}` + string target_snapshot_id = 2 [(google.api.field_behavior) = REQUIRED]; +} + // DeleteInstanceRequest deletes an instance. message DeleteInstanceRequest { // Required. The instance resource name, in the format @@ -814,6 +861,10 @@ message Backup { // Backup is being deleted. DELETING = 4; + + // Backup is not valid and cannot be used for creating new instances or + // restoring existing instances. + INVALID = 5; } // Output only. The resource name of the backup, in the format @@ -866,6 +917,9 @@ message Backup { google.protobuf.BoolValue satisfies_pzs = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Output only. Reserved for future use. + bool satisfies_pzi = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Immutable. KMS key name used for data encryption. string kms_key = 13 [(google.api.field_behavior) = IMMUTABLE]; } diff --git a/google/cloud/filestore/v1/file_v1.yaml b/google/cloud/filestore/v1/file_v1.yaml index ddd041c711532d..dd4394317032b0 100644 --- a/google/cloud/filestore/v1/file_v1.yaml +++ b/google/cloud/filestore/v1/file_v1.yaml @@ -5,6 +5,8 @@ title: Cloud Filestore API apis: - name: google.cloud.filestore.v1.CloudFilestoreManager +- name: google.cloud.location.Locations +- name: google.longrunning.Operations documentation: summary: |- @@ -17,22 +19,6 @@ documentation: - selector: google.cloud.location.Locations.ListLocations description: Lists information about the supported locations for this service. - - selector: google.longrunning.Operations.ListOperations - description: |- - Lists operations that match the specified filter in the request. If - the server doesn't support this method, it returns `UNIMPLEMENTED`. - -backend: - rules: - - selector: 'google.cloud.filestore.v1.CloudFilestoreManager.*' - deadline: 60.0 - - selector: google.cloud.location.Locations.GetLocation - deadline: 60.0 - - selector: google.cloud.location.Locations.ListLocations - deadline: 60.0 - - selector: 'google.longrunning.Operations.*' - deadline: 60.0 - http: rules: - selector: google.cloud.location.Locations.GetLocation diff --git a/google/cloud/filestore/v1beta1/cloud_filestore_service.proto b/google/cloud/filestore/v1beta1/cloud_filestore_service.proto index 5c11d8cc04b84c..07ce66e3b69857 100644 --- a/google/cloud/filestore/v1beta1/cloud_filestore_service.proto +++ b/google/cloud/filestore/v1beta1/cloud_filestore_service.proto @@ -385,9 +385,10 @@ message NetworkConfig { // File share configuration for the instance. message FileShareConfig { - // The name of the file share (must be 32 characters or less for - // Enterprise and High Scale SSD tiers and 16 characters or less for all other - // tiers). + // Required. The name of the file share. Must use 1-16 characters for the + // basic service tier and 1-63 characters for all other service tiers. + // Must use lowercase letters, numbers, or underscores `[a-z0-9_]`. Must + // start with a letter. Immutable. string name = 1; // File share capacity in gigabytes (GB). @@ -597,6 +598,10 @@ message Instance { // ZONAL instances offer expanded capacity and performance scaling // capabilities. ZONAL = 8; + + // REGIONAL instances offer the features and availability needed for + // mission-critical workloads. + REGIONAL = 9; } // SuspensionReason contains the possible reasons for a suspension. @@ -660,6 +665,9 @@ message Instance { google.protobuf.BoolValue satisfies_pzs = 13 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Output only. Reserved for future use. + bool satisfies_pzi = 26 [(google.api.field_behavior) = OUTPUT_ONLY]; + // KMS key name used for data encryption. string kms_key_name = 14; @@ -780,8 +788,8 @@ message RestoreInstanceRequest { // specified snapshot. message RevertInstanceRequest { // Required. - // projects/{project_id}/locations/{location_id}/instances/{instance_id}. The - // resource name of the instance, in the format + // `projects/{project_id}/locations/{location_id}/instances/{instance_id}`. + // The resource name of the instance, in the format string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "file.googleapis.com/Instance" } @@ -789,7 +797,7 @@ message RevertInstanceRequest { // Required. The snapshot resource ID, in the format 'my-snapshot', where the // specified ID is the {snapshot_id} of the fully qualified name like - // projects/{project_id}/locations/{location_id}/instances/{instance_id}/snapshots/{snapshot_id} + // `projects/{project_id}/locations/{location_id}/instances/{instance_id}/snapshots/{snapshot_id}` string target_snapshot_id = 2 [(google.api.field_behavior) = REQUIRED]; } @@ -1063,6 +1071,9 @@ message Backup { google.protobuf.BoolValue satisfies_pzs = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Output only. Reserved for future use. + bool satisfies_pzi = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; + // Immutable. KMS key name used for data encryption. string kms_key_name = 13 [(google.api.field_behavior) = IMMUTABLE]; } diff --git a/google/cloud/filestore/v1beta1/file_v1beta1.yaml b/google/cloud/filestore/v1beta1/file_v1beta1.yaml index a06cca64de0cf4..c250ecebbdeaa5 100644 --- a/google/cloud/filestore/v1beta1/file_v1beta1.yaml +++ b/google/cloud/filestore/v1beta1/file_v1beta1.yaml @@ -19,17 +19,6 @@ documentation: - selector: google.cloud.location.Locations.ListLocations description: Lists information about the supported locations for this service. -backend: - rules: - - selector: 'google.cloud.filestore.v1beta1.CloudFilestoreManager.*' - deadline: 60.0 - - selector: google.cloud.location.Locations.GetLocation - deadline: 60.0 - - selector: google.cloud.location.Locations.ListLocations - deadline: 60.0 - - selector: 'google.longrunning.Operations.*' - deadline: 60.0 - http: rules: - selector: google.cloud.location.Locations.GetLocation diff --git a/google/cloud/kms/inventory/v1/BUILD.bazel b/google/cloud/kms/inventory/v1/BUILD.bazel index b90ee556b58668..a832d43899bb68 100644 --- a/google/cloud/kms/inventory/v1/BUILD.bazel +++ b/google/cloud/kms/inventory/v1/BUILD.bazel @@ -274,6 +274,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":inventory_nodejs_gapic", ":inventory_proto", + "//google/cloud/kms/v1:kms_proto", ], ) diff --git a/google/cloud/paymentgateway/issuerswitch/v1/BUILD.bazel b/google/cloud/paymentgateway/issuerswitch/v1/BUILD.bazel index 358587cc715690..d5f491fcfb40eb 100644 --- a/google/cloud/paymentgateway/issuerswitch/v1/BUILD.bazel +++ b/google/cloud/paymentgateway/issuerswitch/v1/BUILD.bazel @@ -283,6 +283,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":issuerswitch_nodejs_gapic", ":issuerswitch_proto", + "//google/logging/type:type_proto", ], ) diff --git a/google/cloud/policytroubleshooter/iam/v3/BUILD.bazel b/google/cloud/policytroubleshooter/iam/v3/BUILD.bazel index ed6d8647655ffc..88f8a402edd8df 100644 --- a/google/cloud/policytroubleshooter/iam/v3/BUILD.bazel +++ b/google/cloud/policytroubleshooter/iam/v3/BUILD.bazel @@ -272,6 +272,10 @@ nodejs_gapic_assembly_pkg( deps = [ ":iam_nodejs_gapic", ":iam_proto", + "//google/iam/v1:policy_proto", + "//google/iam/v2:policy_proto", + "//google/rpc:status_proto", + "//google/type:expr_proto", ], ) diff --git a/google/cloud/recaptchaenterprise/v1/recaptchaenterprise.proto b/google/cloud/recaptchaenterprise/v1/recaptchaenterprise.proto index 3dfa9948018605..314f839c5887d3 100644 --- a/google/cloud/recaptchaenterprise/v1/recaptchaenterprise.proto +++ b/google/cloud/recaptchaenterprise/v1/recaptchaenterprise.proto @@ -537,12 +537,13 @@ message AccountVerificationInfo { ERROR_VERDICT_MISMATCH = 9; } - // Endpoints that can be used for identity verification. - repeated EndpointVerificationInfo endpoints = 1; + // Optional. Endpoints that can be used for identity verification. + repeated EndpointVerificationInfo endpoints = 1 + [(google.api.field_behavior) = OPTIONAL]; - // Language code preference for the verification message, set as a IETF BCP 47 - // language code. - string language_code = 3; + // Optional. Language code preference for the verification message, set as a + // IETF BCP 47 language code. + string language_code = 3 [(google.api.field_behavior) = OPTIONAL]; // Output only. Result of the latest account verification challenge. Result latest_verification_result = 7 @@ -555,10 +556,10 @@ message AccountVerificationInfo { // Private password leak verification info. message PrivatePasswordLeakVerification { - // Optional. Exactly 26-bit prefix of the SHA-256 hash of the canonicalized + // Required. Exactly 26-bit prefix of the SHA-256 hash of the canonicalized // username. It is used to look up password leaks associated with that hash // prefix. - bytes lookup_hash_prefix = 1 [(google.api.field_behavior) = OPTIONAL]; + bytes lookup_hash_prefix = 1 [(google.api.field_behavior) = REQUIRED]; // Optional. Encrypted Scrypt hash of the canonicalized username+password. It // is re-encrypted by the server and returned through @@ -590,8 +591,8 @@ message Assessment { // `projects/{project}/assessments/{assessment}`. string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // The event being assessed. - Event event = 2; + // Optional. The event being assessed. + Event event = 2 [(google.api.field_behavior) = OPTIONAL]; // Output only. The risk analysis result for the event being assessed. RiskAnalysis risk_analysis = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; @@ -600,24 +601,31 @@ message Assessment { TokenProperties token_properties = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Account verification information for identity verification. The assessment - // event must include a token and site key to use this feature. - AccountVerificationInfo account_verification = 5; + // Optional. Account verification information for identity verification. The + // assessment event must include a token and site key to use this feature. + AccountVerificationInfo account_verification = 5 + [(google.api.field_behavior) = OPTIONAL]; - // Assessment returned by account defender when a hashed_account_id is - // provided. - AccountDefenderAssessment account_defender_assessment = 6; + // Output only. Assessment returned by account defender when a + // hashed_account_id is provided. + AccountDefenderAssessment account_defender_assessment = 6 + [(google.api.field_behavior) = OUTPUT_ONLY]; - // The private password leak verification field contains the parameters that - // are used to to check for leaks privately without sharing user credentials. - PrivatePasswordLeakVerification private_password_leak_verification = 8; + // Optional. The private password leak verification field contains the + // parameters that are used to to check for leaks privately without sharing + // user credentials. + PrivatePasswordLeakVerification private_password_leak_verification = 8 + [(google.api.field_behavior) = OPTIONAL]; - // Assessment returned when firewall policies belonging to the project are - // evaluated using the field firewall_policy_evaluation. - FirewallPolicyAssessment firewall_policy_assessment = 10; + // Output only. Assessment returned when firewall policies belonging to the + // project are evaluated using the field firewall_policy_evaluation. + FirewallPolicyAssessment firewall_policy_assessment = 10 + [(google.api.field_behavior) = OUTPUT_ONLY]; - // Assessment returned by Fraud Prevention when TransactionData is provided. - FraudPreventionAssessment fraud_prevention_assessment = 11; + // Output only. Assessment returned by Fraud Prevention when TransactionData + // is provided. + FraudPreventionAssessment fraud_prevention_assessment = 11 + [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. Fraud Signals specific to the users involved in a payment // transaction. @@ -664,7 +672,7 @@ message Event { // WAF-enabled key. bool waf_token_assessment = 9 [(google.api.field_behavior) = OPTIONAL]; - // Optional. Optional JA3 fingerprint for SSL clients. + // Optional. JA3 fingerprint for SSL clients. string ja3 = 10 [(google.api.field_behavior) = OPTIONAL]; // Optional. HTTP header information about the request. @@ -683,88 +691,90 @@ message Event { } // Transaction data associated with a payment protected by reCAPTCHA Enterprise. -// All fields are optional. message TransactionData { // Structured address format for billing and shipping addresses. message Address { - // The recipient name, potentially including information such as "care of". - string recipient = 1; + // Optional. The recipient name, potentially including information such as + // "care of". + string recipient = 1 [(google.api.field_behavior) = OPTIONAL]; - // The first lines of the address. The first line generally contains the - // street name and number, and further lines may include information such as - // an apartment number. - repeated string address = 2; + // Optional. The first lines of the address. The first line generally + // contains the street name and number, and further lines may include + // information such as an apartment number. + repeated string address = 2 [(google.api.field_behavior) = OPTIONAL]; - // The town/city of the address. - string locality = 3; + // Optional. The town/city of the address. + string locality = 3 [(google.api.field_behavior) = OPTIONAL]; - // The state, province, or otherwise administrative area of the address. - string administrative_area = 4; + // Optional. The state, province, or otherwise administrative area of the + // address. + string administrative_area = 4 [(google.api.field_behavior) = OPTIONAL]; - // The CLDR country/region of the address. - string region_code = 5; + // Optional. The CLDR country/region of the address. + string region_code = 5 [(google.api.field_behavior) = OPTIONAL]; - // The postal or ZIP code of the address. - string postal_code = 6; + // Optional. The postal or ZIP code of the address. + string postal_code = 6 [(google.api.field_behavior) = OPTIONAL]; } // Details about a user's account involved in the transaction. message User { - // Unique account identifier for this user. If using account defender, - // this should match the hashed_account_id field. Otherwise, a unique and - // persistent identifier for this account. - string account_id = 6; + // Optional. Unique account identifier for this user. If using account + // defender, this should match the hashed_account_id field. Otherwise, a + // unique and persistent identifier for this account. + string account_id = 6 [(google.api.field_behavior) = OPTIONAL]; - // The epoch milliseconds of the user's account creation. - int64 creation_ms = 1; + // Optional. The epoch milliseconds of the user's account creation. + int64 creation_ms = 1 [(google.api.field_behavior) = OPTIONAL]; - // The email address of the user. - string email = 2; + // Optional. The email address of the user. + string email = 2 [(google.api.field_behavior) = OPTIONAL]; - // Whether the email has been verified to be accessible by the user (OTP or - // similar). - bool email_verified = 3; + // Optional. Whether the email has been verified to be accessible by the + // user (OTP or similar). + bool email_verified = 3 [(google.api.field_behavior) = OPTIONAL]; - // The phone number of the user, with country code. - string phone_number = 4; + // Optional. The phone number of the user, with country code. + string phone_number = 4 [(google.api.field_behavior) = OPTIONAL]; - // Whether the phone number has been verified to be accessible by the user - // (OTP or similar). - bool phone_verified = 5; + // Optional. Whether the phone number has been verified to be accessible by + // the user (OTP or similar). + bool phone_verified = 5 [(google.api.field_behavior) = OPTIONAL]; } // Line items being purchased in this transaction. message Item { - // The full name of the item. - string name = 1; + // Optional. The full name of the item. + string name = 1 [(google.api.field_behavior) = OPTIONAL]; - // The value per item that the user is paying, in the transaction currency, - // after discounts. - double value = 2; + // Optional. The value per item that the user is paying, in the transaction + // currency, after discounts. + double value = 2 [(google.api.field_behavior) = OPTIONAL]; - // The quantity of this item that is being purchased. - int64 quantity = 3; + // Optional. The quantity of this item that is being purchased. + int64 quantity = 3 [(google.api.field_behavior) = OPTIONAL]; - // When a merchant is specified, its corresponding account_id. Necessary to - // populate marketplace-style transactions. - string merchant_account_id = 4; + // Optional. When a merchant is specified, its corresponding account_id. + // Necessary to populate marketplace-style transactions. + string merchant_account_id = 4 [(google.api.field_behavior) = OPTIONAL]; } // Details about the transaction from the gateway. message GatewayInfo { - // Name of the gateway service (for example, stripe, square, paypal). - string name = 1; + // Optional. Name of the gateway service (for example, stripe, square, + // paypal). + string name = 1 [(google.api.field_behavior) = OPTIONAL]; - // Gateway response code describing the state of the transaction. - string gateway_response_code = 2; + // Optional. Gateway response code describing the state of the transaction. + string gateway_response_code = 2 [(google.api.field_behavior) = OPTIONAL]; - // AVS response code from the gateway + // Optional. AVS response code from the gateway // (available only when reCAPTCHA Enterprise is called after authorization). - string avs_response_code = 3; + string avs_response_code = 3 [(google.api.field_behavior) = OPTIONAL]; - // CVV response code from the gateway + // Optional. CVV response code from the gateway // (available only when reCAPTCHA Enterprise is called after authorization). - string cvv_response_code = 4; + string cvv_response_code = 4 [(google.api.field_behavior) = OPTIONAL]; } // Unique identifier for the transaction. This custom identifier can be used @@ -773,7 +783,7 @@ message TransactionData { // same transaction id. optional string transaction_id = 11; - // The payment method for the transaction. The allowed values are: + // Optional. The payment method for the transaction. The allowed values are: // // * credit-card // * debit-card @@ -782,41 +792,44 @@ message TransactionData { // processor-paypal) // * custom-{name} (If an alternative method is used, for example, // custom-crypto) - string payment_method = 1; + string payment_method = 1 [(google.api.field_behavior) = OPTIONAL]; - // The Bank Identification Number - generally the first 6 or 8 digits of the - // card. - string card_bin = 2; + // Optional. The Bank Identification Number - generally the first 6 or 8 + // digits of the card. + string card_bin = 2 [(google.api.field_behavior) = OPTIONAL]; - // The last four digits of the card. - string card_last_four = 3; + // Optional. The last four digits of the card. + string card_last_four = 3 [(google.api.field_behavior) = OPTIONAL]; - // The currency code in ISO-4217 format. - string currency_code = 4; + // Optional. The currency code in ISO-4217 format. + string currency_code = 4 [(google.api.field_behavior) = OPTIONAL]; - // The decimal value of the transaction in the specified currency. - double value = 5; + // Optional. The decimal value of the transaction in the specified currency. + double value = 5 [(google.api.field_behavior) = OPTIONAL]; - // The value of shipping in the specified currency. 0 for free or no shipping. - double shipping_value = 12; + // Optional. The value of shipping in the specified currency. 0 for free or no + // shipping. + double shipping_value = 12 [(google.api.field_behavior) = OPTIONAL]; - // Destination address if this transaction involves shipping a physical item. - Address shipping_address = 6; + // Optional. Destination address if this transaction involves shipping a + // physical item. + Address shipping_address = 6 [(google.api.field_behavior) = OPTIONAL]; - // Address associated with the payment method when applicable. - Address billing_address = 7; + // Optional. Address associated with the payment method when applicable. + Address billing_address = 7 [(google.api.field_behavior) = OPTIONAL]; - // Information about the user paying/initiating the transaction. - User user = 8; + // Optional. Information about the user paying/initiating the transaction. + User user = 8 [(google.api.field_behavior) = OPTIONAL]; - // Information about the user or users fulfilling the transaction. - repeated User merchants = 13; + // Optional. Information about the user or users fulfilling the transaction. + repeated User merchants = 13 [(google.api.field_behavior) = OPTIONAL]; - // Items purchased in this transaction. - repeated Item items = 14; + // Optional. Items purchased in this transaction. + repeated Item items = 14 [(google.api.field_behavior) = OPTIONAL]; - // Information about the payment gateway's response to the transaction. - GatewayInfo gateway_info = 10; + // Optional. Information about the payment gateway's response to the + // transaction. + GatewayInfo gateway_info = 10 [(google.api.field_behavior) = OPTIONAL]; } // Risk analysis result for an event. @@ -850,17 +863,19 @@ message RiskAnalysis { SUSPECTED_CHARGEBACK = 7; } - // Legitimate event score from 0.0 to 1.0. + // Output only. Legitimate event score from 0.0 to 1.0. // (1.0 means very likely legitimate traffic while 0.0 means very likely // non-legitimate traffic). - float score = 1; + float score = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Reasons contributing to the risk analysis verdict. - repeated ClassificationReason reasons = 2; + // Output only. Reasons contributing to the risk analysis verdict. + repeated ClassificationReason reasons = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; - // Extended verdict reasons to be used for experimentation only. The set of - // possible reasons is subject to change. - repeated string extended_verdict_reasons = 3; + // Output only. Extended verdict reasons to be used for experimentation only. + // The set of possible reasons is subject to change. + repeated string extended_verdict_reasons = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; } // Properties of the provided event token. @@ -890,32 +905,34 @@ message TokenProperties { BROWSER_ERROR = 6; } - // Whether the provided user response token is valid. When valid = false, the - // reason could be specified in invalid_reason or it could also be due to - // a user failing to solve a challenge or a sitekey mismatch (i.e the sitekey - // used to generate the token was different than the one specified in the - // assessment). - bool valid = 1; - - // Reason associated with the response when valid = false. - InvalidReason invalid_reason = 2; + // Output only. Whether the provided user response token is valid. When valid + // = false, the reason could be specified in invalid_reason or it could also + // be due to a user failing to solve a challenge or a sitekey mismatch (i.e + // the sitekey used to generate the token was different than the one specified + // in the assessment). + bool valid = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // The timestamp corresponding to the generation of the token. - google.protobuf.Timestamp create_time = 3; + // Output only. Reason associated with the response when valid = false. + InvalidReason invalid_reason = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; - // The hostname of the page on which the token was generated (Web keys only). - string hostname = 4; + // Output only. The timestamp corresponding to the generation of the token. + google.protobuf.Timestamp create_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; - // The name of the Android package with which the token was generated (Android + // Output only. The hostname of the page on which the token was generated (Web // keys only). - string android_package_name = 8; + string hostname = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - // The ID of the iOS bundle with which the token was generated (iOS keys - // only). - string ios_bundle_id = 9; + // Output only. The name of the Android package with which the token was + // generated (Android keys only). + string android_package_name = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Action name provided at token generation. - string action = 5; + // Output only. The ID of the iOS bundle with which the token was generated + // (iOS keys only). + string ios_bundle_id = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Action name provided at token generation. + string action = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Assessment for Fraud Prevention. @@ -923,42 +940,45 @@ message FraudPreventionAssessment { // Information about stolen instrument fraud, where the user is not the // legitimate owner of the instrument being used for the purchase. message StolenInstrumentVerdict { - // Probability of this transaction being executed with a stolen instrument. - // Values are from 0.0 (lowest) to 1.0 (highest). - float risk = 1; + // Output only. Probability of this transaction being executed with a stolen + // instrument. Values are from 0.0 (lowest) to 1.0 (highest). + float risk = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Information about card testing fraud, where an adversary is testing // fraudulently obtained cards or brute forcing their details. message CardTestingVerdict { - // Probability of this transaction attempt being part of a card testing - // attack. - // Values are from 0.0 (lowest) to 1.0 (highest). - float risk = 1; + // Output only. Probability of this transaction attempt being part of a card + // testing attack. Values are from 0.0 (lowest) to 1.0 (highest). + float risk = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Information about behavioral trust of the transaction. message BehavioralTrustVerdict { - // Probability of this transaction attempt being executed in a behaviorally - // trustworthy way. - // Values are from 0.0 (lowest) to 1.0 (highest). - float trust = 1; + // Output only. Probability of this transaction attempt being executed in a + // behaviorally trustworthy way. Values are from 0.0 (lowest) to 1.0 + // (highest). + float trust = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; } - // Probability of this transaction being fraudulent. Summarizes the combined - // risk of attack vectors below. - // Values are from 0.0 (lowest) to 1.0 (highest). - float transaction_risk = 1; + // Output only. Probability of this transaction being fraudulent. Summarizes + // the combined risk of attack vectors below. Values are from 0.0 (lowest) + // to 1.0 (highest). + float transaction_risk = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Assessment of this transaction for risk of a stolen instrument. - StolenInstrumentVerdict stolen_instrument_verdict = 2; + // Output only. Assessment of this transaction for risk of a stolen + // instrument. + StolenInstrumentVerdict stolen_instrument_verdict = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; - // Assessment of this transaction for risk of being part of a card testing - // attack. - CardTestingVerdict card_testing_verdict = 3; + // Output only. Assessment of this transaction for risk of being part of a + // card testing attack. + CardTestingVerdict card_testing_verdict = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; - // Assessment of this transaction for behavioral trust. - BehavioralTrustVerdict behavioral_trust_verdict = 4; + // Output only. Assessment of this transaction for behavioral trust. + BehavioralTrustVerdict behavioral_trust_verdict = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; } // Fraud signals describing users and cards involved in the transaction. @@ -1033,8 +1053,9 @@ message AccountDefenderAssessment { RELATED_ACCOUNTS_NUMBER_HIGH = 4; } - // Labels for this request. - repeated AccountDefenderLabel labels = 1; + // Output only. Labels for this request. + repeated AccountDefenderLabel labels = 1 + [(google.api.field_behavior) = OUTPUT_ONLY]; } // The create key request message. @@ -1289,8 +1310,8 @@ message Key { // `projects/{project}/keys/{key}`. string name = 1; - // Human-readable display name of this key. Modifiable by user. - string display_name = 2; + // Required. Human-readable display name of this key. Modifiable by user. + string display_name = 2 [(google.api.field_behavior) = REQUIRED]; // Platform-specific settings for this key. The key can only be used on a // platform for which the settings are enabled. @@ -1305,19 +1326,19 @@ message Key { IOSKeySettings ios_settings = 5; } - // See [Creating and managing labels] + // Optional. See [Creating and managing labels] // (https://cloud.google.com/recaptcha-enterprise/docs/labels). - map labels = 6; + map labels = 6 [(google.api.field_behavior) = OPTIONAL]; // Output only. The timestamp corresponding to the creation of this key. google.protobuf.Timestamp create_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Options for user acceptance testing. - TestingOptions testing_options = 9; + // Optional. Options for user acceptance testing. + TestingOptions testing_options = 9 [(google.api.field_behavior) = OPTIONAL]; - // Settings for WAF - WafSettings waf_settings = 10; + // Optional. Settings for WAF + WafSettings waf_settings = 10 [(google.api.field_behavior) = OPTIONAL]; } // Options for user acceptance testing. @@ -1338,14 +1359,15 @@ message TestingOptions { UNSOLVABLE_CHALLENGE = 2; } - // All assessments for this Key will return this score. Must be between 0 - // (likely not legitimate) and 1 (likely legitimate) inclusive. - float testing_score = 1; + // Optional. All assessments for this Key will return this score. Must be + // between 0 (likely not legitimate) and 1 (likely legitimate) inclusive. + float testing_score = 1 [(google.api.field_behavior) = OPTIONAL]; - // For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests - // for this site will return nocaptcha if NOCAPTCHA, or an unsolvable - // challenge if CHALLENGE. - TestingChallenge testing_challenge = 2; + // Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all + // challenge requests for this site will return nocaptcha if NOCAPTCHA, or an + // unsolvable challenge if CHALLENGE. + TestingChallenge testing_challenge = 2 + [(google.api.field_behavior) = OPTIONAL]; } // Settings specific to keys that can be used by websites. @@ -1386,57 +1408,63 @@ message WebKeySettings { SECURITY = 3; } - // If set to true, it means allowed_domains will not be enforced. - bool allow_all_domains = 3; + // Optional. If set to true, it means allowed_domains will not be enforced. + bool allow_all_domains = 3 [(google.api.field_behavior) = OPTIONAL]; - // Domains or subdomains of websites allowed to use the key. All subdomains - // of an allowed domain are automatically allowed. A valid domain requires a - // host and must not include any path, port, query or fragment. + // Optional. Domains or subdomains of websites allowed to use the key. All + // subdomains of an allowed domain are automatically allowed. A valid domain + // requires a host and must not include any path, port, query or fragment. // Examples: 'example.com' or 'subdomain.example.com' - repeated string allowed_domains = 1; + repeated string allowed_domains = 1 [(google.api.field_behavior) = OPTIONAL]; - // If set to true, the key can be used on AMP (Accelerated Mobile Pages) - // websites. This is supported only for the SCORE integration type. - bool allow_amp_traffic = 2; + // Optional. If set to true, the key can be used on AMP (Accelerated Mobile + // Pages) websites. This is supported only for the SCORE integration type. + bool allow_amp_traffic = 2 [(google.api.field_behavior) = OPTIONAL]; // Required. Describes how this key is integrated with the website. IntegrationType integration_type = 4 [(google.api.field_behavior) = REQUIRED]; - // Settings for the frequency and difficulty at which this key triggers - // captcha challenges. This should only be specified for IntegrationTypes - // CHECKBOX and INVISIBLE. - ChallengeSecurityPreference challenge_security_preference = 5; + // Optional. Settings for the frequency and difficulty at which this key + // triggers captcha challenges. This should only be specified for + // IntegrationTypes CHECKBOX and INVISIBLE. + ChallengeSecurityPreference challenge_security_preference = 5 + [(google.api.field_behavior) = OPTIONAL]; } // Settings specific to keys that can be used by Android apps. message AndroidKeySettings { - // If set to true, allowed_package_names are not enforced. - bool allow_all_package_names = 2; + // Optional. If set to true, allowed_package_names are not enforced. + bool allow_all_package_names = 2 [(google.api.field_behavior) = OPTIONAL]; - // Android package names of apps allowed to use the key. + // Optional. Android package names of apps allowed to use the key. // Example: 'com.companyname.appname' - repeated string allowed_package_names = 1; + repeated string allowed_package_names = 1 + [(google.api.field_behavior) = OPTIONAL]; - // Set to true for keys that are used in an Android application that is - // available for download in app stores in addition to the Google Play Store. - bool support_non_google_app_store_distribution = 3; + // Optional. Set to true for keys that are used in an Android application that + // is available for download in app stores in addition to the Google Play + // Store. + bool support_non_google_app_store_distribution = 3 + [(google.api.field_behavior) = OPTIONAL]; } // Settings specific to keys that can be used by iOS apps. message IOSKeySettings { - // If set to true, allowed_bundle_ids are not enforced. - bool allow_all_bundle_ids = 2; + // Optional. If set to true, allowed_bundle_ids are not enforced. + bool allow_all_bundle_ids = 2 [(google.api.field_behavior) = OPTIONAL]; - // iOS bundle ids of apps allowed to use the key. + // Optional. iOS bundle ids of apps allowed to use the key. // Example: 'com.companyname.productname.appname' - repeated string allowed_bundle_ids = 1; + repeated string allowed_bundle_ids = 1 + [(google.api.field_behavior) = OPTIONAL]; - // Apple Developer account details for the app that is protected by the - // reCAPTCHA Key. reCAPTCHA Enterprise leverages platform-specific checks like - // Apple App Attest and Apple DeviceCheck to protect your app from abuse. + // Optional. Apple Developer account details for the app that is protected by + // the reCAPTCHA Key. reCAPTCHA Enterprise leverages platform-specific checks + // like Apple App Attest and Apple DeviceCheck to protect your app from abuse. // Providing these fields allows reCAPTCHA Enterprise to get a better // assessment of the integrity of your app. - AppleDeveloperId apple_developer_id = 3; + AppleDeveloperId apple_developer_id = 3 + [(google.api.field_behavior) = OPTIONAL]; } // Contains fields that are required to perform Apple-specific integrity checks. @@ -1496,9 +1524,9 @@ message ChallengeMetrics { // Policy config assessment. message FirewallPolicyAssessment { - // If the processing of a policy config fails, an error will be populated - // and the firewall_policy will be left empty. - google.rpc.Status error = 5; + // Output only. If the processing of a policy config fails, an error will be + // populated and the firewall_policy will be left empty. + google.rpc.Status error = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The policy that matched the request. If more than one policy // may match, this is the first match. If no policy matches the incoming @@ -1524,20 +1552,20 @@ message FirewallAction { // A substitute action transparently serves a different page than the one // requested. message SubstituteAction { - // The address to redirect to. The target is a relative path in the - // current host. Example: "/blog/404.html". - string path = 1; + // Optional. The address to redirect to. The target is a relative path in + // the current host. Example: "/blog/404.html". + string path = 1 [(google.api.field_behavior) = OPTIONAL]; } // A set header action sets a header and forwards the request to the // backend. This can be used to trigger custom protection implemented on the // backend. message SetHeaderAction { - // The header key to set in the request to the backend server. - string key = 1; + // Optional. The header key to set in the request to the backend server. + string key = 1 [(google.api.field_behavior) = OPTIONAL]; - // The header value to set in the request to the backend server. - string value = 2; + // Optional. The header value to set in the request to the backend server. + string value = 2 [(google.api.field_behavior) = OPTIONAL]; } oneof firewall_action_oneof { @@ -1575,33 +1603,35 @@ message FirewallPolicy { // `projects/{project}/firewallpolicies/{firewallpolicy}`. string name = 1; - // A description of what this policy aims to achieve, for convenience - // purposes. The description can at most include 256 UTF-8 characters. - string description = 2; + // Optional. A description of what this policy aims to achieve, for + // convenience purposes. The description can at most include 256 UTF-8 + // characters. + string description = 2 [(google.api.field_behavior) = OPTIONAL]; - // The path for which this policy applies, specified as a glob pattern. - // For more information on glob, see the [manual + // Optional. The path for which this policy applies, specified as a glob + // pattern. For more information on glob, see the [manual // page](https://man7.org/linux/man-pages/man7/glob.7.html). // A path has a max length of 200 characters. - string path = 4; - - // A CEL (Common Expression Language) conditional expression that specifies if - // this policy applies to an incoming user request. If this condition - // evaluates to true and the requested path matched the path pattern, the - // associated actions should be executed by the caller. The condition string - // is checked for CEL syntax correctness on creation. For more information, - // see the [CEL spec](https://github.com/google/cel-spec) and its [language + string path = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A CEL (Common Expression Language) conditional expression that + // specifies if this policy applies to an incoming user request. If this + // condition evaluates to true and the requested path matched the path + // pattern, the associated actions should be executed by the caller. The + // condition string is checked for CEL syntax correctness on creation. For + // more information, see the [CEL spec](https://github.com/google/cel-spec) + // and its [language // definition](https://github.com/google/cel-spec/blob/master/doc/langdef.md). // A condition has a max length of 500 characters. - string condition = 5; + string condition = 5 [(google.api.field_behavior) = OPTIONAL]; - // The actions that the caller should take regarding user access. + // Optional. The actions that the caller should take regarding user access. // There should be at most one terminal action. A terminal action is any // action that forces a response, such as `AllowAction`, // `BlockAction` or `SubstituteAction`. // Zero or more non-terminal actions such as `SetHeader` might be // specified. A single policy can contain up to 16 actions. - repeated FirewallAction actions = 6; + repeated FirewallAction actions = 6 [(google.api.field_behavior) = OPTIONAL]; } // The request message to list memberships in a related account group. diff --git a/google/cloud/redis/cluster/BUILD.bazel b/google/cloud/redis/cluster/BUILD.bazel new file mode 100644 index 00000000000000..7936e16dd4a5b6 --- /dev/null +++ b/google/cloud/redis/cluster/BUILD.bazel @@ -0,0 +1,37 @@ +# This build file includes a target for the Ruby wrapper library for +# google-cloud-redis-cluster. + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +# Export yaml configs. +exports_files(glob(["*.yaml"])) + +load( + "@com_google_googleapis_imports//:imports.bzl", + "ruby_cloud_gapic_library", + "ruby_gapic_assembly_pkg", +) + +# Generates a Ruby wrapper client for redis-cluster. +# Ruby wrapper clients are versionless, but are generated from source protos +# for a particular service version, v1 in this case. +ruby_cloud_gapic_library( + name = "cluster_ruby_wrapper", + srcs = ["//google/cloud/redis/cluster/v1:cluster_proto_with_info"], + extra_protoc_parameters = [ + "ruby-cloud-gem-name=google-cloud-redis-cluster", + "ruby-cloud-wrapper-of=v1:0.0", + "ruby-cloud-product-url=https://cloud.google.com/memorystore/docs/cluster" + ], + service_yaml = "//google/cloud/redis/cluster/v1:redis_v1.yaml", + transport = "grpc+rest", +) + +# Open Source package. +ruby_gapic_assembly_pkg( + name = "google-cloud-redis-cluster-ruby", + deps = [ + ":cluster_ruby_wrapper", + ], +) \ No newline at end of file diff --git a/google/cloud/redis/cluster/v1/BUILD.bazel b/google/cloud/redis/cluster/v1/BUILD.bazel index 8dbd77296ef738..9234fd5337f238 100644 --- a/google/cloud/redis/cluster/v1/BUILD.bazel +++ b/google/cloud/redis/cluster/v1/BUILD.bazel @@ -297,7 +297,10 @@ ruby_grpc_library( ruby_cloud_gapic_library( name = "cluster_ruby_gapic", srcs = [":cluster_proto_with_info"], - extra_protoc_parameters = ["ruby-cloud-gem-name=google-cloud-redis-cluster-v1"], + extra_protoc_parameters = [ + "ruby-cloud-gem-name=google-cloud-redis-cluster-v1", + "ruby-cloud-product-url=https://cloud.google.com/memorystore/docs/cluster" + ], grpc_service_config = "redis_cluster_v1_grpc_service_config.json", rest_numeric_enums = True, service_yaml = "redis_v1.yaml", diff --git a/google/cloud/redis/cluster/v1/cloud_redis_cluster.proto b/google/cloud/redis/cluster/v1/cloud_redis_cluster.proto index 1c37082cf8072e..483cb21923042b 100644 --- a/google/cloud/redis/cluster/v1/cloud_redis_cluster.proto +++ b/google/cloud/redis/cluster/v1/cloud_redis_cluster.proto @@ -30,6 +30,7 @@ option go_package = "cloud.google.com/go/redis/cluster/apiv1/clusterpb;clusterpb option java_multiple_files = true; option java_outer_classname = "CloudRedisClusterProto"; option java_package = "com.google.cloud.redis.cluster.v1"; +option ruby_package = "Google::Cloud::Redis::Cluster::V1"; // Configures and manages Cloud Memorystore for Redis clusters // diff --git a/google/cloud/scheduler/v1/target.proto b/google/cloud/scheduler/v1/target.proto index 12a797b06bc585..3565dbea7bec7f 100644 --- a/google/cloud/scheduler/v1/target.proto +++ b/google/cloud/scheduler/v1/target.proto @@ -62,8 +62,8 @@ message HttpTarget { // * `X-CloudScheduler`: This header will be set to true. // * `X-CloudScheduler-JobName`: This header will contain the job name. // * `X-CloudScheduler-ScheduleTime`: For Cloud Scheduler jobs specified in - // the unix-cron format, this header will contain the job schedule time in - // RFC3339 UTC "Zulu" format. + // the unix-cron format, this header will contain the job schedule as an + // offset of UTC parsed according to RFC3339. // // The total size of headers must be less than 80KB. map headers = 3; @@ -141,8 +141,8 @@ message AppEngineHttpTarget { // * `X-CloudScheduler`: This header will be set to true. // * `X-CloudScheduler-JobName`: This header will contain the job name. // * `X-CloudScheduler-ScheduleTime`: For Cloud Scheduler jobs specified in - // the unix-cron format, this header will contain the job schedule time in - // RFC3339 UTC "Zulu" format. + // the unix-cron format, this header will contain the job schedule as an + // offset of UTC parsed according to RFC3339. // // If the job has an // [body][google.cloud.scheduler.v1.AppEngineHttpTarget.body], Cloud Scheduler diff --git a/google/cloud/scheduler/v1beta1/target.proto b/google/cloud/scheduler/v1beta1/target.proto index af1c3484e50ca3..3f2ad51f203e00 100644 --- a/google/cloud/scheduler/v1beta1/target.proto +++ b/google/cloud/scheduler/v1beta1/target.proto @@ -62,8 +62,8 @@ message HttpTarget { // * `X-CloudScheduler`: This header will be set to true. // * `X-CloudScheduler-JobName`: This header will contain the job name. // * `X-CloudScheduler-ScheduleTime`: For Cloud Scheduler jobs specified in - // the unix-cron format, this header will contain the job schedule time in - // RFC3339 UTC "Zulu" format. + // the unix-cron format, this header will contain the job schedule as an + // offset of UTC parsed according to RFC3339. // // The total size of headers must be less than 80KB. map headers = 3; @@ -140,8 +140,8 @@ message AppEngineHttpTarget { // * `X-CloudScheduler`: This header will be set to true. // * `X-CloudScheduler-JobName`: This header will contain the job name. // * `X-CloudScheduler-ScheduleTime`: For Cloud Scheduler jobs specified in - // the unix-cron format, this header will contain the job schedule time in - // RFC3339 UTC "Zulu" format. + // the unix-cron format, this header will contain the job schedule as an + // offset of UTC parsed according to RFC3339. // // If the job has an // [body][google.cloud.scheduler.v1beta1.AppEngineHttpTarget.body], Cloud diff --git a/google/cloud/telcoautomation/v1/BUILD.bazel b/google/cloud/telcoautomation/v1/BUILD.bazel new file mode 100644 index 00000000000000..6d216a22ff9e2e --- /dev/null +++ b/google/cloud/telcoautomation/v1/BUILD.bazel @@ -0,0 +1,383 @@ +# This file was automatically generated by BuildFileGenerator +# https://github.com/googleapis/rules_gapic/tree/master/bazel + +# Most of the manual changes to this file will be overwritten. +# It's **only** allowed to change the following rule attribute values: +# - names of *_gapic_assembly_* rules +# - certain parameters of *_gapic_library rules, including but not limited to: +# * extra_protoc_parameters +# * extra_protoc_file_parameters +# The complete list of preserved parameters can be found in the source code. + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( + name = "telcoautomation_proto", + srcs = [ + "telcoautomation.proto", + ], + deps = [ + "//google/api:annotations_proto", + "//google/api:client_proto", + "//google/api:field_behavior_proto", + "//google/api:resource_proto", + "//google/longrunning:operations_proto", + "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:field_mask_proto", + "@com_google_protobuf//:timestamp_proto", + ], +) + +proto_library_with_info( + name = "telcoautomation_proto_with_info", + deps = [ + ":telcoautomation_proto", + "//google/cloud/location:location_proto", + "//google/cloud:common_resources_proto", + ], +) + +############################################################################## +# Java +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "java_gapic_assembly_gradle_pkg", + "java_gapic_library", + "java_gapic_test", + "java_grpc_library", + "java_proto_library", +) + +java_proto_library( + name = "telcoautomation_java_proto", + deps = [":telcoautomation_proto"], +) + +java_grpc_library( + name = "telcoautomation_java_grpc", + srcs = [":telcoautomation_proto"], + deps = [":telcoautomation_java_proto"], +) + +java_gapic_library( + name = "telcoautomation_java_gapic", + srcs = [":telcoautomation_proto_with_info"], + gapic_yaml = None, + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "telcoautomation_v1.yaml", + test_deps = [ + "//google/cloud/location:location_java_grpc", + ":telcoautomation_java_grpc", + ], + transport = "grpc+rest", + deps = [ + ":telcoautomation_java_proto", + "//google/api:api_java_proto", + "//google/cloud/location:location_java_proto", + ], +) + +java_gapic_test( + name = "telcoautomation_java_gapic_test_suite", + test_classes = [ + "com.google.cloud.telcoautomation.v1.TelcoAutomationClientHttpJsonTest", + "com.google.cloud.telcoautomation.v1.TelcoAutomationClientTest", + ], + runtime_deps = [":telcoautomation_java_gapic_test"], +) + +# Open Source Packages +java_gapic_assembly_gradle_pkg( + name = "google-cloud-telcoautomation-v1-java", + transport = "grpc+rest", + deps = [ + ":telcoautomation_java_gapic", + ":telcoautomation_java_grpc", + ":telcoautomation_java_proto", + ":telcoautomation_proto", + ], + include_samples = True, +) + +############################################################################## +# Go +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "go_gapic_assembly_pkg", + "go_gapic_library", + "go_proto_library", +) + +go_proto_library( + name = "telcoautomation_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "cloud.google.com/go/telcoautomation/apiv1/telcoautomationpb", + protos = [":telcoautomation_proto"], + deps = [ + "//google/api:annotations_go_proto", + "//google/longrunning:longrunning_go_proto", + ], +) + +go_gapic_library( + name = "telcoautomation_go_gapic", + srcs = [":telcoautomation_proto_with_info"], + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + importpath = "cloud.google.com/go/telcoautomation/apiv1;telcoautomation", + metadata = True, + release_level = "beta", + rest_numeric_enums = True, + service_yaml = "telcoautomation_v1.yaml", + transport = "grpc+rest", + deps = [ + ":telcoautomation_go_proto", + "//google/cloud/location:location_go_proto", + "//google/longrunning:longrunning_go_proto", + "@com_google_cloud_go_longrunning//:go_default_library", + "@com_google_cloud_go_longrunning//autogen:go_default_library", + ], +) + +# Open Source Packages +go_gapic_assembly_pkg( + name = "gapi-cloud-telcoautomation-v1-go", + deps = [ + ":telcoautomation_go_gapic", + ":telcoautomation_go_gapic_srcjar-test.srcjar", + ":telcoautomation_go_gapic_srcjar-metadata.srcjar", + ":telcoautomation_go_gapic_srcjar-snippets.srcjar", + ":telcoautomation_go_proto", + ], +) + +############################################################################## +# Python +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "py_gapic_assembly_pkg", + "py_gapic_library", + "py_test", +) + +py_gapic_library( + name = "telcoautomation_py_gapic", + srcs = [":telcoautomation_proto"], + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "telcoautomation_v1.yaml", + transport = "grpc+rest", + deps = [ + + ], +) + +py_test( + name = "telcoautomation_py_gapic_test", + srcs = [ + "telcoautomation_py_gapic_pytest.py", + "telcoautomation_py_gapic_test.py", + ], + legacy_create_init = False, + deps = [":telcoautomation_py_gapic"], +) + +# Open Source Packages +py_gapic_assembly_pkg( + name = "telcoautomation-v1-py", + deps = [ + ":telcoautomation_py_gapic", + ], +) + +############################################################################## +# PHP +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "php_gapic_assembly_pkg", + "php_gapic_library", + "php_proto_library", +) + +php_proto_library( + name = "telcoautomation_php_proto", + deps = [":telcoautomation_proto"], +) + +php_gapic_library( + name = "telcoautomation_php_gapic", + srcs = [":telcoautomation_proto_with_info"], + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + rest_numeric_enums = True, + migration_mode = "NEW_SURFACE_ONLY", + service_yaml = "telcoautomation_v1.yaml", + transport = "grpc+rest", + deps = [ + ":telcoautomation_php_proto", + ], +) + +# Open Source Packages +php_gapic_assembly_pkg( + name = "google-cloud-telcoautomation-v1-php", + deps = [ + ":telcoautomation_php_gapic", + ":telcoautomation_php_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) + +nodejs_gapic_library( + name = "telcoautomation_nodejs_gapic", + package_name = "@google-cloud/telcoautomation", + src = ":telcoautomation_proto_with_info", + extra_protoc_parameters = ["metadata"], + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + package = "google.cloud.telcoautomation.v1", + rest_numeric_enums = True, + service_yaml = "telcoautomation_v1.yaml", + transport = "grpc+rest", + deps = [], +) + +nodejs_gapic_assembly_pkg( + name = "telcoautomation-v1-nodejs", + deps = [ + ":telcoautomation_nodejs_gapic", + ":telcoautomation_proto", + ], +) + +############################################################################## +# Ruby +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "ruby_gapic_assembly_pkg", + "ruby_cloud_gapic_library", + "ruby_grpc_library", + "ruby_proto_library", +) + +ruby_proto_library( + name = "telcoautomation_ruby_proto", + deps = [":telcoautomation_proto"], +) + +ruby_grpc_library( + name = "telcoautomation_ruby_grpc", + srcs = [":telcoautomation_proto"], + deps = [":telcoautomation_ruby_proto"], +) + +ruby_cloud_gapic_library( + name = "telcoautomation_ruby_gapic", + srcs = [":telcoautomation_proto_with_info"], + extra_protoc_parameters = [ + "ruby-cloud-gem-name=google-cloud-telcoautomation-v1", + ], + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "telcoautomation_v1.yaml", + transport = "grpc+rest", + deps = [ + ":telcoautomation_ruby_grpc", + ":telcoautomation_ruby_proto", + ], +) + +# Open Source Packages +ruby_gapic_assembly_pkg( + name = "google-cloud-telcoautomation-v1-ruby", + deps = [ + ":telcoautomation_ruby_gapic", + ":telcoautomation_ruby_grpc", + ":telcoautomation_ruby_proto", + ], +) + +############################################################################## +# C# +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "csharp_gapic_assembly_pkg", + "csharp_gapic_library", + "csharp_grpc_library", + "csharp_proto_library", +) + +csharp_proto_library( + name = "telcoautomation_csharp_proto", + extra_opts = [], + deps = [":telcoautomation_proto"], +) + +csharp_grpc_library( + name = "telcoautomation_csharp_grpc", + srcs = [":telcoautomation_proto"], + deps = [":telcoautomation_csharp_proto"], +) + +csharp_gapic_library( + name = "telcoautomation_csharp_gapic", + srcs = [":telcoautomation_proto_with_info"], + common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json", + grpc_service_config = "telcoautomation_v1_grpc_service_config.json", + rest_numeric_enums = True, + service_yaml = "telcoautomation_v1.yaml", + deps = [ + ":telcoautomation_csharp_grpc", + ":telcoautomation_csharp_proto", + ], +) + +# Open Source Packages +csharp_gapic_assembly_pkg( + name = "google-cloud-telcoautomation-v1-csharp", + deps = [ + ":telcoautomation_csharp_gapic", + ":telcoautomation_csharp_grpc", + ":telcoautomation_csharp_proto", + ], +) + +############################################################################## +# C++ +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "cc_grpc_library", + "cc_proto_library", +) + +cc_proto_library( + name = "telcoautomation_cc_proto", + deps = [":telcoautomation_proto"], +) + +cc_grpc_library( + name = "telcoautomation_cc_grpc", + srcs = [":telcoautomation_proto"], + grpc_only = True, + deps = [":telcoautomation_cc_proto"], +) diff --git a/google/cloud/telcoautomation/v1/telcoautomation.proto b/google/cloud/telcoautomation/v1/telcoautomation.proto new file mode 100644 index 00000000000000..e0f2f7b60fdbd3 --- /dev/null +++ b/google/cloud/telcoautomation/v1/telcoautomation.proto @@ -0,0 +1,1912 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.cloud.telcoautomation.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/longrunning/operations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "cloud.google.com/go/telcoautomation/apiv1/telcoautomationpb;telcoautomationpb"; +option java_multiple_files = true; +option java_outer_classname = "TelcoautomationProto"; +option java_package = "com.google.cloud.telcoautomation.v1"; +option php_namespace = "Google\\Cloud\\TelcoAutomation\\V1"; +option ruby_package = "Google::Cloud::TelcoAutomation::V1"; +option csharp_namespace = "Google.Cloud.TelcoAutomation.V1"; + +// TelcoAutomation Service manages the control plane cluster a.k.a. +// Orchestration Cluster (GKE cluster with config controller) of TNA. It also +// exposes blueprint APIs which manages the lifecycle of blueprints that control +// the infrastructure setup (e.g GDCE clusters) and deployment of network +// functions. +service TelcoAutomation { + option (google.api.default_host) = "telcoautomation.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + + // Lists OrchestrationClusters in a given project and location. + rpc ListOrchestrationClusters(ListOrchestrationClustersRequest) + returns (ListOrchestrationClustersResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/orchestrationClusters" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single OrchestrationCluster. + rpc GetOrchestrationCluster(GetOrchestrationClusterRequest) + returns (OrchestrationCluster) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new OrchestrationCluster in a given project and location. + rpc CreateOrchestrationCluster(CreateOrchestrationClusterRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*}/orchestrationClusters" + body: "orchestration_cluster" + }; + option (google.api.method_signature) = + "parent,orchestration_cluster,orchestration_cluster_id"; + option (google.longrunning.operation_info) = { + response_type: "OrchestrationCluster" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a single OrchestrationCluster. + rpc DeleteOrchestrationCluster(DeleteOrchestrationClusterRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/orchestrationClusters/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } + + // Lists EdgeSlms in a given project and location. + rpc ListEdgeSlms(ListEdgeSlmsRequest) returns (ListEdgeSlmsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/edgeSlms" + }; + option (google.api.method_signature) = "parent"; + } + + // Gets details of a single EdgeSlm. + rpc GetEdgeSlm(GetEdgeSlmRequest) returns (EdgeSlm) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/edgeSlms/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a new EdgeSlm in a given project and location. + rpc CreateEdgeSlm(CreateEdgeSlmRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*}/edgeSlms" + body: "edge_slm" + }; + option (google.api.method_signature) = "parent,edge_slm,edge_slm_id"; + option (google.longrunning.operation_info) = { + response_type: "EdgeSlm" + metadata_type: "OperationMetadata" + }; + } + + // Deletes a single EdgeSlm. + rpc DeleteEdgeSlm(DeleteEdgeSlmRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/edgeSlms/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "OperationMetadata" + }; + } + + // Creates a blueprint. + rpc CreateBlueprint(CreateBlueprintRequest) returns (Blueprint) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/blueprints" + body: "blueprint" + }; + option (google.api.method_signature) = "parent,blueprint,blueprint_id"; + } + + // Updates a blueprint. + rpc UpdateBlueprint(UpdateBlueprintRequest) returns (Blueprint) { + option (google.api.http) = { + patch: "/v1/{blueprint.name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}" + body: "blueprint" + }; + option (google.api.method_signature) = "blueprint,update_mask"; + } + + // Returns the requested blueprint. + rpc GetBlueprint(GetBlueprintRequest) returns (Blueprint) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Deletes a blueprint and all its revisions. + rpc DeleteBlueprint(DeleteBlueprintRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}" + }; + option (google.api.method_signature) = "name"; + } + + // List all blueprints. + rpc ListBlueprints(ListBlueprintsRequest) returns (ListBlueprintsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/blueprints" + }; + option (google.api.method_signature) = "parent"; + } + + // Approves a blueprint and commits a new revision. + rpc ApproveBlueprint(ApproveBlueprintRequest) returns (Blueprint) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:approve" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Proposes a blueprint for approval of changes. + rpc ProposeBlueprint(ProposeBlueprintRequest) returns (Blueprint) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:propose" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Rejects a blueprint revision proposal and flips it back to Draft state. + rpc RejectBlueprint(RejectBlueprintRequest) returns (Blueprint) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:reject" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // List blueprint revisions of a given blueprint. + rpc ListBlueprintRevisions(ListBlueprintRevisionsRequest) + returns (ListBlueprintRevisionsResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:listRevisions" + }; + option (google.api.method_signature) = "name"; + } + + // Searches across blueprint revisions. + rpc SearchBlueprintRevisions(SearchBlueprintRevisionsRequest) + returns (SearchBlueprintRevisionsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/blueprints:searchRevisions" + }; + option (google.api.method_signature) = "parent,query"; + } + + // Searches across deployment revisions. + rpc SearchDeploymentRevisions(SearchDeploymentRevisionsRequest) + returns (SearchDeploymentRevisionsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/deployments:searchRevisions" + }; + option (google.api.method_signature) = "parent,query"; + } + + // Discards the changes in a blueprint and reverts the blueprint to the last + // approved blueprint revision. No changes take place if a blueprint does not + // have revisions. + rpc DiscardBlueprintChanges(DiscardBlueprintChangesRequest) + returns (DiscardBlueprintChangesResponse) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/blueprints/*}:discard" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Lists the blueprints in TNA's public catalog. Default page size = 20, + // Max Page Size = 100. + rpc ListPublicBlueprints(ListPublicBlueprintsRequest) + returns (ListPublicBlueprintsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/publicBlueprints" + }; + option (google.api.method_signature) = "parent"; + } + + // Returns the requested public blueprint. + rpc GetPublicBlueprint(GetPublicBlueprintRequest) returns (PublicBlueprint) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/publicBlueprints/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Creates a deployment. + rpc CreateDeployment(CreateDeploymentRequest) returns (Deployment) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/deployments" + body: "deployment" + }; + option (google.api.method_signature) = "parent,deployment,deployment_id"; + } + + // Updates a deployment. + rpc UpdateDeployment(UpdateDeploymentRequest) returns (Deployment) { + option (google.api.http) = { + patch: "/v1/{deployment.name=projects/*/locations/*/orchestrationClusters/*/deployments/*}" + body: "deployment" + }; + option (google.api.method_signature) = "deployment,update_mask"; + } + + // Returns the requested deployment. + rpc GetDeployment(GetDeploymentRequest) returns (Deployment) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Removes the deployment by marking it as DELETING. Post which deployment and + // it's revisions gets deleted. + rpc RemoveDeployment(RemoveDeploymentRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:remove" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // List all deployments. + rpc ListDeployments(ListDeploymentsRequest) + returns (ListDeploymentsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*}/deployments" + }; + option (google.api.method_signature) = "parent"; + } + + // List deployment revisions of a given deployment. + rpc ListDeploymentRevisions(ListDeploymentRevisionsRequest) + returns (ListDeploymentRevisionsResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:listRevisions" + }; + option (google.api.method_signature) = "name"; + } + + // Discards the changes in a deployment and reverts the deployment to the last + // approved deployment revision. No changes take place if a deployment does + // not have revisions. + rpc DiscardDeploymentChanges(DiscardDeploymentChangesRequest) + returns (DiscardDeploymentChangesResponse) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:discard" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Applies the deployment's YAML files to the parent orchestration cluster. + rpc ApplyDeployment(ApplyDeploymentRequest) returns (Deployment) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:apply" + body: "*" + }; + option (google.api.method_signature) = "name"; + } + + // Returns the requested deployment status. + rpc ComputeDeploymentStatus(ComputeDeploymentStatusRequest) + returns (ComputeDeploymentStatusResponse) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:computeDeploymentStatus" + }; + option (google.api.method_signature) = "name"; + } + + // Rollback the active deployment to the given past approved deployment + // revision. + rpc RollbackDeployment(RollbackDeploymentRequest) returns (Deployment) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*}:rollback" + body: "*" + }; + option (google.api.method_signature) = "name,revision_id"; + } + + // Returns the requested hydrated deployment. + rpc GetHydratedDeployment(GetHydratedDeploymentRequest) + returns (HydratedDeployment) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*/hydratedDeployments/*}" + }; + option (google.api.method_signature) = "name"; + } + + // List all hydrated deployments present under a deployment. + rpc ListHydratedDeployments(ListHydratedDeploymentsRequest) + returns (ListHydratedDeploymentsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/orchestrationClusters/*/deployments/*}/hydratedDeployments" + }; + option (google.api.method_signature) = "parent"; + } + + // Updates a hydrated deployment. + rpc UpdateHydratedDeployment(UpdateHydratedDeploymentRequest) + returns (HydratedDeployment) { + option (google.api.http) = { + patch: "/v1/{hydrated_deployment.name=projects/*/locations/*/orchestrationClusters/*/deployments/*/hydratedDeployments/*}" + body: "hydrated_deployment" + }; + option (google.api.method_signature) = "hydrated_deployment,update_mask"; + } + + // Applies a hydrated deployment to a workload cluster. + rpc ApplyHydratedDeployment(ApplyHydratedDeploymentRequest) + returns (HydratedDeployment) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/orchestrationClusters/*/deployments/*/hydratedDeployments/*}:apply" + body: "*" + }; + option (google.api.method_signature) = "name"; + } +} + +// BlueprintView defines the type of view of the blueprint. +enum BlueprintView { + // Unspecified enum value. + BLUEPRINT_VIEW_UNSPECIFIED = 0; + + // View which only contains metadata. + BLUEPRINT_VIEW_BASIC = 1; + + // View which contains metadata and files it encapsulates. + BLUEPRINT_VIEW_FULL = 2; +} + +// DeploymentView defines the type of view of the deployment. +enum DeploymentView { + // Unspecified enum value. + DEPLOYMENT_VIEW_UNSPECIFIED = 0; + + // View which only contains metadata. + DEPLOYMENT_VIEW_BASIC = 1; + + // View which contains metadata and files it encapsulates. + DEPLOYMENT_VIEW_FULL = 2; +} + +// Represent type of CR. +enum ResourceType { + // Unspecified resource type. + RESOURCE_TYPE_UNSPECIFIED = 0; + + // User specified NF Deploy CR. + NF_DEPLOY_RESOURCE = 1; + + // CRs that are part of a blueprint. + DEPLOYMENT_RESOURCE = 2; +} + +// Status of an entity (resource, deployment). +enum Status { + // Unknown state. + STATUS_UNSPECIFIED = 0; + + // Under progress. + STATUS_IN_PROGRESS = 1; + + // Running and ready to serve traffic. + STATUS_ACTIVE = 2; + + // Failed or stalled. + STATUS_FAILED = 3; + + // Delete in progress. + STATUS_DELETING = 4; + + // Deleted deployment. + STATUS_DELETED = 5; + + // NFDeploy specific status. Peering in progress. + STATUS_PEERING = 10; +} + +// DeploymentLevel of a blueprint signifies where the blueprint will be +// applied. +enum DeploymentLevel { + // Default unspecified deployment level. + DEPLOYMENT_LEVEL_UNSPECIFIED = 0; + + // Blueprints at HYDRATION level cannot be used to create a Deployment + // (A user cannot manually initate deployment of these blueprints on + // orchestration or workload cluster). + // These blueprints stay in a user's private catalog and are configured and + // deployed by TNA automation. + HYDRATION = 1; + + // Blueprints at SINGLE_DEPLOYMENT level can be + // a) Modified in private catalog. + // b) Used to create a deployment on orchestration cluster by the user, once + // approved. + SINGLE_DEPLOYMENT = 2; + + // Blueprints at MULTI_DEPLOYMENT level can be + // a) Modified in private catalog. + // b) Used to create a deployment on orchestration cluster which will create + // further hydrated deployments. + MULTI_DEPLOYMENT = 3; +} + +// Orchestration cluster represents a GKE cluster with config controller and +// TNA specific components installed on it. +message OrchestrationCluster { + option (google.api.resource) = { + type: "telcoautomation.googleapis.com/OrchestrationCluster" + pattern: "projects/{project}/locations/{location}/orchestrationClusters/{orchestration_cluster}" + }; + + // Possible states that the Orchestration Cluster can be in. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // OrchestrationCluster is being created. + CREATING = 1; + + // OrchestrationCluster has been created and is ready for use. + ACTIVE = 2; + + // OrchestrationCluster is being deleted. + DELETING = 3; + + // OrchestrationCluster encountered an error and is in an indeterministic + // state. User can still initiate a delete operation on this state. + FAILED = 4; + } + + // Name of the orchestration cluster. The name of orchestration cluster cannot + // be more than 24 characters. + string name = 1; + + // Management configuration of the underlying GKE cluster. + ManagementConfig management_config = 5; + + // Output only. [Output only] Create time stamp. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. [Output only] Update time stamp. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Labels as key value pairs. + map labels = 4; + + // Output only. Provides the TNA version installed on the cluster. + string tna_version = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. State of the Orchestration Cluster. + State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// EdgeSlm represents an SLM instance which manages the lifecycle of edge +// components installed on Workload clusters managed by an Orchestration +// Cluster. +message EdgeSlm { + option (google.api.resource) = { + type: "telcoautomation.googleapis.com/EdgeSlm" + pattern: "projects/{project}/locations/{location}/edgeSlms/{edge_slm}" + plural: "edgeSlms" + singular: "edgeSlm" + }; + + // Possible states of the resource. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // EdgeSlm is being created. + CREATING = 1; + + // EdgeSlm has been created and is ready for use. + ACTIVE = 2; + + // EdgeSlm is being deleted. + DELETING = 3; + + // EdgeSlm encountered an error and is in an indeterministic + // state. User can still initiate a delete operation on this state. + FAILED = 4; + } + + // Workload clusters supported by TNA. New values will be added to the enum + // list as TNA adds supports for new workload clusters in future. + enum WorkloadClusterType { + // Unspecified workload cluster. + WORKLOAD_CLUSTER_TYPE_UNSPECIFIED = 0; + + // Workload cluster is a GDCE cluster. + GDCE = 1; + + // Workload cluster is a GKE cluster. + GKE = 2; + } + + // Name of the EdgeSlm resource. + string name = 1; + + // Immutable. Reference to the orchestration cluster on which templates for + // this resources will be applied. This should be of format + // projects/{project}/locations/{location}/orchestrationClusters/{orchestration_cluster}. + string orchestration_cluster = 5 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/OrchestrationCluster" + } + ]; + + // Output only. [Output only] Create time stamp. + google.protobuf.Timestamp create_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. [Output only] Update time stamp. + google.protobuf.Timestamp update_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Labels as key value pairs. The key and value should contain + // characters which are UTF-8 compliant and less than 50 characters. + map labels = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Provides the active TNA version for this resource. + string tna_version = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. State of the EdgeSlm resource. + State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Type of workload cluster for which an EdgeSLM resource is + // created. + WorkloadClusterType workload_cluster_type = 8 + [(google.api.field_behavior) = OPTIONAL]; +} + +// A Blueprint contains a collection of kubernetes resources in the form of +// YAML files. The file contents of a blueprint are collectively known as +// package. A blueprint can be +// a) imported from TNA's public catalog +// b) modified as per a user's need +// c) proposed and approved. +// On approval, a revision of blueprint is created which can be used to +// create a deployment on Orchestration or Workload Cluster. +message Blueprint { + option (google.api.resource) = { + type: "telcoautomation.googleapis.com/Blueprint" + pattern: "projects/{project}/locations/{location}/orchestrationClusters/{orchestration_cluster}/blueprints/{blueprint}" + plural: "blueprints" + singular: "blueprint" + }; + + // Approval state indicates the state of a Blueprint in its approval + // lifecycle. + enum ApprovalState { + // Unspecified state. + APPROVAL_STATE_UNSPECIFIED = 0; + + // A blueprint starts in DRAFT state once it is created. All edits are made + // to the blueprint in DRAFT state. + DRAFT = 1; + + // When the edits are ready for review, blueprint can be proposed and moves + // to PROPOSED state. Edits cannot be made to a blueprint in PROPOSED state. + PROPOSED = 2; + + // When a proposed blueprint is approved, it moves to APPROVED state. A new + // revision is committed. The latest committed revision can be used to + // create a deployment on Orchestration or Workload Cluster. Edits to an + // APPROVED blueprint changes its state back to DRAFT. The last committed + // revision of a blueprint represents its latest APPROVED state. + APPROVED = 3; + } + + // The name of the blueprint. If unspecified, the name will be autogenerated + // from server side. Name of the blueprint must not contain `@` character. + string name = 1; + + // Output only. Immutable. The revision ID of the blueprint. + // A new revision is committed whenever a blueprint is approved. + string revision_id = 2 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OUTPUT_ONLY + ]; + + // Required. Immutable. The public blueprint ID from which this blueprint was + // created. + string source_blueprint = 3 [ + (google.api.field_behavior) = REQUIRED, + (google.api.field_behavior) = IMMUTABLE + ]; + + // Output only. The timestamp that the revision was created. + google.protobuf.Timestamp revision_create_time = 5 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Approval state of the blueprint (DRAFT, PROPOSED, APPROVED) + ApprovalState approval_state = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Human readable name of a Blueprint. + string display_name = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Name of the repository where the blueprint files are stored. + string repository = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Files present in a blueprint. + // When invoking UpdateBlueprint API, only the modified files should be + // included in this. Files that are not included in the update of a blueprint + // will not be changed. + repeated File files = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Labels are key-value attributes that can be set on a blueprint + // resource by the user. + map labels = 10 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Blueprint creation time. + google.protobuf.Timestamp create_time = 11 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp when the blueprint was updated. + google.protobuf.Timestamp update_time = 12 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Source provider is the author of a public blueprint, from + // which this blueprint is created. + string source_provider = 13 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. DeploymentLevel of a blueprint signifies where the blueprint + // will be applied. e.g. [HYDRATION, SINGLE_DEPLOYMENT, MULTI_DEPLOYMENT] + DeploymentLevel deployment_level = 14 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Indicates if the deployment created from this blueprint can be + // rolled back. + bool rollback_support = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// A Blueprint contains a collection of kubernetes resources in the form of +// YAML files. The file contents of a blueprint are collectively known as +// package. +// Public blueprint is a TNA provided blueprint that in present in TNA's public +// catalog. A user can copy the public blueprint to their private catalog for +// further modifications. +message PublicBlueprint { + option (google.api.resource) = { + type: "telcoautomation.googleapis.com/PublicBlueprint" + pattern: "projects/{project}/locations/{location}/publicBlueprints/{public_lueprint}" + plural: "publicBlueprints" + singular: "publicBlueprint" + }; + + // Name of the public blueprint. + string name = 1; + + // The display name of the public blueprint. + string display_name = 2; + + // The description of the public blueprint. + string description = 3; + + // DeploymentLevel of a blueprint signifies where the blueprint will be + // applied. e.g. [HYDRATION, SINGLE_DEPLOYMENT, MULTI_DEPLOYMENT] + DeploymentLevel deployment_level = 4; + + // Source provider is the author of a public blueprint. e.g. Google, vendors + string source_provider = 5; + + // Output only. Indicates if the deployment created from this blueprint can be + // rolled back. + bool rollback_support = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Deployment contains a collection of YAML files (This collection is also known +// as package) that can to applied on an orchestration cluster (GKE cluster with +// TNA addons) or a workload cluster. +message Deployment { + option (google.api.resource) = { + type: "telcoautomation.googleapis.com/Deployment" + pattern: "projects/{project}/locations/{location}/orchestrationClusters/{orchestration_cluster}/deployments/{deployment}" + plural: "deployments" + singular: "deployment" + }; + + // State defines which state the current deployment is in. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // A deployment starts in DRAFT state. All edits are made in DRAFT state. A + // deployment opened for editing after applying will be in draft state, + // while its prevision revision will be its current applied version. + DRAFT = 1; + + // This state means that the contents (YAML files containing kubernetes + // resources) of the deployment have been applied to an Orchestration or + // Workload Cluster. A revision is created when a deployment is applied. + // This revision will represent the latest view of what is applied on the + // cluster until the deployment is modified and applied again, which will + // create a new revision. + APPLIED = 2; + + // A deployment in DELETING state has been marked for deletion. Its + // deletion status can be queried using `ComputeDeploymentStatus` API. No + // updates are allowed to a deployment in DELETING state. + DELETING = 3; + } + + // The name of the deployment. + string name = 1; + + // Output only. Immutable. The revision ID of the deployment. + // A new revision is committed whenever a change in deployment is applied. + string revision_id = 2 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OUTPUT_ONLY + ]; + + // Required. The blueprint revision from which this deployment was created. + string source_blueprint_revision = 3 [(google.api.field_behavior) = REQUIRED]; + + // Output only. The timestamp that the revision was created. + google.protobuf.Timestamp revision_create_time = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. State of the deployment (DRAFT, APPLIED, DELETING). + State state = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Human readable name of a Deployment. + string display_name = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Name of the repository where the deployment package files are + // stored. + string repository = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Files present in a deployment. + // When invoking UpdateDeployment API, only the modified files should be + // included in this. Files that are not included in the update of a deployment + // will not be changed. + repeated File files = 8 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Labels are key-value attributes that can be set on a deployment + // resource by the user. + map labels = 9 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Deployment creation time. + google.protobuf.Timestamp create_time = 10 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The timestamp when the deployment was updated. + google.protobuf.Timestamp update_time = 11 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Source provider is the author of a public blueprint, from + // which this deployment is created. + string source_provider = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Immutable. The WorkloadCluster on which to create the Deployment. + string workload_cluster = 13 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.field_behavior) = OPTIONAL + ]; + + // Output only. Attributes to where the deployment can inflict changes. The + // value can only be [SINGLE_DEPLOYMENT, MULTI_DEPLOYMENT]. + DeploymentLevel deployment_level = 14 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Indicates if the deployment can be rolled back, exported from + // public blueprint. + bool rollback_support = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// A collection of kubernetes yaml files which are deployed on a Workload +// Cluster. Hydrated Deployments are created by TNA intent based automation. +message HydratedDeployment { + option (google.api.resource) = { + type: "telcoautomation.googleapis.com/HydratedDeployment" + pattern: "projects/{project}/locations/{location}/orchestrationClusters/{orchestration_cluster}/deployments/{deployment}/hydratedDeployments/{hydrated_deployment}" + plural: "hydratedDeployments" + singular: "hydratedDeployment" + }; + + // State defines which state the current hydrated deployment is in. + enum State { + // Unspecified state. + STATE_UNSPECIFIED = 0; + + // A hydrated deployment starts in DRAFT state. All edits are made in DRAFT + // state. + DRAFT = 1; + + // When the edit is applied, the hydrated deployment moves to APPLIED + // state. No changes can be made once a hydrated deployment is applied. + APPLIED = 2; + } + + // Output only. The name of the hydrated deployment. + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. State of the hydrated deployment (DRAFT, APPLIED). + State state = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. File contents of a hydrated deployment. + // When invoking UpdateHydratedBlueprint API, only the modified files should + // be included in this. Files that are not included in the update of a + // hydrated deployment will not be changed. + repeated File files = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. WorkloadCluster identifies which workload cluster will the + // hydrated deployment will be deployed on. + string workload_cluster = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Message for requesting list of OrchestrationClusters. +message ListOrchestrationClustersRequest { + // Required. Parent value for ListOrchestrationClustersRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/OrchestrationCluster" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results. + string filter = 4; + + // Hint for how to order the results. + string order_by = 5; +} + +// Message for response to listing OrchestrationClusters. +message ListOrchestrationClustersResponse { + // The list of OrchestrationCluster + repeated OrchestrationCluster orchestration_clusters = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a OrchestrationCluster. +message GetOrchestrationClusterRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/OrchestrationCluster" + } + ]; +} + +// Message for creating a OrchestrationCluster. +message CreateOrchestrationClusterRequest { + // Required. Value for parent. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/OrchestrationCluster" + } + ]; + + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // orchestration_cluster_id from the method_signature of Create RPC + string orchestration_cluster_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being created + OrchestrationCluster orchestration_cluster = 3 + [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for deleting a OrchestrationCluster. +message DeleteOrchestrationClusterRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/OrchestrationCluster" + } + ]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes after the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for requesting list of EdgeSlms +message ListEdgeSlmsRequest { + // Required. Parent value for ListEdgeSlmsRequest + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/EdgeSlm" + } + ]; + + // Requested page size. Server may return fewer items than requested. + // If unspecified, server will pick an appropriate default. + int32 page_size = 2; + + // A token identifying a page of results the server should return. + string page_token = 3; + + // Filtering results + string filter = 4; + + // Hint for how to order the results + string order_by = 5; +} + +// Message for response to listing EdgeSlms. +message ListEdgeSlmsResponse { + // The list of EdgeSlm + repeated EdgeSlm edge_slms = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; + + // Locations that could not be reached. + repeated string unreachable = 3; +} + +// Message for getting a EdgeSlm. +message GetEdgeSlmRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/EdgeSlm" + } + ]; +} + +// Message for creating a EdgeSlm. +message CreateEdgeSlmRequest { + // Required. Value for parent. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/EdgeSlm" + } + ]; + + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // edge_slm_id from the method_signature of Create RPC + string edge_slm_id = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The resource being created + EdgeSlm edge_slm = 3 [(google.api.field_behavior) = REQUIRED]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes since the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message for deleting a EdgeSlm. +message DeleteEdgeSlmRequest { + // Required. Name of the resource + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/EdgeSlm" + } + ]; + + // Optional. An optional request ID to identify requests. Specify a unique + // request ID so that if you must retry your request, the server will know to + // ignore the request if it has already been completed. The server will + // guarantee that for at least 60 minutes after the first request. + // + // For example, consider a situation where you make an initial request and + // the request times out. If you make the request again with the same request + // ID, the server can check if original operation with the same request ID + // was received, and if so, will ignore the second request. This prevents + // clients from accidentally creating duplicate commitments. + // + // The request ID must be a valid UUID with the exception that zero UUID is + // not supported (00000000-0000-0000-0000-000000000000). + string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request object for `CreateBlueprint`. +message CreateBlueprintRequest { + // Required. The name of parent resource. + // Format should be - + // "projects/{project_id}/locations/{location_name}/orchestrationClusters/{orchestration_cluster}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/Blueprint" + } + ]; + + // Optional. The name of the blueprint. + string blueprint_id = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The `Blueprint` to create. + Blueprint blueprint = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request object for `UpdateBlueprint`. +message UpdateBlueprintRequest { + // Required. The `blueprint` to update. + Blueprint blueprint = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Update mask is used to specify the fields to be overwritten in + // the `blueprint` resource by the update. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request object for `GetBlueprint`. +message GetBlueprintRequest { + // Required. The name of the blueprint. + // Case 1: If the name provided in the request is + // {blueprint_id}@{revision_id}, then the revision with revision_id will be + // returned. Case 2: If the name provided in the request is {blueprint}, then + // the current state of the blueprint is returned. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; + + // Optional. Defines the type of view of the blueprint. + // When field is not present BLUEPRINT_VIEW_BASIC is considered as default. + BlueprintView view = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request object for `DeleteBlueprint`. +message DeleteBlueprintRequest { + // Required. The name of blueprint to delete. + // Blueprint name should be in the format {blueprint_id}, if + // {blueprint_id}@{revision_id} is passed then the API throws invalid + // argument. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; +} + +// Request object for `ListBlueprints`. +message ListBlueprintsRequest { + // Required. The name of parent orchestration cluster resource. + // Format should be - + // "projects/{project_id}/locations/{location_name}/orchestrationClusters/{orchestration_cluster}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/Blueprint" + } + ]; + + // Optional. Filtering only supports equality on blueprint state. + // It should be in the form: "state = DRAFT". `OR` operator can be used to + // get response for multiple states. e.g. "state = DRAFT OR state = PROPOSED". + string filter = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The maximum number of blueprints to return per page. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The page token, received from a previous ListBlueprints call. + // It can be provided to retrieve the subsequent page. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response object for `ListBlueprints`. +message ListBlueprintsResponse { + // The list of requested blueprints. + repeated Blueprint blueprints = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request object for `ApproveBlueprint`. +message ApproveBlueprintRequest { + // Required. The name of the blueprint to approve. The blueprint must be in + // Proposed state. A new revision is committed on approval. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; +} + +// Request object for `ProposeBlueprint`. +message ProposeBlueprintRequest { + // Required. The name of the blueprint being proposed. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; +} + +// Request object for `RejectBlueprint`. +message RejectBlueprintRequest { + // Required. The name of the blueprint being rejected. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; +} + +// Request object for `ListBlueprintRevisions`. +message ListBlueprintRevisionsRequest { + // Required. The name of the blueprint to list revisions for. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; + + // The maximum number of revisions to return per page. + int32 page_size = 2; + + // The page token, received from a previous ListBlueprintRevisions call + // It can be provided to retrieve the subsequent page. + string page_token = 3; +} + +// Response object for `ListBlueprintRevisions`. +message ListBlueprintRevisionsResponse { + // The revisions of the blueprint. + repeated Blueprint blueprints = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request object for `SearchBlueprintRevisions`. +message SearchBlueprintRevisionsRequest { + // Required. The name of parent orchestration cluster resource. + // Format should be - + // "projects/{project_id}/locations/{location_name}/orchestrationClusters/{orchestration_cluster}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/Blueprint" + } + ]; + + // Required. Supported queries: + // 1. "" : Lists all revisions across all blueprints. + // 2. "latest=true" : Lists latest revisions across all blueprints. + // 3. "name=" : Lists all revisions of blueprint with name + // . + // 4. "name= latest=true": Lists latest revision of blueprint with name + // + string query = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The maximum number of blueprints revisions to return per page. + // max page size = 100, default page size = 20. + int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The page token, received from a previous search call. + // It can be provided to retrieve the subsequent page. + string page_token = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response object for `SearchBlueprintRevisions`. +message SearchBlueprintRevisionsResponse { + // The list of requested blueprint revisions. + repeated Blueprint blueprints = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request object for `DiscardBlueprintChanges`. +message DiscardBlueprintChangesRequest { + // Required. The name of the blueprint of which changes are being discarded. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Blueprint" + } + ]; +} + +// Response object for `DiscardBlueprintChanges`. +message DiscardBlueprintChangesResponse {} + +// Request object for `ListPublicBlueprints`. +message ListPublicBlueprintsRequest { + // Required. Parent value of public blueprint. + // Format should be - + // "projects/{project_id}/locations/{location_name}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/PublicBlueprint" + } + ]; + + // Optional. Requested page size. Server may return fewer items than + // requested. If unspecified, server will pick an appropriate default. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A token identifying a page of results the server should return. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response object for `ListPublicBlueprints`. +message ListPublicBlueprintsResponse { + // The list of public blueprints to return. + repeated PublicBlueprint public_blueprints = 1; + + // Output only. A token identifying a page of results the server should + // return. + string next_page_token = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Request object for `GetPublicBlueprint`. +message GetPublicBlueprintRequest { + // Required. The name of the public blueprint. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/PublicBlueprint" + } + ]; +} + +// Request object for `CreateDeployment`. +message CreateDeploymentRequest { + // Required. The name of parent resource. + // Format should be - + // "projects/{project_id}/locations/{location_name}/orchestrationClusters/{orchestration_cluster}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/Deployment" + } + ]; + + // Optional. The name of the deployment. + string deployment_id = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The `Deployment` to create. + Deployment deployment = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Request object for `UpdateDeployment`. +message UpdateDeploymentRequest { + // Required. The `deployment` to update. + Deployment deployment = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Update mask is used to specify the fields to be overwritten in + // the `deployment` resource by the update. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request object for `GetDeployment`. +message GetDeploymentRequest { + // Required. The name of the deployment. + // Case 1: If the name provided in the request is + // {deployment_id}@{revision_id}, then the revision with revision_id will be + // returned. + // Case 2: If the name provided in the request is {deployment}, then + // the current state of the deployment is returned. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; + + // Optional. Defines the type of view of the deployment. + // When field is not present VIEW_BASIC is considered as default. + DeploymentView view = 2 [(google.api.field_behavior) = OPTIONAL]; +} + +// Request object for `RemoveDeployment`. +message RemoveDeploymentRequest { + // Required. The name of deployment to initiate delete. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; +} + +// Request object for `ListDeployments`. +message ListDeploymentsRequest { + // Required. The name of parent orchestration cluster resource. + // Format should be - + // "projects/{project_id}/locations/{location_name}/orchestrationClusters/{orchestration_cluster}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/Deployment" + } + ]; + + // Optional. Filtering only supports equality on deployment state. + // It should be in the form: "state = DRAFT". `OR` operator can be used to + // get response for multiple states. e.g. "state = DRAFT OR state = APPLIED". + string filter = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The maximum number of deployments to return per page. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The page token, received from a previous ListDeployments call. + // It can be provided to retrieve the subsequent page. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response object for `ListDeployments`. +message ListDeploymentsResponse { + // The list of requested deployments. + repeated Deployment deployments = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request for listing all revisions of a deployment. +message ListDeploymentRevisionsRequest { + // Required. The name of the deployment to list revisions for. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; + + // Optional. The maximum number of revisions to return per page. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The page token, received from a previous ListDeploymentRevisions + // call Provide this to retrieve the subsequent page. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// List of deployment revisions for a given deployment. +message ListDeploymentRevisionsResponse { + // The revisions of the deployment. + repeated Deployment deployments = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request object for `SearchDeploymentRevisions`. +message SearchDeploymentRevisionsRequest { + // Required. The name of parent orchestration cluster resource. + // Format should be - + // "projects/{project_id}/locations/{location_name}/orchestrationClusters/{orchestration_cluster}". + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/Blueprint" + } + ]; + + // Required. Supported queries: + // 1. "" : Lists all revisions across all deployments. + // 2. "latest=true" : Lists latest revisions across all + // deployments. + // 3. "name=" : Lists all revisions of deployment with name + // . + // 4. "name= latest=true": Lists latest revision of deployment with name + // + string query = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The maximum number of deployment revisions to return per page. + // max page size = 100, default page size = 20. + int32 page_size = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The page token, received from a previous search call. + // It can be provided to retrieve the subsequent page. + string page_token = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response object for `SearchDeploymentRevisions`. +message SearchDeploymentRevisionsResponse { + // The list of requested deployment revisions. + repeated Deployment deployments = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request object for `DiscardDeploymentChanges`. +message DiscardDeploymentChangesRequest { + // Required. The name of the deployment of which changes are being discarded. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; +} + +// Response object for `DiscardDeploymentChanges`. +message DiscardDeploymentChangesResponse {} + +// Request object for `ApplyDeployment`. The resources in given deployment +// gets applied to Orchestration Cluster. A new revision is created when a +// deployment is applied. +message ApplyDeploymentRequest { + // Required. The name of the deployment to apply to orchestration cluster. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; +} + +// Request object for `ComputeDeploymentStatus`. +message ComputeDeploymentStatusRequest { + // Required. The name of the deployment without revisionID. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; +} + +// Response object for `ComputeDeploymentStatus`. +message ComputeDeploymentStatusResponse { + // The name of the deployment. + string name = 1; + + // Output only. Aggregated status of a deployment. + Status aggregated_status = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Resource level status details in deployments. + repeated ResourceStatus resource_statuses = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Request object for `RollbackDeployment`. +message RollbackDeploymentRequest { + // Required. Name of the deployment. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/Deployment" + } + ]; + + // Required. The revision id of deployment to roll back to. + string revision_id = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Represents the metadata of the long-running operation. +message OperationMetadata { + // Output only. The time the operation was created. + google.protobuf.Timestamp create_time = 1 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The time the operation finished running. + google.protobuf.Timestamp end_time = 2 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Server-defined resource path for the target of the operation. + string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Name of the verb executed by the operation. + string verb = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Human-readable status of the operation, if any. + string status_message = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Identifies whether the user has requested cancellation + // of the operation. Operations that have been cancelled successfully + // have [Operation.error][] value with a + // [google.rpc.Status.code][google.rpc.Status.code] of 1, corresponding to + // `Code.CANCELLED`. + bool requested_cancellation = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. API version used to start the operation. + string api_version = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Request object for `GetHydratedDeployment`. +message GetHydratedDeploymentRequest { + // Required. Name of the hydrated deployment. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/HydratedDeployment" + } + ]; +} + +// Request object for `ListHydratedDeployments`. +message ListHydratedDeploymentsRequest { + // Required. The deployment managing the hydrated deployments. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "telcoautomation.googleapis.com/HydratedDeployment" + } + ]; + + // Optional. The maximum number of hydrated deployments to return. The service + // may return fewer than this value. If unspecified, at most 50 hydrated + // deployments will be returned. The maximum value is 1000. Values above 1000 + // will be set to 1000. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The page token, received from a previous ListHydratedDeployments + // call. Provide this to retrieve the subsequent page. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response object for `ListHydratedDeployments`. +message ListHydratedDeploymentsResponse { + // The list of hydrated deployments. + repeated HydratedDeployment hydrated_deployments = 1; + + // A token that can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request object for `UpdateHydratedDeployment`. +message UpdateHydratedDeploymentRequest { + // Required. The hydrated deployment to update. + HydratedDeployment hydrated_deployment = 1 + [(google.api.field_behavior) = REQUIRED]; + + // Required. The list of fields to update. Update mask supports a special + // value `*` which fully replaces (equivalent to PUT) the resource provided. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Request for applying a hydrated deployment. +message ApplyHydratedDeploymentRequest { + // Required. The name of the hydrated deployment to apply. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "telcoautomation.googleapis.com/HydratedDeployment" + } + ]; +} + +// Configuration of the cluster management +message ManagementConfig { + // The configuration can be one of StandardManagementConfig + // and FullManagementConfig + oneof oneof_config { + // Configuration of the standard (GKE) cluster management + StandardManagementConfig standard_management_config = 1; + + // Configuration of the full (Autopilot) cluster management. Full cluster + // management is a preview feature. + FullManagementConfig full_management_config = 2; + } +} + +// Configuration of the standard (GKE) cluster management. +message StandardManagementConfig { + // Optional. Name of the VPC Network to put the GKE cluster and nodes in. The + // VPC will be created if it doesn't exist. + string network = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Specifies the subnet that the interface will be part of. Network + // key must be specified and the subnet must be a subnetwork of the specified + // network. + string subnet = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The /28 network that the masters will use. It should be free + // within the network. + string master_ipv4_cidr_block = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The IP address range for the cluster pod IPs. Set to blank to + // have a range chosen with the default size. Set to /netmask (e.g. /14) to + // have a range chosen with a specific netmask. Set to a CIDR notation + // (e.g. 10.96.0.0/14) from the RFC-1918 private networks (e.g. 10.0.0.0/8, + // 172.16.0.0/12, 192.168.0.0/16) to pick a specific range to use. + string cluster_cidr_block = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The IP address range for the cluster service IPs. Set to blank to + // have a range chosen with the default size. Set to /netmask (e.g. /14) to + // have a range chosen with a specific netmask. Set to a CIDR notation (e.g. + // 10.96.0.0/14) from the RFC-1918 private networks (e.g. 10.0.0.0/8, + // 172.16.0.0/12, 192.168.0.0/16) to pick a specific range to use. + string services_cidr_block = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the existing secondary range in the cluster's + // subnetwork to use for pod IP addresses. Alternatively, cluster_cidr_block + // can be used to automatically create a GKE-managed one. + string cluster_named_range = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the existing secondary range in the cluster's + // subnetwork to use for service ClusterIPs. Alternatively, + // services_cidr_block can be used to automatically create a GKE-managed one. + string services_named_range = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Master Authorized Network that supports multiple CIDR blocks. + // Allows access to the k8s master from multiple blocks. It cannot be set at + // the same time with the field man_block. + MasterAuthorizedNetworksConfig master_authorized_networks_config = 8 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Configuration of the full (Autopilot) cluster management +message FullManagementConfig { + // Optional. Name of the VPC Network to put the GKE cluster and nodes in. The + // VPC will be created if it doesn't exist. + string network = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Specifies the subnet that the interface will be part of. Network + // key must be specified and the subnet must be a subnetwork of the specified + // network. + string subnet = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The /28 network that the masters will use. + string master_ipv4_cidr_block = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The IP address range for the cluster pod IPs. Set to blank to + // have a range chosen with the default size. Set to /netmask (e.g. /14) to + // have a range chosen with a specific netmask. Set to a CIDR notation + // (e.g. 10.96.0.0/14) from the RFC-1918 private networks (e.g. 10.0.0.0/8, + // 172.16.0.0/12, 192.168.0.0/16) to pick a specific range to use. + string cluster_cidr_block = 4 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The IP address range for the cluster service IPs. Set to blank to + // have a range chosen with the default size. Set to /netmask (e.g. /14) to + // have a range chosen with a specific netmask. Set to a CIDR notation (e.g. + // 10.96.0.0/14) from the RFC-1918 private networks (e.g. 10.0.0.0/8, + // 172.16.0.0/12, 192.168.0.0/16) to pick a specific range to use. + string services_cidr_block = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the existing secondary range in the cluster's + // subnetwork to use for pod IP addresses. Alternatively, cluster_cidr_block + // can be used to automatically create a GKE-managed one. + string cluster_named_range = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The name of the existing secondary range in the cluster's + // subnetwork to use for service ClusterIPs. Alternatively, + // services_cidr_block can be used to automatically create a GKE-managed one. + string services_named_range = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Master Authorized Network that supports multiple CIDR blocks. + // Allows access to the k8s master from multiple blocks. It cannot be set at + // the same time with the field man_block. + MasterAuthorizedNetworksConfig master_authorized_networks_config = 8 + [(google.api.field_behavior) = OPTIONAL]; +} + +// Configuration of the Master Authorized Network that support multiple CIDRs +message MasterAuthorizedNetworksConfig { + // CidrBlock contains an optional name and one CIDR block. + message CidrBlock { + // Optional. display_name is an optional field for users to identify CIDR + // blocks. + string display_name = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. cidr_block must be specified in CIDR notation when using + // master_authorized_networks_config. Currently, the user could still use + // the deprecated man_block field, so this field is currently optional, but + // will be required in the future. + string cidr_block = 2 [(google.api.field_behavior) = OPTIONAL]; + } + + // Optional. cidr_blocks define up to 50 external networks that could access + // Kubernetes master through HTTPS. + repeated CidrBlock cidr_blocks = 1 [(google.api.field_behavior) = OPTIONAL]; +} + +// File represents a yaml file present in a blueprint's package. +message File { + // Required. Path of the file in package. + // e.g. `gdce/v1/cluster.yaml` + string path = 1 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The contents of a file in string format. + string content = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Signifies whether a file is marked for deletion. + bool deleted = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Indicates whether changes are allowed to a file. If the field is + // not set, the file cannot be edited. + bool editable = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Status of a deployment resource. +message ResourceStatus { + // Name of the resource. + string name = 1; + + // Namespace of the resource. + string resource_namespace = 2; + + // Group to which the resource belongs to. + string group = 3; + + // Version of the resource. + string version = 4; + + // Kind of the resource. + string kind = 5; + + // Output only. Resource type. + ResourceType resource_type = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Status of the resource. + Status status = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Detailed status of NFDeploy. + NFDeployStatus nf_deploy_status = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Deployment status of NFDeploy. +message NFDeployStatus { + // Output only. Total number of NFs targeted by this deployment + int32 targeted_nfs = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Total number of NFs targeted by this deployment with a Ready + // Condition set. + int32 ready_nfs = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Per-Site Status. + repeated NFDeploySiteStatus sites = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Per-Site Status. +message NFDeploySiteStatus { + // Output only. Site id. + string site = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. If true, the Site Deletion is in progress. + bool pending_deletion = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Hydration status. + HydrationStatus hydration = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Workload status. + WorkloadStatus workload = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Hydration status. +message HydrationStatus { + // Output only. SiteVersion Hydration is targeting. + SiteVersion site_version = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Status. + string status = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// SiteVersion Hydration is targeting. +message SiteVersion { + // Output only. NF vendor. + string nf_vendor = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. NF vendor type. + string nf_type = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. NF version. + string nf_version = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Workload status. +message WorkloadStatus { + // Output only. SiteVersion running in the workload cluster. + SiteVersion site_version = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Status. + string status = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; +} diff --git a/google/cloud/telcoautomation/v1/telcoautomation_v1.yaml b/google/cloud/telcoautomation/v1/telcoautomation_v1.yaml new file mode 100644 index 00000000000000..c85a768f691604 --- /dev/null +++ b/google/cloud/telcoautomation/v1/telcoautomation_v1.yaml @@ -0,0 +1,99 @@ +type: google.api.Service +config_version: 3 +name: telcoautomation.googleapis.com +title: Telco Automation API + +apis: +- name: google.cloud.location.Locations +- name: google.cloud.telcoautomation.v1.TelcoAutomation +- name: google.longrunning.Operations + +types: +- name: google.cloud.telcoautomation.v1.OperationMetadata + +documentation: + summary: APIs to automate 5G deployment and management of cloud infrastructure and network functions. + rules: + - selector: google.cloud.location.Locations.GetLocation + description: Gets information about a location. + + - selector: google.cloud.location.Locations.ListLocations + description: Lists information about the supported locations for this service. + +http: + rules: + - selector: google.cloud.location.Locations.GetLocation + get: '/v1/{name=projects/*/locations/*}' + - selector: google.cloud.location.Locations.ListLocations + get: '/v1/{name=projects/*/locations}' + - selector: google.longrunning.Operations.CancelOperation + post: '/v1/{name=projects/*/locations/*/operations/*}:cancel' + body: '*' + - selector: google.longrunning.Operations.DeleteOperation + delete: '/v1/{name=projects/*/locations/*/operations/*}' + - selector: google.longrunning.Operations.GetOperation + get: '/v1/{name=projects/*/locations/*/operations/*}' + - selector: google.longrunning.Operations.ListOperations + get: '/v1/{name=projects/*/locations/*/operations}' + +authentication: + rules: + - selector: google.cloud.location.Locations.GetLocation + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: google.cloud.location.Locations.ListLocations + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.cloud.telcoautomation.v1.TelcoAutomation.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.longrunning.Operations.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + +publishing: + new_issue_uri: https://issuetracker.google.com/issues/new?component=190865&template=1161103 + documentation_uri: https://cloud.google.com/telecom-network-automation + api_short_name: telcoautomation + github_label: 'api: telcoautomation' + doc_tag_prefix: telcoautomation + organization: CLOUD + library_settings: + - version: google.cloud.telcoautomation.v1 + launch_stage: GA + java_settings: + common: + destinations: + - PACKAGE_MANAGER + cpp_settings: + common: + destinations: + - PACKAGE_MANAGER + php_settings: + common: + destinations: + - PACKAGE_MANAGER + python_settings: + common: + destinations: + - PACKAGE_MANAGER + node_settings: + common: + destinations: + - PACKAGE_MANAGER + dotnet_settings: + common: + destinations: + - PACKAGE_MANAGER + ruby_settings: + common: + destinations: + - PACKAGE_MANAGER + go_settings: + common: + destinations: + - PACKAGE_MANAGER diff --git a/google/cloud/telcoautomation/v1/telcoautomation_v1_grpc_service_config.json b/google/cloud/telcoautomation/v1/telcoautomation_v1_grpc_service_config.json new file mode 100644 index 00000000000000..8b668f1ac31daf --- /dev/null +++ b/google/cloud/telcoautomation/v1/telcoautomation_v1_grpc_service_config.json @@ -0,0 +1,50 @@ +{ + "methodConfig": [{ + "name": [ + { "service": "google.cloud.library.v1.LibraryService", "method": "ListOrchestrationClusters" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "GetOrchestrationCluster" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "GetBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ListBlueprints" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ListBlueprintRevisions" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ListDeploymentRevisions" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "SearchBlueprintRevisions" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "SearchDeploymentRevisions" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ListPublicBlueprints" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "GetPublicBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "GetDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ListDeployments" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ComputeDeploymentStatus" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "GetHydratedDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ListHydratedDeployments" } + ], + "timeout": "60s", + "retryPolicy": { + "maxAttempts": 5, + "initialBackoff": "1s", + "maxBackoff": "10s", + "backoffMultiplier": 1.3, + "retryableStatusCodes": ["UNAVAILABLE"] + } + }, + { + "name": [ + { "service": "google.cloud.library.v1.LibraryService", "method": "CreateOrchestrationCluster" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "DeleteOrchestrationCluster" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "CreateBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "UpdateBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "DeleteBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ApproveBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ProposeBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "RejectBlueprint" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "DiscardBlueprintChanges" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "CreateDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "UpdateDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "RemoveDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ApplyDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "RollbackDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "UpdateHydratedDeployment" }, + { "service": "google.cloud.library.v1.LibraryService", "method": "ApplyHydratedDeployment" } + ], + "timeout": "60s" + }] +} \ No newline at end of file diff --git a/google/cloud/visionai/v1/visionai_grpc_service_config.json b/google/cloud/visionai/v1/visionai_grpc_service_config.json index 44251adca0f9d4..a12a1fd018df4c 100644 --- a/google/cloud/visionai/v1/visionai_grpc_service_config.json +++ b/google/cloud/visionai/v1/visionai_grpc_service_config.json @@ -8,6 +8,9 @@ }, { "service": "google.cloud.visionai.v1.EventWatcher" + }, + { + "service": "google.cloud.visionai.v1.Warehouse" } ], "timeout": "60s", @@ -197,8 +200,7 @@ "maxBackoff": "120s", "backoffMultiplier": 2.5, "retryableStatusCodes": [ - "UNAVAILABLE", - "DEADLINE_EXCEEDED" + "UNAVAILABLE" ] } }, @@ -215,8 +217,7 @@ "maxBackoff": "120s", "backoffMultiplier": 2.5, "retryableStatusCodes": [ - "UNAVAILABLE", - "DEADLINE_EXCEEDED" + "UNAVAILABLE" ] } } diff --git a/google/cloud/visionai/v1/visionai_v1.yaml b/google/cloud/visionai/v1/visionai_v1.yaml index 53831c53dede27..d7210ce24419f6 100644 --- a/google/cloud/visionai/v1/visionai_v1.yaml +++ b/google/cloud/visionai/v1/visionai_v1.yaml @@ -16,28 +16,52 @@ apis: types: - name: google.cloud.visionai.v1.AddApplicationStreamInputResponse +- name: google.cloud.visionai.v1.AnalyzeAssetMetadata +- name: google.cloud.visionai.v1.AnalyzeAssetResponse +- name: google.cloud.visionai.v1.AnalyzeCorpusMetadata +- name: google.cloud.visionai.v1.AnalyzeCorpusResponse - name: google.cloud.visionai.v1.AppPlatformCloudFunctionRequest - name: google.cloud.visionai.v1.AppPlatformCloudFunctionResponse - name: google.cloud.visionai.v1.AppPlatformMetadata - name: google.cloud.visionai.v1.BatchRunProcessResponse - name: google.cloud.visionai.v1.ClassificationPredictionResult - name: google.cloud.visionai.v1.CreateApplicationInstancesResponse +- name: google.cloud.visionai.v1.CreateCollectionMetadata - name: google.cloud.visionai.v1.CreateCorpusMetadata +- name: google.cloud.visionai.v1.CreateIndexEndpointMetadata +- name: google.cloud.visionai.v1.CreateIndexMetadata - name: google.cloud.visionai.v1.DeleteApplicationInstancesResponse - name: google.cloud.visionai.v1.DeleteAssetMetadata +- name: google.cloud.visionai.v1.DeleteCollectionMetadata +- name: google.cloud.visionai.v1.DeleteIndexEndpointMetadata +- name: google.cloud.visionai.v1.DeleteIndexMetadata - name: google.cloud.visionai.v1.DeployApplicationResponse +- name: google.cloud.visionai.v1.DeployIndexMetadata +- name: google.cloud.visionai.v1.DeployIndexResponse - name: google.cloud.visionai.v1.GetStreamThumbnailResponse - name: google.cloud.visionai.v1.ImageObjectDetectionPredictionResult - name: google.cloud.visionai.v1.ImageSegmentationPredictionResult +- name: google.cloud.visionai.v1.ImportAssetsMetadata +- name: google.cloud.visionai.v1.ImportAssetsResponse +- name: google.cloud.visionai.v1.IndexAssetMetadata +- name: google.cloud.visionai.v1.IndexAssetResponse - name: google.cloud.visionai.v1.ObjectDetectionPredictionResult - name: google.cloud.visionai.v1.OccupancyCountingPredictionResult - name: google.cloud.visionai.v1.OperationMetadata - name: google.cloud.visionai.v1.PersonalProtectiveEquipmentDetectionOutput - name: google.cloud.visionai.v1.RemoveApplicationStreamInputResponse +- name: google.cloud.visionai.v1.RemoveIndexAssetMetadata +- name: google.cloud.visionai.v1.RemoveIndexAssetResponse - name: google.cloud.visionai.v1.StreamAnnotations - name: google.cloud.visionai.v1.UndeployApplicationResponse +- name: google.cloud.visionai.v1.UndeployIndexMetadata +- name: google.cloud.visionai.v1.UndeployIndexResponse - name: google.cloud.visionai.v1.UpdateApplicationInstancesResponse - name: google.cloud.visionai.v1.UpdateApplicationStreamInputResponse +- name: google.cloud.visionai.v1.UpdateIndexEndpointMetadata +- name: google.cloud.visionai.v1.UpdateIndexMetadata +- name: google.cloud.visionai.v1.UploadAssetMetadata +- name: google.cloud.visionai.v1.UploadAssetResponse - name: google.cloud.visionai.v1.VideoActionRecognitionPredictionResult - name: google.cloud.visionai.v1.VideoClassificationPredictionResult - name: google.cloud.visionai.v1.VideoObjectTrackingPredictionResult @@ -104,6 +128,7 @@ http: additional_bindings: - get: '/v1/{name=projects/*/locations/*/warehouseOperations/*}' - get: '/v1/{name=projects/*/locations/*/corpora/*/assets/*/operations/*}' + - get: '/v1/{name=projects/*/locations/*/corpora/*/collections/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/corpora/*/imageIndexes/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/corpora/*/indexes/*/operations/*}' - get: '/v1/{name=projects/*/locations/*/corpora/*/operations/*}' diff --git a/google/cloud/visionai/v1/warehouse.proto b/google/cloud/visionai/v1/warehouse.proto index ac0751f92a493a..f6e87a353ffb0d 100644 --- a/google/cloud/visionai/v1/warehouse.proto +++ b/google/cloud/visionai/v1/warehouse.proto @@ -20,6 +20,7 @@ import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; +import "google/cloud/visionai/v1/common.proto"; import "google/longrunning/operations.proto"; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; @@ -90,6 +91,143 @@ service Warehouse { }; } + // Upload asset by specifing the asset Cloud Storage uri. + // For video warehouse, it requires users who call this API have read access + // to the cloud storage file. Once it is uploaded, it can be retrieved by + // GenerateRetrievalUrl API which by default, only can retrieve cloud storage + // files from the same project of the warehouse. To allow retrieval cloud + // storage files that are in a separate project, it requires to find the + // vision ai service account (Go to IAM, check checkbox to show "Include + // Google-provided role grants", search for "Cloud Vision AI Service Agent") + // and grant the read access of the cloud storage files to that service + // account. + rpc UploadAsset(UploadAssetRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:upload" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "UploadAssetResponse" + metadata_type: "UploadAssetMetadata" + }; + } + + // Generates a signed url for downloading the asset. + // For video warehouse, please see comment of UploadAsset about how to allow + // retrieval of cloud storage files in a different project. + rpc GenerateRetrievalUrl(GenerateRetrievalUrlRequest) + returns (GenerateRetrievalUrlResponse) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:generateRetrievalUrl" + body: "*" + }; + } + + // Analyze asset to power search capability. + rpc AnalyzeAsset(AnalyzeAssetRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:analyze" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "AnalyzeAssetResponse" + metadata_type: "AnalyzeAssetMetadata" + }; + } + + // Index one asset for search. + // Supported corpus type: Corpus.Type.VIDEO_ON_DEMAND + rpc IndexAsset(IndexAssetRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:index" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "IndexAssetResponse" + metadata_type: "IndexAssetMetadata" + }; + } + + // Remove one asset's index data for search. + // Supported corpus type: Corpus.Type.VIDEO_ON_DEMAND + rpc RemoveIndexAsset(RemoveIndexAssetRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:removeIndex" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "RemoveIndexAssetResponse" + metadata_type: "RemoveIndexAssetMetadata" + }; + } + + // Lists assets inside an index. + rpc ViewIndexedAssets(ViewIndexedAssetsRequest) + returns (ViewIndexedAssetsResponse) { + option (google.api.http) = { + get: "/v1/{index=projects/*/locations/*/corpora/*/indexes/*}:viewAssets" + }; + option (google.api.method_signature) = "index"; + } + + // Creates an Index under the corpus. + rpc CreateIndex(CreateIndexRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/corpora/*}/indexes" + body: "index" + }; + option (google.api.method_signature) = "parent,index,index_id"; + option (google.longrunning.operation_info) = { + response_type: "Index" + metadata_type: "CreateIndexMetadata" + }; + } + + // Updates an Index under the corpus. + // Users can perform a metadata-only update or trigger a full index rebuild + // with different update_mask values. + rpc UpdateIndex(UpdateIndexRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{index.name=projects/*/locations/*/corpora/*/indexes/*}" + body: "index" + }; + option (google.api.method_signature) = "index,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "Index" + metadata_type: "UpdateIndexMetadata" + }; + } + + // Gets the details of a single Index under a Corpus. + rpc GetIndex(GetIndexRequest) returns (Index) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/corpora/*/indexes/*}" + }; + option (google.api.method_signature) = "name"; + } + + // List all Indexes in a given Corpus. + rpc ListIndexes(ListIndexesRequest) returns (ListIndexesResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/corpora/*}/indexes" + }; + option (google.api.method_signature) = "parent"; + } + + // Delete a single Index. In order to delete an index, the caller must + // make sure that it is not deployed to any index endpoint. + rpc DeleteIndex(DeleteIndexRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/corpora/*/indexes/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteIndexMetadata" + }; + } + // Creates a corpus inside a project. rpc CreateCorpus(CreateCorpusRequest) returns (google.longrunning.Operation) { option (google.api.http) = { @@ -137,6 +275,19 @@ service Warehouse { option (google.api.method_signature) = "name"; } + // Analyzes a corpus. + rpc AnalyzeCorpus(AnalyzeCorpusRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{name=projects/*/locations/*/corpora/*}:analyze" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "AnalyzeCorpusResponse" + metadata_type: "AnalyzeCorpusMetadata" + }; + } + // Creates data schema inside corpus. rpc CreateDataSchema(CreateDataSchemaRequest) returns (DataSchema) { option (google.api.http) = { @@ -254,6 +405,20 @@ service Warehouse { }; } + // Imports assets (images plus annotations) from a meta file on cloud storage. + // Each row in the meta file is corresponding to an image (specified by a + // cloud storage uri) and its annotations. + rpc ImportAssets(ImportAssetsRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/corpora/*}/assets:import" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "ImportAssetsResponse" + metadata_type: "ImportAssetsMetadata" + }; + } + // Creates a search configuration inside a corpus. // // Please follow the rules below to create a valid CreateSearchConfigRequest. @@ -383,6 +548,181 @@ service Warehouse { body: "*" }; } + + // Search a deployed index endpoint (IMAGE corpus type only). + rpc SearchIndexEndpoint(SearchIndexEndpointRequest) + returns (SearchIndexEndpointResponse) { + option (google.api.http) = { + post: "/v1/{index_endpoint=projects/*/locations/*/indexEndpoints/*}:searchIndexEndpoint" + body: "*" + }; + } + + // Creates an IndexEndpoint. + rpc CreateIndexEndpoint(CreateIndexEndpointRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*}/indexEndpoints" + body: "index_endpoint" + }; + option (google.api.method_signature) = + "parent,index_endpoint,index_endpoint_id"; + option (google.longrunning.operation_info) = { + response_type: "IndexEndpoint" + metadata_type: "CreateIndexEndpointMetadata" + }; + } + + // Gets an IndexEndpoint. + rpc GetIndexEndpoint(GetIndexEndpointRequest) returns (IndexEndpoint) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/indexEndpoints/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Lists all IndexEndpoints in a project. + rpc ListIndexEndpoints(ListIndexEndpointsRequest) + returns (ListIndexEndpointsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*}/indexEndpoints" + }; + option (google.api.method_signature) = "parent"; + } + + // Updates an IndexEndpoint. + rpc UpdateIndexEndpoint(UpdateIndexEndpointRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + patch: "/v1/{index_endpoint.name=projects/*/locations/*/indexEndpoints/*}" + body: "index_endpoint" + }; + option (google.api.method_signature) = "index_endpoint,update_mask"; + option (google.longrunning.operation_info) = { + response_type: "IndexEndpoint" + metadata_type: "UpdateIndexEndpointMetadata" + }; + } + + // Deletes an IndexEndpoint. + rpc DeleteIndexEndpoint(DeleteIndexEndpointRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/indexEndpoints/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteIndexEndpointMetadata" + }; + } + + // Deploys an Index to IndexEndpoint. + rpc DeployIndex(DeployIndexRequest) returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{index_endpoint=projects/*/locations/*/indexEndpoints/*}:deployIndex" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "DeployIndexResponse" + metadata_type: "DeployIndexMetadata" + }; + } + + // Undeploys an Index from IndexEndpoint. + rpc UndeployIndex(UndeployIndexRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{index_endpoint=projects/*/locations/*/indexEndpoints/*}:undeployIndex" + body: "*" + }; + option (google.longrunning.operation_info) = { + response_type: "UndeployIndexResponse" + metadata_type: "UndeployIndexMetadata" + }; + } + + // Creates a collection. + rpc CreateCollection(CreateCollectionRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/locations/*/corpora/*}/collections" + body: "collection" + }; + option (google.api.method_signature) = "parent,collection,collection_id"; + option (google.longrunning.operation_info) = { + response_type: "Collection" + metadata_type: "CreateCollectionMetadata" + }; + } + + // Deletes a collection. + rpc DeleteCollection(DeleteCollectionRequest) + returns (google.longrunning.Operation) { + option (google.api.http) = { + delete: "/v1/{name=projects/*/locations/*/corpora/*/collections/*}" + }; + option (google.api.method_signature) = "name"; + option (google.longrunning.operation_info) = { + response_type: "google.protobuf.Empty" + metadata_type: "DeleteCollectionMetadata" + }; + } + + // Gets a collection. + rpc GetCollection(GetCollectionRequest) returns (Collection) { + option (google.api.http) = { + get: "/v1/{name=projects/*/locations/*/corpora/*/collections/*}" + }; + option (google.api.method_signature) = "name"; + } + + // Updates a collection. + rpc UpdateCollection(UpdateCollectionRequest) returns (Collection) { + option (google.api.http) = { + patch: "/v1/{collection.name=projects/*/locations/*/corpora/*/collections/*}" + body: "collection" + }; + option (google.api.method_signature) = "collection,update_mask"; + } + + // Lists collections inside a corpus. + rpc ListCollections(ListCollectionsRequest) + returns (ListCollectionsResponse) { + option (google.api.http) = { + get: "/v1/{parent=projects/*/locations/*/corpora/*}/collections" + }; + option (google.api.method_signature) = "parent"; + } + + // Adds an item into a Collection. + rpc AddCollectionItem(AddCollectionItemRequest) + returns (AddCollectionItemResponse) { + option (google.api.http) = { + post: "/v1/{item.collection=projects/*/locations/*/corpora/*/collections/*}:addCollectionItem" + body: "*" + }; + option (google.api.method_signature) = "item"; + } + + // Removes an item from a collection. + rpc RemoveCollectionItem(RemoveCollectionItemRequest) + returns (RemoveCollectionItemResponse) { + option (google.api.http) = { + post: "/v1/{item.collection=projects/*/locations/*/corpora/*/collections/*}:removeCollectionItem" + body: "*" + }; + option (google.api.method_signature) = "item"; + } + + // View items inside a collection. + rpc ViewCollectionItems(ViewCollectionItemsRequest) + returns (ViewCollectionItemsResponse) { + option (google.api.http) = { + get: "/v1/{collection=projects/*/locations/*/corpora/*/collections/*}:viewCollectionItems" + }; + option (google.api.method_signature) = "collection"; + } } // Different types for a facet bucket. @@ -406,7 +746,8 @@ enum FacetBucketType { // Request message for CreateAssetRequest. message CreateAssetRequest { // Required. The parent resource where this asset will be created. - // Format: projects/*/locations/*/corpora/* + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } @@ -425,109 +766,828 @@ message CreateAssetRequest { optional string asset_id = 3 [(google.api.field_behavior) = OPTIONAL]; } -// Request message for GetAsset. -message GetAssetRequest { - // Required. The name of the asset to retrieve. +// Request message for GetAsset. +message GetAssetRequest { + // Required. The name of the asset to retrieve. + // Format: + // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset} + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; +} + +// Request message for ListAssets. +message ListAssetsRequest { + // Required. The parent, which owns this collection of assets. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "visionai.googleapis.com/Asset" + } + ]; + + // The maximum number of assets to return. The service may return fewer than + // this value. + // If unspecified, at most 50 assets will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + int32 page_size = 2; + + // A page token, received from a previous `ListAssets` call. + // Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to `ListAssets` must match + // the call that provided the page token. + string page_token = 3; + + // The filter applied to the returned list. + // Only the following filterings are supported: + // "assets_with_contents = true", which returns assets with contents uploaded; + // "assets_with_contents = false", which returns assets without contents. + string filter = 5; +} + +// Response message for ListAssets. +message ListAssetsResponse { + // The assets from the specified corpus. + repeated Asset assets = 1; + + // A token, which can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request message for UpdateAsset. +message UpdateAssetRequest { + // Required. The asset to update. + // + // The asset's `name` field is used to identify the asset to be updated. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}` + Asset asset = 1 [(google.api.field_behavior) = REQUIRED]; + + // The list of fields to be updated. + google.protobuf.FieldMask update_mask = 2; +} + +// Request message for DeleteAsset. +message DeleteAssetRequest { + // Required. The name of the asset to delete. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; +} + +// The source of the asset. +message AssetSource { + // The asset source is from Cloud Storage. + message AssetGcsSource { + // Cloud storage uri. + string gcs_uri = 1; + } + + // The content of the asset. + message AssetContentData { + bytes asset_content_data = 1; + } + + oneof source_form { + // The source of the asset is from Cloud Storage. + AssetGcsSource asset_gcs_source = 1; + + // The source of the asset is from content bytes. + AssetContentData asset_content_data = 2; + } +} + +// Request message for UploadAsset. +message UploadAssetRequest { + // Required. The resource name of the asset to upload. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; + + // The source of the asset. + AssetSource asset_source = 2; +} + +// Response message for UploadAsset. +message UploadAssetResponse {} + +// Metadata for UploadAsset. +message UploadAssetMetadata { + // The start time of the operation. + google.protobuf.Timestamp start_time = 1; + + // The update time of the operation. + google.protobuf.Timestamp update_time = 2; +} + +// Request message for GenerateRetrievalUrl API. +message GenerateRetrievalUrlRequest { + // Required. The resource name of the asset to request signed url for. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; +} + +// Response message for GenerateRetrievalUrl API. +message GenerateRetrievalUrlResponse { + // A signed url to download the content of the asset. + string signed_uri = 1; +} + +// An asset is a resource in corpus. It represents a media object inside corpus, +// contains metadata and another resource annotation. Different feature could be +// applied to the asset to generate annotations. User could specified annotation +// related to the target asset. +message Asset { + option (google.api.resource) = { + type: "visionai.googleapis.com/Asset" + pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}" + }; + + // Resource name of the asset. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string name = 1; + + // The duration for which all media assets, associated metadata, and search + // documents can exist. If not set, then it will using the default ttl in the + // parent corpus resource. + google.protobuf.Duration ttl = 2; + + // Output only. The original cloud storage source uri that is associated with + // this asset. + AssetSource.AssetGcsSource asset_gcs_source = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Request message for AnalyzeAsset. +message AnalyzeAssetRequest { + // Required. The resource name of the asset to analyze. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; +} + +// Metadata for AnalyzeAsset. +message AnalyzeAssetMetadata { + // The status of analysis on each search capability. + message AnalysisStatus { + // The state of the search capability. + enum State { + // The default process state should never happen. + STATE_UNSPECIFIED = 0; + + // The feature is in progress. + IN_PROGRESS = 1; + + // The process is successfully done. + SUCCEEDED = 2; + + // The process failed. + FAILED = 3; + } + + State state = 2; + + string status_message = 3; + + // The search capability requested. + SearchCapability search_capability = 4; + } + + // The status of analysis on all search capabilities. + repeated AnalysisStatus analysis_status = 1; + + // The start time of the operation. + google.protobuf.Timestamp start_time = 2; + + // The update time of the operation. + google.protobuf.Timestamp update_time = 3; +} + +// Response message for AnalyzeAsset. +message AnalyzeAssetResponse {} + +// The status of indexing for the asset. +message IndexingStatus { + // State enum for this asset's indexing. + enum State { + // The default process state should never happen. + STATE_UNSPECIFIED = 0; + + // The indexing is in progress. + IN_PROGRESS = 1; + + // The process is successfully done. + SUCCEEDED = 2; + + // The process failed. + FAILED = 3; + } + + // Output only. State of this asset's indexing. + State state = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Detailed message describing the state. + string status_message = 3; +} + +// Request message for IndexAsset. +message IndexAssetRequest { + // Required. The resource name of the asset to index. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; + + // Optional. The name of the index. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}` + string index = 2 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; +} + +// Metadata for IndexAsset. +message IndexAssetMetadata { + // The status of indexing this asset. + IndexingStatus status = 4; + + // The start time of the operation. + google.protobuf.Timestamp start_time = 2; + + // The update time of the operation. + google.protobuf.Timestamp update_time = 3; +} + +// Response message for IndexAsset. +message IndexAssetResponse {} + +// Request message for RemoveIndexAsset. +message RemoveIndexAssetRequest { + // Required. The resource name of the asset to index. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; + + // Optional. The name of the index. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}` + string index = 2 [ + (google.api.field_behavior) = OPTIONAL, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; +} + +// Metadata for RemoveIndexAsset. +message RemoveIndexAssetMetadata { + // The status of indexing this asset. + IndexingStatus indexing_status = 1; + + // The start time of the operation. + google.protobuf.Timestamp start_time = 2; + + // The update time of the operation. + google.protobuf.Timestamp update_time = 3; +} + +// Response message for RemoveIndexAsset. +message RemoveIndexAssetResponse {} + +// An IndexedAsset is an asset that the index is built upon. +message IndexedAsset { + // Required. The index that this indexed asset belongs to. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}` + string index = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; + + // Required. The resource name of the asset. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string asset = 2 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + ]; + + // Output only. The create timestamp. + google.protobuf.Timestamp create_time = 3 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The update timestamp. + google.protobuf.Timestamp update_time = 4 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Request message for ViewIndexedAssets. +message ViewIndexedAssetsRequest { + // Required. The index that owns this collection of assets. + // Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}` + string index = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; + + // The maximum number of assets to return. The service may return fewer than + // this value. + // If unspecified, at most 50 assets will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + int32 page_size = 2; + + // A page token, received from a previous `ViewIndexedAssets` call. + // Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to `ViewIndexedAssets` must + // match the call that provided the page token. + string page_token = 3; + + // The filter applied to the returned list. + // Only the following filterings are supported: + // "asset_id = xxxx", which returns asset with specified id. + // "asset_id = xxxx, yyyy, zzzz", which returns assets with specified ids. + string filter = 4; +} + +// Response message for ViewIndexedAssets. +message ViewIndexedAssetsResponse { + // The assets from the specified index. + repeated IndexedAsset indexed_assets = 1; + + // A token, which can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request message of CreateCorpus API. +message CreateCorpusRequest { + // Required. Form: `projects/{project_number}/locations/{location_id}` + string parent = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. The corpus to be created. + Corpus corpus = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata for CreateCorpus API. +message CreateCorpusMetadata { + // The create time of the create corpus operation. + google.protobuf.Timestamp create_time = 2; + + // The update time of the create corpus operation. + google.protobuf.Timestamp update_time = 3; +} + +// The capability and metadata of search capability. +message SearchCapability { + // Capability to perform different search on assets. + enum Type { + // Unspecified search capability, should never be used. + TYPE_UNSPECIFIED = 0; + + // Embedding search. + EMBEDDING_SEARCH = 1; + } + + // The search capability to enable. + Type type = 1; +} + +// Setting for search capability to enable. +message SearchCapabilitySetting { + // The metadata of search capability to enable. + repeated SearchCapability search_capabilities = 1; +} + +// Metadata message for CreateCollectionRequest +message CreateCollectionMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for CreateCollection. +message CreateCollectionRequest { + // Required. The parent resource where this collection will be created. + // Format: `projects/{project_number}/locations/{location}/corpora/{corpus}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } + ]; + + // Required. The collection resource to be created. + Collection collection = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. The ID to use for the collection, which will become the final + // component of the resource name if user choose to specify. Otherwise, + // collection id will be generated by system. + // + // This value should be up to 55 characters, and valid characters + // are /[a-z][0-9]-/. The first character must be a letter, the last could be + // a letter or a number. + optional string collection_id = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// Metadata message for DeleteCollectionRequest +message DeleteCollectionMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for DeleteCollectionRequest. +message DeleteCollectionRequest { + // Required. The name of the collection to delete. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/Collection" + } + ]; +} + +// Request message for GetCollectionRequest. +message GetCollectionRequest { + // Required. The name of the collection to retrieve. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/Collection" + } + ]; +} + +// Request message for UpdateCollectionRequest. +message UpdateCollectionRequest { + // Required. The collection to update. + // + // The collection's `name` field is used to identify the collection to be + // updated. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}` + Collection collection = 1 [(google.api.field_behavior) = REQUIRED]; + + // The list of fields to be updated. + // - Unset `update_mask` or set `update_mask` to be a single "*" only will + // update all updatable fields with the value provided in `collection`. + // - To update `display_name` value to empty string, set it in the + // `collection` + // to empty string, and set `update_mask` with "display_name". Same applies + // to other updatable string fields in the `collection`. + google.protobuf.FieldMask update_mask = 2; +} + +// Request message for ListCollections. +message ListCollectionsRequest { + // Required. The parent corpus. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + child_type: "visionai.googleapis.com/Collection" + } + ]; + + // The maximum number of collections to return. The service may return fewer + // than this value. If unspecified, at most 50 collections will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + int32 page_size = 2; + + // A page token, received from a previous `ListCollectionsRequest` call. + // Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to `ListCollectionsRequest` + // must match the call that provided the page token. + string page_token = 3; +} + +// Response message for ListCollections. +message ListCollectionsResponse { + // The collections from the specified corpus. + repeated Collection collections = 1; + + // A token, which can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// Request message for AddCollectionItem. +message AddCollectionItemRequest { + // Required. The item to be added. + CollectionItem item = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Response message for AddCollectionItem. +message AddCollectionItemResponse { + // The item that has already been added. + CollectionItem item = 1; +} + +// Request message for RemoveCollectionItem. +message RemoveCollectionItemRequest { + // Required. The item to be removed. + CollectionItem item = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Request message for RemoveCollectionItem. +message RemoveCollectionItemResponse { + // The item that has already been removed. + CollectionItem item = 1; +} + +// Request message for ViewCollectionItems. +message ViewCollectionItemsRequest { + // Required. The collection to view. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}` + string collection = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/Collection" + } + ]; + + // The maximum number of collections to return. The service may return fewer + // than this value. If unspecified, at most 50 collections will be returned. + // The maximum value is 1000; values above 1000 will be coerced to 1000. + int32 page_size = 2; + + // A page token, received from a previous `ViewCollectionItemsRequest` call. + // Provide this to retrieve the subsequent page. + // + // When paginating, all other parameters provided to + // `ViewCollectionItemsRequest` must match the call that provided the page + // token. + string page_token = 3; +} + +// Response message for ViewCollectionItems. +message ViewCollectionItemsResponse { + // The items from the specified collection. + repeated CollectionItem items = 1; + + // A token, which can be sent as `page_token` to retrieve the next page. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + +// A collection is a resource in a corpus. It serves as a container of +// references to original resources. +message Collection { + option (google.api.resource) = { + type: "visionai.googleapis.com/Collection" + pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}" + }; + + // Output only. Resource name of the collection. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. The collection name for displaying. + // The name can be up to 256 characters long. + string display_name = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Description of the collection. Can be up to 25000 characters + // long. + string description = 3 [(google.api.field_behavior) = OPTIONAL]; +} + +// A CollectionItem is an item in a collection. +// Each item is a reference to the original resource in a collection. +message CollectionItem { + // CollectionItem types. + enum Type { + // The default type of item should never happen. + TYPE_UNSPECIFIED = 0; + + // Asset type item. + ASSET = 1; + } + + // Required. The collection name that this item belongs to. Format: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/collections/{collection}` + string collection = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/Collection" + } + ]; + + // Required. The type of item. + Type type = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The name of the CollectionItem. Its format depends on the `type` + // above. For ASSET: + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}` + string item_resource = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Message for creating an Index. +message CreateIndexRequest { + // Required. Value for the parent. The resource name of the Corpus under which + // this index is created. Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } + ]; + + // Optional. The ID for the index. This will become the final resource name + // for the index. If the user does not specify this value, it will be + // generated by system. + // + // This value should be up to 63 characters, and valid characters + // are /[a-z][0-9]-/. The first character must be a letter, the last could be + // a letter or a number. + string index_id = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The index being created. + Index index = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata message for CreateIndexRequest +message CreateIndexMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for UpdateIndex. +message UpdateIndexRequest { + // Required. The resource being updated. + Index index = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Field mask is used to specify the fields to be overwritten in the + // Index resource by the update. The fields specified in the update_mask are + // relative to the resource, not the full request. A field of the resource + // will be overwritten if it is in the mask. Empty field mask is not allowed. + // If the mask is "*", it triggers a full update of the index, and also a + // whole rebuild of index data. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata message for UpdateIndexRequest +message UpdateIndexMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for getting an Index. +message GetIndexRequest { + // Required. Name of the Index resource. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}` string name = 1 [ (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } ]; } -// Request message for ListAssets. -message ListAssetsRequest { - // Required. The parent, which owns this collection of assets. +// Request message for listing Indexes. +message ListIndexesRequest { + // Required. The parent corpus that owns this collection of indexes. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus} + // `projects/{project_number}/locations/{location}/corpora/{corpus}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { - child_type: "visionai.googleapis.com/Asset" + child_type: "visionai.googleapis.com/Index" } ]; - // The maximum number of assets to return. The service may return fewer than + // The maximum number of indexes to return. The service may return fewer than // this value. - // If unspecified, at most 50 assets will be returned. + // If unspecified, at most 50 indexes will be returned. // The maximum value is 1000; values above 1000 will be coerced to 1000. int32 page_size = 2; - // A page token, received from a previous `ListAssets` call. + // A page token, received from a previous `ListIndexes` call. // Provide this to retrieve the subsequent page. // - // When paginating, all other parameters provided to `ListAssets` must match + // When paginating, all other parameters provided to `ListIndexes` must match // the call that provided the page token. string page_token = 3; } -// Response message for ListAssets. -message ListAssetsResponse { - // The assets from the specified corpus. - repeated Asset assets = 1; +// Response message for ListIndexes. +message ListIndexesResponse { + // The indexes under the specified corpus. + repeated Index indexes = 1; // A token, which can be sent as `page_token` to retrieve the next page. // If this field is omitted, there are no subsequent pages. string next_page_token = 2; } -// Request message for UpdateAsset. -message UpdateAssetRequest { - // Required. The asset to update. - // - // The asset's `name` field is used to identify the asset to be updated. - // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset} - Asset asset = 1 [(google.api.field_behavior) = REQUIRED]; - - // The list of fields to be updated. - google.protobuf.FieldMask update_mask = 2; -} - -// Request message for DeleteAsset. -message DeleteAssetRequest { - // Required. The name of the asset to delete. +// Request message for DeleteIndex. +message DeleteIndexRequest { + // Required. The name of the index to delete. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}` string name = 1 [ (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } ]; } -// An asset is a resource in corpus. It represents a media object inside corpus, -// contains metadata and another resource annotation. Different feature could be -// applied to the asset to generate annotations. User could specified annotation -// related to the target asset. -message Asset { +// Metadata message for DeleteIndexRequest +message DeleteIndexMetadata {} + +// An Index is a resource in Corpus. It contains an indexed version of the +// assets and annotations. When deployed to an endpoint, it will allow users to +// search the Index. +message Index { option (google.api.resource) = { - type: "visionai.googleapis.com/Asset" - pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}" + type: "visionai.googleapis.com/Index" + pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}" }; - // Resource name of the asset. - // Form: - // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` - string name = 1; + // Enum representing the different states through which an Index might cycle + // during its lifetime. + enum State { + // The default value. Should not be used. + STATE_UNSPECIFIED = 0; - // The duration for which all media assets, associated metadata, and search - // documents can exist. If not set, then it will using the default ttl in the - // parent corpus resource. - google.protobuf.Duration ttl = 2; -} + // State CREATING. + CREATING = 1; -// Request message of CreateCorpus API. -message CreateCorpusRequest { - // Required. Form: `projects/{project_number}/locations/{location_id}` - string parent = 1 [(google.api.field_behavior) = REQUIRED]; + // State CREATED. + CREATED = 2; - // Required. The corpus to be created. - Corpus corpus = 2 [(google.api.field_behavior) = REQUIRED]; + // State UPDATING. + UPDATING = 3; + } + + // Specifies how assets are selected for this index. Default to + // entire_corpus if unspecified. Behavior in UpdateIndex: if update_mask + // includes one of the asset_filter field paths, the index will be rebuilt + // with latest assets, including their analyzed data and annotations. + oneof asset_filter { + // Include all assets under the corpus. + bool entire_corpus = 9; + } + + // Output only. Resource name of the Index resource. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/indexes/{index_id}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Optional user-specified display name of the index. + string display_name = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Optional description of the index. + string description = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. State of the index. + State state = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The create timestamp. + google.protobuf.Timestamp create_time = 5 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. The update timestamp. + google.protobuf.Timestamp update_time = 6 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. References to the deployed index instance. + // Index of VIDEO_ON_DEMAND corpus can have at most one deployed index. + // Index of IMAGE corpus can have multiple deployed indexes. + repeated DeployedIndexReference deployed_indexes = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; } -// Metadata for CreateCorpus API. -message CreateCorpusMetadata {} +// Points to a DeployedIndex. +message DeployedIndexReference { + // Immutable. A resource name of the IndexEndpoint. + string index_endpoint = 1 [ + (google.api.field_behavior) = IMMUTABLE, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/IndexEndpoint" + } + ]; +} // Corpus is a set of media contents for management. // Within a corpus, media shares the same data schema. Search is also restricted @@ -544,12 +1604,18 @@ message Corpus { // the corpus will be created as STREAM_VIDEO corpus. TYPE_UNSPECIFIED = 0; - // Asset is a live streaming video asset. + // Asset is a live streaming video. STREAM_VIDEO = 1; + + // Asset is an image. + IMAGE = 2; + + // Asset is a batch video. + VIDEO_ON_DEMAND = 3; } // Resource name of the corpus. - // Form: + // Format: // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` string name = 1; @@ -569,6 +1635,9 @@ message Corpus { // Optional. Type of the asset inside corpus. Type type = 7 [(google.api.field_behavior) = OPTIONAL]; + + // Default search capability setting on corpus level. + SearchCapabilitySetting search_capability_setting = 8; } // Request message for GetCorpus. @@ -602,10 +1671,18 @@ message ListCorporaRequest { int32 page_size = 2; // A token identifying a page of results for the server to return. - // Typically obtained via [ListCorpora.next_page_token][] of the previous + // Typically obtained via + // [ListCorporaResponse.next_page_token][google.cloud.visionai.v1.ListCorporaResponse.next_page_token] + // of the previous // [Warehouse.ListCorpora][google.cloud.visionai.v1.Warehouse.ListCorpora] // call. string page_token = 3; + + // The filter applied to the returned corpora list. + // Only the following restrictions are supported: + // `type=`, + // `type!=`. + string filter = 5; } // Response message for ListCorpora. @@ -629,10 +1706,31 @@ message DeleteCorpusRequest { ]; } +// Request message for AnalyzeCorpus. +message AnalyzeCorpusRequest { + // Required. The parent corpus resource where the assets will be analyzed. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } + ]; +} + +// The metadata message for AnalyzeCorpus LRO. +message AnalyzeCorpusMetadata { + // The metadata of the operation. + OperationMetadata metadata = 1; +} + +// The response message for AnalyzeCorpus LRO. +message AnalyzeCorpusResponse {} + // Request message for CreateDataSchema. message CreateDataSchemaRequest { // Required. The parent resource where this data schema will be created. - // Format: projects/*/locations/*/corpora/* + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } @@ -840,7 +1938,7 @@ message DataSchemaDetails { message UpdateDataSchemaRequest { // Required. The data schema's `name` field is used to identify the data // schema to be updated. Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/dataSchemas/{data_schema} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/dataSchemas/{data_schema}` DataSchema data_schema = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. @@ -851,7 +1949,7 @@ message UpdateDataSchemaRequest { message GetDataSchemaRequest { // Required. The name of the data schema to retrieve. // Format: - // projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/dataSchemas/{data_schema_id} + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/dataSchemas/{data_schema_id}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -864,7 +1962,7 @@ message GetDataSchemaRequest { message DeleteDataSchemaRequest { // Required. The name of the data schema to delete. // Format: - // projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/dataSchemas/{data_schema_id} + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/dataSchemas/{data_schema_id}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -877,7 +1975,7 @@ message DeleteDataSchemaRequest { message ListDataSchemasRequest { // Required. The parent, which owns this collection of data schemas. // Format: - // projects/{project_number}/locations/{location_id}/corpora/{corpus_id} + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -911,7 +2009,8 @@ message ListDataSchemasResponse { // Request message for CreateAnnotation. message CreateAnnotationRequest { // Required. The parent resource where this annotation will be created. - // Format: projects/*/locations/*/corpora/*/assets/* + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } @@ -939,7 +2038,7 @@ message Annotation { }; // Resource name of the annotation. - // Form: + // Format: // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}` string name = 1; @@ -994,7 +2093,8 @@ message AnnotationValue { // Value of boolean type annotation. bool bool_value = 9; - // Value of customized struct annotation. + // Value of customized struct annotation. This field does not have effects. + // Use customized_struct_value instead for customized struct annotation. google.protobuf.Struct customized_struct_data_value = 10; // Value of list type annotation. @@ -1021,7 +2121,7 @@ message AnnotationCustomizedStruct { message ListAnnotationsRequest { // The parent, which owns this collection of annotations. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}` string parent = 1 [ (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } ]; @@ -1066,7 +2166,7 @@ message ListAnnotationsResponse { message GetAnnotationRequest { // Required. The name of the annotation to retrieve. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1080,7 +2180,7 @@ message UpdateAnnotationRequest { // Required. The annotation to update. // The annotation's `name` field is used to identify the annotation to be // updated. Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}` Annotation annotation = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. @@ -1091,7 +2191,7 @@ message UpdateAnnotationRequest { message DeleteAnnotationRequest { // Required. The name of the annotation to delete. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1100,10 +2200,40 @@ message DeleteAnnotationRequest { ]; } +// The request message for ImportAssets. +message ImportAssetsRequest { + // The source. + oneof source { + // The file contains all assets information to be imported. + // * The file is in JSONL format. + // * Each line corresponding to one asset. + // * Each line will be converted into InputImageAsset proto. + string assets_gcs_uri = 2; + } + + // Required. The parent corpus resource where the assets will be imported. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } + ]; +} + +// The metadata message for ImportAssets LRO. +message ImportAssetsMetadata { + // The metadata of the operation. + OperationMetadata metadata = 1; +} + +// The response message for ImportAssets LRO. +message ImportAssetsResponse {} + // Request message for CreateSearchConfig. message CreateSearchConfigRequest { // Required. The parent resource where this search configuration will be - // created. Format: projects/*/locations/*/corpora/* + // created. Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1127,7 +2257,7 @@ message UpdateSearchConfigRequest { // // The search configuration's `name` field is used to identify the resource to // be updated. Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}` SearchConfig search_config = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. If left unset, all field paths will be @@ -1139,7 +2269,7 @@ message UpdateSearchConfigRequest { message GetSearchConfigRequest { // Required. The name of the search configuration to retrieve. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1152,7 +2282,7 @@ message GetSearchConfigRequest { message DeleteSearchConfigRequest { // Required. The name of the search configuration to delete. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1165,7 +2295,7 @@ message DeleteSearchConfigRequest { message ListSearchConfigsRequest { // Required. The parent, which owns this collection of search configurations. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus} + // `projects/{project_number}/locations/{location}/corpora/{corpus}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1209,7 +2339,7 @@ message SearchConfig { // For CustomSearchCriteria, search_config would be the search // operator name. For Facets, search_config would be the facet // dimension name. - // Form: + // Format: // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}` string name = 1; @@ -1220,6 +2350,270 @@ message SearchConfig { SearchCriteriaProperty search_criteria_property = 3; } +// Message representing IndexEndpoint resource. Indexes are deployed into it. +message IndexEndpoint { + option (google.api.resource) = { + type: "visionai.googleapis.com/IndexEndpoint" + pattern: "projects/{project}/locations/{location}/indexEndpoints/{index_endpoint}" + }; + + // IndexEndpoint stage. + enum State { + // The default value. Should not be used. + STATE_UNSPECIFIED = 0; + + // State CREATING. + CREATING = 1; + + // State CREATED. + CREATED = 2; + + // State UPDATING. + UPDATING = 3; + + // State FAILED. + FAILED = 4; + } + + // Output only. Resource name of the IndexEndpoint. + // Format: + // `projects/{project}/locations/{location}/indexEndpoints/{index_endpoint_id}` + string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. Display name of the IndexEndpoint. Can be up to 32 characters + // long. + string display_name = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Description of the IndexEndpoint. Can be up to 25000 characters + // long. + string description = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. The Index deployed in this IndexEndpoint. + DeployedIndex deployed_index = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. IndexEndpoint state. + State state = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Optional. The labels applied to a resource must meet the following + // requirements: + // + // * Each resource can have multiple labels, up to a maximum of 64. + // * Each label must be a key-value pair. + // * Keys have a minimum length of 1 character and a maximum length of 63 + // characters and cannot be empty. Values can be empty and have a maximum + // length of 63 characters. + // * Keys and values can contain only lowercase letters, numeric characters, + // underscores, and dashes. All characters must use UTF-8 encoding, and + // international characters are allowed. + // * The key portion of a label must be unique. However, you can use the same + // key with multiple resources. + // * Keys must start with a lowercase letter or international character. + // + // See [Google Cloud + // Document](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements) + // for more details. + map labels = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Output only. Create timestamp. + google.protobuf.Timestamp create_time = 7 + [(google.api.field_behavior) = OUTPUT_ONLY]; + + // Output only. Update timestamp. + google.protobuf.Timestamp update_time = 8 + [(google.api.field_behavior) = OUTPUT_ONLY]; +} + +// Request message for CreateIndexEndpoint. +message CreateIndexEndpointRequest { + // Required. Format: `projects/{project}/locations/{location}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "locations.googleapis.com/Location" + } + ]; + + // Optional. The ID to use for the IndexEndpoint, which will become the final + // component of the IndexEndpoint's resource name if the user specifies it. + // Otherwise, IndexEndpoint id will be autogenerated. + // + // This value should be up to 63 characters, and valid characters + // are a-z, 0-9 and dash (-). The first character must be a letter, the last + // must be a letter or a number. + string index_endpoint_id = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Required. The resource being created. + IndexEndpoint index_endpoint = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata message for CreateIndexEndpoint. +message CreateIndexEndpointMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for GetIndexEndpoint. +message GetIndexEndpointRequest { + // Required. Name of the IndexEndpoint resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/IndexEndpoint" + } + ]; +} + +// Request message for ListIndexEndpoints. +message ListIndexEndpointsRequest { + // Required. Format: `projects/{project}/locations/{location}` + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "locations.googleapis.com/Location" + } + ]; + + // Optional. Requested page size. Server may return fewer items than + // requested. The service may return fewer than this value. If unspecified, a + // page size of 50 will be used. The maximum value is 1000; values above 1000 + // will be coerced to 1000. + int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. A token identifying a page of results the server should return. + string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. The filter applied to the returned list. + // We only support filtering for the `deployed_image_index.image_index` field. + // However, to filter by a corpus instead of an image index, simply use + // `deployed_image_index.corpus`, which will return all endpoints with + // `deployed_image_index.image_index` inside of the given corpus. + // A basic filter on image index would look like: + // deployed_image_index.image_index = + // "projects/123/locations/us-central1/corpora/my_corpus/imageIndexes/my_image_index" + // A basic filter on corpus would look like: + // deployed_image_index.corpus = + // "projects/123/locations/us-central1/corpora/my_corpus" + string filter = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Response message for ListIndexEndpoints. +message ListIndexEndpointsResponse { + // The list of IndexEndpoints. + repeated IndexEndpoint index_endpoints = 1; + + // A token identifying a page of results the server should return. + string next_page_token = 2; +} + +// Request message for UpdateIndexEndpoint. +message UpdateIndexEndpointRequest { + // Required. The resource being updated. + IndexEndpoint index_endpoint = 1 [(google.api.field_behavior) = REQUIRED]; + + // Required. Field mask is used to specify the fields to be overwritten in the + // IndexEndpoint resource by the update. + // The fields specified in the update_mask are relative to the resource, not + // the full request. + // A field of the resource will be overwritten if it is in the mask. + // Empty field mask is not allowed. + // If the mask is "*", then this is a full replacement of the resource. + google.protobuf.FieldMask update_mask = 2 + [(google.api.field_behavior) = REQUIRED]; +} + +// Metadata message for UpdateIndexEndpoint. +message UpdateIndexEndpointMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for DeleteIndexEndpoint. +message DeleteIndexEndpointRequest { + // Required. Name of the resource. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/IndexEndpoint" + } + ]; +} + +// Metadata message for DeleteIndexEndpoint. +message DeleteIndexEndpointMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; +} + +// Request message for DeployIndex. +message DeployIndexRequest { + // Required. IndexEndpoint the index is deployed to. + // Format: + // `projects/{project}/locations/{location}/indexEndpoints/{index_endpoint}` + string index_endpoint = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/IndexEndpoint" + } + ]; + + // Required. Index to deploy. + DeployedIndex deployed_index = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// DeployIndex response once the operation is done. +message DeployIndexResponse {} + +// Metadata message for DeployIndex. +message DeployIndexMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; + + // Output only. The index being deployed. + string deployed_index = 2 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; +} + +// Metadata message for UndeployIndex. +message UndeployIndexMetadata { + // Common metadata of the long-running operation. + OperationMetadata operation_metadata = 1; + + // Output only. The index being undeployed. + string deployed_index = 2 [ + (google.api.field_behavior) = OUTPUT_ONLY, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; +} + +// Request message for UndeployIndexEndpoint. +message UndeployIndexRequest { + // Required. Resource name of the IndexEndpoint resource on which the + // undeployment will act. Format: + // `projects/{project}/locations/{location}/indexEndpoints/{index_endpoint}` + string index_endpoint = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/IndexEndpoint" + } + ]; +} + +// UndeployIndex response once the operation is done. +message UndeployIndexResponse {} + +// A deployment of an Index. +message DeployedIndex { + // Required. Name of the deployed Index. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/indexes/{index_id}` + string index = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "visionai.googleapis.com/Index" } + ]; +} + // Central configuration for a facet. message FacetProperty { // If bucket type is FIXED_RANGE, specify how values are bucketized. Use @@ -1329,7 +2723,7 @@ message SearchHypernym { // Resource name of the SearchHypernym. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}` string name = 1; // The hypernym. @@ -1342,7 +2736,7 @@ message SearchHypernym { // Request message for creating SearchHypernym. message CreateSearchHypernymRequest { // Required. The parent resource where this SearchHypernym will be created. - // projects/{project_number}/locations/{location}/corpora/{corpus} + // Format: `projects/{project_number}/locations/{location}/corpora/{corpus}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } @@ -1362,7 +2756,7 @@ message UpdateSearchHypernymRequest { // Required. The SearchHypernym to update. // The search hypernym's `name` field is used to identify the search hypernym // to be updated. Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}` SearchHypernym search_hypernym = 1 [(google.api.field_behavior) = REQUIRED]; // The list of fields to be updated. If left unset, all field paths will be @@ -1374,7 +2768,7 @@ message UpdateSearchHypernymRequest { message GetSearchHypernymRequest { // Required. The name of the SearchHypernym to retrieve. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1387,7 +2781,7 @@ message GetSearchHypernymRequest { message DeleteSearchHypernymRequest { // Required. The name of the SearchHypernym to delete. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym} + // `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1400,7 +2794,7 @@ message DeleteSearchHypernymRequest { message ListSearchHypernymsRequest { // Required. The parent, which owns this collection of SearchHypernyms. // Format: - // projects/{project_number}/locations/{location}/corpora/{corpus} + // `projects/{project_number}/locations/{location}/corpora/{corpus}` string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { @@ -1587,8 +2981,8 @@ message IngestAssetResponse { // Request message for ClipAsset API. message ClipAssetRequest { // Required. The resource name of the asset to request clips for. - // Form: - // 'projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}' + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } @@ -1618,8 +3012,8 @@ message ClipAssetResponse { // Request message for GenerateHlsUri API. message GenerateHlsUriRequest { // Required. The resource name of the asset to request clips for. - // Form: - // 'projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}' + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" } @@ -1655,7 +3049,7 @@ message SearchAssetsRequest { } // Required. The parent corpus to search. - // Form: `projects/{project_id}/locations/{location_id}/corpora/{corpus_id}' + // Format: `projects/{project_id}/locations/{location_id}/corpora/{corpus_id}' string corpus = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" } @@ -1695,6 +3089,61 @@ message SearchAssetsRequest { string search_query = 10; } +// Request message for SearchIndexEndpoint. +message SearchIndexEndpointRequest { + // The oneof global search query. + oneof query { + // An image-only query. + ImageQuery image_query = 2; + + // A text-only query. + string text_query = 3; + } + + // Required. The index endpoint to search. + // Format: + // `projects/{project_id}/locations/{location_id}/indexEndpoints/{index_endpoint_id}' + string index_endpoint = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "visionai.googleapis.com/IndexEndpoint" + } + ]; + + // Criteria applied to search results. + repeated Criteria criteria = 4; + + // Criteria to exclude from search results. + // Note that `fetch_matched_annotations` will be ignored. + repeated Criteria exclusion_criteria = 7; + + // Requested page size. API may return fewer results than requested. + // If negative, INVALID_ARGUMENT error will be returned. + // If unspecified or 0, API will pick a default size, which is 10. + // If the requested page size is larger than the maximum size, API will pick + // the maximum size, which is 100. + int32 page_size = 5; + + // The continuation token to fetch the next page. If empty, it means it is + // fetching the first page. + string page_token = 6; +} + +// Image query for search endpoint request. +message ImageQuery { + oneof image { + // Input image in raw bytes. + bytes input_image = 1; + + // Resource name of the asset. Only supported in IMAGE corpus type. + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` + string asset = 2 [(google.api.resource_reference) = { + type: "visionai.googleapis.com/Asset" + }]; + } +} + // A strategy to specify how to sort by data schema key. message SchemaKeySortingStrategy { // Option for one data schema key. @@ -1753,8 +3202,8 @@ message AnnotationMatchingResult { // Search result contains asset name and corresponding time ranges. message SearchResultItem { // The resource name of the asset. - // Form: - // 'projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}' + // Format: + // `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}` string asset = 1; // The matched asset segments. @@ -1764,6 +3213,12 @@ message SearchResultItem { // The matched asset segment. Partition.TemporalPartition segment = 5; + // Relevance of this `SearchResultItem` to user search request. + // Currently available only in Image Warehouse, and by default represents + // cosine similarity. In the future can be other measures such as "dot + // product" or "topicality" requested in the search request. + double relevance = 6; + // Search result annotations specified by result_annotation_keys in search // request. repeated Annotation requested_annotations = 3; @@ -1787,6 +3242,16 @@ message SearchAssetsResponse { repeated FacetGroup facet_results = 3; } +// Response message for SearchIndexEndpoint. +message SearchIndexEndpointResponse { + // Returned search results. + repeated SearchResultItem search_result_items = 1; + + // The next-page continuation token. + // If this field is omitted, there are no subsequent pages. + string next_page_token = 2; +} + // Integer range type. message IntRange { // Start of the int range. diff --git a/google/cloud/workflows/executions/v1beta/BUILD.bazel b/google/cloud/workflows/executions/v1beta/BUILD.bazel index b92ca68b230120..ef478a2ad86941 100644 --- a/google/cloud/workflows/executions/v1beta/BUILD.bazel +++ b/google/cloud/workflows/executions/v1beta/BUILD.bazel @@ -171,8 +171,6 @@ py_gapic_assembly_pkg( name = "workflows-executions-v1beta-py", deps = [ ":executions_py_gapic", - ":executions_py_grpc", - ":executions_py_proto", ], ) diff --git a/google/devtools/cloudprofiler/v2/BUILD.bazel b/google/devtools/cloudprofiler/v2/BUILD.bazel index 25efd3b1200fc6..25c23b4504f93e 100644 --- a/google/devtools/cloudprofiler/v2/BUILD.bazel +++ b/google/devtools/cloudprofiler/v2/BUILD.bazel @@ -116,7 +116,7 @@ load( go_proto_library( name = "cloudprofiler_go_proto", compilers = ["@io_bazel_rules_go//proto:go_grpc"], - importpath = "google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2", + importpath = "cloud.google.com/go/cloudprofiler/apiv2/cloudprofilerpb", protos = [":cloudprofiler_proto"], deps = [ "//google/api:annotations_go_proto", @@ -127,7 +127,7 @@ go_gapic_library( name = "cloudprofiler_go_gapic", srcs = [":cloudprofiler_proto_with_info"], grpc_service_config = "cloudprofiler_grpc_service_config.json", - importpath = "cloud.google.com/go/devtools/cloudprofiler/apiv2;cloudprofiler", + importpath = "cloud.google.com/go/cloudprofiler/apiv2;cloudprofiler", metadata = True, release_level = "beta", rest_numeric_enums = True, @@ -213,7 +213,9 @@ php_gapic_library( rest_numeric_enums = True, service_yaml = "cloudprofiler_v2.yaml", transport = "grpc+rest", - deps = [":cloudprofiler_php_proto"], + deps = [ + ":cloudprofiler_php_proto", + ], ) # Open Source Packages @@ -322,6 +324,7 @@ load( csharp_proto_library( name = "cloudprofiler_csharp_proto", + extra_opts = [], deps = [":cloudprofiler_proto"], ) diff --git a/google/devtools/cloudprofiler/v2/cloudprofiler_grpc_service_config.json b/google/devtools/cloudprofiler/v2/cloudprofiler_grpc_service_config.json index 096cc7ba7d6f69..4d0bae473ddfb2 100644 --- a/google/devtools/cloudprofiler/v2/cloudprofiler_grpc_service_config.json +++ b/google/devtools/cloudprofiler/v2/cloudprofiler_grpc_service_config.json @@ -11,6 +11,17 @@ "retryableStatusCodes": ["UNAVAILABLE"] } }, + { + "name": [{"service": "google.devtools.cloudprofiler.v2.ExportService"}], + "timeout": "130s", + "retryPolicy": { + "maxAttempts": 3, + "initialBackoff": "1s", + "maxBackoff": "10s", + "backoffMultiplier": 1.3, + "retryableStatusCodes": ["UNAVAILABLE"] + } + }, { "name": [ { diff --git a/google/devtools/cloudprofiler/v2/cloudprofiler_v2.yaml b/google/devtools/cloudprofiler/v2/cloudprofiler_v2.yaml index d4b129d0e42b62..45e3b0f12e7db3 100644 --- a/google/devtools/cloudprofiler/v2/cloudprofiler_v2.yaml +++ b/google/devtools/cloudprofiler/v2/cloudprofiler_v2.yaml @@ -12,15 +12,6 @@ documentation: The Cloud Profiler API manages the continuous profiling information collected in cloud environments like App Engine, GKE and GCE. -backend: - rules: - - selector: google.devtools.cloudprofiler.v2.ProfilerService.CreateOfflineProfile - deadline: 20.0 - - selector: google.devtools.cloudprofiler.v2.ProfilerService.CreateProfile - deadline: 3600.0 - - selector: google.devtools.cloudprofiler.v2.ProfilerService.UpdateProfile - deadline: 20.0 - authentication: rules: - selector: 'google.devtools.cloudprofiler.v2.ProfilerService.*' @@ -29,3 +20,30 @@ authentication: https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write + +publishing: + new_issue_uri: https://issuetracker.google.com/issues/new?component=1227997&template=1161103 + documentation_uri: https://cloud.google.com/profiler/docs + api_short_name: cloudprofiler + github_label: 'api: cloudprofiler' + doc_tag_prefix: cloudprofiler + organization: CLOUD + library_settings: + - version: google.devtools.cloudprofiler.v2 + launch_stage: GA + java_settings: + common: + destinations: + - PACKAGE_MANAGER + python_settings: + common: + destinations: + - PACKAGE_MANAGER + node_settings: + common: + destinations: + - PACKAGE_MANAGER + go_settings: + common: + destinations: + - PACKAGE_MANAGER diff --git a/google/devtools/cloudprofiler/v2/profiler.proto b/google/devtools/cloudprofiler/v2/profiler.proto index 9f60891924bb15..b86164cb2ace6f 100644 --- a/google/devtools/cloudprofiler/v2/profiler.proto +++ b/google/devtools/cloudprofiler/v2/profiler.proto @@ -24,7 +24,7 @@ import "google/protobuf/duration.proto"; import "google/protobuf/field_mask.proto"; option csharp_namespace = "Google.Cloud.Profiler.V2"; -option go_package = "google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2;cloudprofiler"; +option go_package = "cloud.google.com/go/cloudprofiler/apiv2/cloudprofilerpb;cloudprofilerpb"; option java_multiple_files = true; option java_outer_classname = "ProfilerProto"; option java_package = "com.google.devtools.cloudprofiler.v2"; diff --git a/google/devtools/testing/v1/direct_access_service.proto b/google/devtools/testing/v1/direct_access_service.proto index 042344d3de0521..8fb12da7e4847b 100644 --- a/google/devtools/testing/v1/direct_access_service.proto +++ b/google/devtools/testing/v1/direct_access_service.proto @@ -272,7 +272,7 @@ message DeviceSession { oneof expiration { // Optional. The amount of time that a device will be initially allocated - // for. This can eventually be extended with the ExtendDeviceSession RPC. + // for. This can eventually be extended with the UpdateDeviceSession RPC. // Default: 30 minutes. google.protobuf.Duration ttl = 13 [(google.api.field_behavior) = OPTIONAL]; @@ -296,11 +296,6 @@ message DeviceSession { google.protobuf.Timestamp active_start_time = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; - // Optional. The list of requested devices. At most two devices may be - // simultaneously requested. - AndroidDeviceList android_device_list = 12 - [deprecated = true, (google.api.field_behavior) = OPTIONAL]; - // Required. The requested device AndroidDevice android_device = 15 [(google.api.field_behavior) = REQUIRED]; } diff --git a/google/devtools/testing/v1/test_execution.proto b/google/devtools/testing/v1/test_execution.proto index e6c4876922aa4f..a3462c58a41d94 100644 --- a/google/devtools/testing/v1/test_execution.proto +++ b/google/devtools/testing/v1/test_execution.proto @@ -272,6 +272,10 @@ message TestSetup { // storage path prefix for that device. repeated string directories_to_pull = 2; + // Optional. Initial setup APKs to install before the app under test is + // installed. Currently capped at 100. + repeated Apk initial_setup_apks = 29 [(google.api.field_behavior) = OPTIONAL]; + // APKs to install in addition to those being directly tested. These will be // installed after the app under test. // Currently capped at 100. @@ -987,6 +991,9 @@ message InvalidRequestDetail { // This request is not currently implemented. NOT_IMPLEMENTED = 5; + + // The caller has no permission for storing the test results + RESULT_STORAGE_PERMISSION_DENIED = 6; } // The reason behind the error. diff --git a/google/logging/v2/BUILD.bazel b/google/logging/v2/BUILD.bazel index 8a62ace653aebe..4f5ec41a79ce70 100644 --- a/google/logging/v2/BUILD.bazel +++ b/google/logging/v2/BUILD.bazel @@ -286,6 +286,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":logging_nodejs_gapic", ":logging_proto", + "//google/logging/type:type_proto", ], ) diff --git a/google/maps/places/v1/BUILD.bazel b/google/maps/places/v1/BUILD.bazel index 9459027ab060fd..7a9af91e8d17c8 100644 --- a/google/maps/places/v1/BUILD.bazel +++ b/google/maps/places/v1/BUILD.bazel @@ -309,6 +309,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":places_nodejs_gapic", ":places_proto", + "//google/geo/type:viewport_proto", ], ) diff --git a/google/maps/playablelocations/v3/BUILD.bazel b/google/maps/playablelocations/v3/BUILD.bazel index f594736d1e0e80..5d4ebd83df5680 100644 --- a/google/maps/playablelocations/v3/BUILD.bazel +++ b/google/maps/playablelocations/v3/BUILD.bazel @@ -188,8 +188,10 @@ nodejs_gapic_assembly_pkg( name = "maps-playablelocations-v3-nodejs", deps = [ ":playablelocations_nodejs_gapic", + "//google/maps/playablelocations/v3/sample:resources_proto", ":playablelocations_proto", - ], + "//google/maps/unity:clientinfo_proto", + ], ) ruby_proto_library( diff --git a/google/shopping/merchant/inventories/v1beta/BUILD.bazel b/google/shopping/merchant/inventories/v1beta/BUILD.bazel index 63d5cf1be9c9be..44465bc0a2c6a1 100644 --- a/google/shopping/merchant/inventories/v1beta/BUILD.bazel +++ b/google/shopping/merchant/inventories/v1beta/BUILD.bazel @@ -1,3 +1,4 @@ + # This file was automatically generated by BuildFileGenerator # https://github.com/googleapis/rules_gapic/tree/master/bazel @@ -274,6 +275,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":inventories_nodejs_gapic", ":inventories_proto", + "//google/shopping/type:type_proto" ], ) diff --git a/google/shopping/merchant/reports/v1beta/BUILD.bazel b/google/shopping/merchant/reports/v1beta/BUILD.bazel index 8b7d669e485b18..c5ab22a0b4ff2e 100644 --- a/google/shopping/merchant/reports/v1beta/BUILD.bazel +++ b/google/shopping/merchant/reports/v1beta/BUILD.bazel @@ -270,6 +270,7 @@ nodejs_gapic_assembly_pkg( deps = [ ":reports_nodejs_gapic", ":reports_proto", + "//google/shopping/type:type_proto" ], )