From f01a88710a7a40af0fbb6f79ad6fa0a651fc9bd7 Mon Sep 17 00:00:00 2001 From: Google APIs Date: Thu, 20 Jun 2019 16:41:38 -0700 Subject: [PATCH] Synchronize new proto/yaml changes. PiperOrigin-RevId: 254297727 --- .../datalabeling/datalabeling_v1beta1.yaml | 129 +++--- .../datalabeling/v1beta1/annotation.proto | 99 ++--- .../v1beta1/annotation_spec_set.proto | 10 +- .../v1beta1/data_labeling_service.proto | 383 ++++++++++++++---- .../datalabeling/v1beta1/data_payloads.proto | 75 ++++ .../v1beta1/datalabeling_gapic.yaml | 179 ++++++-- .../cloud/datalabeling/v1beta1/dataset.proto | 222 +++++----- .../datalabeling/v1beta1/evaluation.proto | 167 ++++++++ .../datalabeling/v1beta1/evaluation_job.proto | 151 +++++++ .../v1beta1/human_annotation_config.proto | 12 +- .../datalabeling/v1beta1/instruction.proto | 25 +- .../datalabeling/v1beta1/operations.proto | 89 ++-- 12 files changed, 1156 insertions(+), 385 deletions(-) create mode 100644 google/cloud/datalabeling/v1beta1/data_payloads.proto create mode 100644 google/cloud/datalabeling/v1beta1/evaluation.proto create mode 100644 google/cloud/datalabeling/v1beta1/evaluation_job.proto diff --git a/google/cloud/datalabeling/datalabeling_v1beta1.yaml b/google/cloud/datalabeling/datalabeling_v1beta1.yaml index 26d34e06..80f481c2 100644 --- a/google/cloud/datalabeling/datalabeling_v1beta1.yaml +++ b/google/cloud/datalabeling/datalabeling_v1beta1.yaml @@ -6,94 +6,69 @@ title: Data Labeling API apis: - name: google.cloud.datalabeling.v1beta1.DataLabelingService +types: +- name: google.cloud.datalabeling.v1beta1.CreateInstructionMetadata +- name: google.cloud.datalabeling.v1beta1.ExportDataOperationMetadata +- name: google.cloud.datalabeling.v1beta1.ExportDataOperationResponse +- name: google.cloud.datalabeling.v1beta1.ImportDataOperationMetadata +- name: google.cloud.datalabeling.v1beta1.ImportDataOperationResponse +- name: google.cloud.datalabeling.v1beta1.LabelImageBoundingBoxOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelImageBoundingPolyOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelImageClassificationOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelImageOrientedBoundingBoxOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelImagePolylineOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelImageSegmentationOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelTextClassificationOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelTextEntityExtractionOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelVideoClassificationOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelVideoEventOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelVideoObjectDetectionOperationMetadata +- name: google.cloud.datalabeling.v1beta1.LabelVideoObjectTrackingOperationMetadata + documentation: summary: Public API for Google Cloud AI Data Labeling Service. + rules: + - selector: google.iam.v1.IAMPolicy.GetIamPolicy + description: |- + Gets the access control policy for a resource. Returns an empty policy + if the resource exists and does not have a policy set. + + - selector: google.iam.v1.IAMPolicy.SetIamPolicy + description: |- + Sets the access control policy on the specified resource. Replaces + any existing policy. + + - selector: google.iam.v1.IAMPolicy.TestIamPermissions + description: |- + Returns permissions that a caller has on the specified resource. If the + resource does not exist, this will return an empty set of + permissions, not a NOT_FOUND error. + + Note: This operation is designed to be used for building + permission-aware UIs and command-line tools, not for authorization + checking. This operation may "fail open" without warning. backend: rules: - - selector: google.longrunning.Operations.ListOperations + - selector: 'google.cloud.datalabeling.v1beta1.DataLabelingService.*' deadline: 60.0 - - selector: google.longrunning.Operations.GetOperation + - selector: 'google.iam.v1.IAMPolicy.*' deadline: 60.0 - - selector: google.longrunning.Operations.DeleteOperation + - selector: 'google.longrunning.Operations.*' deadline: 60.0 - - selector: google.longrunning.Operations.CancelOperation - deadline: 60.0 - - selector: google.longrunning.Operations.WaitOperation - deadline: 60.0 - - selector: google.iam.v1.IAMPolicy.SetIamPolicy - deadline: 60.0 - - selector: google.iam.v1.IAMPolicy.GetIamPolicy - deadline: 60.0 - - selector: google.iam.v1.IAMPolicy.TestIamPermissions - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.CreateDataset - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.GetDataset - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ListDatasets - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.DeleteDataset - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ImportData - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ExportData - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.GetDataItem - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ListDataItems - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.GetAnnotatedDataset - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ListAnnotatedDatasets - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.LabelImage - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.LabelVideo - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.LabelText - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.LabelAudio - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.GetExample - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ListExamples - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.CreateAnnotationSpecSet - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.GetAnnotationSpecSet - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ListAnnotationSpecSets - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.DeleteAnnotationSpecSet - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.CreateInstruction - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.GetInstruction - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.ListInstructions - deadline: 60.0 - - selector: google.cloud.datalabeling.v1beta1.DataLabelingService.DeleteInstruction - deadline: 60.0 - -http: - rules: - - selector: google.longrunning.Operations.ListOperations - get: '/v1beta1/{name=projects/*}/operations' - - - selector: google.longrunning.Operations.GetOperation - get: '/v1beta1/{name=projects/*/operations/*}' - - - selector: google.longrunning.Operations.DeleteOperation - delete: '/v1beta1/{name=projects/*/operations/*}' - - - selector: google.longrunning.Operations.CancelOperation - post: '/v1beta1/{name=projects/*/operations/*}:cancel' - authentication: rules: - - selector: '*' + - selector: 'google.cloud.datalabeling.v1beta1.DataLabelingService.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.iam.v1.IAMPolicy.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/cloud-platform + - selector: 'google.longrunning.Operations.*' oauth: canonical_scopes: |- https://www.googleapis.com/auth/cloud-platform diff --git a/google/cloud/datalabeling/v1beta1/annotation.proto b/google/cloud/datalabeling/v1beta1/annotation.proto index 204ad8e3..b71e4598 100644 --- a/google/cloud/datalabeling/v1beta1/annotation.proto +++ b/google/cloud/datalabeling/v1beta1/annotation.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,17 +17,15 @@ syntax = "proto3"; package google.cloud.datalabeling.v1beta1; -import "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/struct.proto"; -import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; +import "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto"; +import "google/cloud/datalabeling/v1beta1/data_payloads.proto"; +import "google/protobuf/duration.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; - // Specifies where is the answer from. enum AnnotationSource { ANNOTATION_SOURCE_UNSPECIFIED = 0; @@ -36,6 +34,30 @@ enum AnnotationSource { OPERATOR = 3; } +// Annotation for Example. Each example may have one or more annotations. For +// example in image classification problem, each image might have one or more +// labels. We call labels binded with this image an Annotation. +message Annotation { + // Output only. Unique name of this annotation, format is: + // + // projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset}/examples/{example_id}/annotations/{annotation_id} + string name = 1; + + // Output only. The source of the annotation. + AnnotationSource annotation_source = 2; + + // Output only. This is the actual annotation value, e.g classification, + // bounding box values are stored here. + AnnotationValue annotation_value = 3; + + // Output only. Annotation metadata, including information like votes + // for labels. + AnnotationMetadata annotation_metadata = 4; + + // Output only. Sentiment for this annotation. + AnnotationSentiment annotation_sentiment = 6; +} + enum AnnotationSentiment { ANNOTATION_SENTIMENT_UNSPECIFIED = 0; @@ -80,38 +102,14 @@ enum AnnotationType { // Video event annotation. VIDEO_EVENT_ANNOTATION = 6; - // Speech to text annotation. - AUDIO_TRANSCRIPTION_ANNOTATION = 7; - // Classification for text. TEXT_CLASSIFICATION_ANNOTATION = 8; // Entity extraction for text. TEXT_ENTITY_EXTRACTION_ANNOTATION = 9; -} -// Annotation for Example. Each example may have one or more annotations. For -// example in image classification problem, each image might have one or more -// labels. We call labels binded with this image an Annotation. -message Annotation { - // Output only. Unique name of this annotation, format is: - // - // projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset}/examples/{example_id}/annotations/{annotation_id} - string name = 1; - - // Output only. The source of the annotation. - AnnotationSource annotation_source = 2; - - // Output only. This is the actual annotation value, e.g classification, - // bounding box values are stored here. - AnnotationValue annotation_value = 3; - - // Output only. Annotation metadata, including information like votes - // for labels. - AnnotationMetadata annotation_metadata = 4; - - // Output only. Sentiment for this annotation. - AnnotationSentiment annotation_sentiment = 6; + // General classification. + GENERAL_CLASSIFICATION_ANNOTATION = 14; } // Annotation value for an example. @@ -136,6 +134,9 @@ message AnnotationValue { // Annotation value for text classification case. TextClassificationAnnotation text_classification_annotation = 3; + // Annotation value for text entity extraction case. + TextEntityExtractionAnnotation text_entity_extraction_annotation = 10; + // Annotation value for video classification case. VideoClassificationAnnotation video_classification_annotation = 4; @@ -144,9 +145,6 @@ message AnnotationValue { // Annotation value for video event case. VideoEventAnnotation video_event_annotation = 6; - - // Annotation value for speech audio recognition case. - AudioRecognitionAnnotation audio_recognition_annotation = 7; } } @@ -248,6 +246,24 @@ message TextClassificationAnnotation { AnnotationSpec annotation_spec = 1; } +// Text entity extraction annotation. +message TextEntityExtractionAnnotation { + // Label of the text entities. + AnnotationSpec annotation_spec = 1; + + // Position of the entity. + SequentialSegment sequential_segment = 2; +} + +// Start and end position in a sequence (e.g. text segment). +message SequentialSegment { + // Start position (inclusive). + int32 start = 1; + + // End position (exclusive). + int32 end = 2; +} + // A time period inside of an example that has a time dimension (e.g. video). message TimeSegment { // Start of the time segment (inclusive), represented as the duration since @@ -302,18 +318,6 @@ message VideoEventAnnotation { TimeSegment time_segment = 2; } -// Speech audio recognition. -message AudioRecognitionAnnotation { - // Transcript text representing the words spoken. - string transcript = 1; - - // Start position in audio file that the transcription corresponds to. - google.protobuf.Duration start_offset = 2; - - // End position in audio file that the transcription corresponds to. - google.protobuf.Duration end_offset = 3; -} - // Additional information associated with the annotation. message AnnotationMetadata { // Metadata related to human labeling. @@ -333,5 +337,6 @@ message OperatorMetadata { // The total number of contributors that choose this label. int32 label_votes = 3; + // Comments from contributors. repeated string comments = 4; } diff --git a/google/cloud/datalabeling/v1beta1/annotation_spec_set.proto b/google/cloud/datalabeling/v1beta1/annotation_spec_set.proto index 20fdec73..bd5413dc 100644 --- a/google/cloud/datalabeling/v1beta1/annotation_spec_set.proto +++ b/google/cloud/datalabeling/v1beta1/annotation_spec_set.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,13 +23,11 @@ option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1 option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; - // AnnotationSpecSet is a collection of label definitions. For example, in // image classification tasks, we define a set of labels, this set is called // AnnotationSpecSet. AnnotationSpecSet is immutable upon creation. message AnnotationSpecSet { - // Output only. - // AnnotationSpecSet resource name, format: + // Output only. AnnotationSpecSet resource name, format: // projects/{project_id}/annotationSpecSets/{annotation_spec_set_id} string name = 1; @@ -43,6 +41,10 @@ message AnnotationSpecSet { // Required. The actual spec set defined by the users. repeated AnnotationSpec annotation_specs = 4; + + // Output only. The names of any related resources that are blocking changes + // to the annotation spec set. + repeated string blocking_resources = 5; } // Container of information related to one annotation spec. diff --git a/google/cloud/datalabeling/v1beta1/data_labeling_service.proto b/google/cloud/datalabeling/v1beta1/data_labeling_service.proto index 22222ab7..955a5f34 100644 --- a/google/cloud/datalabeling/v1beta1/data_labeling_service.proto +++ b/google/cloud/datalabeling/v1beta1/data_labeling_service.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,11 +18,14 @@ syntax = "proto3"; package google.cloud.datalabeling.v1beta1; import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/cloud/datalabeling/v1beta1/annotation.proto"; import "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto"; import "google/cloud/datalabeling/v1beta1/dataset.proto"; +import "google/cloud/datalabeling/v1beta1/evaluation.proto"; +import "google/cloud/datalabeling/v1beta1/evaluation_job.proto"; import "google/cloud/datalabeling/v1beta1/human_annotation_config.proto"; import "google/cloud/datalabeling/v1beta1/instruction.proto"; -import "google/cloud/datalabeling/v1beta1/operations.proto"; import "google/longrunning/operations.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; @@ -31,8 +34,11 @@ option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1 option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; - service DataLabelingService { + option (google.api.default_host) = "datalabeling.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + // Creates dataset. If success return a Dataset resource. rpc CreateDataset(CreateDatasetRequest) returns (Dataset) { option (google.api.http) = { @@ -99,21 +105,24 @@ service DataLabelingService { } // Gets an annotated dataset by resource name. - rpc GetAnnotatedDataset(GetAnnotatedDatasetRequest) returns (AnnotatedDataset) { + rpc GetAnnotatedDataset(GetAnnotatedDatasetRequest) + returns (AnnotatedDataset) { option (google.api.http) = { get: "/v1beta1/{name=projects/*/datasets/*/annotatedDatasets/*}" }; } // Lists annotated datasets for a dataset. Pagination is supported. - rpc ListAnnotatedDatasets(ListAnnotatedDatasetsRequest) returns (ListAnnotatedDatasetsResponse) { + rpc ListAnnotatedDatasets(ListAnnotatedDatasetsRequest) + returns (ListAnnotatedDatasetsResponse) { option (google.api.http) = { get: "/v1beta1/{parent=projects/*/datasets/*}/annotatedDatasets" }; } // Deletes an annotated dataset by resource name. - rpc DeleteAnnotatedDataset(DeleteAnnotatedDatasetRequest) returns (google.protobuf.Empty) { + rpc DeleteAnnotatedDataset(DeleteAnnotatedDatasetRequest) + returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1beta1/{name=projects/*/datasets/*/annotatedDatasets/*}" }; @@ -146,15 +155,6 @@ service DataLabelingService { }; } - // Starts a labeling task for audio. The type of audio labeling task is - // configured by feature in the request. - rpc LabelAudio(LabelAudioRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1beta1/{parent=projects/*/datasets/*}/audio:label" - body: "*" - }; - } - // Gets an example by resource name, including both data and annotation. rpc GetExample(GetExampleRequest) returns (Example) { option (google.api.http) = { @@ -170,7 +170,8 @@ service DataLabelingService { } // Creates an annotation spec set by providing a set of labels. - rpc CreateAnnotationSpecSet(CreateAnnotationSpecSetRequest) returns (AnnotationSpecSet) { + rpc CreateAnnotationSpecSet(CreateAnnotationSpecSetRequest) + returns (AnnotationSpecSet) { option (google.api.http) = { post: "/v1beta1/{parent=projects/*}/annotationSpecSets" body: "*" @@ -178,28 +179,32 @@ service DataLabelingService { } // Gets an annotation spec set by resource name. - rpc GetAnnotationSpecSet(GetAnnotationSpecSetRequest) returns (AnnotationSpecSet) { + rpc GetAnnotationSpecSet(GetAnnotationSpecSetRequest) + returns (AnnotationSpecSet) { option (google.api.http) = { get: "/v1beta1/{name=projects/*/annotationSpecSets/*}" }; } // Lists annotation spec sets for a project. Pagination is supported. - rpc ListAnnotationSpecSets(ListAnnotationSpecSetsRequest) returns (ListAnnotationSpecSetsResponse) { + rpc ListAnnotationSpecSets(ListAnnotationSpecSetsRequest) + returns (ListAnnotationSpecSetsResponse) { option (google.api.http) = { get: "/v1beta1/{parent=projects/*}/annotationSpecSets" }; } // Deletes an annotation spec set by resource name. - rpc DeleteAnnotationSpecSet(DeleteAnnotationSpecSetRequest) returns (google.protobuf.Empty) { + rpc DeleteAnnotationSpecSet(DeleteAnnotationSpecSetRequest) + returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1beta1/{name=projects/*/annotationSpecSets/*}" }; } // Creates an instruction for how data should be labeled. - rpc CreateInstruction(CreateInstructionRequest) returns (google.longrunning.Operation) { + rpc CreateInstruction(CreateInstructionRequest) + returns (google.longrunning.Operation) { option (google.api.http) = { post: "/v1beta1/{parent=projects/*}/instructions" body: "*" @@ -214,18 +219,107 @@ service DataLabelingService { } // Lists instructions for a project. Pagination is supported. - rpc ListInstructions(ListInstructionsRequest) returns (ListInstructionsResponse) { + rpc ListInstructions(ListInstructionsRequest) + returns (ListInstructionsResponse) { option (google.api.http) = { get: "/v1beta1/{parent=projects/*}/instructions" }; } // Deletes an instruction object by resource name. - rpc DeleteInstruction(DeleteInstructionRequest) returns (google.protobuf.Empty) { + rpc DeleteInstruction(DeleteInstructionRequest) + returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1beta1/{name=projects/*/instructions/*}" }; } + + // Gets an evaluation by resource name. + rpc GetEvaluation(GetEvaluationRequest) returns (Evaluation) { + option (google.api.http) = { + get: "/v1beta1/{name=projects/*/datasets/*/evaluations/*}" + }; + } + + // Searchs evaluations within a project. Supported filter: evaluation_job, + // evaluation_time. + rpc SearchEvaluations(SearchEvaluationsRequest) + returns (SearchEvaluationsResponse) { + option (google.api.http) = { + get: "/v1beta1/{parent=projects/*}/evaluations:search" + }; + } + + // Searchs example comparisons in evaluation, in format of examples + // of both ground truth and prediction(s). It is represented as a search with + // evaluation id. + rpc SearchExampleComparisons(SearchExampleComparisonsRequest) + returns (SearchExampleComparisonsResponse) { + option (google.api.http) = { + post: "/v1beta1/{parent=projects/*/datasets/*/evaluations/*}/exampleComparisons:search" + body: "*" + }; + } + + // Creates an evaluation job. + rpc CreateEvaluationJob(CreateEvaluationJobRequest) returns (EvaluationJob) { + option (google.api.http) = { + post: "/v1beta1/{parent=projects/*}/evaluationJobs" + body: "*" + }; + } + + // Updates an evaluation job. + rpc UpdateEvaluationJob(UpdateEvaluationJobRequest) returns (EvaluationJob) { + option (google.api.http) = { + patch: "/v1beta1/{evaluation_job.name=projects/*/evaluationJobs/*}" + body: "evaluation_job" + }; + } + + // Gets an evaluation job by resource name. + rpc GetEvaluationJob(GetEvaluationJobRequest) returns (EvaluationJob) { + option (google.api.http) = { + get: "/v1beta1/{name=projects/*/evaluationJobs/*}" + }; + } + + // Pauses an evaluation job. Pausing a evaluation job that is already in + // PAUSED state will be a no-op. + rpc PauseEvaluationJob(PauseEvaluationJobRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1beta1/{name=projects/*/evaluationJobs/*}:pause" + body: "*" + }; + } + + // Resumes a paused evaluation job. Deleted evaluation job can't be resumed. + // Resuming a running evaluation job will be a no-op. + rpc ResumeEvaluationJob(ResumeEvaluationJobRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1beta1/{name=projects/*/evaluationJobs/*}:resume" + body: "*" + }; + } + + // Stops and deletes an evaluation job. + rpc DeleteEvaluationJob(DeleteEvaluationJobRequest) + returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1beta1/{name=projects/*/evaluationJobs/*}" + }; + } + + // Lists all evaluation jobs within a project with possible filters. + // Pagination is supported. + rpc ListEvaluationJobs(ListEvaluationJobsRequest) + returns (ListEvaluationJobsResponse) { + option (google.api.http) = { + get: "/v1beta1/{parent=projects/*}/evaluationJobs" + }; + } } // Request message for CreateDataset. @@ -260,9 +354,9 @@ message ListDatasetsRequest { // Optional. A token identifying a page of results for the server to return. // Typically obtained by - // [ListDatasetsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListDatasetsResponse.next_page_token] of the previous - // [DataLabelingService.ListDatasets] call. - // Returns the first page if empty. + // [ListDatasetsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListDatasetsResponse.next_page_token] + // of the previous [DataLabelingService.ListDatasets] call. Returns the first + // page if empty. string page_token = 4; } @@ -290,6 +384,10 @@ message ImportDataRequest { // Required. Specify the input source of the data. InputConfig input_config = 2; + + // Email of the user who started the import task and should be notified by + // email. If empty no notification will be sent. + string user_email_address = 3; } // Request message for ExportData API. @@ -310,6 +408,10 @@ message ExportDataRequest { // Required. Specify the output destination. OutputConfig output_config = 4; + + // Email of the user who started the export task and should be notified by + // email. If empty no notification will be sent. + string user_email_address = 5; } // Request message for GetDataItem. @@ -334,9 +436,9 @@ message ListDataItemsRequest { // Optional. A token identifying a page of results for the server to return. // Typically obtained by - // [ListDataItemsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListDataItemsResponse.next_page_token] of the previous - // [DataLabelingService.ListDataItems] call. - // Return first page if empty. + // [ListDataItemsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListDataItemsResponse.next_page_token] + // of the previous [DataLabelingService.ListDataItems] call. Return first page + // if empty. string page_token = 4; } @@ -372,20 +474,12 @@ message ListAnnotatedDatasetsRequest { // Optional. A token identifying a page of results for the server to return. // Typically obtained by - // [ListAnnotatedDatasetsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListAnnotatedDatasetsResponse.next_page_token] of the previous - // [DataLabelingService.ListAnnotatedDatasets] call. - // Return first page if empty. + // [ListAnnotatedDatasetsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListAnnotatedDatasetsResponse.next_page_token] + // of the previous [DataLabelingService.ListAnnotatedDatasets] call. Return + // first page if empty. string page_token = 4; } -// Request message for DeleteAnnotatedDataset. -message DeleteAnnotatedDatasetRequest { - // Required. Name of the annotated dataset to delete, format: - // projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ - // {annotated_dataset_id} - string name = 1; -} - // Results of listing annotated datasets for a dataset. message ListAnnotatedDatasetsResponse { // The list of annotated datasets to return. @@ -395,6 +489,14 @@ message ListAnnotatedDatasetsResponse { string next_page_token = 2; } +// Request message for DeleteAnnotatedDataset. +message DeleteAnnotatedDatasetRequest { + // Required. Name of the annotated dataset to delete, format: + // projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ + // {annotated_dataset_id} + string name = 1; +} + // Request message for starting an image labeling task. message LabelImageRequest { // Image labeling task feature. @@ -429,22 +531,22 @@ message LabelImageRequest { oneof request_config { // Configuration for image classification task. // One of image_classification_config, bounding_poly_config, - // polyline_config and segmentation_config is required. + // polyline_config and segmentation_config are required. ImageClassificationConfig image_classification_config = 4; // Configuration for bounding box and bounding poly task. // One of image_classification_config, bounding_poly_config, - // polyline_config and segmentation_config is required. + // polyline_config and segmentation_config are required. BoundingPolyConfig bounding_poly_config = 5; // Configuration for polyline task. // One of image_classification_config, bounding_poly_config, - // polyline_config and segmentation_config is required. + // polyline_config and segmentation_config are required. PolylineConfig polyline_config = 6; // Configuration for segmentation task. // One of image_classification_config, bounding_poly_config, - // polyline_config and segmentation_config is required. + // polyline_config and segmentation_config are required. SegmentationConfig segmentation_config = 7; } @@ -551,27 +653,6 @@ message LabelTextRequest { Feature feature = 6; } -// Request message for LabelAudio. -message LabelAudioRequest { - // Audio labeling task feature. - enum Feature { - FEATURE_UNSPECIFIED = 0; - - // Transcribe the audios into text. - AUDIO_TRANSCRIPTION = 1; - } - - // Required. Name of the dataset to request labeling task, format: - // projects/{project_id}/datasets/{dataset_id} - string parent = 1; - - // Required. Basic human annotation config. - HumanAnnotationConfig basic_config = 2; - - // Required. The type of audio labeling task. - Feature feature = 3; -} - // Request message for GetExample message GetExampleRequest { // Required. Name of example, format: @@ -602,9 +683,9 @@ message ListExamplesRequest { // Optional. A token identifying a page of results for the server to return. // Typically obtained by - // [ListExamplesResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListExamplesResponse.next_page_token] of the previous - // [DataLabelingService.ListExamples] call. - // Return first page if empty. + // [ListExamplesResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListExamplesResponse.next_page_token] + // of the previous [DataLabelingService.ListExamples] call. Return first page + // if empty. string page_token = 4; } @@ -651,9 +732,9 @@ message ListAnnotationSpecSetsRequest { // Optional. A token identifying a page of results for the server to return. // Typically obtained by - // [ListAnnotationSpecSetsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListAnnotationSpecSetsResponse.next_page_token] of the previous - // [DataLabelingService.ListAnnotationSpecSets] call. - // Return first page if empty. + // [ListAnnotationSpecSetsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListAnnotationSpecSetsResponse.next_page_token] + // of the previous [DataLabelingService.ListAnnotationSpecSets] call. Return + // first page if empty. string page_token = 4; } @@ -712,9 +793,9 @@ message ListInstructionsRequest { // Optional. A token identifying a page of results for the server to return. // Typically obtained by - // [ListInstructionsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListInstructionsResponse.next_page_token] of the previous - // [DataLabelingService.ListInstructions] call. - // Return first page if empty. + // [ListInstructionsResponse.next_page_token][google.cloud.datalabeling.v1beta1.ListInstructionsResponse.next_page_token] + // of the previous [DataLabelingService.ListInstructions] call. Return first + // page if empty. string page_token = 4; } @@ -726,3 +807,159 @@ message ListInstructionsResponse { // A token to retrieve next page of results. string next_page_token = 2; } + +// Request message for GetEvaluation. +message GetEvaluationRequest { + // Required. Name of the evaluation. Format: + // 'projects/{project_id}/datasets/{dataset_id}/evaluations/{evaluation_id}' + string name = 1; +} + +// Request message for SearchEvaluation. +message SearchEvaluationsRequest { + // Required. Evaluation search parent. Format: + // projects/{project_id} + string parent = 1; + + // Optional. Support filtering by model id, job state, start and end time. + // Format: + // "evaluation_job.evaluation_job_id = {evaluation_job_id} AND + // evaluation_job.evaluation_job_run_time_start = {timestamp} AND + // evaluation_job.evaluation_job_run_time_end = {timestamp} AND + // annotation_spec.display_name = {display_name}" + string filter = 2; + + // Optional. Requested page size. Server may return fewer results than + // requested. Default value is 100. + int32 page_size = 3; + + // Optional. A token identifying a page of results for the server to return. + // Typically obtained by + // [SearchEvaluationsResponse.next_page_token][google.cloud.datalabeling.v1beta1.SearchEvaluationsResponse.next_page_token] + // of the previous [DataLabelingService.SearchEvaluations] call. Return first + // page if empty. + string page_token = 4; +} + +// Results of searching evaluations. +message SearchEvaluationsResponse { + // The list of evaluations to return. + repeated Evaluation evaluations = 1; + + // A token to retrieve next page of results. + string next_page_token = 2; +} + +// Request message of SearchExampleComparisons. +message SearchExampleComparisonsRequest { + // Required. Name of the Evaluation resource to search example comparison + // from. Format: + // projects/{project_id}/datasets/{dataset_id}/evaluations/{evaluation_id} + string parent = 1; + + // Optional. Requested page size. Server may return fewer results than + // requested. Default value is 100. + int32 page_size = 2; + + // Optional. A token identifying a page of results for the server to return. + // Typically obtained by + // [SearchExampleComparisons.next_page_token][] of the previous + // [DataLabelingService.SearchExampleComparisons] call. + // Return first page if empty. + string page_token = 3; +} + +// Results of searching example comparisons. +message SearchExampleComparisonsResponse { + // Example comparisons containing annotation comparison between groundtruth + // and predictions. + message ExampleComparison { + Example ground_truth_example = 1; + + repeated Example model_created_examples = 2; + } + + repeated ExampleComparison example_comparisons = 1; + + // A token to retrieve next page of results. + string next_page_token = 2; +} + +// Request message for CreateEvaluationJob. +message CreateEvaluationJobRequest { + // Required. Evaluation job resource parent, format: + // projects/{project_id}. + string parent = 1; + + // Required. The evaluation job to create. + EvaluationJob job = 2; +} + +// Request message for UpdateEvaluationJob. +message UpdateEvaluationJobRequest { + // Required. Evaluation job that is going to be updated. + EvaluationJob evaluation_job = 1; + + // Optional. Mask for which field in evaluation_job should be updated. + google.protobuf.FieldMask update_mask = 2; +} + +// Request message for GetEvaluationJob. +message GetEvaluationJobRequest { + // Required. Name of the evaluation job. Format: + // 'projects/{project_id}/evaluationJobs/{evaluation_job_id}' + string name = 1; +} + +// Request message for PauseEvaluationJob. +message PauseEvaluationJobRequest { + // Required. Name of the evaluation job that is going to be paused. Format: + // 'projects/{project_id}/evaluationJobs/{evaluation_job_id}' + string name = 1; +} + +// Request message ResumeEvaluationJob. +message ResumeEvaluationJobRequest { + // Required. Name of the evaluation job that is going to be resumed. Format: + // 'projects/{project_id}/evaluationJobs/{evaluation_job_id}' + string name = 1; +} + +// Request message DeleteEvaluationJob. +message DeleteEvaluationJobRequest { + // Required. Name of the evaluation job that is going to be deleted. Format: + // 'projects/{project_id}/evaluationJobs/{evaluation_job_id}' + string name = 1; +} + +// Request message for ListEvaluationJobs. +message ListEvaluationJobsRequest { + // Required. Evaluation resource parent. Format: + // "projects/{project_id}" + string parent = 1; + + // Optional. Only support filter by model id and job state. Format: + // "evaluation_job.model_id = {model_id} AND evaluation_job.state = + // {EvaluationJob::State}" + string filter = 2; + + // Optional. Requested page size. Server may return fewer results than + // requested. Default value is 100. + int32 page_size = 3; + + // Optional. A token identifying a page of results for the server to return. + // Typically obtained by + // [ListEvaluationJobs.next_page_token][] of the previous + // [DataLabelingService.ListEvaluationJobs] call. + // Return first page if empty. + string page_token = 4; +} + +// Results for listing evaluation jobs. +message ListEvaluationJobsResponse { + // The list of evaluation jobs to return. + repeated EvaluationJob evaluation_jobs = 1; + + // A token to retrieve next page of results. + string next_page_token = 2; +} diff --git a/google/cloud/datalabeling/v1beta1/data_payloads.proto b/google/cloud/datalabeling/v1beta1/data_payloads.proto new file mode 100644 index 00000000..721e2001 --- /dev/null +++ b/google/cloud/datalabeling/v1beta1/data_payloads.proto @@ -0,0 +1,75 @@ +// Copyright 2019 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.datalabeling.v1beta1; + +import "google/api/annotations.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; +option java_multiple_files = true; +option java_package = "com.google.cloud.datalabeling.v1beta1"; + +// Container of information about an image. +message ImagePayload { + // Image format. + string mime_type = 1; + + // A byte string of a thumbnail image. + bytes image_thumbnail = 2; + + // Image uri from the user bucket. + string image_uri = 3; + + // Signed uri of the image file in the service bucket. + string signed_uri = 4; +} + +// Container of information about a piece of text. +message TextPayload { + // Text content. + string text_content = 1; +} + +// Container of information of a video thumbnail. +message VideoThumbnail { + // A byte string of the video frame. + bytes thumbnail = 1; + + // Time offset relative to the beginning of the video, corresponding to the + // video frame where the thumbnail has been extracted from. + google.protobuf.Duration time_offset = 2; +} + +// Container of information of a video. +message VideoPayload { + // Video format. + string mime_type = 1; + + // Video uri from the user bucket. + string video_uri = 2; + + // The list of video thumbnails. + repeated VideoThumbnail video_thumbnails = 3; + + // FPS of the video. + float frame_rate = 4; + + // Signed uri of the video file in the service bucket. + string signed_uri = 5; +} diff --git a/google/cloud/datalabeling/v1beta1/datalabeling_gapic.yaml b/google/cloud/datalabeling/v1beta1/datalabeling_gapic.yaml index 36197fdd..82caa70e 100644 --- a/google/cloud/datalabeling/v1beta1/datalabeling_gapic.yaml +++ b/google/cloud/datalabeling/v1beta1/datalabeling_gapic.yaml @@ -16,7 +16,6 @@ language_settings: package_name: Google\Cloud\Datalabeling\V1beta1 nodejs: package_name: datalabeling.v1beta1 - domain_layer_location: google-cloud # The configuration for the license header to put on generated files. license_header: # The file containing the raw license header without any copyright line(s). @@ -50,7 +49,10 @@ interfaces: entity_name: data_item - name_pattern: projects/{project}/instructions/{instruction} entity_name: instruction - # Definition for retryable codes. + - name_pattern: projects/{project}/datasets/{dataset}/evaluations/{evaluation} + entity_name: evaluation + - name_pattern: projects/{project}/evaluationJobs/{evaluation_job} + entity_name: evaluation_job retry_codes_def: - name: idempotent retry_codes: @@ -359,29 +361,6 @@ interfaces: max_poll_delay_millis: 5000 total_poll_timeout_millis: 300000 timeout_millis: 30000 - - name: LabelAudio - flattening: - groups: - - parameters: - - parent - - basic_config - - feature - required_fields: - - parent - - basic_config - - feature - retry_codes_name: non_idempotent - retry_params_name: default - field_name_patterns: - parent: dataset - long_running: - return_type: google.cloud.datalabeling.v1beta1.AnnotatedDataset - metadata_type: google.cloud.datalabeling.v1beta1.LabelOperationMetadata - initial_poll_delay_millis: 500 - poll_delay_multiplier: 1.5 - max_poll_delay_millis: 5000 - total_poll_timeout_millis: 300000 - timeout_millis: 30000 - name: GetExample flattening: groups: @@ -538,3 +517,153 @@ interfaces: field_name_patterns: name: instruction timeout_millis: 30000 + - name: GetEvaluation + flattening: + groups: + - parameters: + - name + required_fields: + - name + retry_codes_name: idempotent + retry_params_name: default + field_name_patterns: + name: evaluation + timeout_millis: 60000 + - name: SearchEvaluations + flattening: + groups: + - parameters: + - parent + - filter + required_fields: + - parent + - filter + page_streaming: + request: + page_size_field: page_size + token_field: page_token + response: + token_field: next_page_token + resources_field: evaluations + retry_codes_name: idempotent + retry_params_name: default + field_name_patterns: + parent: project + timeout_millis: 60000 + - name: SearchExampleComparisons + flattening: + groups: + - parameters: + - parent + required_fields: + - parent + page_streaming: + request: + page_size_field: page_size + token_field: page_token + response: + token_field: next_page_token + resources_field: example_comparisons + retry_codes_name: non_idempotent + retry_params_name: default + field_name_patterns: + parent: evaluation + timeout_millis: 60000 + - name: CreateEvaluationJob + flattening: + groups: + - parameters: + - parent + - job + required_fields: + - parent + - job + retry_codes_name: non_idempotent + retry_params_name: default + field_name_patterns: + parent: project + timeout_millis: 60000 + - name: UpdateEvaluationJob + flattening: + groups: + - parameters: + - evaluation_job + - update_mask + required_fields: + - evaluation_job + - update_mask + retry_codes_name: non_idempotent + retry_params_name: default + field_name_patterns: + evaluation_job.name: evaluation_job + timeout_millis: 60000 + - name: GetEvaluationJob + flattening: + groups: + - parameters: + - name + required_fields: + - name + retry_codes_name: idempotent + retry_params_name: default + field_name_patterns: + name: evaluation_job + timeout_millis: 60000 + - name: PauseEvaluationJob + # params. + flattening: + groups: + - parameters: + - name + required_fields: + - name + retry_codes_name: non_idempotent + retry_params_name: default + field_name_patterns: + name: evaluation_job + timeout_millis: 60000 + - name: ResumeEvaluationJob + flattening: + groups: + - parameters: + - name + required_fields: + - name + retry_codes_name: non_idempotent + retry_params_name: default + field_name_patterns: + name: evaluation_job + timeout_millis: 60000 + - name: DeleteEvaluationJob + flattening: + groups: + - parameters: + - name + required_fields: + - name + retry_codes_name: idempotent + retry_params_name: default + field_name_patterns: + name: evaluation_job + timeout_millis: 60000 + - name: ListEvaluationJobs + flattening: + groups: + - parameters: + - parent + - filter + required_fields: + - parent + - filter + page_streaming: + request: + page_size_field: page_size + token_field: page_token + response: + token_field: next_page_token + resources_field: evaluation_jobs + retry_codes_name: idempotent + retry_params_name: default + field_name_patterns: + parent: project + timeout_millis: 60000 diff --git a/google/cloud/datalabeling/v1beta1/dataset.proto b/google/cloud/datalabeling/v1beta1/dataset.proto index 952daf38..5289abcc 100644 --- a/google/cloud/datalabeling/v1beta1/dataset.proto +++ b/google/cloud/datalabeling/v1beta1/dataset.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,18 +17,16 @@ syntax = "proto3"; package google.cloud.datalabeling.v1beta1; -import "google/cloud/datalabeling/v1beta1/annotation.proto"; -import "google/cloud/datalabeling/v1beta1/human_annotation_config.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/struct.proto"; -import "google/protobuf/timestamp.proto"; import "google/api/annotations.proto"; +import "google/cloud/datalabeling/v1beta1/annotation.proto"; +import "google/cloud/datalabeling/v1beta1/data_payloads.proto"; +import "google/cloud/datalabeling/v1beta1/human_annotation_config.proto"; +import "google/protobuf/timestamp.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; - enum DataType { DATA_TYPE_UNSPECIFIED = 0; @@ -38,14 +36,13 @@ enum DataType { TEXT = 4; - AUDIO = 5; + GENERAL_DATA = 6; } // Dataset is the resource to hold your data. You can request multiple labeling // tasks for a dataset while each one will generate an AnnotatedDataset. message Dataset { - // Output only. - // Dataset resource name, format is: + // Output only. Dataset resource name, format is: // projects/{project_id}/datasets/{dataset_id} string name = 1; @@ -63,39 +60,86 @@ message Dataset { // where ImportData is called. It is available only after the clients // import data to this dataset. repeated InputConfig input_configs = 5; + + // Output only. The names of any related resources that are blocking changes + // to the dataset. + repeated string blocking_resources = 6; + + // Output only. The number of data items in the dataset. + int64 data_item_count = 7; } // The configuration of input data, including data type, location, etc. message InputConfig { + // Optional. The metadata associated with each data type. + oneof data_type_metadata { + // Required for text import, as language code must be specified. + TextMetadata text_metadata = 6; + } + // Required. Where the data is from. oneof source { + // Source located in Cloud Storage. GcsSource gcs_source = 2; + + BigQuerySource bigquery_source = 5; } // Required. Data type must be specifed when user tries to import data. DataType data_type = 1; + + // Optional. If input contains annotation, user needs to specify the + // type and metadata of the annotation when creating it as an annotated + // dataset. + AnnotationType annotation_type = 3; + + // Optional. Metadata about annotations in the input. Each annotation type may + // have different metadata. + // Metadata for classification problem. + ClassificationMetadata classification_metadata = 4; } -// Source of the GCS file to be imported. Only gcs path is allowed in -// input_uri. +// Metadata for the text. +message TextMetadata { + // The language of this text, as a + // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). + // Default value is en-US. + string language_code = 1; +} + +// Metadata for classification annotations. +message ClassificationMetadata { + // Whether the classification task is multi-label or not. + bool is_multi_label = 1; +} + +// Source of the Cloud Storage file to be imported. message GcsSource { - // Required. The input uri of source file. + // Required. The input URI of source file. This must be a Cloud Storage path + // (`gs://...`). string input_uri = 1; - // Required. The format of the gcs source. Only "text/csv" is supported. + // Required. The format of the source file. Only "text/csv" is supported. string mime_type = 2; } +// The BigQuery location for the input content. +message BigQuerySource { + // Required. BigQuery URI to a table, up to 2000 characters long. + // Accepted forms: BigQuery gs path e.g. bq://projectId.bqDatasetId.bqTableId + string input_uri = 1; +} + // The configuration of output data. message OutputConfig { // Required. Location to output data to. oneof destination { - // Output to a GCS file. Should be used for labeling output other than Audio - // transcription. + // Output to a file in Cloud Storage. Should be used for labeling output + // other thanimage segmentation. GcsDestination gcs_destination = 1; - // Output to a GCS folder. Should be used for Audio transcription - // labeling output. + // Output to a folder in Cloud Storage. Should be used for image + // segmentation labeling output. GcsFolderDestination gcs_folder_destination = 2; } } @@ -114,7 +158,7 @@ message GcsDestination { // Export folder destination of the data. message GcsFolderDestination { - // Required. GCS folder to export data to. + // Required. Cloud Storage directory to export data to. string output_folder_uri = 1; } @@ -130,9 +174,6 @@ message DataItem { // The video payload, a container of the video uri. VideoPayload video_payload = 4; - - // The audio payload, a container of the audio uri. - AudioPayload audio_payload = 5; } // Output only. Name of the data item, in format of: @@ -144,8 +185,7 @@ message DataItem { // labeling task will generate an AnnotatedDataset under the Dataset that the // task is requested for. message AnnotatedDataset { - // Output only. - // AnnotatedDataset resource name in format of: + // Output only. AnnotatedDataset resource name in format of: // projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ // {annotated_dataset_id} string name = 1; @@ -182,46 +222,62 @@ message AnnotatedDataset { // Output only. Additional information about AnnotatedDataset. AnnotatedDatasetMetadata metadata = 10; -} -// Metadata on AnnotatedDataset. -message AnnotatedDatasetMetadata { - // HumanAnnotationConfig used when requesting the human labeling task for this - // AnnotatedDataset. - HumanAnnotationConfig human_annotation_config = 1; - - // Specific request configuration used when requesting the labeling task. - oneof annotation_request_config { - // Configuration for image classification task. - ImageClassificationConfig image_classification_config = 2; - // Configuration for image bounding box and bounding poly task. - BoundingPolyConfig bounding_poly_config = 3; - // Configuration for image polyline task. - PolylineConfig polyline_config = 4; - // Configuration for image segmentation task. - SegmentationConfig segmentation_config = 5; - // Configuration for video classification task. - VideoClassificationConfig video_classification_config = 6; - // Configuration for video object detection task. - ObjectDetectionConfig object_detection_config = 7; - // Configuration for video object tracking task. - ObjectTrackingConfig object_tracking_config = 8; - // Configuration for video event labeling task. - EventConfig event_config = 9; - // Configuration for text classification task. - TextClassificationConfig text_classification_config = 10; - // Configuration for text entity extraction task. - TextEntityExtractionConfig text_entity_extraction_config = 11; - } + // Output only. The names of any related resources that are blocking changes + // to the annotated dataset. + repeated string blocking_resources = 11; } // Statistics about annotation specs. message LabelStats { // Map of each annotation spec's example count. Key is the annotation spec // name and value is the number of examples for that annotation spec. + // If the annotated dataset does not have annotation spec, the map will return + // a pair where the key is empty string and value is the total number of + // annotations. map example_count = 1; } +// Metadata on AnnotatedDataset. +message AnnotatedDatasetMetadata { + // Specific request configuration used when requesting the labeling task. + oneof annotation_request_config { + // Configuration for image classification task. + ImageClassificationConfig image_classification_config = 2; + + // Configuration for image bounding box and bounding poly task. + BoundingPolyConfig bounding_poly_config = 3; + + // Configuration for image polyline task. + PolylineConfig polyline_config = 4; + + // Configuration for image segmentation task. + SegmentationConfig segmentation_config = 5; + + // Configuration for video classification task. + VideoClassificationConfig video_classification_config = 6; + + // Configuration for video object detection task. + ObjectDetectionConfig object_detection_config = 7; + + // Configuration for video object tracking task. + ObjectTrackingConfig object_tracking_config = 8; + + // Configuration for video event labeling task. + EventConfig event_config = 9; + + // Configuration for text classification task. + TextClassificationConfig text_classification_config = 10; + + // Configuration for text entity extraction task. + TextEntityExtractionConfig text_entity_extraction_config = 11; + } + + // HumanAnnotationConfig used when requesting the human labeling task for this + // AnnotatedDataset. + HumanAnnotationConfig human_annotation_config = 1; +} + // An Example is a piece of data and its annotation. For example, an image with // label "house". message Example { @@ -235,9 +291,6 @@ message Example { // The video payload, a container of the video uri. VideoPayload video_payload = 7; - - // The audio payload, a container of the audio uri. - AudioPayload audio_payload = 8; } // Output only. Name of the example, in format of: @@ -249,58 +302,3 @@ message Example { // One piece of data can have multiple annotations. repeated Annotation annotations = 5; } - -// Container of information about an image. -message ImagePayload { - // Image format. - string mime_type = 1; - - // A byte string of a full image. - bytes image_thumbnail = 2; - - // Image uri from the user bucket. - string image_uri = 3; -} - -// Container of information about a piece of text. -message TextPayload { - // Text content. - string text_content = 1; -} - -// Container of information of a video thumbnail. -message VideoThumbnail { - // A byte string of the video frame. - bytes thumbnail = 1; - - // Time offset relative to the beginning of the video, corresponding to the - // video frame where the thumbnail has been extracted from. - google.protobuf.Duration time_offset = 2; -} - -// Container of information of a video. -message VideoPayload { - // Video format. - string mime_type = 1; - - // Video uri from the user bucket. - string video_uri = 2; - - // The list of video thumbnails. - repeated VideoThumbnail video_thumbnails = 3; - - // FPS of the video. - float frame_rate = 4; -} - -// Container of information of an audio. -message AudioPayload { - // Audio uri in user bucket. - string audio_uri = 1; - - // Sample rate in Hertz of the audio data sent in all - // `RecognitionAudio` messages. This field is optional for `FLAC` and `WAV` - // audio files and required for all other audio formats. For details, - // see [AudioEncoding][google.cloud.datalabeling.v1beta1.AudioPayload.AudioEncoding]. - int32 sample_rate_hertz = 3; -} diff --git a/google/cloud/datalabeling/v1beta1/evaluation.proto b/google/cloud/datalabeling/v1beta1/evaluation.proto new file mode 100644 index 00000000..ad1e975a --- /dev/null +++ b/google/cloud/datalabeling/v1beta1/evaluation.proto @@ -0,0 +1,167 @@ +// Copyright 2019 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.datalabeling.v1beta1; + +import "google/api/annotations.proto"; +import "google/cloud/datalabeling/v1beta1/annotation.proto"; +import "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; +option java_multiple_files = true; +option java_package = "com.google.cloud.datalabeling.v1beta1"; + +// Describes an evaluation between 2 annotated datasets. Created by an +// evaluation plan. +message Evaluation { + // Resource name of an evaluation. + // Format: + // 'projects/{project_id}/datasets/{dataset_id}/evaluations/{evaluation_id}' + string name = 1; + + // Options used in evaluation plan for creating the evaluation. + EvaluationConfig config = 2; + + // Output only. Timestamp when the evaluation plan triggered this evaluation + // flow. + google.protobuf.Timestamp evaluation_job_run_time = 3; + + // Output only. Timestamp when this model evaluation was created. + google.protobuf.Timestamp create_time = 4; + + // Output only. Metrics of the evaluation. + EvaluationMetrics evaluation_metrics = 5; + + // Type of the annotation to compute metrics for in the groundtruth and + // annotation labeled dataset. Required for creation. + AnnotationType annotation_type = 6; + + // Output only. Count of items in groundtruth dataset included in this + // evaluation. Will be unset if annotation type is not applicable. + int64 evaluated_item_count = 7; +} + +message EvaluationConfig { + // Vertical specific options for general metrics. + oneof vertical_option { + BoundingBoxEvaluationOptions bounding_box_evaluation_options = 1; + } +} + +// Options regarding evaluation between bounding boxes. +message BoundingBoxEvaluationOptions { + // Minimize IoU required to consider 2 bounding boxes are matched. + float iou_threshold = 1; +} + +message EvaluationMetrics { + // Common metrics covering most genernal cases. + oneof metrics { + ClassificationMetrics classification_metrics = 1; + + ObjectDetectionMetrics object_detection_metrics = 2; + } +} + +message ClassificationMetrics { + // Precision-recall curve. + PrCurve pr_curve = 1; + + ConfusionMatrix confusion_matrix = 2; +} + +message ObjectDetectionMetrics { + // Precision-recall curve. + PrCurve pr_curve = 1; +} + +message PrCurve { + message ConfidenceMetricsEntry { + // Threshold used for this entry, for example, IoU threshold for bounding + // box problem, or detection threshold for classification. + float confidence_threshold = 1; + + // Recall value. + float recall = 2; + + // Precision value. + float precision = 3; + + // Harmonic mean of recall and precision. + float f1_score = 4; + + // Recall value for entries with label that has highest score. + float recall_at1 = 5; + + // Precision value for entries with label that has highest score. + float precision_at1 = 6; + + // The harmonic mean of + // [recall_at1][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.recall_at1] + // and + // [precision_at1][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.precision_at1]. + float f1_score_at1 = 7; + + // Recall value for entries with label that has highest 5 scores. + float recall_at5 = 8; + + // Precision value for entries with label that has highest 5 scores. + float precision_at5 = 9; + + // The harmonic mean of + // [recall_at5][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.recall_at5] + // and + // [precision_at5][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.precision_at5]. + float f1_score_at5 = 10; + } + + // PR curve against which annotation spec. Could be empty. + AnnotationSpec annotation_spec = 1; + + // Area under precision recall curve. + float area_under_curve = 2; + + // entries to draw PR graph. + repeated ConfidenceMetricsEntry confidence_metrics_entries = 3; + + // mean average prcision of this curve. + float mean_average_precision = 4; +} + +// Confusion matrix of the model running the classification. Not applicable +// when label filtering is specified in evaluation option. +message ConfusionMatrix { + message ConfusionMatrixEntry { + // The predicted annotation spec. + AnnotationSpec annotation_spec = 1; + + // Number of items being predicted as this label. + int32 item_count = 2; + } + + // A row in the confusion matrix. + message Row { + // the original annotation spec of this row. + AnnotationSpec annotation_spec = 1; + + // Info describing predicted label distribution. + repeated ConfusionMatrixEntry entries = 2; + } + + repeated Row row = 1; +} diff --git a/google/cloud/datalabeling/v1beta1/evaluation_job.proto b/google/cloud/datalabeling/v1beta1/evaluation_job.proto new file mode 100644 index 00000000..ad642464 --- /dev/null +++ b/google/cloud/datalabeling/v1beta1/evaluation_job.proto @@ -0,0 +1,151 @@ +// Copyright 2019 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.datalabeling.v1beta1; + +import "google/api/annotations.proto"; +import "google/cloud/datalabeling/v1beta1/dataset.proto"; +import "google/cloud/datalabeling/v1beta1/evaluation.proto"; +import "google/cloud/datalabeling/v1beta1/human_annotation_config.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; + +option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; +option java_multiple_files = true; +option java_package = "com.google.cloud.datalabeling.v1beta1"; + +// Defines an evaluation job that is triggered periodically to generate +// evaluations. +message EvaluationJob { + // State of the job. + enum State { + STATE_UNSPECIFIED = 0; + + SCHEDULED = 1; + + RUNNING = 2; + + PAUSED = 3; + + STOPPED = 4; + } + + // Format: 'projects/{project_id}/evaluationJobs/{evaluation_job_id}' + string name = 1; + + // Description of the job. The description can be up to + // 25000 characters long. + string description = 2; + + State state = 3; + + // Describes the schedule on which the job will be executed. Minimum schedule + // unit is 1 day. + // + // The schedule can be either of the following types: + // * [Crontab](http://en.wikipedia.org/wiki/Cron#Overview) + // * English-like + // + // [schedule](https: + // //cloud.google.com/scheduler/docs/configuring/cron-job-schedules) + string schedule = 4; + + // The versioned model that is being evaluated here. + // Only one job is allowed for each model name. + // Format: 'projects/*/models/*/versions/*' + string model_version = 5; + + // Detailed config for running this eval job. + EvaluationJobConfig evaluation_job_config = 6; + + // Name of the AnnotationSpecSet. + string annotation_spec_set = 7; + + // If a human annotation should be requested when some data don't have ground + // truth. + bool label_missing_ground_truth = 8; + + // Output only. Any attempts with errors happening in evaluation job runs each + // time will be recorded here incrementally. + repeated Attempt attempts = 9; + + // Timestamp when this evaluation job was created. + google.protobuf.Timestamp create_time = 10; +} + +message EvaluationJobConfig { + // config specific to different supported human annotation use cases. + oneof human_annotation_request_config { + ImageClassificationConfig image_classification_config = 4; + + BoundingPolyConfig bounding_poly_config = 5; + + VideoClassificationConfig video_classification_config = 6; + + ObjectDetectionConfig object_detection_config = 7; + + TextClassificationConfig text_classification_config = 8; + + ObjectTrackingConfig object_tracking_config = 12; + } + + // Input config for data, gcs_source in the config will be the root path for + // data. Data should be organzied chronically under that path. + InputConfig input_config = 1; + + // Config used to create evaluation. + EvaluationConfig evaluation_config = 2; + + HumanAnnotationConfig human_annotation_config = 3; + + // Mappings between reserved keys for bigquery import and customized tensor + // names. Key is the reserved key, value is tensor name in the bigquery table. + // Different annotation type has different required key mapping. See user + // manual for more details: + // + // https: + // //docs.google.com/document/d/1bg1meMIBGY + // // 9I5QEoFoHSX6u9LsZQYBSmPt6E9SxqHZc/edit#heading=h.tfyjhxhvsqem + map bigquery_import_keys = 9; + + // Max number of examples to collect in each period. + int32 example_count = 10; + + // Percentage of examples to collect in each period. 0.1 means 10% of total + // examples will be collected, and 0.0 means no collection. + double example_sample_percentage = 11; + + // Alert config for the evaluation job. The alert will be triggered when its + // criteria is met. + EvaluationJobAlertConfig evaluation_job_alert_config = 13; +} + +message EvaluationJobAlertConfig { + // Required. Email of the user who will be receiving the alert. + string email = 1; + + // If a single evaluation run's aggregate mean average precision is + // lower than this threshold, the alert will be triggered. + double min_acceptable_mean_average_precision = 2; +} + +// Records a failed attempt. +message Attempt { + google.protobuf.Timestamp attempt_time = 1; + + repeated google.rpc.Status partial_failures = 2; +} diff --git a/google/cloud/datalabeling/v1beta1/human_annotation_config.proto b/google/cloud/datalabeling/v1beta1/human_annotation_config.proto index 96672aed..d392aca7 100644 --- a/google/cloud/datalabeling/v1beta1/human_annotation_config.proto +++ b/google/cloud/datalabeling/v1beta1/human_annotation_config.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,14 +17,13 @@ syntax = "proto3"; package google.cloud.datalabeling.v1beta1; -import "google/protobuf/duration.proto"; import "google/api/annotations.proto"; +import "google/protobuf/duration.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; - enum StringAggregationType { STRING_AGGREGATION_TYPE_UNSPECIFIED = 0; @@ -79,6 +78,10 @@ message HumanAnnotationConfig { // emails must be registered in crowdcompute worker UI: // https://crowd-compute.appspot.com/ repeated string contributor_emails = 9; + + // Email of the user who started the labeling task and should be notified by + // email. If empty no notification will be sent. + string user_email_address = 10; } // Config for image classification human labeling task. @@ -159,9 +162,6 @@ message ObjectDetectionConfig { // Required. Annotation spec set resource name. string annotation_spec_set = 1; - // Optional. Instruction message showed on labelers UI. - string instruction_message = 2; - // Required. Number of frames per second to be extracted from the video. double extraction_frame_rate = 3; } diff --git a/google/cloud/datalabeling/v1beta1/instruction.proto b/google/cloud/datalabeling/v1beta1/instruction.proto index d1a1e751..6cb7b50f 100644 --- a/google/cloud/datalabeling/v1beta1/instruction.proto +++ b/google/cloud/datalabeling/v1beta1/instruction.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,15 +17,14 @@ syntax = "proto3"; package google.cloud.datalabeling.v1beta1; +import "google/api/annotations.proto"; import "google/cloud/datalabeling/v1beta1/dataset.proto"; import "google/protobuf/timestamp.proto"; -import "google/api/annotations.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; - // Instruction of how to perform the labeling task for human operators. // Currently two types of instruction are supported - CSV file and PDF. // One of the two types instruction must be provided. @@ -53,16 +52,22 @@ message Instruction { // Required. The data type of this instruction. DataType data_type = 6; - // One of CSV and PDF instruction is required. - // Instruction from a csv file, such as for classification task. - // Csv file should have exact two columns, in the format of: - // The first column is labeled data, such as image reference, text. - // The second column is comma separated labels associated with data. + // One of CSV or PDF instruction is required. + // Instruction from a CSV file, such as for classification task. + // The CSV file should have exact two columns, in the following format: + // + // * The first column is labeled data, such as an image reference, text. + // * The second column is comma separated labels associated with data. CsvInstruction csv_instruction = 7; - // One of CSV and PDF instruction is required. - // Instruction from a PDF doc. The PDF doc should be in GCS bucket. + // One of CSV or PDF instruction is required. + // Instruction from a PDF document. The PDF should be in a Cloud Storage + // bucket. PdfInstruction pdf_instruction = 9; + + // Output only. The names of any related resources that are blocking changes + // to the instruction. + repeated string blocking_resources = 10; } // Instruction from a CSV file. diff --git a/google/cloud/datalabeling/v1beta1/operations.proto b/google/cloud/datalabeling/v1beta1/operations.proto index 71815e53..80371d0e 100644 --- a/google/cloud/datalabeling/v1beta1/operations.proto +++ b/google/cloud/datalabeling/v1beta1/operations.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,12 +17,11 @@ syntax = "proto3"; package google.cloud.datalabeling.v1beta1; +import "google/api/annotations.proto"; import "google/cloud/datalabeling/v1beta1/dataset.proto"; import "google/cloud/datalabeling/v1beta1/human_annotation_config.proto"; -import "google/cloud/datalabeling/v1beta1/instruction.proto"; import "google/protobuf/timestamp.proto"; import "google/rpc/status.proto"; -import "google/api/annotations.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; option java_multiple_files = true; @@ -69,6 +68,9 @@ message ImportDataOperationMetadata { // E.g. single files that couldn't be read. // Status details field will contain standard GCP error details. repeated google.rpc.Status partial_failures = 2; + + // Output only. Timestamp when import dataset request was created. + google.protobuf.Timestamp create_time = 3; } // Metadata of an ExportData operation. @@ -81,13 +83,57 @@ message ExportDataOperationMetadata { // E.g. single files that couldn't be read. // Status details field will contain standard GCP error details. repeated google.rpc.Status partial_failures = 2; + + // Output only. Timestamp when export dataset request was created. + google.protobuf.Timestamp create_time = 3; } // Metadata of a labeling operation, such as LabelImage or LabelVideo. -// Next tag: 16 +// Next tag: 18 message LabelOperationMetadata { + // Ouptut only. Details of specific label operation. + oneof details { + // Details of label image classification operation. + LabelImageClassificationOperationMetadata image_classification_details = 3; + + // Details of label image bounding box operation. + LabelImageBoundingBoxOperationMetadata image_bounding_box_details = 4; + + // Details of label image bounding poly operation. + LabelImageBoundingPolyOperationMetadata image_bounding_poly_details = 11; + + // Details of label image oriented bounding box operation. + LabelImageOrientedBoundingBoxOperationMetadata + image_oriented_bounding_box_details = 14; + + // Details of label image polyline operation. + LabelImagePolylineOperationMetadata image_polyline_details = 12; + + // Details of label image segmentation operation. + LabelImageSegmentationOperationMetadata image_segmentation_details = 15; + + // Details of label video classification operation. + LabelVideoClassificationOperationMetadata video_classification_details = 5; + + // Details of label video object detection operation. + LabelVideoObjectDetectionOperationMetadata video_object_detection_details = + 6; + + // Details of label video object tracking operation. + LabelVideoObjectTrackingOperationMetadata video_object_tracking_details = 7; + + // Details of label video event operation. + LabelVideoEventOperationMetadata video_event_details = 8; + + // Details of label text classification operation. + LabelTextClassificationOperationMetadata text_classification_details = 9; + + // Details of label text entity extraction operation. + LabelTextEntityExtractionOperationMetadata text_entity_extraction_details = + 13; + } + // Output only. Progress of label operation. Range: [0, 100]. - // Currently not supported. int32 progress_percent = 1; // Output only. Partial failures encountered. @@ -95,25 +141,8 @@ message LabelOperationMetadata { // Status details field will contain standard GCP error details. repeated google.rpc.Status partial_failures = 2; - // Ouptut only. Details of specific label operation. - oneof details { - LabelImageClassificationOperationMetadata image_classification_details = 3; - LabelImageBoundingBoxOperationMetadata image_bounding_box_details = 4; - LabelImageBoundingPolyOperationMetadata image_bounding_poly_details = 11; - LabelImageOrientedBoundingBoxOperationMetadata - image_oriented_bounding_box_details = 14; - LabelImagePolylineOperationMetadata image_polyline_details = 12; - LabelImageSegmentationOperationMetadata image_segmentation_details = 15; - LabelVideoClassificationOperationMetadata video_classification_details = 5; - LabelVideoObjectDetectionOperationMetadata video_object_detection_details = - 6; - LabelVideoObjectTrackingOperationMetadata video_object_tracking_details = 7; - LabelVideoEventOperationMetadata video_event_details = 8; - LabelTextClassificationOperationMetadata text_classification_details = 9; - LabelAudioTranscriptionOperationMetadata audio_transcription_details = 10; - LabelTextEntityExtractionOperationMetadata text_entity_extraction_details = - 13; - } + // Output only. Timestamp when labeling request was created. + google.protobuf.Timestamp create_time = 16; } // Metadata of a LabelImageClassification operation. @@ -182,11 +211,6 @@ message LabelTextClassificationOperationMetadata { HumanAnnotationConfig basic_config = 1; } -message LabelAudioTranscriptionOperationMetadata { - // Basic human annotation config used in labeling request. - HumanAnnotationConfig basic_config = 1; -} - // Details of a LabelTextEntityExtraction operation metadata. message LabelTextEntityExtractionOperationMetadata { // Basic human annotation config used in labeling request. @@ -195,12 +219,15 @@ message LabelTextEntityExtractionOperationMetadata { // Metadata of a CreateInstruction operation. message CreateInstructionMetadata { - // Output only. The name of the created Instruction. + // The name of the created Instruction. // projects/{project_id}/instructions/{instruction_id} string instruction = 1; - // Output only. Partial failures encountered. + // Partial failures encountered. // E.g. single files that couldn't be read. // Status details field will contain standard GCP error details. repeated google.rpc.Status partial_failures = 2; + + // Timestamp when create instruction request was created. + google.protobuf.Timestamp create_time = 3; }