
google.cloud.visionai.v1.warehouse.proto Maven / Gradle / Ivy
// Copyright 2024 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.visionai.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/visionai/v1/common.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/status.proto";
import "google/type/datetime.proto";
option csharp_namespace = "Google.Cloud.VisionAI.V1";
option go_package = "cloud.google.com/go/visionai/apiv1/visionaipb;visionaipb";
option java_multiple_files = true;
option java_outer_classname = "WarehouseProto";
option java_package = "com.google.cloud.visionai.v1";
option php_namespace = "Google\\Cloud\\VisionAI\\V1";
option ruby_package = "Google::Cloud::VisionAI::V1";
// Service that manages media content + metadata for streaming.
service Warehouse {
option (google.api.default_host) = "visionai.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates an asset inside corpus.
rpc CreateAsset(CreateAssetRequest) returns (Asset) {
option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*/corpora/*}/assets"
body: "asset"
};
option (google.api.method_signature) = "parent,asset,asset_id";
}
// Updates an asset inside corpus.
rpc UpdateAsset(UpdateAssetRequest) returns (Asset) {
option (google.api.http) = {
patch: "/v1/{asset.name=projects/*/locations/*/corpora/*/assets/*}"
body: "asset"
};
option (google.api.method_signature) = "asset,update_mask";
}
// Reads an asset inside corpus.
rpc GetAsset(GetAssetRequest) returns (Asset) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}"
};
option (google.api.method_signature) = "name";
}
// Lists an list of assets inside corpus.
rpc ListAssets(ListAssetsRequest) returns (ListAssetsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/corpora/*}/assets"
};
option (google.api.method_signature) = "parent";
}
// Deletes asset inside corpus.
rpc DeleteAsset(DeleteAssetRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}"
};
option (google.api.method_signature) = "name";
option (google.longrunning.operation_info) = {
response_type: "google.protobuf.Empty"
metadata_type: "DeleteAssetMetadata"
};
}
// 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) = {
post: "/v1/{parent=projects/*/locations/*}/corpora"
body: "corpus"
};
option (google.api.method_signature) = "parent,corpus";
option (google.longrunning.operation_info) = {
response_type: "Corpus"
metadata_type: "CreateCorpusMetadata"
};
}
// Gets corpus details inside a project.
rpc GetCorpus(GetCorpusRequest) returns (Corpus) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/corpora/*}"
};
option (google.api.method_signature) = "name";
}
// Updates a corpus in a project.
rpc UpdateCorpus(UpdateCorpusRequest) returns (Corpus) {
option (google.api.http) = {
patch: "/v1/{corpus.name=projects/*/locations/*/corpora/*}"
body: "corpus"
};
option (google.api.method_signature) = "corpus,update_mask";
}
// Lists all corpora in a project.
rpc ListCorpora(ListCorporaRequest) returns (ListCorporaResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/corpora"
};
option (google.api.method_signature) = "parent";
}
// Deletes a corpus only if its empty.
// Returns empty response.
rpc DeleteCorpus(DeleteCorpusRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/corpora/*}"
};
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) = {
post: "/v1/{parent=projects/*/locations/*/corpora/*}/dataSchemas"
body: "data_schema"
};
option (google.api.method_signature) = "parent,data_schema";
}
// Updates data schema inside corpus.
rpc UpdateDataSchema(UpdateDataSchemaRequest) returns (DataSchema) {
option (google.api.http) = {
patch: "/v1/{data_schema.name=projects/*/locations/*/corpora/*/dataSchemas/*}"
body: "data_schema"
};
option (google.api.method_signature) = "data_schema,update_mask";
}
// Gets data schema inside corpus.
rpc GetDataSchema(GetDataSchemaRequest) returns (DataSchema) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/corpora/*/dataSchemas/*}"
};
option (google.api.method_signature) = "name";
}
// Deletes data schema inside corpus.
rpc DeleteDataSchema(DeleteDataSchemaRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/corpora/*/dataSchemas/*}"
};
option (google.api.method_signature) = "name";
}
// Lists a list of data schemas inside corpus.
rpc ListDataSchemas(ListDataSchemasRequest)
returns (ListDataSchemasResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/corpora/*}/dataSchemas"
};
option (google.api.method_signature) = "parent";
}
// Creates annotation inside asset.
rpc CreateAnnotation(CreateAnnotationRequest) returns (Annotation) {
option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*/corpora/*/assets/*}/annotations"
body: "annotation"
};
option (google.api.method_signature) = "parent,annotation,annotation_id";
}
// Reads annotation inside asset.
rpc GetAnnotation(GetAnnotationRequest) returns (Annotation) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/corpora/*/assets/*/annotations/*}"
};
option (google.api.method_signature) = "name";
}
// Lists a list of annotations inside asset.
rpc ListAnnotations(ListAnnotationsRequest)
returns (ListAnnotationsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/corpora/*/assets/*}/annotations"
};
option (google.api.method_signature) = "parent";
}
// Updates annotation inside asset.
rpc UpdateAnnotation(UpdateAnnotationRequest) returns (Annotation) {
option (google.api.http) = {
patch: "/v1/{annotation.name=projects/*/locations/*/corpora/*/assets/*/annotations/*}"
body: "annotation"
};
option (google.api.method_signature) = "annotation,update_mask";
}
// Deletes annotation inside asset.
rpc DeleteAnnotation(DeleteAnnotationRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/corpora/*/assets/*/annotations/*}"
};
option (google.api.method_signature) = "name";
}
// Ingests data for the asset. It is not allowed to ingest a data chunk which
// is already expired according to TTL.
// This method is only available via the gRPC API (not HTTP since
// bi-directional streaming is not supported via HTTP).
rpc IngestAsset(stream IngestAssetRequest)
returns (stream IngestAssetResponse) {}
// Generates clips for downloading. The api takes in a time range, and
// generates a clip of the first content available after start_time and
// before end_time, which may overflow beyond these bounds.
// Returned clips are truncated if the total size of the clips are larger
// than 100MB.
rpc ClipAsset(ClipAssetRequest) returns (ClipAssetResponse) {
option (google.api.http) = {
post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:clip"
body: "*"
};
}
// Generates a uri for an HLS manifest. The api takes in a collection of time
// ranges, and generates a URI for an HLS manifest that covers all the
// requested time ranges.
rpc GenerateHlsUri(GenerateHlsUriRequest) returns (GenerateHlsUriResponse) {
option (google.api.http) = {
post: "/v1/{name=projects/*/locations/*/corpora/*/assets/*}:generateHlsUri"
body: "*"
};
}
// 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.
// --- General Rules ---
// 1. Request.search_config_id must not be associated with an existing
// SearchConfig.
// 2. Request must contain at least one non-empty search_criteria_property or
// facet_property.
// 3. mapped_fields must not be empty, and must map to existing UGA keys.
// 4. All mapped_fields must be of the same type.
// 5. All mapped_fields must share the same granularity.
// 6. All mapped_fields must share the same semantic SearchConfig match
// options.
// For property-specific rules, please reference the comments for
// FacetProperty and SearchCriteriaProperty.
rpc CreateSearchConfig(CreateSearchConfigRequest) returns (SearchConfig) {
option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*/corpora/*}/searchConfigs"
body: "search_config"
};
option (google.api.method_signature) =
"parent,search_config,search_config_id";
}
// Updates a search configuration inside a corpus.
//
// Please follow the rules below to create a valid UpdateSearchConfigRequest.
// --- General Rules ---
// 1. Request.search_configuration.name must already exist.
// 2. Request must contain at least one non-empty search_criteria_property or
// facet_property.
// 3. mapped_fields must not be empty, and must map to existing UGA keys.
// 4. All mapped_fields must be of the same type.
// 5. All mapped_fields must share the same granularity.
// 6. All mapped_fields must share the same semantic SearchConfig match
// options.
// For property-specific rules, please reference the comments for
// FacetProperty and SearchCriteriaProperty.
rpc UpdateSearchConfig(UpdateSearchConfigRequest) returns (SearchConfig) {
option (google.api.http) = {
patch: "/v1/{search_config.name=projects/*/locations/*/corpora/*/searchConfigs/*}"
body: "search_config"
};
option (google.api.method_signature) = "search_config,update_mask";
}
// Gets a search configuration inside a corpus.
rpc GetSearchConfig(GetSearchConfigRequest) returns (SearchConfig) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/corpora/*/searchConfigs/*}"
};
option (google.api.method_signature) = "name";
}
// Deletes a search configuration inside a corpus.
//
// For a DeleteSearchConfigRequest to be valid,
// Request.search_configuration.name must already exist.
rpc DeleteSearchConfig(DeleteSearchConfigRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/corpora/*/searchConfigs/*}"
};
option (google.api.method_signature) = "name";
}
// Lists all search configurations inside a corpus.
rpc ListSearchConfigs(ListSearchConfigsRequest)
returns (ListSearchConfigsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/corpora/*}/searchConfigs"
};
option (google.api.method_signature) = "parent";
}
// Creates a SearchHypernym inside a corpus.
rpc CreateSearchHypernym(CreateSearchHypernymRequest)
returns (SearchHypernym) {
option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*/corpora/*}/searchHypernyms"
body: "search_hypernym"
};
option (google.api.method_signature) =
"parent,search_hypernym,search_hypernym_id";
}
// Updates a SearchHypernym inside a corpus.
rpc UpdateSearchHypernym(UpdateSearchHypernymRequest)
returns (SearchHypernym) {
option (google.api.http) = {
patch: "/v1/{search_hypernym.name=projects/*/locations/*/corpora/*/searchHypernyms/*}"
body: "search_hypernym"
};
option (google.api.method_signature) = "search_hypernym,update_mask";
}
// Gets a SearchHypernym inside a corpus.
rpc GetSearchHypernym(GetSearchHypernymRequest) returns (SearchHypernym) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/corpora/*/searchHypernyms/*}"
};
option (google.api.method_signature) = "name";
}
// Deletes a SearchHypernym inside a corpus.
rpc DeleteSearchHypernym(DeleteSearchHypernymRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/corpora/*/searchHypernyms/*}"
};
option (google.api.method_signature) = "name";
}
// Lists SearchHypernyms inside a corpus.
rpc ListSearchHypernyms(ListSearchHypernymsRequest)
returns (ListSearchHypernymsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/corpora/*}/searchHypernyms"
};
option (google.api.method_signature) = "parent";
}
// Search media asset.
rpc SearchAssets(SearchAssetsRequest) returns (SearchAssetsResponse) {
option (google.api.http) = {
post: "/v1/{corpus=projects/*/locations/*/corpora/*}:searchAssets"
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.
enum FacetBucketType {
// Unspecified type.
FACET_BUCKET_TYPE_UNSPECIFIED = 0;
// Value type.
FACET_BUCKET_TYPE_VALUE = 1;
// Datetime type.
FACET_BUCKET_TYPE_DATETIME = 2;
// Fixed Range type.
FACET_BUCKET_TYPE_FIXED_RANGE = 3;
// Custom Range type.
FACET_BUCKET_TYPE_CUSTOM_RANGE = 4;
}
// Request message for CreateAssetRequest.
message CreateAssetRequest {
// Required. The parent resource where this asset will be 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" }
];
// Required. The asset to create.
Asset asset = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. The ID to use for the asset, which will become the final
// component of the asset's resource name if user choose to specify.
// Otherwise, asset id 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.
optional string asset_id = 3 [(google.api.field_behavior) = OPTIONAL];
}
// 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}/indexes/{index}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = { type: "visionai.googleapis.com/Index" }
];
}
// 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}`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "visionai.googleapis.com/Index"
}
];
// The maximum number of indexes to return. The service may return fewer than
// this value.
// 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 `ListIndexes` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListIndexes` must match
// the call that provided the page token.
string page_token = 3;
}
// 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 DeleteIndex.
message DeleteIndexRequest {
// Required. The name of the index to delete.
// Format:
// `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/Index" }
];
}
// 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/Index"
pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/indexes/{index}"
};
// 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;
// State CREATING.
CREATING = 1;
// State CREATED.
CREATED = 2;
// 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];
}
// 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
// within a single corpus.
message Corpus {
option (google.api.resource) = {
type: "visionai.googleapis.com/Corpus"
pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}"
};
// Type of the asset inside the corpus.
enum Type {
// The default type, not supposed to be used. If this default type is used,
// the corpus will be created as STREAM_VIDEO corpus.
TYPE_UNSPECIFIED = 0;
// 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.
// Format:
// `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
string name = 1;
// Required. The corpus name to shown in the UI. The name can be up to 32
// characters long.
string display_name = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Description of the corpus. Can be up to 25000 characters long.
string description = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. The default TTL value for all assets under the corpus without a
// asset level user-defined TTL. For STREAM_VIDEO type corpora, this is
// required and the maximum allowed
// default_ttl is 10 years.
google.protobuf.Duration default_ttl = 5
[(google.api.field_behavior) = OPTIONAL];
// 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.
message GetCorpusRequest {
// Required. The resource name of the corpus to retrieve.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" }
];
}
// Request message for UpdateCorpus.
message UpdateCorpusRequest {
// Required. The corpus which replaces the resource on the server.
Corpus corpus = 1 [(google.api.field_behavior) = REQUIRED];
// The list of fields to be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request message for ListCorpora.
message ListCorporaRequest {
// Required. The resource name of the project from which to list corpora.
string parent = 1 [(google.api.field_behavior) = REQUIRED];
// 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
// use the maximum size, which is 20.
int32 page_size = 2;
// A token identifying a page of results for the server to return.
// 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.
message ListCorporaResponse {
// The corpora in the project.
repeated Corpus corpora = 1;
// A token to retrieve next page of results.
// Pass to
// [ListCorporaRequest.page_token][google.cloud.visionai.v1.ListCorporaRequest.page_token]
// to obtain that page.
string next_page_token = 2;
}
// Request message for DeleteCorpus.
message DeleteCorpusRequest {
// Required. The resource name of the corpus to delete.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = { type: "visionai.googleapis.com/Corpus" }
];
}
// 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/{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" }
];
// Required. The data schema to create.
DataSchema data_schema = 2 [(google.api.field_behavior) = REQUIRED];
}
// Data schema indicates how the user specified annotation is interpreted in the
// system.
message DataSchema {
option (google.api.resource) = {
type: "visionai.googleapis.com/DataSchema"
pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/dataSchemas/{data_schema}"
};
// Resource name of the data schema in the form of:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/dataSchemas/{data_schema}`
// where {data_schema} part should be the same as the `key` field below.
string name = 1;
// Required. The key of this data schema. This key should be matching the key
// of user specified annotation and unique inside corpus. This value can 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 key = 2 [(google.api.field_behavior) = REQUIRED];
// The schema details mapping to the key.
DataSchemaDetails schema_details = 3;
}
// Data schema details indicates the data type and the data struct corresponding
// to the key of user specified annotation.
message DataSchemaDetails {
// The configuration for `PROTO_ANY` data type.
message ProtoAnyConfig {
// The type URI of the proto message.
string type_uri = 1;
}
// The configuration for `LIST` data type.
message ListConfig {
// The value's data schema in the list.
DataSchemaDetails value_schema = 1;
}
// The configuration for `CUSTOMIZED_STRUCT` data type.
message CustomizedStructConfig {
// Direct child elements data schemas.
map field_schemas = 1;
}
// The search strategy for annotations value of the `key`.
message SearchStrategy {
// Filter on the confidence score. Only adds to index if the confidence
// score is higher than the threshold.
// Example data schema:
// key: "name-confidence-pair"
// type: CUSTOMIZED_STRUCT
// granularity: GRANULARITY_PARTITION_LEVEL
// customized_struct_config {
// field_schemas {
// key: "name"
// type: STRING
// granularity: GRANULARITY_PARTITION_LEVEL
// search_strategy {
// search_strategy_type: SMART_SEARCH
// confidence_score_index_config {
// field_path: "name-confidence-pair.score"
// threshold: 0.6
// }
// }
// }
// field_schemas {
// key: "score"
// type: FLOAT
// granularity: GRANULARITY_PARTITION_LEVEL
// }
// }
// This means only "name" with score > 0.6 will be indexed.
message ConfidenceScoreIndexConfig {
// Required. The path to the confidence score field. It is a string that
// concatenates all the data schema keys along the path. See the example
// above. If the data schema contains LIST, use '_ENTRIES' to concatenate.
// Example data schema contains a list:
// "key": "list-name-score",
// "schemaDetails": {
// "type": "LIST",
// "granularity": "GRANULARITY_PARTITION_LEVEL",
// "listConfig": {
// "valueSchema": {
// "type": "CUSTOMIZED_STRUCT",
// "granularity": "GRANULARITY_PARTITION_LEVEL",
// "customizedStructConfig": {
// "fieldSchemas": {
// "name": {
// "type": "STRING",
// "granularity": "GRANULARITY_PARTITION_LEVEL",
// "searchStrategy": {
// "searchStrategyType": "SMART_SEARCH"
// "confidence_score_index_config": {
// "field_path": "list-name-score._ENTRIES.score",
// "threshold": "0.9",
// }
// }
// },
// "score": {
// "type": "FLOAT",
// "granularity": "GRANULARITY_PARTITION_LEVEL",
// }
// }
// }
// }
// }
// }
string field_path = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The threshold.
float threshold = 2 [(google.api.field_behavior) = REQUIRED];
}
// The types of search strategies to be applied on the annotation key.
enum SearchStrategyType {
// Annotatation values of the `key` above will not be searchable.
NO_SEARCH = 0;
// When searching with `key`, the value must be exactly as the annotation
// value that has been ingested.
EXACT_SEARCH = 1;
// When searching with `key`, Warehouse will perform broad search based on
// semantic of the annotation value.
SMART_SEARCH = 2;
}
// The type of search strategy to be applied on the `key` above.
// The allowed `search_strategy_type` is different for different data types,
// which is documented in the DataSchemaDetails.DataType. Specifying
// unsupported `search_strategy_type` for data types will result in
// INVALID_ARGUMENT error.
optional SearchStrategyType search_strategy_type = 1;
// Optional. Configs the path to the confidence score, and the threshold.
// Only if the score is greater than the threshold, current field will be
// built into the index. Only applies to leaf nodes using EXACT_SEARCH or
// SMART_SEARCH.
ConfidenceScoreIndexConfig confidence_score_index_config = 2
[(google.api.field_behavior) = OPTIONAL];
}
// Data type of the annotation.
enum DataType {
// Unspecified type.
DATA_TYPE_UNSPECIFIED = 0;
// Integer type.
// Allowed search strategies:
// - DataSchema.SearchStrategy.NO_SEARCH,
// - DataSchema.SearchStrategy.EXACT_SEARCH.
// Supports query by IntRangeArray.
INTEGER = 1;
// Float type.
// Allowed search strategies:
// - DataSchema.SearchStrategy.NO_SEARCH,
// - DataSchema.SearchStrategy.EXACT_SEARCH.
// Supports query by FloatRangeArray.
FLOAT = 2;
// String type.
// Allowed search strategies:
// - DataSchema.SearchStrategy.NO_SEARCH,
// - DataSchema.SearchStrategy.EXACT_SEARCH,
// - DataSchema.SearchStrategy.SMART_SEARCH.
STRING = 3;
// Supported formats:
// %Y-%m-%dT%H:%M:%E*S%E*z (absl::RFC3339_full)
// %Y-%m-%dT%H:%M:%E*S
// %Y-%m-%dT%H:%M%E*z
// %Y-%m-%dT%H:%M
// %Y-%m-%dT%H%E*z
// %Y-%m-%dT%H
// %Y-%m-%d%E*z
// %Y-%m-%d
// %Y-%m
// %Y
// Allowed search strategies:
// - DataSchema.SearchStrategy.NO_SEARCH,
// - DataSchema.SearchStrategy.EXACT_SEARCH.
// Supports query by DateTimeRangeArray.
DATETIME = 5;
// Geo coordinate type.
// Allowed search strategies:
// - DataSchema.SearchStrategy.NO_SEARCH,
// - DataSchema.SearchStrategy.EXACT_SEARCH.
// Supports query by GeoLocationArray.
GEO_COORDINATE = 7;
// Type to pass any proto as available in annotations.proto. Only use
// internally.
// Available proto types and its corresponding search behavior:
// - ImageObjectDetectionPredictionResult, allows SMART_SEARCH on
// display_names and NO_SEARCH.
// - ClassificationPredictionResult, allows SMART_SEARCH on display_names
// and NO_SEARCH.
// - ImageSegmentationPredictionResult, allows NO_SEARCH.
// - VideoActionRecognitionPredictionResult, allows SMART_SEARCH on
// display_name and NO_SEARCH.
// - VideoObjectTrackingPredictionResult, allows SMART_SEARCH on
// display_name and NO_SEARCH.
// - VideoClassificationPredictionResult, allows SMART_SEARCH on
// display_name and NO_SEARCH.
// - OccupancyCountingPredictionResult, allows EXACT_SEARCH on
// stats.full_frame_count.count and NO_SEARCH.
// - ObjectDetectionPredictionResult, allows SMART_SEARCH on
// identified_boxes.entity.label_string and NO_SEARCH.
PROTO_ANY = 8;
// Boolean type.
// Allowed search strategies:
// - DataSchema.SearchStrategy.NO_SEARCH,
// - DataSchema.SearchStrategy.EXACT_SEARCH.
BOOLEAN = 9;
// List type.
// - Each element in the list must be of the exact same data schema;
// otherwise, they are invalid arguments.
// - List level cannot set search strategy. Leaf node level can do.
// - Elements cannot be another list (no list of list).
// - Elements can be CUSTOMIZED_STRUCT, and max number of layers is 10.
LIST = 10;
// Struct type.
// - SearchStrategy:
// * Data Schema that's CUSTOMIZED_STRUCT cannot set search strategy.
// * Leaf-node elements allow setting search strategy based on element's
// SearchStrategy restriction.
// - Nested layer restrictions:
// * Data Schema that's CUSTOMIZED_STRUCT allows its fields to be of
// CUSTOMIZED_STRUCT as well, but the overall layers restriction is 10.
CUSTOMIZED_STRUCT = 6;
}
// The granularity of annotations under this DataSchema.
enum Granularity {
// Unspecified granularity.
GRANULARITY_UNSPECIFIED = 0;
// Asset-level granularity (annotations must not contain partition info).
GRANULARITY_ASSET_LEVEL = 1;
// Partition-level granularity (annotations must contain partition info).
GRANULARITY_PARTITION_LEVEL = 2;
}
// Type of the annotation.
optional DataType type = 1;
// Config for protobuf any type.
ProtoAnyConfig proto_any_config = 6;
// Config for List data type.
ListConfig list_config = 8;
// Config for CustomizedStruct data type.
CustomizedStructConfig customized_struct_config = 9;
// The granularity associated with this DataSchema.
optional Granularity granularity = 5;
// The search strategy to be applied on the `key` above.
SearchStrategy search_strategy = 7;
}
// Request message for UpdateDataSchema.
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}`
DataSchema data_schema = 1 [(google.api.field_behavior) = REQUIRED];
// The list of fields to be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request message for GetDataSchema.
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}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/DataSchema"
}
];
}
// Request message for DeleteDataSchema.
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}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/DataSchema"
}
];
}
// Request message for ListDataSchemas.
message ListDataSchemasRequest {
// Required. The parent, which owns this collection of data schemas.
// Format:
// `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "visionai.googleapis.com/DataSchema"
}
];
// The maximum number of data schemas to return. The service may return fewer
// than this value. If unspecified, at most 50 data schemas 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 `ListDataSchemas` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListDataSchemas` must
// match the call that provided the page token.
string page_token = 3;
}
// Response message for ListDataSchemas.
message ListDataSchemasResponse {
// The data schemas from the specified corpus.
repeated DataSchema data_schemas = 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 CreateAnnotation.
message CreateAnnotationRequest {
// Required. The parent resource where this annotation will be created.
// 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" }
];
// Required. The annotation to create.
Annotation annotation = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. The ID to use for the annotation, which will become the final
// component of the annotation's resource name if user choose to specify.
// Otherwise, annotation id 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.
optional string annotation_id = 3 [(google.api.field_behavior) = OPTIONAL];
}
// An annotation is a resource in asset. It represents a key-value mapping of
// content in asset.
message Annotation {
option (google.api.resource) = {
type: "visionai.googleapis.com/Annotation"
pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}"
};
// Resource name of the annotation.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}`
string name = 1;
// User provided annotation.
UserSpecifiedAnnotation user_specified_annotation = 2;
}
// Annotation provided by users.
message UserSpecifiedAnnotation {
// Required. Key of the annotation. The key must be set with type by
// CreateDataSchema.
string key = 1 [(google.api.field_behavior) = REQUIRED];
// Value of the annotation. The value must be able to convert
// to the type according to the data schema.
AnnotationValue value = 2;
// Partition information in time and space for the sub-asset level annotation.
Partition partition = 3;
}
// Location Coordinate Representation
message GeoCoordinate {
// Latitude Coordinate. Degrees [-90 .. 90]
double latitude = 1;
// Longitude Coordinate. Degrees [-180 .. 180]
double longitude = 2;
}
// Value of annotation, including all types available in data schema.
message AnnotationValue {
oneof value {
// Value of int type annotation.
int64 int_value = 1;
// Value of float type annotation.
float float_value = 2;
// Value of string type annotation.
string str_value = 3;
// Value of date time type annotation.
string datetime_value = 5;
// Value of geo coordinate type annotation.
GeoCoordinate geo_coordinate = 7;
// Value of any proto value.
google.protobuf.Any proto_any_value = 8;
// Value of boolean type annotation.
bool bool_value = 9;
// 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.
AnnotationList list_value = 11;
// Value of custom struct type annotation.
AnnotationCustomizedStruct customized_struct_value = 6;
}
}
// List representation in annotation.
message AnnotationList {
// The values of `LIST` data type annotation.
repeated AnnotationValue values = 1;
}
// Customized struct represnation in annotation.
message AnnotationCustomizedStruct {
// A map from elements' keys to element's annotation value.
map elements = 2;
}
// Request message for GetAnnotation API.
message ListAnnotationsRequest {
// The parent, which owns this collection of annotations.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}`
string parent = 1 [
(google.api.resource_reference) = { type: "visionai.googleapis.com/Asset" }
];
// The maximum number of annotations to return. The service may return fewer
// than this value. If unspecified, at most 50 annotations 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 `ListAnnotations` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to `ListAnnotations` must
// match the call that provided the page token.
string page_token = 3;
// The filter applied to the returned list.
// We only support filtering for the following fields:
// For corpus of STREAM_VIDEO type:
// `partition.temporal_partition.start_time`,
// `partition.temporal_partition.end_time`, and `key`.
// For corpus of VIDEO_ON_DEMAND type,
// `partition.relative_temporal_partition.start_offset`,
// `partition.relative_temporal_partition.end_offset`, and `key`.
// For corpus of IMAGE type, only `key` is supported.
// Timestamps are specified in the RFC-3339 format, and only one restriction
// may be applied per field, joined by conjunctions.
// Format:
// "partition.temporal_partition.start_time > "2012-04-21T11:30:00-04:00" AND
// partition.temporal_partition.end_time < "2012-04-22T11:30:00-04:00" AND
// key = "example_key""
string filter = 4;
}
// Request message for ListAnnotations API.
message ListAnnotationsResponse {
// The annotations from the specified asset.
repeated Annotation annotations = 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 GetAnnotation API.
message GetAnnotationRequest {
// Required. The name of the annotation to retrieve.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/Annotation"
}
];
}
// Request message for UpdateAnnotation API.
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}`
Annotation annotation = 1 [(google.api.field_behavior) = REQUIRED];
// The list of fields to be updated.
google.protobuf.FieldMask update_mask = 2;
}
// Request message for DeleteAnnotation API.
message DeleteAnnotationRequest {
// Required. The name of the annotation to delete.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/assets/{asset}/annotations/{annotation}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/Annotation"
}
];
}
// 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/{project_number}/locations/{location_id}/corpora/{corpus_id}`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "visionai.googleapis.com/SearchConfig"
}
];
// Required. The search config to create.
SearchConfig search_config = 2 [(google.api.field_behavior) = REQUIRED];
// Required. ID to use for the new search config. Will become the final
// component of the SearchConfig's resource name. 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 search_config_id = 3 [(google.api.field_behavior) = REQUIRED];
}
// Request message for UpdateSearchConfig.
message UpdateSearchConfigRequest {
// Required. The search configuration to update.
//
// 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}`
SearchConfig search_config = 1 [(google.api.field_behavior) = REQUIRED];
// The list of fields to be updated. If left unset, all field paths will be
// updated/overwritten.
google.protobuf.FieldMask update_mask = 2;
}
// Request message for GetSearchConfig.
message GetSearchConfigRequest {
// Required. The name of the search configuration to retrieve.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/SearchConfig"
}
];
}
// Request message for DeleteSearchConfig.
message DeleteSearchConfigRequest {
// Required. The name of the search configuration to delete.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/SearchConfig"
}
];
}
// Request message for ListSearchConfigs.
message ListSearchConfigsRequest {
// Required. The parent, which owns this collection of search configurations.
// 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/SearchConfig"
}
];
// The maximum number of search configurations to return. 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;
// A page token, received from a previous `ListSearchConfigs` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to
// `ListSearchConfigs` must match the call that provided the page
// token.
string page_token = 3;
}
// Response message for ListSearchConfigs.
message ListSearchConfigsResponse {
// The search configurations from the specified corpus.
repeated SearchConfig search_configs = 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;
}
// SearchConfig stores different properties that will affect search
// behaviors and search results.
message SearchConfig {
option (google.api.resource) = {
type: "visionai.googleapis.com/SearchConfig"
pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}"
};
// Resource name of the search configuration.
// For CustomSearchCriteria, search_config would be the search
// operator name. For Facets, search_config would be the facet
// dimension name.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/searchConfigs/{search_config}`
string name = 1;
// Establishes a FacetDimension and associated specifications.
FacetProperty facet_property = 2;
// Creates a mapping between a custom SearchCriteria and one or more UGA keys.
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
// FixedRangeBucketSpec when you want to create multiple buckets with equal
// granularities. Using integer bucket value as an example, when
// bucket_start = 0, bucket_granularity = 10, bucket_count = 5, this facet
// will be aggregated via the following buckets:
// [-inf, 0), [0, 10), [10, 20), [20, 30), [30, inf).
// Notably, bucket_count <= 1 is an invalid spec.
message FixedRangeBucketSpec {
// Lower bound of the bucket. NOTE: Only integer type is currently supported
// for this field.
FacetValue bucket_start = 1;
// Bucket granularity. NOTE: Only integer type is currently supported for
// this field.
FacetValue bucket_granularity = 2;
// Total number of buckets.
int32 bucket_count = 3;
}
// If bucket type is CUSTOM_RANGE, specify how values are bucketized. Use
// integer bucket value as an example, when the endpoints are 0, 10, 100, and
// 1000, we will generate the following facets:
// [-inf, 0), [0, 10), [10, 100), [100, 1000), [1000, inf).
// Notably:
// - endpoints must be listed in ascending order. Otherwise, the SearchConfig
// API will reject the facet config.
// - < 1 endpoints is an invalid spec.
message CustomRangeBucketSpec {
// Currently, only integer type is supported for this field.
repeated FacetValue endpoints = 1;
}
// If bucket type is DATE, specify how date values are bucketized.
message DateTimeBucketSpec {
// Granularity enum for the datetime bucket.
enum Granularity {
// Unspecified granularity.
GRANULARITY_UNSPECIFIED = 0;
// Granularity is year.
YEAR = 1;
// Granularity is month.
MONTH = 2;
// Granularity is day.
DAY = 3;
}
// Granularity of date type facet.
Granularity granularity = 1;
}
oneof range_facet_config {
// Fixed range facet bucket config.
FixedRangeBucketSpec fixed_range_bucket_spec = 5;
// Custom range facet bucket config.
CustomRangeBucketSpec custom_range_bucket_spec = 6;
// Datetime range facet bucket config.
DateTimeBucketSpec datetime_bucket_spec = 7;
}
// Name of the facets, which are the dimensions users want to use to refine
// search results. `mapped_fields` will match UserSpecifiedDataSchema keys.
//
// For example, user can add a bunch of UGAs with the same key, such as
// player:adam, player:bob, player:charles. When multiple mapped_fields are
// specified, will merge their value together as final facet value. E.g.
// home_team: a, home_team:b, away_team:a, away_team:c, when facet_field =
// [home_team, away_team], facet_value will be [a, b, c].
//
// UNLESS this is a 1:1 facet dimension (mapped_fields.size() == 1) AND the
// mapped_field equals the parent SearchConfig.name, the parent must
// also contain a SearchCriteriaProperty that maps to the same fields.
// mapped_fields must not be empty.
repeated string mapped_fields = 1;
// Display name of the facet. To be used by UI for facet rendering.
string display_name = 2;
// Maximum number of unique bucket to return for one facet. Bucket number can
// be large for high-cardinality facet such as "player". We only return top-n
// most related ones to user. If it's <= 0, the server will decide the
// appropriate result_size.
int64 result_size = 3;
// Facet bucket type e.g. value, range.
FacetBucketType bucket_type = 4;
}
// Search resource: SearchHypernym.
// For example,
// { hypernym: "vehicle"
// hyponyms: ["sedan", "truck"] }
// This means in SMART_SEARCH mode, searching for "vehicle" will also return
// results with "sedan" or "truck" as annotations.
message SearchHypernym {
option (google.api.resource) = {
type: "visionai.googleapis.com/SearchHypernym"
pattern: "projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}"
};
// Resource name of the SearchHypernym.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}`
string name = 1;
// Optional. The hypernym.
string hypernym = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. Hyponyms that the hypernym is mapped to.
repeated string hyponyms = 3 [(google.api.field_behavior) = OPTIONAL];
}
// Request message for creating SearchHypernym.
message CreateSearchHypernymRequest {
// Required. The parent resource where this SearchHypernym 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 SearchHypernym to create.
SearchHypernym search_hypernym = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. The search hypernym id.
// If omitted, a random UUID will be generated.
optional string search_hypernym_id = 3
[(google.api.field_behavior) = OPTIONAL];
}
// Request message for updating SearchHypernym.
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}`
SearchHypernym search_hypernym = 1 [(google.api.field_behavior) = REQUIRED];
// The list of fields to be updated. If left unset, all field paths will be
// updated/overwritten.
google.protobuf.FieldMask update_mask = 2;
}
// Request message for getting SearchHypernym.
message GetSearchHypernymRequest {
// Required. The name of the SearchHypernym to retrieve.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/SearchHypernym"
}
];
}
// Request message for deleting SearchHypernym.
message DeleteSearchHypernymRequest {
// Required. The name of the SearchHypernym to delete.
// Format:
// `projects/{project_number}/locations/{location}/corpora/{corpus}/searchHypernyms/{search_hypernym}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/SearchHypernym"
}
];
}
// Request message for listing SearchHypernyms.
message ListSearchHypernymsRequest {
// Required. The parent, which owns this collection of SearchHypernyms.
// 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/SearchHypernym"
}
];
// The maximum number of SearchHypernyms returned. 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;
// A page token, received from a previous `SearchHypernym` call.
// Provide this to retrieve the subsequent page.
//
// When paginating, all other parameters provided to
// `SearchHypernym` must match the call that provided the page
// token.
string page_token = 3;
}
// Response message for listing SearchHypernyms.
message ListSearchHypernymsResponse {
// The SearchHypernyms from the specified corpus.
repeated SearchHypernym search_hypernyms = 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;
}
// Central configuration for custom search criteria.
message SearchCriteriaProperty {
// Each mapped_field corresponds to a UGA key. To understand how this property
// works, take the following example. In the SearchConfig table, the
// user adds this entry:
// search_config {
// name: "person"
// search_criteria_property {
// mapped_fields: "player"
// mapped_fields: "coach"
// }
// }
//
// Now, when a user issues a query like:
// criteria {
// field: "person"
// text_array {
// txt_values: "Tom Brady"
// txt_values: "Bill Belichick"
// }
// }
//
// MWH search will return search documents where (player=Tom Brady ||
// coach=Tom Brady || player=Bill Belichick || coach=Bill Belichick).
repeated string mapped_fields = 1;
}
// Definition of a single value with generic type.
message FacetValue {
oneof value {
// String type value.
string string_value = 1;
// Integer type value.
int64 integer_value = 2;
// Datetime type value.
google.type.DateTime datetime_value = 3;
}
}
// Holds the facet value, selections state, and metadata.
message FacetBucket {
// The range of values [start, end) for which faceting is applied.
message Range {
// Start of the range. Non-existence indicates some bound (e.g. -inf).
FacetValue start = 1;
// End of the range. Non-existence indicates some bound (e.g. inf).
FacetValue end = 2;
}
// Bucket associated with a facet. For example, bucket of facet “team”
// can be "49ers", "patriots", etc; bucket of facet "player" can be "tom
// brady", "drew brees", etc.
oneof bucket_value {
// Singular value.
FacetValue value = 2;
// Range value.
Range range = 4;
}
// Whether one facet bucket is selected. This field represents user's facet
// selection. It is set by frontend in SearchVideosRequest.
bool selected = 3;
}
// A group of facet buckets to be passed back and forth between backend &
// frontend.
message FacetGroup {
// Unique id of the facet group.
string facet_id = 1;
// Display name of the facet. To be used by UI for facet rendering.
string display_name = 2;
// Buckets associated with the facet. E.g. for "Team" facet, the bucket
// can be 49ers, patriots, etc.
repeated FacetBucket buckets = 3;
// Facet bucket type.
FacetBucketType bucket_type = 4;
// If true, return query matched annotations for this facet group's selection.
// This option is only applicable for facets based on partition level
// annotations. It supports the following facet values:
// - INTEGER
// - STRING (DataSchema.SearchStrategy.EXACT_SEARCH only)
bool fetch_matched_annotations = 5;
}
// Request message for IngestAsset API.
message IngestAssetRequest {
// Configuration for the data.
message Config {
// Type information for video data.
message VideoType {
// Container format of the video.
enum ContainerFormat {
// The default type, not supposed to be used.
CONTAINER_FORMAT_UNSPECIFIED = 0;
// Mp4 container format.
CONTAINER_FORMAT_MP4 = 1;
}
// Container format of the video data.
ContainerFormat container_format = 1;
}
oneof data_type {
// Type information for video data.
VideoType video_type = 2;
}
// Required. The resource name of the asset that the ingested data belongs
// to.
string asset = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "visionai.googleapis.com/Asset"
}
];
}
// Contains the data and the corresponding time range this data is for.
message TimeIndexedData {
// Data to be ingested.
bytes data = 1;
// Time range of the data.
Partition.TemporalPartition temporal_partition = 2;
}
oneof streaming_request {
// Provides information for the data and the asset resource name that the
// data belongs to. The first `IngestAssetRequest` message must only contain
// a `Config` message.
Config config = 1;
// Data to be ingested.
TimeIndexedData time_indexed_data = 2;
}
}
// Response message for IngestAsset API.
message IngestAssetResponse {
// Time range of the data that has been successfully ingested.
Partition.TemporalPartition successfully_ingested_partition = 1;
}
// Request message for ClipAsset API.
message ClipAssetRequest {
// Required. The resource name of the asset to request clips 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" }
];
// Required. The time range to request clips for.
Partition.TemporalPartition temporal_partition = 2
[(google.api.field_behavior) = REQUIRED];
}
// Response message for ClipAsset API.
message ClipAssetResponse {
// Signed uri with corresponding time range.
message TimeIndexedUri {
// Time range of the video that the uri is for.
Partition.TemporalPartition temporal_partition = 1;
// Signed uri to download the video clip.
string uri = 2;
}
// A list of signed uris to download the video clips that cover the requested
// time range ordered by time.
repeated TimeIndexedUri time_indexed_uris = 1;
}
// Request message for GenerateHlsUri API.
message GenerateHlsUriRequest {
// Required. The resource name of the asset to request clips 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" }
];
// The time range to request clips for. Will be ignored if `get_live_view` is
// set to True. The total time range requested should be smaller than 24h.
repeated Partition.TemporalPartition temporal_partitions = 2;
// Option to exclusively show a livestream of the asset with up to 3 minutes
// of backlog data.
bool live_view_enabled = 3;
}
// Response message for GenerateHlsUri API.
message GenerateHlsUriResponse {
// A signed uri to download the HLS manifest corresponding to the requested
// times.
string uri = 1;
// A list of temporal partitions of the content returned in the order they
// appear in the stream.
repeated Partition.TemporalPartition temporal_partitions = 2;
}
// Request message for SearchAssets.
message SearchAssetsRequest {
// Sorting specification. If this field is not specified, by default:
// - STREAM_VIDEO: search results are sorted by the start time.
oneof sort_spec {
// Sort by the value under the data schema key.
SchemaKeySortingStrategy schema_key_sorting_strategy = 9;
}
// Required. The parent corpus to search.
// 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" }
];
// The number of results to be returned in this page. If it's 0, the server
// will decide the appropriate page_size.
int32 page_size = 2;
// The continuation token to fetch the next page. If empty, it means it is
// fetching the first page.
string page_token = 3;
// Time ranges that matching video content must fall within. If no ranges are
// provided, there will be no time restriction. This field is treated just
// like the criteria below, but defined separately for convenience as it is
// used frequently. Note that if the end_time is in the future, it will be
// clamped to the time the request was received.
DateTimeRangeArray content_time_ranges = 5;
// Criteria applied to search results.
repeated Criteria criteria = 4;
// Stores most recent facet selection state. Only facet groups with user's
// selection will be presented here. Selection state is either selected or
// unselected. Only selected facet buckets will be used as search criteria.
repeated FacetGroup facet_selections = 6;
// A list of annotation keys to specify the annotations to be retrieved and
// returned with each search result.
// Annotation granularity must be GRANULARITY_ASSET_LEVEL and its search
// strategy must not be NO_SEARCH.
repeated string result_annotation_keys = 8;
// Global search query. Allows user to search assets without needing to
// specify which field the value belongs to.
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.
message Option {
// When one result has multiple values with the same key, specify
// which value is used to sort. By default, AGGREGATE_METHOD_LARGEST
// is used when results are sorted in decreasing order,
// AGGREGATE_METHOD_SMALLEST is used when results are sorted in
// incresing order.
enum AggregateMethod {
// The unspecified aggregate method will be overwritten as mentioned
// above.
AGGREGATE_METHOD_UNSPECIFIED = 0;
// Take the (lexicographical or numerical) largest value to sort.
AGGREGATE_METHOD_LARGEST = 1;
// Take the (lexicographical or numerical) smallest value to sort.
AGGREGATE_METHOD_SMALLEST = 2;
}
// The data used to sort.
string data_schema_key = 1;
// Whether to sort in decreasing order or increasing order.
// By default, results are sorted in incresing order.
bool sort_decreasing = 2;
// Aggregate method for the current data schema key.
optional AggregateMethod aggregate_method = 3;
}
// Options in the front have high priority than those in the back.
repeated Option options = 1;
}
// The metadata for DeleteAsset API that embeds in
// [metadata][google.longrunning.Operation.metadata] field.
message DeleteAssetMetadata {}
// Stores the criteria-annotation matching results for each search result item.
message AnnotationMatchingResult {
// The criteria used for matching. It can be an input search criteria or a
// criteria converted from a facet selection.
Criteria criteria = 1;
// Matched annotations for the criteria.
repeated Annotation matched_annotations = 2;
// Status of the match result. Possible values:
// FAILED_PRECONDITION - the criteria is not eligible for match.
// OK - matching is performed.
google.rpc.Status status = 3;
}
// Search result contains asset name and corresponding time ranges.
message SearchResultItem {
// The resource name of the asset.
// Format:
// `projects/{project_number}/locations/{location_id}/corpora/{corpus_id}/assets/{asset_id}`
string asset = 1;
// The matched asset segments.
// Deprecated: please use singular `segment` field.
repeated Partition.TemporalPartition segments = 2 [deprecated = true];
// 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;
// Criteria or facet-selection based annotation matching results associated to
// this search result item. Only contains results for criteria or
// facet_selections with fetch_matched_annotations=true.
repeated AnnotationMatchingResult annotation_matching_results = 4;
}
// Response message for SearchAssets.
message SearchAssetsResponse {
// Returned search results.
repeated SearchResultItem search_result_items = 1;
// The next-page continuation token.
string next_page_token = 2;
// Facet search results of a given query, which contains user's
// already-selected facet values and updated facet search results.
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.
optional int64 start = 1;
// End of the int range.
optional int64 end = 2;
}
// Float range type.
message FloatRange {
// Start of the float range.
optional float start = 1;
// End of the float range.
optional float end = 2;
}
// A list of string-type values.
message StringArray {
// String type values.
repeated string txt_values = 1;
}
// A list of integer range values.
message IntRangeArray {
// Int range values.
repeated IntRange int_ranges = 1;
}
// A list of float range values.
message FloatRangeArray {
// Float range values.
repeated FloatRange float_ranges = 1;
}
// Datetime range type.
message DateTimeRange {
// Start date time.
google.type.DateTime start = 1;
// End data time.
google.type.DateTime end = 2;
}
// A list of datetime range values.
message DateTimeRangeArray {
// Date time ranges.
repeated DateTimeRange date_time_ranges = 1;
}
// Representation of a circle area.
message CircleArea {
// Latitude of circle area's center. Degrees [-90 .. 90]
double latitude = 1;
// Longitude of circle area's center. Degrees [-180 .. 180]
double longitude = 2;
// Radius of the circle area in meters.
double radius_meter = 3;
}
// A list of locations.
message GeoLocationArray {
// A list of circle areas.
repeated CircleArea circle_areas = 1;
}
message BoolValue {
bool value = 1;
}
// Filter criteria applied to current search results.
message Criteria {
oneof value {
// The text values associated with the field.
StringArray text_array = 2;
// The integer ranges associated with the field.
IntRangeArray int_range_array = 3;
// The float ranges associated with the field.
FloatRangeArray float_range_array = 4;
// The datetime ranges associated with the field.
DateTimeRangeArray date_time_range_array = 5;
// Geo Location array.
GeoLocationArray geo_location_array = 6;
// A Boolean value.
BoolValue bool_value = 7;
}
// The UGA field or ML field to apply filtering criteria.
string field = 1;
// If true, return query matched annotations for this criteria.
// This option is only applicable for inclusion criteria, i.e., not exclusion
// criteria, with partition level annotations. It supports the following data
// types:
// - INTEGER
// - FLOAT
// - STRING (DataSchema.SearchStrategy.EXACT_SEARCH only)
// - BOOLEAN
bool fetch_matched_annotations = 8;
}
// Partition to specify the partition in time and space for sub-asset level
// annotation.
message Partition {
// Partition of asset in UTC Epoch time. Supported by STREAM_VIDEO corpus
// type.
message TemporalPartition {
// Start time of the partition.
google.protobuf.Timestamp start_time = 1;
// End time of the partition.
google.protobuf.Timestamp end_time = 2;
}
// Partition of asset in space.
message SpatialPartition {
// The minimum x coordinate value.
optional int64 x_min = 1;
// The minimum y coordinate value.
optional int64 y_min = 2;
// The maximum x coordinate value.
optional int64 x_max = 3;
// The maximum y coordinate value.
optional int64 y_max = 4;
}
// Partition of asset in relative time. Supported by VIDEO_ON_DEMAND corpus
// type.
message RelativeTemporalPartition {
// Start time offset of the partition.
google.protobuf.Duration start_offset = 1;
// End time offset of the partition.
google.protobuf.Duration end_offset = 2;
}
// Partition of asset in time.
TemporalPartition temporal_partition = 1;
// Partition of asset in space.
SpatialPartition spatial_partition = 2;
// Partition of asset in time.
RelativeTemporalPartition relative_temporal_partition = 3;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy