1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.ai.generativelanguage.v1beta; 18 19import "google/ai/generativelanguage/v1beta/retriever.proto"; 20import "google/api/annotations.proto"; 21import "google/api/client.proto"; 22import "google/api/field_behavior.proto"; 23import "google/api/resource.proto"; 24import "google/protobuf/empty.proto"; 25import "google/protobuf/field_mask.proto"; 26 27option go_package = "cloud.google.com/go/ai/generativelanguage/apiv1beta/generativelanguagepb;generativelanguagepb"; 28option java_multiple_files = true; 29option java_outer_classname = "RetrieverServiceProto"; 30option java_package = "com.google.ai.generativelanguage.v1beta"; 31 32// An API for semantic search over a corpus of user uploaded content. 33service RetrieverService { 34 option (google.api.default_host) = "generativelanguage.googleapis.com"; 35 36 // Creates an empty `Corpus`. 37 rpc CreateCorpus(CreateCorpusRequest) returns (Corpus) { 38 option (google.api.http) = { 39 post: "/v1beta/corpora" 40 body: "corpus" 41 }; 42 option (google.api.method_signature) = "corpus"; 43 } 44 45 // Gets information about a specific `Corpus`. 46 rpc GetCorpus(GetCorpusRequest) returns (Corpus) { 47 option (google.api.http) = { 48 get: "/v1beta/{name=corpora/*}" 49 }; 50 option (google.api.method_signature) = "name"; 51 } 52 53 // Updates a `Corpus`. 54 rpc UpdateCorpus(UpdateCorpusRequest) returns (Corpus) { 55 option (google.api.http) = { 56 patch: "/v1beta/{corpus.name=corpora/*}" 57 body: "corpus" 58 }; 59 option (google.api.method_signature) = "corpus,update_mask"; 60 } 61 62 // Deletes a `Corpus`. 63 rpc DeleteCorpus(DeleteCorpusRequest) returns (google.protobuf.Empty) { 64 option (google.api.http) = { 65 delete: "/v1beta/{name=corpora/*}" 66 }; 67 option (google.api.method_signature) = "name"; 68 } 69 70 // Lists all `Corpora` owned by the user. 71 rpc ListCorpora(ListCorporaRequest) returns (ListCorporaResponse) { 72 option (google.api.http) = { 73 get: "/v1beta/corpora" 74 }; 75 } 76 77 // Performs semantic search over a `Corpus`. 78 rpc QueryCorpus(QueryCorpusRequest) returns (QueryCorpusResponse) { 79 option (google.api.http) = { 80 post: "/v1beta/{name=corpora/*}:query" 81 body: "*" 82 }; 83 } 84 85 // Creates an empty `Document`. 86 rpc CreateDocument(CreateDocumentRequest) returns (Document) { 87 option (google.api.http) = { 88 post: "/v1beta/{parent=corpora/*}/documents" 89 body: "document" 90 }; 91 option (google.api.method_signature) = "parent,document"; 92 } 93 94 // Gets information about a specific `Document`. 95 rpc GetDocument(GetDocumentRequest) returns (Document) { 96 option (google.api.http) = { 97 get: "/v1beta/{name=corpora/*/documents/*}" 98 }; 99 option (google.api.method_signature) = "name"; 100 } 101 102 // Updates a `Document`. 103 rpc UpdateDocument(UpdateDocumentRequest) returns (Document) { 104 option (google.api.http) = { 105 patch: "/v1beta/{document.name=corpora/*/documents/*}" 106 body: "document" 107 }; 108 option (google.api.method_signature) = "document,update_mask"; 109 } 110 111 // Deletes a `Document`. 112 rpc DeleteDocument(DeleteDocumentRequest) returns (google.protobuf.Empty) { 113 option (google.api.http) = { 114 delete: "/v1beta/{name=corpora/*/documents/*}" 115 }; 116 option (google.api.method_signature) = "name"; 117 } 118 119 // Lists all `Document`s in a `Corpus`. 120 rpc ListDocuments(ListDocumentsRequest) returns (ListDocumentsResponse) { 121 option (google.api.http) = { 122 get: "/v1beta/{parent=corpora/*}/documents" 123 }; 124 option (google.api.method_signature) = "parent"; 125 } 126 127 // Performs semantic search over a `Document`. 128 rpc QueryDocument(QueryDocumentRequest) returns (QueryDocumentResponse) { 129 option (google.api.http) = { 130 post: "/v1beta/{name=corpora/*/documents/*}:query" 131 body: "*" 132 }; 133 } 134 135 // Creates a `Chunk`. 136 rpc CreateChunk(CreateChunkRequest) returns (Chunk) { 137 option (google.api.http) = { 138 post: "/v1beta/{parent=corpora/*/documents/*}/chunks" 139 body: "chunk" 140 }; 141 option (google.api.method_signature) = "parent,chunk"; 142 } 143 144 // Batch create `Chunk`s. 145 rpc BatchCreateChunks(BatchCreateChunksRequest) 146 returns (BatchCreateChunksResponse) { 147 option (google.api.http) = { 148 post: "/v1beta/{parent=corpora/*/documents/*}/chunks:batchCreate" 149 body: "*" 150 }; 151 } 152 153 // Gets information about a specific `Chunk`. 154 rpc GetChunk(GetChunkRequest) returns (Chunk) { 155 option (google.api.http) = { 156 get: "/v1beta/{name=corpora/*/documents/*/chunks/*}" 157 }; 158 option (google.api.method_signature) = "name"; 159 } 160 161 // Updates a `Chunk`. 162 rpc UpdateChunk(UpdateChunkRequest) returns (Chunk) { 163 option (google.api.http) = { 164 patch: "/v1beta/{chunk.name=corpora/*/documents/*/chunks/*}" 165 body: "chunk" 166 }; 167 option (google.api.method_signature) = "chunk,update_mask"; 168 } 169 170 // Batch update `Chunk`s. 171 rpc BatchUpdateChunks(BatchUpdateChunksRequest) 172 returns (BatchUpdateChunksResponse) { 173 option (google.api.http) = { 174 post: "/v1beta/{parent=corpora/*/documents/*}/chunks:batchUpdate" 175 body: "*" 176 }; 177 } 178 179 // Deletes a `Chunk`. 180 rpc DeleteChunk(DeleteChunkRequest) returns (google.protobuf.Empty) { 181 option (google.api.http) = { 182 delete: "/v1beta/{name=corpora/*/documents/*/chunks/*}" 183 }; 184 option (google.api.method_signature) = "name"; 185 } 186 187 // Batch delete `Chunk`s. 188 rpc BatchDeleteChunks(BatchDeleteChunksRequest) 189 returns (google.protobuf.Empty) { 190 option (google.api.http) = { 191 post: "/v1beta/{parent=corpora/*/documents/*}/chunks:batchDelete" 192 body: "*" 193 }; 194 } 195 196 // Lists all `Chunk`s in a `Document`. 197 rpc ListChunks(ListChunksRequest) returns (ListChunksResponse) { 198 option (google.api.http) = { 199 get: "/v1beta/{parent=corpora/*/documents/*}/chunks" 200 }; 201 option (google.api.method_signature) = "parent"; 202 } 203} 204 205// Request to create a `Corpus`. 206message CreateCorpusRequest { 207 // Required. The `Corpus` to create. 208 Corpus corpus = 1 [(google.api.field_behavior) = REQUIRED]; 209} 210 211// Request for getting information about a specific `Corpus`. 212message GetCorpusRequest { 213 // Required. The name of the `Corpus`. 214 // Example: `corpora/my-corpus-123` 215 string name = 1 [ 216 (google.api.field_behavior) = REQUIRED, 217 (google.api.resource_reference) = { 218 type: "generativelanguage.googleapis.com/Corpus" 219 } 220 ]; 221} 222 223// Request to update a `Corpus`. 224message UpdateCorpusRequest { 225 // Required. The `Corpus` to update. 226 Corpus corpus = 1 [(google.api.field_behavior) = REQUIRED]; 227 228 // Required. The list of fields to update. 229 // Currently, this only supports updating `display_name`. 230 google.protobuf.FieldMask update_mask = 2 231 [(google.api.field_behavior) = REQUIRED]; 232} 233 234// Request to delete a `Corpus`. 235message DeleteCorpusRequest { 236 // Required. The resource name of the `Corpus`. 237 // Example: `corpora/my-corpus-123` 238 string name = 1 [ 239 (google.api.field_behavior) = REQUIRED, 240 (google.api.resource_reference) = { 241 type: "generativelanguage.googleapis.com/Corpus" 242 } 243 ]; 244 245 // Optional. If set to true, any `Document`s and objects related to this 246 // `Corpus` will also be deleted. 247 // 248 // If false (the default), a `FAILED_PRECONDITION` error will be returned if 249 // `Corpus` contains any `Document`s. 250 bool force = 2 [(google.api.field_behavior) = OPTIONAL]; 251} 252 253// Request for listing `Corpora`. 254message ListCorporaRequest { 255 // Optional. The maximum number of `Corpora` to return (per page). 256 // The service may return fewer `Corpora`. 257 // 258 // If unspecified, at most 10 `Corpora` will be returned. 259 // The maximum size limit is 20 `Corpora` per page. 260 int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; 261 262 // Optional. A page token, received from a previous `ListCorpora` call. 263 // 264 // Provide the `next_page_token` returned in the response as an argument to 265 // the next request to retrieve the next page. 266 // 267 // When paginating, all other parameters provided to `ListCorpora` 268 // must match the call that provided the page token. 269 string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; 270} 271 272// Response from `ListCorpora` containing a paginated list of `Corpora`. 273// The results are sorted by ascending `corpus.create_time`. 274message ListCorporaResponse { 275 // The returned corpora. 276 repeated Corpus corpora = 1; 277 278 // A token, which can be sent as `page_token` to retrieve the next page. 279 // If this field is omitted, there are no more pages. 280 string next_page_token = 2; 281} 282 283// Request for querying a `Corpus`. 284message QueryCorpusRequest { 285 // Required. The name of the `Corpus` to query. 286 // Example: `corpora/my-corpus-123` 287 string name = 1 [ 288 (google.api.field_behavior) = REQUIRED, 289 (google.api.resource_reference) = { 290 type: "generativelanguage.googleapis.com/Corpus" 291 } 292 ]; 293 294 // Required. Query string to perform semantic search. 295 string query = 2 [(google.api.field_behavior) = REQUIRED]; 296 297 // Optional. Filter for `Chunk` and `Document` metadata. Each `MetadataFilter` 298 // object should correspond to a unique key. Multiple `MetadataFilter` objects 299 // are joined by logical "AND"s. 300 // 301 // Example query at document level: 302 // (year >= 2020 OR year < 2010) AND (genre = drama OR genre = action) 303 // 304 // `MetadataFilter` object list: 305 // metadata_filters = [ 306 // {key = "document.custom_metadata.year" 307 // conditions = [{int_value = 2020, operation = GREATER_EQUAL}, 308 // {int_value = 2010, operation = LESS}]}, 309 // {key = "document.custom_metadata.year" 310 // conditions = [{int_value = 2020, operation = GREATER_EQUAL}, 311 // {int_value = 2010, operation = LESS}]}, 312 // {key = "document.custom_metadata.genre" 313 // conditions = [{string_value = "drama", operation = EQUAL}, 314 // {string_value = "action", operation = EQUAL}]}] 315 // 316 // Example query at chunk level for a numeric range of values: 317 // (year > 2015 AND year <= 2020) 318 // 319 // `MetadataFilter` object list: 320 // metadata_filters = [ 321 // {key = "chunk.custom_metadata.year" 322 // conditions = [{int_value = 2015, operation = GREATER}]}, 323 // {key = "chunk.custom_metadata.year" 324 // conditions = [{int_value = 2020, operation = LESS_EQUAL}]}] 325 // 326 // Note: "AND"s for the same key are only supported for numeric values. String 327 // values only support "OR"s for the same key. 328 repeated MetadataFilter metadata_filters = 3 329 [(google.api.field_behavior) = OPTIONAL]; 330 331 // Optional. The maximum number of `Chunk`s to return. 332 // The service may return fewer `Chunk`s. 333 // 334 // If unspecified, at most 10 `Chunk`s will be returned. 335 // The maximum specified result count is 100. 336 int32 results_count = 4 [(google.api.field_behavior) = OPTIONAL]; 337} 338 339// Response from `QueryCorpus` containing a list of relevant chunks. 340message QueryCorpusResponse { 341 // The relevant chunks. 342 repeated RelevantChunk relevant_chunks = 1; 343} 344 345// The information for a chunk relevant to a query. 346message RelevantChunk { 347 // `Chunk` relevance to the query. 348 float chunk_relevance_score = 1; 349 350 // `Chunk` associated with the query. 351 Chunk chunk = 2; 352} 353 354// Request to create a `Document`. 355message CreateDocumentRequest { 356 // Required. The name of the `Corpus` where this `Document` will be created. 357 // Example: `corpora/my-corpus-123` 358 string parent = 1 [ 359 (google.api.field_behavior) = REQUIRED, 360 (google.api.resource_reference) = { 361 child_type: "generativelanguage.googleapis.com/Document" 362 } 363 ]; 364 365 // Required. The `Document` to create. 366 Document document = 2 [(google.api.field_behavior) = REQUIRED]; 367} 368 369// Request for getting information about a specific `Document`. 370message GetDocumentRequest { 371 // Required. The name of the `Document` to retrieve. 372 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 373 string name = 1 [ 374 (google.api.field_behavior) = REQUIRED, 375 (google.api.resource_reference) = { 376 type: "generativelanguage.googleapis.com/Document" 377 } 378 ]; 379} 380 381// Request to update a `Document`. 382message UpdateDocumentRequest { 383 // Required. The `Document` to update. 384 Document document = 1 [(google.api.field_behavior) = REQUIRED]; 385 386 // Required. The list of fields to update. 387 // Currently, this only supports updating `display_name` and 388 // `custom_metadata`. 389 google.protobuf.FieldMask update_mask = 2 390 [(google.api.field_behavior) = REQUIRED]; 391} 392 393// Request to delete a `Document`. 394message DeleteDocumentRequest { 395 // Required. The resource name of the `Document` to delete. 396 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 397 string name = 1 [ 398 (google.api.field_behavior) = REQUIRED, 399 (google.api.resource_reference) = { 400 type: "generativelanguage.googleapis.com/Document" 401 } 402 ]; 403 404 // Optional. If set to true, any `Chunk`s and objects related to this 405 // `Document` will also be deleted. 406 // 407 // If false (the default), a `FAILED_PRECONDITION` error will be returned if 408 // `Document` contains any `Chunk`s. 409 bool force = 2 [(google.api.field_behavior) = OPTIONAL]; 410} 411 412// Request for listing `Document`s. 413message ListDocumentsRequest { 414 // Required. The name of the `Corpus` containing `Document`s. 415 // Example: `corpora/my-corpus-123` 416 string parent = 1 [ 417 (google.api.field_behavior) = REQUIRED, 418 (google.api.resource_reference) = { 419 child_type: "generativelanguage.googleapis.com/Document" 420 } 421 ]; 422 423 // Optional. The maximum number of `Document`s to return (per page). 424 // The service may return fewer `Document`s. 425 // 426 // If unspecified, at most 10 `Document`s will be returned. 427 // The maximum size limit is 20 `Document`s per page. 428 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 429 430 // Optional. A page token, received from a previous `ListDocuments` call. 431 // 432 // Provide the `next_page_token` returned in the response as an argument to 433 // the next request to retrieve the next page. 434 // 435 // When paginating, all other parameters provided to `ListDocuments` 436 // must match the call that provided the page token. 437 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 438} 439 440// Response from `ListDocuments` containing a paginated list of `Document`s. 441// The `Document`s are sorted by ascending `document.create_time`. 442message ListDocumentsResponse { 443 // The returned `Document`s. 444 repeated Document documents = 1; 445 446 // A token, which can be sent as `page_token` to retrieve the next page. 447 // If this field is omitted, there are no more pages. 448 string next_page_token = 2; 449} 450 451// Request for querying a `Document`. 452message QueryDocumentRequest { 453 // Required. The name of the `Document` to query. 454 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 455 string name = 1 [ 456 (google.api.field_behavior) = REQUIRED, 457 (google.api.resource_reference) = { 458 type: "generativelanguage.googleapis.com/Document" 459 } 460 ]; 461 462 // Required. Query string to perform semantic search. 463 string query = 2 [(google.api.field_behavior) = REQUIRED]; 464 465 // Optional. The maximum number of `Chunk`s to return. 466 // The service may return fewer `Chunk`s. 467 // 468 // If unspecified, at most 10 `Chunk`s will be returned. 469 // The maximum specified result count is 100. 470 int32 results_count = 3 [(google.api.field_behavior) = OPTIONAL]; 471 472 // Optional. Filter for `Chunk` metadata. Each `MetadataFilter` object should 473 // correspond to a unique key. Multiple `MetadataFilter` objects are joined by 474 // logical "AND"s. 475 // 476 // Note: `Document`-level filtering is not supported for this request because 477 // a `Document` name is already specified. 478 // 479 // Example query: 480 // (year >= 2020 OR year < 2010) AND (genre = drama OR genre = action) 481 // 482 // `MetadataFilter` object list: 483 // metadata_filters = [ 484 // {key = "chunk.custom_metadata.year" 485 // conditions = [{int_value = 2020, operation = GREATER_EQUAL}, 486 // {int_value = 2010, operation = LESS}}, 487 // {key = "chunk.custom_metadata.genre" 488 // conditions = [{string_value = "drama", operation = EQUAL}, 489 // {string_value = "action", operation = EQUAL}}] 490 // 491 // Example query for a numeric range of values: 492 // (year > 2015 AND year <= 2020) 493 // 494 // `MetadataFilter` object list: 495 // metadata_filters = [ 496 // {key = "chunk.custom_metadata.year" 497 // conditions = [{int_value = 2015, operation = GREATER}]}, 498 // {key = "chunk.custom_metadata.year" 499 // conditions = [{int_value = 2020, operation = LESS_EQUAL}]}] 500 // 501 // Note: "AND"s for the same key are only supported for numeric values. String 502 // values only support "OR"s for the same key. 503 repeated MetadataFilter metadata_filters = 4 504 [(google.api.field_behavior) = OPTIONAL]; 505} 506 507// Response from `QueryDocument` containing a list of relevant chunks. 508message QueryDocumentResponse { 509 // The returned relevant chunks. 510 repeated RelevantChunk relevant_chunks = 1; 511} 512 513// Request to create a `Chunk`. 514message CreateChunkRequest { 515 // Required. The name of the `Document` where this `Chunk` will be created. 516 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 517 string parent = 1 [ 518 (google.api.field_behavior) = REQUIRED, 519 (google.api.resource_reference) = { 520 child_type: "generativelanguage.googleapis.com/Chunk" 521 } 522 ]; 523 524 // Required. The `Chunk` to create. 525 Chunk chunk = 2 [(google.api.field_behavior) = REQUIRED]; 526} 527 528// Request to batch create `Chunk`s. 529message BatchCreateChunksRequest { 530 // Optional. The name of the `Document` where this batch of `Chunk`s will be 531 // created. The parent field in every `CreateChunkRequest` must match this 532 // value. Example: `corpora/my-corpus-123/documents/the-doc-abc` 533 string parent = 1 [ 534 (google.api.field_behavior) = OPTIONAL, 535 (google.api.resource_reference) = { 536 child_type: "generativelanguage.googleapis.com/Chunk" 537 } 538 ]; 539 540 // Required. The request messages specifying the `Chunk`s to create. 541 // A maximum of 100 `Chunk`s can be created in a batch. 542 repeated CreateChunkRequest requests = 2 543 [(google.api.field_behavior) = REQUIRED]; 544} 545 546// Response from `BatchCreateChunks` containing a list of created `Chunk`s. 547message BatchCreateChunksResponse { 548 // `Chunk`s created. 549 repeated Chunk chunks = 1; 550} 551 552// Request for getting information about a specific `Chunk`. 553message GetChunkRequest { 554 // Required. The name of the `Chunk` to retrieve. 555 // Example: `corpora/my-corpus-123/documents/the-doc-abc/chunks/some-chunk` 556 string name = 1 [ 557 (google.api.field_behavior) = REQUIRED, 558 (google.api.resource_reference) = { 559 type: "generativelanguage.googleapis.com/Chunk" 560 } 561 ]; 562} 563 564// Request to update a `Chunk`. 565message UpdateChunkRequest { 566 // Required. The `Chunk` to update. 567 Chunk chunk = 1 [(google.api.field_behavior) = REQUIRED]; 568 569 // Required. The list of fields to update. 570 // Currently, this only supports updating `custom_metadata` and `data`. 571 google.protobuf.FieldMask update_mask = 2 572 [(google.api.field_behavior) = REQUIRED]; 573} 574 575// Request to batch update `Chunk`s. 576message BatchUpdateChunksRequest { 577 // Optional. The name of the `Document` containing the `Chunk`s to update. 578 // The parent field in every `UpdateChunkRequest` must match this value. 579 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 580 string parent = 1 [ 581 (google.api.field_behavior) = OPTIONAL, 582 (google.api.resource_reference) = { 583 child_type: "generativelanguage.googleapis.com/Chunk" 584 } 585 ]; 586 587 // Required. The request messages specifying the `Chunk`s to update. 588 // A maximum of 100 `Chunk`s can be updated in a batch. 589 repeated UpdateChunkRequest requests = 2 590 [(google.api.field_behavior) = REQUIRED]; 591} 592 593// Response from `BatchUpdateChunks` containing a list of updated `Chunk`s. 594message BatchUpdateChunksResponse { 595 // `Chunk`s updated. 596 repeated Chunk chunks = 1; 597} 598 599// Request to delete a `Chunk`. 600message DeleteChunkRequest { 601 // Required. The resource name of the `Chunk` to delete. 602 // Example: `corpora/my-corpus-123/documents/the-doc-abc/chunks/some-chunk` 603 string name = 1 [ 604 (google.api.field_behavior) = REQUIRED, 605 (google.api.resource_reference) = { 606 type: "generativelanguage.googleapis.com/Chunk" 607 } 608 ]; 609} 610 611// Request to batch delete `Chunk`s. 612message BatchDeleteChunksRequest { 613 // Optional. The name of the `Document` containing the `Chunk`s to delete. 614 // The parent field in every `DeleteChunkRequest` must match this value. 615 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 616 string parent = 1 [ 617 (google.api.field_behavior) = OPTIONAL, 618 (google.api.resource_reference) = { 619 child_type: "generativelanguage.googleapis.com/Chunk" 620 } 621 ]; 622 623 // Required. The request messages specifying the `Chunk`s to delete. 624 repeated DeleteChunkRequest requests = 2 625 [(google.api.field_behavior) = REQUIRED]; 626} 627 628// Request for listing `Chunk`s. 629message ListChunksRequest { 630 // Required. The name of the `Document` containing `Chunk`s. 631 // Example: `corpora/my-corpus-123/documents/the-doc-abc` 632 string parent = 1 [ 633 (google.api.field_behavior) = REQUIRED, 634 (google.api.resource_reference) = { 635 child_type: "generativelanguage.googleapis.com/Chunk" 636 } 637 ]; 638 639 // Optional. The maximum number of `Chunk`s to return (per page). 640 // The service may return fewer `Chunk`s. 641 // 642 // If unspecified, at most 10 `Chunk`s will be returned. 643 // The maximum size limit is 100 `Chunk`s per page. 644 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 645 646 // Optional. A page token, received from a previous `ListChunks` call. 647 // 648 // Provide the `next_page_token` returned in the response as an argument to 649 // the next request to retrieve the next page. 650 // 651 // When paginating, all other parameters provided to `ListChunks` 652 // must match the call that provided the page token. 653 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 654} 655 656// Response from `ListChunks` containing a paginated list of `Chunk`s. 657// The `Chunk`s are sorted by ascending `chunk.create_time`. 658message ListChunksResponse { 659 // The returned `Chunk`s. 660 repeated Chunk chunks = 1; 661 662 // A token, which can be sent as `page_token` to retrieve the next page. 663 // If this field is omitted, there are no more pages. 664 string next_page_token = 2; 665} 666