xref: /aosp_15_r20/external/googleapis/google/cloud/discoveryengine/v1beta/answer.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2022 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.cloud.discoveryengine.v1beta;
18
19import "google/api/field_behavior.proto";
20import "google/api/resource.proto";
21import "google/protobuf/timestamp.proto";
22
23option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Beta";
24option go_package = "cloud.google.com/go/discoveryengine/apiv1beta/discoveryenginepb;discoveryenginepb";
25option java_multiple_files = true;
26option java_outer_classname = "AnswerProto";
27option java_package = "com.google.cloud.discoveryengine.v1beta";
28option objc_class_prefix = "DISCOVERYENGINE";
29option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1beta";
30option ruby_package = "Google::Cloud::DiscoveryEngine::V1beta";
31
32// Defines an answer.
33message Answer {
34  option (google.api.resource) = {
35    type: "discoveryengine.googleapis.com/Answer"
36    pattern: "projects/{project}/locations/{location}/dataStores/{data_store}/sessions/{session}/answers/{answer}"
37    pattern: "projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}/sessions/{session}/answers/{answer}"
38    pattern: "projects/{project}/locations/{location}/collections/{collection}/engines/{engine}/sessions/{session}/answers/{answer}"
39  };
40
41  // Citation info for a segment.
42  message Citation {
43    // Index indicates the start of the segment, measured in bytes (UTF-8
44    // unicode).
45    int64 start_index = 1;
46
47    // End of the attributed segment, exclusive.
48    int64 end_index = 2;
49
50    // Citation sources for the attributed segment.
51    repeated CitationSource sources = 3;
52  }
53
54  // Citation source.
55  message CitationSource {
56    // ID of the citation source.
57    string reference_id = 1;
58  }
59
60  // Reference.
61  message Reference {
62    // Unstructured document information.
63    message UnstructuredDocumentInfo {
64      // Chunk content.
65      message ChunkContent {
66        // Chunk textual content.
67        string content = 1;
68
69        // Page identifier.
70        string page_identifier = 2;
71      }
72
73      // Document resource name.
74      string document = 1 [(google.api.resource_reference) = {
75        type: "discoveryengine.googleapis.com/Document"
76      }];
77
78      // URI for the document.
79      string uri = 2;
80
81      // Title.
82      string title = 3;
83
84      // List of cited chunk contents derived from document content.
85      repeated ChunkContent chunk_contents = 4;
86    }
87
88    // Chunk information.
89    message ChunkInfo {
90      // Document metadata.
91      message DocumentMetadata {
92        // Document resource name.
93        string document = 1 [(google.api.resource_reference) = {
94          type: "discoveryengine.googleapis.com/Document"
95        }];
96
97        // URI for the document.
98        string uri = 2;
99
100        // Title.
101        string title = 3;
102
103        // Page identifier.
104        string page_identifier = 4;
105      }
106
107      // Chunk resource name.
108      string chunk = 1 [(google.api.resource_reference) = {
109        type: "discoveryengine.googleapis.com/Chunk"
110      }];
111
112      // Chunk textual content.
113      string content = 2;
114
115      // Relevance score.
116      optional float relevance_score = 3;
117
118      // Document metadata.
119      DocumentMetadata document_metadata = 4;
120    }
121
122    // Search result content.
123    oneof content {
124      // Unstructured document information.
125      UnstructuredDocumentInfo unstructured_document_info = 1;
126
127      // Chunk information.
128      ChunkInfo chunk_info = 2;
129    }
130  }
131
132  // Step information.
133  message Step {
134    // Action.
135    message Action {
136      // Search action.
137      message SearchAction {
138        // The query to search.
139        string query = 1;
140      }
141
142      // Observation.
143      message Observation {
144        message SearchResult {
145          // Snippet information.
146          message SnippetInfo {
147            // Snippet content.
148            string snippet = 1;
149
150            // Status of the snippet defined by the search team.
151            string snippet_status = 2;
152          }
153
154          // Chunk information.
155          message ChunkInfo {
156            // Chunk resource name.
157            string chunk = 1;
158
159            // Chunk textual content.
160            string content = 2;
161
162            // Relevance score.
163            optional float relevance_score = 3;
164          }
165
166          // Document resource name.
167          string document = 1;
168
169          // URI for the document.
170          string uri = 2;
171
172          // Title.
173          string title = 3;
174
175          // If citation_type is DOCUMENT_LEVEL_CITATION, populate document
176          // level snippets.
177          repeated SnippetInfo snippet_info = 4;
178
179          // If citation_type is CHUNK_LEVEL_CITATION and chunk mode is on,
180          // populate chunk info.
181          repeated ChunkInfo chunk_info = 5;
182        }
183
184        // Search results observed by the search action, it can be snippets info
185        // or chunk info, depending on the citation type set by the user.
186        repeated SearchResult search_results = 2;
187      }
188
189      // The action.
190      oneof action {
191        // Search action.
192        SearchAction search_action = 2;
193      }
194
195      // Observation.
196      Observation observation = 3;
197    }
198
199    // Enumeration of the state of the step.
200    enum State {
201      // Unknown.
202      STATE_UNSPECIFIED = 0;
203
204      // Step is currently in progress.
205      IN_PROGRESS = 1;
206
207      // Step currently failed.
208      FAILED = 2;
209
210      // Step has succeeded.
211      SUCCEEDED = 3;
212    }
213
214    // The state of the step.
215    State state = 1;
216
217    // The description of the step.
218    string description = 2;
219
220    // The thought of the step.
221    string thought = 3;
222
223    // Actions.
224    repeated Action actions = 4;
225  }
226
227  // Query understanding information.
228  message QueryUnderstandingInfo {
229    // Query classification information.
230    message QueryClassificationInfo {
231      // Query classification types.
232      enum Type {
233        // Unspecified query classification type.
234        TYPE_UNSPECIFIED = 0;
235
236        // Adversarial query classification type.
237        ADVERSARIAL_QUERY = 1;
238
239        // Non-answer-seeking query classification type.
240        NON_ANSWER_SEEKING_QUERY = 2;
241      }
242
243      // Query classification type.
244      Type type = 1;
245
246      // Classification output.
247      bool positive = 2;
248    }
249
250    // Query classification information.
251    repeated QueryClassificationInfo query_classification_info = 1;
252  }
253
254  // Enumeration of the state of the answer generation.
255  enum State {
256    // Unknown.
257    STATE_UNSPECIFIED = 0;
258
259    // Answer generation is currently in progress.
260    IN_PROGRESS = 1;
261
262    // Answer generation currently failed.
263    FAILED = 2;
264
265    // Answer generation has succeeded.
266    SUCCEEDED = 3;
267  }
268
269  // An enum for answer skipped reasons.
270  enum AnswerSkippedReason {
271    // Default value. The answer skipped reason is not specified.
272    ANSWER_SKIPPED_REASON_UNSPECIFIED = 0;
273
274    // The adversarial query ignored case.
275    ADVERSARIAL_QUERY_IGNORED = 1;
276
277    // The non-answer seeking query ignored case.
278    NON_ANSWER_SEEKING_QUERY_IGNORED = 2;
279
280    // The out-of-domain query ignored case.
281    //
282    // Google skips the answer if there are no high-relevance search results.
283    OUT_OF_DOMAIN_QUERY_IGNORED = 3;
284
285    // The potential policy violation case.
286    //
287    // Google skips the answer if there is a potential policy violation
288    // detected. This includes content that may be violent or toxic.
289    POTENTIAL_POLICY_VIOLATION = 4;
290  }
291
292  // Immutable. Fully qualified name
293  // `project/*/locations/global/collections/{collection}/engines/{engine}/sessions/*/answers/*`
294  string name = 1 [(google.api.field_behavior) = IMMUTABLE];
295
296  // The state of the answer generation.
297  State state = 2;
298
299  // The textual answer.
300  string answer_text = 3;
301
302  // Citations.
303  repeated Citation citations = 4;
304
305  // References.
306  repeated Reference references = 5;
307
308  // Suggested related questions.
309  repeated string related_questions = 6;
310
311  // Answer generation steps.
312  repeated Step steps = 7;
313
314  // Query understanding information.
315  QueryUnderstandingInfo query_understanding_info = 10;
316
317  // Additional answer-skipped reasons. This provides the reason for ignored
318  // cases. If nothing is skipped, this field is not set.
319  repeated AnswerSkippedReason answer_skipped_reasons = 11;
320
321  // Output only. Answer creation timestamp.
322  google.protobuf.Timestamp create_time = 8
323      [(google.api.field_behavior) = OUTPUT_ONLY];
324
325  // Output only. Answer completed timestamp.
326  google.protobuf.Timestamp complete_time = 9
327      [(google.api.field_behavior) = OUTPUT_ONLY];
328}
329