blob: 3de5febed7d28865d2aa939fd20ba10ecb9efcab [file]
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.ai.generativelanguage.v1beta;
import "google/ai/generativelanguage/v1beta/retriever.proto";
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
option go_package = "cloud.google.com/go/ai/generativelanguage/apiv1beta/generativelanguagepb;generativelanguagepb";
option java_multiple_files = true;
option java_outer_classname = "RetrieverServiceProto";
option java_package = "com.google.ai.generativelanguage.v1beta";
// An API for semantic search over a corpus of user uploaded content.
service RetrieverService {
option (google.api.default_host) = "generativelanguage.googleapis.com";
// Creates an empty `Corpus`.
rpc CreateCorpus(CreateCorpusRequest) returns (Corpus) {
option (google.api.http) = {
post: "/v1beta/corpora"
body: "corpus"
};
option (google.api.method_signature) = "corpus";
}
// Gets information about a specific `Corpus`.
rpc GetCorpus(GetCorpusRequest) returns (Corpus) {
option (google.api.http) = {
get: "/v1beta/{name=corpora/*}"
};
option (google.api.method_signature) = "name";
}
// Updates a `Corpus`.
rpc UpdateCorpus(UpdateCorpusRequest) returns (Corpus) {
option (google.api.http) = {
patch: "/v1beta/{corpus.name=corpora/*}"
body: "corpus"
};
option (google.api.method_signature) = "corpus,update_mask";
}
// Deletes a `Corpus`.
rpc DeleteCorpus(DeleteCorpusRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta/{name=corpora/*}"
};
option (google.api.method_signature) = "name";
}
// Lists all `Corpora` owned by the user.
rpc ListCorpora(ListCorporaRequest) returns (ListCorporaResponse) {
option (google.api.http) = {
get: "/v1beta/corpora"
};
}
// Performs semantic search over a `Corpus`.
rpc QueryCorpus(QueryCorpusRequest) returns (QueryCorpusResponse) {
option (google.api.http) = {
post: "/v1beta/{name=corpora/*}:query"
body: "*"
};
}
// Creates an empty `Document`.
rpc CreateDocument(CreateDocumentRequest) returns (Document) {
option (google.api.http) = {
post: "/v1beta/{parent=corpora/*}/documents"
body: "document"
};
option (google.api.method_signature) = "parent,document";
}
// Gets information about a specific `Document`.
rpc GetDocument(GetDocumentRequest) returns (Document) {
option (google.api.http) = {
get: "/v1beta/{name=corpora/*/documents/*}"
};
option (google.api.method_signature) = "name";
}
// Updates a `Document`.
rpc UpdateDocument(UpdateDocumentRequest) returns (Document) {
option (google.api.http) = {
patch: "/v1beta/{document.name=corpora/*/documents/*}"
body: "document"
};
option (google.api.method_signature) = "document,update_mask";
}
// Deletes a `Document`.
rpc DeleteDocument(DeleteDocumentRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta/{name=corpora/*/documents/*}"
};
option (google.api.method_signature) = "name";
}
// Lists all `Document`s in a `Corpus`.
rpc ListDocuments(ListDocumentsRequest) returns (ListDocumentsResponse) {
option (google.api.http) = {
get: "/v1beta/{parent=corpora/*}/documents"
};
option (google.api.method_signature) = "parent";
}
// Performs semantic search over a `Document`.
rpc QueryDocument(QueryDocumentRequest) returns (QueryDocumentResponse) {
option (google.api.http) = {
post: "/v1beta/{name=corpora/*/documents/*}:query"
body: "*"
};
}
// Creates a `Chunk`.
rpc CreateChunk(CreateChunkRequest) returns (Chunk) {
option (google.api.http) = {
post: "/v1beta/{parent=corpora/*/documents/*}/chunks"
body: "chunk"
};
option (google.api.method_signature) = "parent,chunk";
}
// Batch create `Chunk`s.
rpc BatchCreateChunks(BatchCreateChunksRequest)
returns (BatchCreateChunksResponse) {
option (google.api.http) = {
post: "/v1beta/{parent=corpora/*/documents/*}/chunks:batchCreate"
body: "*"
};
}
// Gets information about a specific `Chunk`.
rpc GetChunk(GetChunkRequest) returns (Chunk) {
option (google.api.http) = {
get: "/v1beta/{name=corpora/*/documents/*/chunks/*}"
};
option (google.api.method_signature) = "name";
}
// Updates a `Chunk`.
rpc UpdateChunk(UpdateChunkRequest) returns (Chunk) {
option (google.api.http) = {
patch: "/v1beta/{chunk.name=corpora/*/documents/*/chunks/*}"
body: "chunk"
};
option (google.api.method_signature) = "chunk,update_mask";
}
// Batch update `Chunk`s.
rpc BatchUpdateChunks(BatchUpdateChunksRequest)
returns (BatchUpdateChunksResponse) {
option (google.api.http) = {
post: "/v1beta/{parent=corpora/*/documents/*}/chunks:batchUpdate"
body: "*"
};
}
// Deletes a `Chunk`.
rpc DeleteChunk(DeleteChunkRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta/{name=corpora/*/documents/*/chunks/*}"
};
option (google.api.method_signature) = "name";
}
// Batch delete `Chunk`s.
rpc BatchDeleteChunks(BatchDeleteChunksRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/v1beta/{parent=corpora/*/documents/*}/chunks:batchDelete"
body: "*"
};
}
// Lists all `Chunk`s in a `Document`.
rpc ListChunks(ListChunksRequest) returns (ListChunksResponse) {
option (google.api.http) = {
get: "/v1beta/{parent=corpora/*/documents/*}/chunks"
};
option (google.api.method_signature) = "parent";
}
}
// Request to create a `Corpus`.
message CreateCorpusRequest {
// Required. The `Corpus` to create.
Corpus corpus = 1 [(google.api.field_behavior) = REQUIRED];
}
// Request for getting information about a specific `Corpus`.
message GetCorpusRequest {
// Required. The name of the `Corpus`.
// Example: `corpora/my-corpus-123`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Corpus"
}
];
}
// Request to update a `Corpus`.
message UpdateCorpusRequest {
// Required. The `Corpus` to update.
Corpus corpus = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The list of fields to update.
// Currently, this only supports updating `display_name`.
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = REQUIRED];
}
// Request to delete a `Corpus`.
message DeleteCorpusRequest {
// Required. The resource name of the `Corpus`.
// Example: `corpora/my-corpus-123`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Corpus"
}
];
// Optional. If set to true, any `Document`s and objects related to this
// `Corpus` will also be deleted.
//
// If false (the default), a `FAILED_PRECONDITION` error will be returned if
// `Corpus` contains any `Document`s.
bool force = 2 [(google.api.field_behavior) = OPTIONAL];
}
// Request for listing `Corpora`.
message ListCorporaRequest {
// Optional. The maximum number of `Corpora` to return (per page).
// The service may return fewer `Corpora`.
//
// If unspecified, at most 10 `Corpora` will be returned.
// The maximum size limit is 20 `Corpora` per page.
int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL];
// Optional. A page token, received from a previous `ListCorpora` call.
//
// Provide the `next_page_token` returned in the response as an argument to
// the next request to retrieve the next page.
//
// When paginating, all other parameters provided to `ListCorpora`
// must match the call that provided the page token.
string page_token = 2 [(google.api.field_behavior) = OPTIONAL];
}
// Response from `ListCorpora` containing a paginated list of `Corpora`.
// The results are sorted by ascending `corpus.create_time`.
message ListCorporaResponse {
// The returned corpora.
repeated Corpus corpora = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there are no more pages.
string next_page_token = 2;
}
// Request for querying a `Corpus`.
message QueryCorpusRequest {
// Required. The name of the `Corpus` to query.
// Example: `corpora/my-corpus-123`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Corpus"
}
];
// Required. Query string to perform semantic search.
string query = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Filter for `Chunk` and `Document` metadata. Each `MetadataFilter`
// object should correspond to a unique key. Multiple `MetadataFilter` objects
// are joined by logical "AND"s.
//
// Example query at document level:
// (year >= 2020 OR year < 2010) AND (genre = drama OR genre = action)
//
// `MetadataFilter` object list:
// metadata_filters = [
// {key = "document.custom_metadata.year"
// conditions = [{int_value = 2020, operation = GREATER_EQUAL},
// {int_value = 2010, operation = LESS}]},
// {key = "document.custom_metadata.year"
// conditions = [{int_value = 2020, operation = GREATER_EQUAL},
// {int_value = 2010, operation = LESS}]},
// {key = "document.custom_metadata.genre"
// conditions = [{string_value = "drama", operation = EQUAL},
// {string_value = "action", operation = EQUAL}]}]
//
// Example query at chunk level for a numeric range of values:
// (year > 2015 AND year <= 2020)
//
// `MetadataFilter` object list:
// metadata_filters = [
// {key = "chunk.custom_metadata.year"
// conditions = [{int_value = 2015, operation = GREATER}]},
// {key = "chunk.custom_metadata.year"
// conditions = [{int_value = 2020, operation = LESS_EQUAL}]}]
//
// Note: "AND"s for the same key are only supported for numeric values. String
// values only support "OR"s for the same key.
repeated MetadataFilter metadata_filters = 3
[(google.api.field_behavior) = OPTIONAL];
// Optional. The maximum number of `Chunk`s to return.
// The service may return fewer `Chunk`s.
//
// If unspecified, at most 10 `Chunk`s will be returned.
// The maximum specified result count is 100.
int32 results_count = 4 [(google.api.field_behavior) = OPTIONAL];
}
// Response from `QueryCorpus` containing a list of relevant chunks.
message QueryCorpusResponse {
// The relevant chunks.
repeated RelevantChunk relevant_chunks = 1;
}
// The information for a chunk relevant to a query.
message RelevantChunk {
// `Chunk` relevance to the query.
float chunk_relevance_score = 1;
// `Chunk` associated with the query.
Chunk chunk = 2;
}
// Request to create a `Document`.
message CreateDocumentRequest {
// Required. The name of the `Corpus` where this `Document` will be created.
// Example: `corpora/my-corpus-123`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Document"
}
];
// Required. The `Document` to create.
Document document = 2 [(google.api.field_behavior) = REQUIRED];
}
// Request for getting information about a specific `Document`.
message GetDocumentRequest {
// Required. The name of the `Document` to retrieve.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Document"
}
];
}
// Request to update a `Document`.
message UpdateDocumentRequest {
// Required. The `Document` to update.
Document document = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The list of fields to update.
// Currently, this only supports updating `display_name` and
// `custom_metadata`.
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = REQUIRED];
}
// Request to delete a `Document`.
message DeleteDocumentRequest {
// Required. The resource name of the `Document` to delete.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Document"
}
];
// Optional. If set to true, any `Chunk`s and objects related to this
// `Document` will also be deleted.
//
// If false (the default), a `FAILED_PRECONDITION` error will be returned if
// `Document` contains any `Chunk`s.
bool force = 2 [(google.api.field_behavior) = OPTIONAL];
}
// Request for listing `Document`s.
message ListDocumentsRequest {
// Required. The name of the `Corpus` containing `Document`s.
// Example: `corpora/my-corpus-123`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Document"
}
];
// Optional. The maximum number of `Document`s to return (per page).
// The service may return fewer `Document`s.
//
// If unspecified, at most 10 `Document`s will be returned.
// The maximum size limit is 20 `Document`s per page.
int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. A page token, received from a previous `ListDocuments` call.
//
// Provide the `next_page_token` returned in the response as an argument to
// the next request to retrieve the next page.
//
// When paginating, all other parameters provided to `ListDocuments`
// must match the call that provided the page token.
string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}
// Response from `ListDocuments` containing a paginated list of `Document`s.
// The `Document`s are sorted by ascending `document.create_time`.
message ListDocumentsResponse {
// The returned `Document`s.
repeated Document documents = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there are no more pages.
string next_page_token = 2;
}
// Request for querying a `Document`.
message QueryDocumentRequest {
// Required. The name of the `Document` to query.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Document"
}
];
// Required. Query string to perform semantic search.
string query = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. The maximum number of `Chunk`s to return.
// The service may return fewer `Chunk`s.
//
// If unspecified, at most 10 `Chunk`s will be returned.
// The maximum specified result count is 100.
int32 results_count = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. Filter for `Chunk` metadata. Each `MetadataFilter` object should
// correspond to a unique key. Multiple `MetadataFilter` objects are joined by
// logical "AND"s.
//
// Note: `Document`-level filtering is not supported for this request because
// a `Document` name is already specified.
//
// Example query:
// (year >= 2020 OR year < 2010) AND (genre = drama OR genre = action)
//
// `MetadataFilter` object list:
// metadata_filters = [
// {key = "chunk.custom_metadata.year"
// conditions = [{int_value = 2020, operation = GREATER_EQUAL},
// {int_value = 2010, operation = LESS}},
// {key = "chunk.custom_metadata.genre"
// conditions = [{string_value = "drama", operation = EQUAL},
// {string_value = "action", operation = EQUAL}}]
//
// Example query for a numeric range of values:
// (year > 2015 AND year <= 2020)
//
// `MetadataFilter` object list:
// metadata_filters = [
// {key = "chunk.custom_metadata.year"
// conditions = [{int_value = 2015, operation = GREATER}]},
// {key = "chunk.custom_metadata.year"
// conditions = [{int_value = 2020, operation = LESS_EQUAL}]}]
//
// Note: "AND"s for the same key are only supported for numeric values. String
// values only support "OR"s for the same key.
repeated MetadataFilter metadata_filters = 4
[(google.api.field_behavior) = OPTIONAL];
}
// Response from `QueryDocument` containing a list of relevant chunks.
message QueryDocumentResponse {
// The returned relevant chunks.
repeated RelevantChunk relevant_chunks = 1;
}
// Request to create a `Chunk`.
message CreateChunkRequest {
// Required. The name of the `Document` where this `Chunk` will be created.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Chunk"
}
];
// Required. The `Chunk` to create.
Chunk chunk = 2 [(google.api.field_behavior) = REQUIRED];
}
// Request to batch create `Chunk`s.
message BatchCreateChunksRequest {
// Optional. The name of the `Document` where this batch of `Chunk`s will be
// created. The parent field in every `CreateChunkRequest` must match this
// value. Example: `corpora/my-corpus-123/documents/the-doc-abc`
string parent = 1 [
(google.api.field_behavior) = OPTIONAL,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Chunk"
}
];
// Required. The request messages specifying the `Chunk`s to create.
// A maximum of 100 `Chunk`s can be created in a batch.
repeated CreateChunkRequest requests = 2
[(google.api.field_behavior) = REQUIRED];
}
// Response from `BatchCreateChunks` containing a list of created `Chunk`s.
message BatchCreateChunksResponse {
// `Chunk`s created.
repeated Chunk chunks = 1;
}
// Request for getting information about a specific `Chunk`.
message GetChunkRequest {
// Required. The name of the `Chunk` to retrieve.
// Example: `corpora/my-corpus-123/documents/the-doc-abc/chunks/some-chunk`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Chunk"
}
];
}
// Request to update a `Chunk`.
message UpdateChunkRequest {
// Required. The `Chunk` to update.
Chunk chunk = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The list of fields to update.
// Currently, this only supports updating `custom_metadata` and `data`.
google.protobuf.FieldMask update_mask = 2
[(google.api.field_behavior) = REQUIRED];
}
// Request to batch update `Chunk`s.
message BatchUpdateChunksRequest {
// Optional. The name of the `Document` containing the `Chunk`s to update.
// The parent field in every `UpdateChunkRequest` must match this value.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string parent = 1 [
(google.api.field_behavior) = OPTIONAL,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Chunk"
}
];
// Required. The request messages specifying the `Chunk`s to update.
// A maximum of 100 `Chunk`s can be updated in a batch.
repeated UpdateChunkRequest requests = 2
[(google.api.field_behavior) = REQUIRED];
}
// Response from `BatchUpdateChunks` containing a list of updated `Chunk`s.
message BatchUpdateChunksResponse {
// `Chunk`s updated.
repeated Chunk chunks = 1;
}
// Request to delete a `Chunk`.
message DeleteChunkRequest {
// Required. The resource name of the `Chunk` to delete.
// Example: `corpora/my-corpus-123/documents/the-doc-abc/chunks/some-chunk`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "generativelanguage.googleapis.com/Chunk"
}
];
}
// Request to batch delete `Chunk`s.
message BatchDeleteChunksRequest {
// Optional. The name of the `Document` containing the `Chunk`s to delete.
// The parent field in every `DeleteChunkRequest` must match this value.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string parent = 1 [
(google.api.field_behavior) = OPTIONAL,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Chunk"
}
];
// Required. The request messages specifying the `Chunk`s to delete.
repeated DeleteChunkRequest requests = 2
[(google.api.field_behavior) = REQUIRED];
}
// Request for listing `Chunk`s.
message ListChunksRequest {
// Required. The name of the `Document` containing `Chunk`s.
// Example: `corpora/my-corpus-123/documents/the-doc-abc`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "generativelanguage.googleapis.com/Chunk"
}
];
// Optional. The maximum number of `Chunk`s to return (per page).
// The service may return fewer `Chunk`s.
//
// If unspecified, at most 10 `Chunk`s will be returned.
// The maximum size limit is 100 `Chunk`s per page.
int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. A page token, received from a previous `ListChunks` call.
//
// Provide the `next_page_token` returned in the response as an argument to
// the next request to retrieve the next page.
//
// When paginating, all other parameters provided to `ListChunks`
// must match the call that provided the page token.
string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}
// Response from `ListChunks` containing a paginated list of `Chunk`s.
// The `Chunk`s are sorted by ascending `chunk.create_time`.
message ListChunksResponse {
// The returned `Chunk`s.
repeated Chunk chunks = 1;
// A token, which can be sent as `page_token` to retrieve the next page.
// If this field is omitted, there are no more pages.
string next_page_token = 2;
}