xref: /aosp_15_r20/external/libtextclassifier/native/actions/actions_model.fbs (revision 993b0882672172b81d12fad7a7ac0c3e5c824a12)
1*993b0882SAndroid Build Coastguard Worker//
2*993b0882SAndroid Build Coastguard Worker// Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker//
4*993b0882SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker// You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker//
8*993b0882SAndroid Build Coastguard Worker//      http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker//
10*993b0882SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker// limitations under the License.
15*993b0882SAndroid Build Coastguard Worker//
16*993b0882SAndroid Build Coastguard Worker
17*993b0882SAndroid Build Coastguard Workerinclude "actions/actions-entity-data.fbs";
18*993b0882SAndroid Build Coastguard Workerinclude "annotator/model.fbs";
19*993b0882SAndroid Build Coastguard Workerinclude "utils/codepoint-range.fbs";
20*993b0882SAndroid Build Coastguard Workerinclude "utils/flatbuffers/flatbuffers.fbs";
21*993b0882SAndroid Build Coastguard Workerinclude "utils/grammar/rules.fbs";
22*993b0882SAndroid Build Coastguard Workerinclude "utils/intents/intent-config.fbs";
23*993b0882SAndroid Build Coastguard Workerinclude "utils/normalization.fbs";
24*993b0882SAndroid Build Coastguard Workerinclude "utils/resources.fbs";
25*993b0882SAndroid Build Coastguard Workerinclude "utils/tokenizer.fbs";
26*993b0882SAndroid Build Coastguard Workerinclude "utils/zlib/buffer.fbs";
27*993b0882SAndroid Build Coastguard Worker
28*993b0882SAndroid Build Coastguard Workerfile_identifier "TC3A";
29*993b0882SAndroid Build Coastguard Worker
30*993b0882SAndroid Build Coastguard Worker// Prediction type for a multi-task model.
31*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
32*993b0882SAndroid Build Coastguard Workerenum PredictionType : int {
33*993b0882SAndroid Build Coastguard Worker  UNSUPPORTED = 0,
34*993b0882SAndroid Build Coastguard Worker  NEXT_MESSAGE_PREDICTION = 1,
35*993b0882SAndroid Build Coastguard Worker  INTENT_TRIGGERING = 2,
36*993b0882SAndroid Build Coastguard Worker  ENTITY_ANNOTATION = 3,
37*993b0882SAndroid Build Coastguard Worker}
38*993b0882SAndroid Build Coastguard Worker
39*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
40*993b0882SAndroid Build Coastguard Workerenum RankingOptionsSortType : int {
41*993b0882SAndroid Build Coastguard Worker  SORT_TYPE_UNSPECIFIED = 0,
42*993b0882SAndroid Build Coastguard Worker
43*993b0882SAndroid Build Coastguard Worker  // Rank results (or groups) by score, then type
44*993b0882SAndroid Build Coastguard Worker  SORT_TYPE_SCORE = 1,
45*993b0882SAndroid Build Coastguard Worker
46*993b0882SAndroid Build Coastguard Worker  // Rank results (or groups) by priority score, then score, then type
47*993b0882SAndroid Build Coastguard Worker  SORT_TYPE_PRIORITY_SCORE = 2,
48*993b0882SAndroid Build Coastguard Worker}
49*993b0882SAndroid Build Coastguard Worker
50*993b0882SAndroid Build Coastguard Worker// Prediction metadata for an arbitrary task.
51*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
52*993b0882SAndroid Build Coastguard Workertable PredictionMetadata {
53*993b0882SAndroid Build Coastguard Worker  prediction_type:PredictionType;
54*993b0882SAndroid Build Coastguard Worker  task_spec:ActionSuggestionSpec;
55*993b0882SAndroid Build Coastguard Worker  output_suggestions:int;
56*993b0882SAndroid Build Coastguard Worker  output_suggestions_scores:int;
57*993b0882SAndroid Build Coastguard Worker  output_suggestions_spans:int;
58*993b0882SAndroid Build Coastguard Worker}
59*993b0882SAndroid Build Coastguard Worker
60*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.TensorflowLiteModelSpec_;
61*993b0882SAndroid Build Coastguard Workertable InputNameIndexEntry {
62*993b0882SAndroid Build Coastguard Worker  key:string (key, shared);
63*993b0882SAndroid Build Coastguard Worker  value:int;
64*993b0882SAndroid Build Coastguard Worker}
65*993b0882SAndroid Build Coastguard Worker
66*993b0882SAndroid Build Coastguard Worker// TensorFlow Lite model for suggesting actions.
67*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
68*993b0882SAndroid Build Coastguard Workertable TensorflowLiteModelSpec {
69*993b0882SAndroid Build Coastguard Worker  // TensorFlow Lite model for suggesting actions.
70*993b0882SAndroid Build Coastguard Worker  tflite_model:[ubyte] (force_align: 16);
71*993b0882SAndroid Build Coastguard Worker
72*993b0882SAndroid Build Coastguard Worker  // Input specification.
73*993b0882SAndroid Build Coastguard Worker  // (num messages,) int32 tensor, the user id per message.
74*993b0882SAndroid Build Coastguard Worker  input_user_id:int = 0;
75*993b0882SAndroid Build Coastguard Worker
76*993b0882SAndroid Build Coastguard Worker  // (num messages,) string tensor, each message of the conversation.
77*993b0882SAndroid Build Coastguard Worker  input_context:int = 1;
78*993b0882SAndroid Build Coastguard Worker
79*993b0882SAndroid Build Coastguard Worker  // int, the number of messages in the conversation.
80*993b0882SAndroid Build Coastguard Worker  input_context_length:int = 2;
81*993b0882SAndroid Build Coastguard Worker
82*993b0882SAndroid Build Coastguard Worker  // (num messages,) float tensor, the time difference in seconds of the
83*993b0882SAndroid Build Coastguard Worker  // messages in the conversation.
84*993b0882SAndroid Build Coastguard Worker  input_time_diffs:int = 3;
85*993b0882SAndroid Build Coastguard Worker
86*993b0882SAndroid Build Coastguard Worker  // int, the number of smart replies to produce.
87*993b0882SAndroid Build Coastguard Worker  input_num_suggestions:int = 4;
88*993b0882SAndroid Build Coastguard Worker
89*993b0882SAndroid Build Coastguard Worker  reserved_7:int (deprecated);
90*993b0882SAndroid Build Coastguard Worker
91*993b0882SAndroid Build Coastguard Worker  reserved_8:int (deprecated);
92*993b0882SAndroid Build Coastguard Worker
93*993b0882SAndroid Build Coastguard Worker  reserved_9:int (deprecated);
94*993b0882SAndroid Build Coastguard Worker
95*993b0882SAndroid Build Coastguard Worker  // Input port for hashed and embedded tokens, a (num messages, max tokens,
96*993b0882SAndroid Build Coastguard Worker  // embedding size) float tensor specifying the embeddings of each token of
97*993b0882SAndroid Build Coastguard Worker  // each message in the conversation.
98*993b0882SAndroid Build Coastguard Worker  input_token_embeddings:int = -1;
99*993b0882SAndroid Build Coastguard Worker
100*993b0882SAndroid Build Coastguard Worker  // Input port for the number of tokens per message.
101*993b0882SAndroid Build Coastguard Worker  // (num messages) int32 tensor specifying the number of tokens in each message
102*993b0882SAndroid Build Coastguard Worker  // in the conversation.
103*993b0882SAndroid Build Coastguard Worker  input_num_tokens:int = -1;
104*993b0882SAndroid Build Coastguard Worker
105*993b0882SAndroid Build Coastguard Worker  // Output specification.
106*993b0882SAndroid Build Coastguard Worker  output_replies:int = 0;
107*993b0882SAndroid Build Coastguard Worker
108*993b0882SAndroid Build Coastguard Worker  output_replies_scores:int = 1;
109*993b0882SAndroid Build Coastguard Worker  output_sensitive_topic_score:int = 3;
110*993b0882SAndroid Build Coastguard Worker  output_triggering_score:int = 4;
111*993b0882SAndroid Build Coastguard Worker  output_actions_scores:int = 5;
112*993b0882SAndroid Build Coastguard Worker
113*993b0882SAndroid Build Coastguard Worker  // Model setup.
114*993b0882SAndroid Build Coastguard Worker  // When true, the inputs are resized to the concrete input sizes before
115*993b0882SAndroid Build Coastguard Worker  // inference otherwise, it's assumed that the model has the correct input
116*993b0882SAndroid Build Coastguard Worker  // shapes set.
117*993b0882SAndroid Build Coastguard Worker  resize_inputs:bool = false;
118*993b0882SAndroid Build Coastguard Worker
119*993b0882SAndroid Build Coastguard Worker  // Input port for the hashed, embedded and flattened/concatenated tokens.
120*993b0882SAndroid Build Coastguard Worker  // A (max tokens, embedding_size) float tensor specifying the embeddings of
121*993b0882SAndroid Build Coastguard Worker  // each token.
122*993b0882SAndroid Build Coastguard Worker  input_flattened_token_embeddings:int = -1;
123*993b0882SAndroid Build Coastguard Worker
124*993b0882SAndroid Build Coastguard Worker  // Generalized output specification that handles arbitrary number of
125*993b0882SAndroid Build Coastguard Worker  // prediction tasks.
126*993b0882SAndroid Build Coastguard Worker  prediction_metadata:[PredictionMetadata];
127*993b0882SAndroid Build Coastguard Worker
128*993b0882SAndroid Build Coastguard Worker  // Map of additional input tensor name to its index.
129*993b0882SAndroid Build Coastguard Worker  input_name_index:[TensorflowLiteModelSpec_.InputNameIndexEntry];
130*993b0882SAndroid Build Coastguard Worker
131*993b0882SAndroid Build Coastguard Worker  // If greater than 0, pad or truncate the input_user_id and input_context
132*993b0882SAndroid Build Coastguard Worker  // tensor to length of input_length_to_pad.
133*993b0882SAndroid Build Coastguard Worker  input_length_to_pad:int = 0;
134*993b0882SAndroid Build Coastguard Worker}
135*993b0882SAndroid Build Coastguard Worker
136*993b0882SAndroid Build Coastguard Worker// Configuration for the tokenizer.
137*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
138*993b0882SAndroid Build Coastguard Workertable ActionsTokenizerOptions {
139*993b0882SAndroid Build Coastguard Worker  type:TokenizationType = INTERNAL_TOKENIZER;
140*993b0882SAndroid Build Coastguard Worker
141*993b0882SAndroid Build Coastguard Worker  // If true, white space tokens will be kept when using the icu tokenizer.
142*993b0882SAndroid Build Coastguard Worker  icu_preserve_whitespace_tokens:bool = false;
143*993b0882SAndroid Build Coastguard Worker
144*993b0882SAndroid Build Coastguard Worker  // Codepoint ranges that determine what role the different codepoints play
145*993b0882SAndroid Build Coastguard Worker  // during tokenized. The ranges must not overlap.
146*993b0882SAndroid Build Coastguard Worker  tokenization_codepoint_config:[TokenizationCodepointRange];
147*993b0882SAndroid Build Coastguard Worker
148*993b0882SAndroid Build Coastguard Worker  // A set of codepoint ranges to use in the mixed tokenization mode to identify
149*993b0882SAndroid Build Coastguard Worker  // stretches of tokens to re-tokenize using the internal tokenizer.
150*993b0882SAndroid Build Coastguard Worker  internal_tokenizer_codepoint_ranges:[CodepointRange];
151*993b0882SAndroid Build Coastguard Worker
152*993b0882SAndroid Build Coastguard Worker  // If true, tokens will be also split when the codepoint's script_id changes
153*993b0882SAndroid Build Coastguard Worker  // as defined in TokenizationCodepointRange.
154*993b0882SAndroid Build Coastguard Worker  tokenize_on_script_change:bool = false;
155*993b0882SAndroid Build Coastguard Worker}
156*993b0882SAndroid Build Coastguard Worker
157*993b0882SAndroid Build Coastguard Worker// Configuration for the feature processor.
158*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
159*993b0882SAndroid Build Coastguard Workertable ActionsTokenFeatureProcessorOptions {
160*993b0882SAndroid Build Coastguard Worker  // Tokenizer options.
161*993b0882SAndroid Build Coastguard Worker  tokenizer_options:ActionsTokenizerOptions;
162*993b0882SAndroid Build Coastguard Worker
163*993b0882SAndroid Build Coastguard Worker  // Serialized TensorFlow Lite model with weights for the token embeddings.
164*993b0882SAndroid Build Coastguard Worker  embedding_model:[ubyte] (force_align: 16);
165*993b0882SAndroid Build Coastguard Worker
166*993b0882SAndroid Build Coastguard Worker  // Size of the embedding.
167*993b0882SAndroid Build Coastguard Worker  embedding_size:int = -1;
168*993b0882SAndroid Build Coastguard Worker
169*993b0882SAndroid Build Coastguard Worker  // Number of bits for quantization for embeddings.
170*993b0882SAndroid Build Coastguard Worker  embedding_quantization_bits:int = 8;
171*993b0882SAndroid Build Coastguard Worker
172*993b0882SAndroid Build Coastguard Worker  // Number of buckets used for hashing charactergrams.
173*993b0882SAndroid Build Coastguard Worker  num_buckets:int = -1;
174*993b0882SAndroid Build Coastguard Worker
175*993b0882SAndroid Build Coastguard Worker  // Orders of charactergrams to extract, e.g. 2 means character bigrams, 3
176*993b0882SAndroid Build Coastguard Worker  // character trigrams etc.
177*993b0882SAndroid Build Coastguard Worker  chargram_orders:[int];
178*993b0882SAndroid Build Coastguard Worker
179*993b0882SAndroid Build Coastguard Worker  // Whether to extract the token case feature.
180*993b0882SAndroid Build Coastguard Worker  extract_case_feature:bool;
181*993b0882SAndroid Build Coastguard Worker
182*993b0882SAndroid Build Coastguard Worker  // If true, will use the unicode-aware functionality for extracting features.
183*993b0882SAndroid Build Coastguard Worker  unicode_aware_features:bool;
184*993b0882SAndroid Build Coastguard Worker
185*993b0882SAndroid Build Coastguard Worker  // Regexp features to extract.
186*993b0882SAndroid Build Coastguard Worker  regexp_features:[string];
187*993b0882SAndroid Build Coastguard Worker
188*993b0882SAndroid Build Coastguard Worker  // Whether to remap digits to a single number.
189*993b0882SAndroid Build Coastguard Worker  remap_digits:bool;
190*993b0882SAndroid Build Coastguard Worker
191*993b0882SAndroid Build Coastguard Worker  // Whether to lowercase all tokens.
192*993b0882SAndroid Build Coastguard Worker  lowercase_tokens:bool;
193*993b0882SAndroid Build Coastguard Worker
194*993b0882SAndroid Build Coastguard Worker  // Maximum length of a word.
195*993b0882SAndroid Build Coastguard Worker  max_token_length:int = 20;
196*993b0882SAndroid Build Coastguard Worker
197*993b0882SAndroid Build Coastguard Worker  // The `max_num_tokens_per_message` and `min_num_tokens_per_message` are
198*993b0882SAndroid Build Coastguard Worker  // applied when tokens are embedded per message.
199*993b0882SAndroid Build Coastguard Worker  // If set and the number of tokens of a message is bigger than this limit,
200*993b0882SAndroid Build Coastguard Worker  // tokens at the beginning of the message are dropped to fit the limit.
201*993b0882SAndroid Build Coastguard Worker  max_num_tokens_per_message:int = -1;
202*993b0882SAndroid Build Coastguard Worker
203*993b0882SAndroid Build Coastguard Worker  // If set, the tokens of each message will be padded to this fixed number of
204*993b0882SAndroid Build Coastguard Worker  // tokens.
205*993b0882SAndroid Build Coastguard Worker  min_num_tokens_per_message:int = -1;
206*993b0882SAndroid Build Coastguard Worker
207*993b0882SAndroid Build Coastguard Worker  // If set and the total number of concatenated tokens is bigger than this
208*993b0882SAndroid Build Coastguard Worker  // limit, tokens at the start of the conversation are dropped.
209*993b0882SAndroid Build Coastguard Worker  max_num_total_tokens:int = -1;
210*993b0882SAndroid Build Coastguard Worker
211*993b0882SAndroid Build Coastguard Worker  // If set and the total number of concatenaed tokens is smaller than this
212*993b0882SAndroid Build Coastguard Worker  // limit, the conversation is padded with padding tokens.
213*993b0882SAndroid Build Coastguard Worker  min_num_total_tokens:int = -1;
214*993b0882SAndroid Build Coastguard Worker
215*993b0882SAndroid Build Coastguard Worker  // Id that is used as encoding of the padding token.
216*993b0882SAndroid Build Coastguard Worker  padding_token_id:int = 0;
217*993b0882SAndroid Build Coastguard Worker
218*993b0882SAndroid Build Coastguard Worker  // Id that is used as encoding of the start of message token.
219*993b0882SAndroid Build Coastguard Worker  start_token_id:int = 1;
220*993b0882SAndroid Build Coastguard Worker
221*993b0882SAndroid Build Coastguard Worker  // Id that is used as encoding of the end of message token.
222*993b0882SAndroid Build Coastguard Worker  end_token_id:int = 2;
223*993b0882SAndroid Build Coastguard Worker}
224*993b0882SAndroid Build Coastguard Worker
225*993b0882SAndroid Build Coastguard Worker// N-Gram based linear regression model.
226*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
227*993b0882SAndroid Build Coastguard Workertable NGramLinearRegressionModel {
228*993b0882SAndroid Build Coastguard Worker  // A flat list of all the hashed n-grams concatenated back to back. Elements
229*993b0882SAndroid Build Coastguard Worker  // should only ever be accessed via the offset table below.
230*993b0882SAndroid Build Coastguard Worker  hashed_ngram_tokens:[uint];
231*993b0882SAndroid Build Coastguard Worker
232*993b0882SAndroid Build Coastguard Worker  // Offsets to the start of the n-grams in hashed_ngram_tokens. The last
233*993b0882SAndroid Build Coastguard Worker  // element in this array is the length of hashed_ngrams to make it easier to
234*993b0882SAndroid Build Coastguard Worker  // compute n-gram lengths.
235*993b0882SAndroid Build Coastguard Worker  ngram_start_offsets:[ushort];
236*993b0882SAndroid Build Coastguard Worker
237*993b0882SAndroid Build Coastguard Worker  // Weights of the n-grams.
238*993b0882SAndroid Build Coastguard Worker  ngram_weights:[float];
239*993b0882SAndroid Build Coastguard Worker
240*993b0882SAndroid Build Coastguard Worker  // The default weight assigned to n-grams that weren't matched.
241*993b0882SAndroid Build Coastguard Worker  default_token_weight:float;
242*993b0882SAndroid Build Coastguard Worker
243*993b0882SAndroid Build Coastguard Worker  // Maximum n-gram length to consider when calculating the denominatior.
244*993b0882SAndroid Build Coastguard Worker  // This should usually be the same as max_ngram_length but can diverge
245*993b0882SAndroid Build Coastguard Worker  // if additional (longer) n-grams are added to a model as part of a minor
246*993b0882SAndroid Build Coastguard Worker  // update.
247*993b0882SAndroid Build Coastguard Worker  max_denom_ngram_length:int;
248*993b0882SAndroid Build Coastguard Worker
249*993b0882SAndroid Build Coastguard Worker  // If non-zero, the order of the skip-gram to match.
250*993b0882SAndroid Build Coastguard Worker  max_skips:int;
251*993b0882SAndroid Build Coastguard Worker
252*993b0882SAndroid Build Coastguard Worker  // The threshold above which the model output is considered positive.
253*993b0882SAndroid Build Coastguard Worker  threshold:float;
254*993b0882SAndroid Build Coastguard Worker
255*993b0882SAndroid Build Coastguard Worker  // Model specific tokenizer options.
256*993b0882SAndroid Build Coastguard Worker  // If not specified, will reuse the feature processor tokenizer.
257*993b0882SAndroid Build Coastguard Worker  tokenizer_options:ActionsTokenizerOptions;
258*993b0882SAndroid Build Coastguard Worker}
259*993b0882SAndroid Build Coastguard Worker
260*993b0882SAndroid Build Coastguard Worker// TFLite based sensitive topic classifier model.
261*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
262*993b0882SAndroid Build Coastguard Workertable TFLiteSensitiveClassifierConfig {
263*993b0882SAndroid Build Coastguard Worker  // Specification of the model.
264*993b0882SAndroid Build Coastguard Worker  model_spec:TensorflowLiteModelSpec;
265*993b0882SAndroid Build Coastguard Worker
266*993b0882SAndroid Build Coastguard Worker  // Triggering threshold, if a sensitive topic has a score higher than this
267*993b0882SAndroid Build Coastguard Worker  // value, it triggers the classifier.
268*993b0882SAndroid Build Coastguard Worker  threshold:float;
269*993b0882SAndroid Build Coastguard Worker}
270*993b0882SAndroid Build Coastguard Worker
271*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
272*993b0882SAndroid Build Coastguard Workertable TriggeringPreconditions {
273*993b0882SAndroid Build Coastguard Worker  // Lower bound thresholds for the smart reply model prediction output.
274*993b0882SAndroid Build Coastguard Worker  min_smart_reply_triggering_score:float;
275*993b0882SAndroid Build Coastguard Worker
276*993b0882SAndroid Build Coastguard Worker  // Maximum sensitive score for which actions and smart replies are shown.
277*993b0882SAndroid Build Coastguard Worker  max_sensitive_topic_score:float = 1;
278*993b0882SAndroid Build Coastguard Worker
279*993b0882SAndroid Build Coastguard Worker  // Whether to suppress all model output when a conversation is classified as
280*993b0882SAndroid Build Coastguard Worker  // sensitive.
281*993b0882SAndroid Build Coastguard Worker  suppress_on_sensitive_topic:bool = true;
282*993b0882SAndroid Build Coastguard Worker
283*993b0882SAndroid Build Coastguard Worker  // Thresholds on the model prediction input.
284*993b0882SAndroid Build Coastguard Worker  // The minimal length of input to consider for prediction.
285*993b0882SAndroid Build Coastguard Worker  min_input_length:int = 0;
286*993b0882SAndroid Build Coastguard Worker
287*993b0882SAndroid Build Coastguard Worker  // The maximal length of input to consider for prediciton, -1 if unbounded.
288*993b0882SAndroid Build Coastguard Worker  max_input_length:int = -1;
289*993b0882SAndroid Build Coastguard Worker
290*993b0882SAndroid Build Coastguard Worker  // Minimal fraction of messages in the input conversation that need to match
291*993b0882SAndroid Build Coastguard Worker  // a locale that the model can handle.
292*993b0882SAndroid Build Coastguard Worker  min_locale_match_fraction:float = 0.75;
293*993b0882SAndroid Build Coastguard Worker
294*993b0882SAndroid Build Coastguard Worker  handle_missing_locale_as_supported:bool = false;
295*993b0882SAndroid Build Coastguard Worker  handle_unknown_locale_as_supported:bool = false;
296*993b0882SAndroid Build Coastguard Worker
297*993b0882SAndroid Build Coastguard Worker  // Filter input with low-confidence triggers.
298*993b0882SAndroid Build Coastguard Worker  suppress_on_low_confidence_input:bool = true;
299*993b0882SAndroid Build Coastguard Worker
300*993b0882SAndroid Build Coastguard Worker  // Same as low_confidence_rules in ActionsModel.
301*993b0882SAndroid Build Coastguard Worker  // NOTE: Only fill this when the TriggeringPreconditions are pushed separately
302*993b0882SAndroid Build Coastguard Worker  // as a flag value (i.e. as overlay).
303*993b0882SAndroid Build Coastguard Worker  low_confidence_rules:RulesModel;
304*993b0882SAndroid Build Coastguard Worker
305*993b0882SAndroid Build Coastguard Worker  reserved_11:float (deprecated);
306*993b0882SAndroid Build Coastguard Worker
307*993b0882SAndroid Build Coastguard Worker  reserved_12:float (deprecated);
308*993b0882SAndroid Build Coastguard Worker
309*993b0882SAndroid Build Coastguard Worker  reserved_13:float (deprecated);
310*993b0882SAndroid Build Coastguard Worker
311*993b0882SAndroid Build Coastguard Worker  // Smart reply thresholds.
312*993b0882SAndroid Build Coastguard Worker  min_reply_score_threshold:float = 0;
313*993b0882SAndroid Build Coastguard Worker}
314*993b0882SAndroid Build Coastguard Worker
315*993b0882SAndroid Build Coastguard Worker// This proto handles model outputs that are concepts, such as emoji concept
316*993b0882SAndroid Build Coastguard Worker// suggestion models. Each concept maps to a list of candidates. One of
317*993b0882SAndroid Build Coastguard Worker// the candidates is chosen randomly as the final suggestion.
318*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
319*993b0882SAndroid Build Coastguard Workertable ActionConceptToSuggestion {
320*993b0882SAndroid Build Coastguard Worker  concept_name:string (shared);
321*993b0882SAndroid Build Coastguard Worker  candidates:[string];
322*993b0882SAndroid Build Coastguard Worker}
323*993b0882SAndroid Build Coastguard Worker
324*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
325*993b0882SAndroid Build Coastguard Workertable ActionSuggestionSpec {
326*993b0882SAndroid Build Coastguard Worker  // Type of the action suggestion.
327*993b0882SAndroid Build Coastguard Worker  type:string (shared);
328*993b0882SAndroid Build Coastguard Worker
329*993b0882SAndroid Build Coastguard Worker  // Text of a smart reply action.
330*993b0882SAndroid Build Coastguard Worker  response_text:string (shared);
331*993b0882SAndroid Build Coastguard Worker
332*993b0882SAndroid Build Coastguard Worker  // Score.
333*993b0882SAndroid Build Coastguard Worker  score:float;
334*993b0882SAndroid Build Coastguard Worker
335*993b0882SAndroid Build Coastguard Worker  // Additional entity information.
336*993b0882SAndroid Build Coastguard Worker  serialized_entity_data:string (shared);
337*993b0882SAndroid Build Coastguard Worker
338*993b0882SAndroid Build Coastguard Worker  // For ranking and internal conflict resolution.
339*993b0882SAndroid Build Coastguard Worker  priority_score:float = 0;
340*993b0882SAndroid Build Coastguard Worker
341*993b0882SAndroid Build Coastguard Worker  entity_data:ActionsEntityData;
342*993b0882SAndroid Build Coastguard Worker  response_text_blocklist:[string];
343*993b0882SAndroid Build Coastguard Worker
344*993b0882SAndroid Build Coastguard Worker  // If provided, map the response as concept to one of the corresponding
345*993b0882SAndroid Build Coastguard Worker  // candidates.
346*993b0882SAndroid Build Coastguard Worker  concept_mappings:[ActionConceptToSuggestion];
347*993b0882SAndroid Build Coastguard Worker}
348*993b0882SAndroid Build Coastguard Worker
349*993b0882SAndroid Build Coastguard Worker// Options to specify triggering behaviour per action class.
350*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
351*993b0882SAndroid Build Coastguard Workertable ActionTypeOptions {
352*993b0882SAndroid Build Coastguard Worker  // The name of the predicted action.
353*993b0882SAndroid Build Coastguard Worker  name:string (shared);
354*993b0882SAndroid Build Coastguard Worker
355*993b0882SAndroid Build Coastguard Worker  // Triggering behaviour.
356*993b0882SAndroid Build Coastguard Worker  // Whether the action class is considered in the model output or not.
357*993b0882SAndroid Build Coastguard Worker  enabled:bool = true;
358*993b0882SAndroid Build Coastguard Worker
359*993b0882SAndroid Build Coastguard Worker  // Minimal output score threshold.
360*993b0882SAndroid Build Coastguard Worker  min_triggering_score:float = 0;
361*993b0882SAndroid Build Coastguard Worker
362*993b0882SAndroid Build Coastguard Worker  // The action to trigger.
363*993b0882SAndroid Build Coastguard Worker  action:ActionSuggestionSpec;
364*993b0882SAndroid Build Coastguard Worker}
365*993b0882SAndroid Build Coastguard Worker
366*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.AnnotationActionsSpec_;
367*993b0882SAndroid Build Coastguard Workertable AnnotationMapping {
368*993b0882SAndroid Build Coastguard Worker  // The annotation collection.
369*993b0882SAndroid Build Coastguard Worker  annotation_collection:string (shared);
370*993b0882SAndroid Build Coastguard Worker
371*993b0882SAndroid Build Coastguard Worker  // The action name to use.
372*993b0882SAndroid Build Coastguard Worker  action:ActionSuggestionSpec;
373*993b0882SAndroid Build Coastguard Worker
374*993b0882SAndroid Build Coastguard Worker  // Whether to use the score of the annotation as the action score.
375*993b0882SAndroid Build Coastguard Worker  use_annotation_score:bool = true;
376*993b0882SAndroid Build Coastguard Worker
377*993b0882SAndroid Build Coastguard Worker  // Minimum threshold for the annotation score for filtering.
378*993b0882SAndroid Build Coastguard Worker  min_annotation_score:float;
379*993b0882SAndroid Build Coastguard Worker
380*993b0882SAndroid Build Coastguard Worker  // If set, the text of the annotation will be used to set a field in the
381*993b0882SAndroid Build Coastguard Worker  // action entity data.
382*993b0882SAndroid Build Coastguard Worker  entity_field:FlatbufferFieldPath;
383*993b0882SAndroid Build Coastguard Worker
384*993b0882SAndroid Build Coastguard Worker  // If set, normalization to apply to the annotation text.
385*993b0882SAndroid Build Coastguard Worker  normalization_options:NormalizationOptions;
386*993b0882SAndroid Build Coastguard Worker}
387*993b0882SAndroid Build Coastguard Worker
388*993b0882SAndroid Build Coastguard Worker// Configuration for actions based on annotatations.
389*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
390*993b0882SAndroid Build Coastguard Workertable AnnotationActionsSpec {
391*993b0882SAndroid Build Coastguard Worker  annotation_mapping:[AnnotationActionsSpec_.AnnotationMapping];
392*993b0882SAndroid Build Coastguard Worker
393*993b0882SAndroid Build Coastguard Worker  // Whether to deduplicate annotations by type and text prior to generating
394*993b0882SAndroid Build Coastguard Worker  // actions.
395*993b0882SAndroid Build Coastguard Worker  deduplicate_annotations:bool = true;
396*993b0882SAndroid Build Coastguard Worker
397*993b0882SAndroid Build Coastguard Worker  // Annotation usecase to specify for text annotation.
398*993b0882SAndroid Build Coastguard Worker  annotation_usecase:AnnotationUsecase = ANNOTATION_USECASE_SMART;
399*993b0882SAndroid Build Coastguard Worker
400*993b0882SAndroid Build Coastguard Worker  // Maximum number of recent messages to consider from any person.
401*993b0882SAndroid Build Coastguard Worker  // We consider at most `max_history_from_any_person` many recent messages if
402*993b0882SAndroid Build Coastguard Worker  // they were received from different users or at most the maximum of this and
403*993b0882SAndroid Build Coastguard Worker  // `max_history_from_last_person` if they are all from the same user.
404*993b0882SAndroid Build Coastguard Worker  max_history_from_any_person:int = 1;
405*993b0882SAndroid Build Coastguard Worker
406*993b0882SAndroid Build Coastguard Worker  // Maximum number of recent messages to consider from the last person.
407*993b0882SAndroid Build Coastguard Worker  max_history_from_last_person:int = 1;
408*993b0882SAndroid Build Coastguard Worker
409*993b0882SAndroid Build Coastguard Worker  // Whether to include messages from the local user.
410*993b0882SAndroid Build Coastguard Worker  include_local_user_messages:bool = false;
411*993b0882SAndroid Build Coastguard Worker
412*993b0882SAndroid Build Coastguard Worker  // Whether to only consider messages up to the last one sent by the local
413*993b0882SAndroid Build Coastguard Worker  // user.
414*993b0882SAndroid Build Coastguard Worker  only_until_last_sent:bool = true;
415*993b0882SAndroid Build Coastguard Worker
416*993b0882SAndroid Build Coastguard Worker  // If true, annotator would populate serialized_entity_data in the results.
417*993b0882SAndroid Build Coastguard Worker  is_serialized_entity_data_enabled:bool = true;
418*993b0882SAndroid Build Coastguard Worker}
419*993b0882SAndroid Build Coastguard Worker
420*993b0882SAndroid Build Coastguard Worker// Ranking options.
421*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
422*993b0882SAndroid Build Coastguard Workertable RankingOptions {
423*993b0882SAndroid Build Coastguard Worker  // When true, actions suggestions are deduplicated by `type`, `response_text`
424*993b0882SAndroid Build Coastguard Worker  // and associated annotations, keeping the higher scoring actions.
425*993b0882SAndroid Build Coastguard Worker  deduplicate_suggestions:bool = true;
426*993b0882SAndroid Build Coastguard Worker
427*993b0882SAndroid Build Coastguard Worker  // When true, actions are deduplicated by the span they are referring to.
428*993b0882SAndroid Build Coastguard Worker  deduplicate_suggestions_by_span:bool = true;
429*993b0882SAndroid Build Coastguard Worker
430*993b0882SAndroid Build Coastguard Worker  // Optional script to run for ranking and filtering the action suggestions.
431*993b0882SAndroid Build Coastguard Worker  // The following global variables are available to the script:
432*993b0882SAndroid Build Coastguard Worker  // * input: (optionally deduplicated) action suggestions, via the `actions`
433*993b0882SAndroid Build Coastguard Worker  // global
434*993b0882SAndroid Build Coastguard Worker  // * output: indices of the actions to keep in the provided order.
435*993b0882SAndroid Build Coastguard Worker  lua_ranking_script:string (shared);
436*993b0882SAndroid Build Coastguard Worker
437*993b0882SAndroid Build Coastguard Worker  compressed_lua_ranking_script:CompressedBuffer;
438*993b0882SAndroid Build Coastguard Worker
439*993b0882SAndroid Build Coastguard Worker  // If true, suppresses smart replies if other smart actions are suggested.
440*993b0882SAndroid Build Coastguard Worker  suppress_smart_replies_with_actions:bool = false;
441*993b0882SAndroid Build Coastguard Worker
442*993b0882SAndroid Build Coastguard Worker  // If true, keep actions from the same entities together for ranking.
443*993b0882SAndroid Build Coastguard Worker  group_by_annotations:bool = true;
444*993b0882SAndroid Build Coastguard Worker
445*993b0882SAndroid Build Coastguard Worker  sort_type:RankingOptionsSortType = SORT_TYPE_SCORE;
446*993b0882SAndroid Build Coastguard Worker}
447*993b0882SAndroid Build Coastguard Worker
448*993b0882SAndroid Build Coastguard Worker// Entity data to set from capturing groups.
449*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.RulesModel_.RuleActionSpec_;
450*993b0882SAndroid Build Coastguard Workertable RuleCapturingGroup {
451*993b0882SAndroid Build Coastguard Worker  // The id of group.
452*993b0882SAndroid Build Coastguard Worker  group_id:int;
453*993b0882SAndroid Build Coastguard Worker
454*993b0882SAndroid Build Coastguard Worker  // If set, the text of the capturing group will be used to set a field
455*993b0882SAndroid Build Coastguard Worker  // in the action entity data.
456*993b0882SAndroid Build Coastguard Worker  entity_field:FlatbufferFieldPath;
457*993b0882SAndroid Build Coastguard Worker
458*993b0882SAndroid Build Coastguard Worker  // If set, the capturing group will be used to create a text annotation
459*993b0882SAndroid Build Coastguard Worker  // with the given name and type.
460*993b0882SAndroid Build Coastguard Worker  annotation_type:string (shared);
461*993b0882SAndroid Build Coastguard Worker
462*993b0882SAndroid Build Coastguard Worker  annotation_name:string (shared);
463*993b0882SAndroid Build Coastguard Worker
464*993b0882SAndroid Build Coastguard Worker  // If set, the capturing group text will be used to create a text
465*993b0882SAndroid Build Coastguard Worker  // reply.
466*993b0882SAndroid Build Coastguard Worker  text_reply:ActionSuggestionSpec;
467*993b0882SAndroid Build Coastguard Worker
468*993b0882SAndroid Build Coastguard Worker  // If set, normalization to apply to the capturing group text.
469*993b0882SAndroid Build Coastguard Worker  normalization_options:NormalizationOptions;
470*993b0882SAndroid Build Coastguard Worker
471*993b0882SAndroid Build Coastguard Worker  // If set to true, an existing annotator annotation will be used to
472*993b0882SAndroid Build Coastguard Worker  // create the actions suggestions text annotation.
473*993b0882SAndroid Build Coastguard Worker  use_annotation_match:bool;
474*993b0882SAndroid Build Coastguard Worker
475*993b0882SAndroid Build Coastguard Worker  // If set, merge in fixed entity data for a match.
476*993b0882SAndroid Build Coastguard Worker  entity_data:ActionsEntityData;
477*993b0882SAndroid Build Coastguard Worker}
478*993b0882SAndroid Build Coastguard Worker
479*993b0882SAndroid Build Coastguard Worker// The actions to produce upon triggering.
480*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.RulesModel_;
481*993b0882SAndroid Build Coastguard Workertable RuleActionSpec {
482*993b0882SAndroid Build Coastguard Worker  // The action.
483*993b0882SAndroid Build Coastguard Worker  action:ActionSuggestionSpec;
484*993b0882SAndroid Build Coastguard Worker
485*993b0882SAndroid Build Coastguard Worker  capturing_group:[RuleActionSpec_.RuleCapturingGroup];
486*993b0882SAndroid Build Coastguard Worker}
487*993b0882SAndroid Build Coastguard Worker
488*993b0882SAndroid Build Coastguard Worker// List of regular expression matchers.
489*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.RulesModel_;
490*993b0882SAndroid Build Coastguard Workertable RegexRule {
491*993b0882SAndroid Build Coastguard Worker  // The regular expression pattern.
492*993b0882SAndroid Build Coastguard Worker  pattern:string (shared);
493*993b0882SAndroid Build Coastguard Worker
494*993b0882SAndroid Build Coastguard Worker  compressed_pattern:CompressedBuffer;
495*993b0882SAndroid Build Coastguard Worker  actions:[RuleActionSpec];
496*993b0882SAndroid Build Coastguard Worker
497*993b0882SAndroid Build Coastguard Worker  // Patterns for post-checking the outputs.
498*993b0882SAndroid Build Coastguard Worker  output_pattern:string (shared);
499*993b0882SAndroid Build Coastguard Worker
500*993b0882SAndroid Build Coastguard Worker  compressed_output_pattern:CompressedBuffer;
501*993b0882SAndroid Build Coastguard Worker}
502*993b0882SAndroid Build Coastguard Worker
503*993b0882SAndroid Build Coastguard Worker// Action configuration.
504*993b0882SAndroid Build Coastguard Worker// Specifies an action rules match.
505*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.RulesModel_.GrammarRules_;
506*993b0882SAndroid Build Coastguard Workertable RuleMatch {
507*993b0882SAndroid Build Coastguard Worker  // The actions to produce as part of this match.
508*993b0882SAndroid Build Coastguard Worker  // These are indices into the `actions` array below.
509*993b0882SAndroid Build Coastguard Worker  action_id:[uint];
510*993b0882SAndroid Build Coastguard Worker}
511*993b0882SAndroid Build Coastguard Worker
512*993b0882SAndroid Build Coastguard Worker// Configuration for actions based on context-free grammars.
513*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3.RulesModel_;
514*993b0882SAndroid Build Coastguard Workertable GrammarRules {
515*993b0882SAndroid Build Coastguard Worker  // The tokenizer config.
516*993b0882SAndroid Build Coastguard Worker  tokenizer_options:ActionsTokenizerOptions;
517*993b0882SAndroid Build Coastguard Worker
518*993b0882SAndroid Build Coastguard Worker  // The grammar.
519*993b0882SAndroid Build Coastguard Worker  rules:grammar.RulesSet;
520*993b0882SAndroid Build Coastguard Worker
521*993b0882SAndroid Build Coastguard Worker  rule_match:[GrammarRules_.RuleMatch];
522*993b0882SAndroid Build Coastguard Worker
523*993b0882SAndroid Build Coastguard Worker  // The action specifications used by the rule matches.
524*993b0882SAndroid Build Coastguard Worker  actions:[RuleActionSpec];
525*993b0882SAndroid Build Coastguard Worker}
526*993b0882SAndroid Build Coastguard Worker
527*993b0882SAndroid Build Coastguard Worker// Rule based actions.
528*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
529*993b0882SAndroid Build Coastguard Workertable RulesModel {
530*993b0882SAndroid Build Coastguard Worker  regex_rule:[RulesModel_.RegexRule];
531*993b0882SAndroid Build Coastguard Worker
532*993b0882SAndroid Build Coastguard Worker  // If true, will compile the regexes only on first use.
533*993b0882SAndroid Build Coastguard Worker  lazy_regex_compilation:bool = true;
534*993b0882SAndroid Build Coastguard Worker
535*993b0882SAndroid Build Coastguard Worker  grammar_rules:RulesModel_.GrammarRules;
536*993b0882SAndroid Build Coastguard Worker}
537*993b0882SAndroid Build Coastguard Worker
538*993b0882SAndroid Build Coastguard Workernamespace libtextclassifier3;
539*993b0882SAndroid Build Coastguard Workertable ActionsModel {
540*993b0882SAndroid Build Coastguard Worker  // Comma-separated list of locales supported by the model as BCP 47 tags.
541*993b0882SAndroid Build Coastguard Worker  locales:string (shared);
542*993b0882SAndroid Build Coastguard Worker
543*993b0882SAndroid Build Coastguard Worker  // Version of the actions model.
544*993b0882SAndroid Build Coastguard Worker  version:int;
545*993b0882SAndroid Build Coastguard Worker
546*993b0882SAndroid Build Coastguard Worker  // A name for the model that can be used e.g. for logging.
547*993b0882SAndroid Build Coastguard Worker  name:string (shared);
548*993b0882SAndroid Build Coastguard Worker
549*993b0882SAndroid Build Coastguard Worker  tflite_model_spec:TensorflowLiteModelSpec;
550*993b0882SAndroid Build Coastguard Worker
551*993b0882SAndroid Build Coastguard Worker  // Output classes.
552*993b0882SAndroid Build Coastguard Worker  smart_reply_action_type:string (shared);
553*993b0882SAndroid Build Coastguard Worker
554*993b0882SAndroid Build Coastguard Worker  action_type:[ActionTypeOptions];
555*993b0882SAndroid Build Coastguard Worker
556*993b0882SAndroid Build Coastguard Worker  // Triggering conditions of the model.
557*993b0882SAndroid Build Coastguard Worker  preconditions:TriggeringPreconditions;
558*993b0882SAndroid Build Coastguard Worker
559*993b0882SAndroid Build Coastguard Worker  // Default number of smart reply predictions.
560*993b0882SAndroid Build Coastguard Worker  num_smart_replies:int = 3;
561*993b0882SAndroid Build Coastguard Worker
562*993b0882SAndroid Build Coastguard Worker  // Length of message history to consider, -1 if unbounded.
563*993b0882SAndroid Build Coastguard Worker  max_conversation_history_length:int = 1;
564*993b0882SAndroid Build Coastguard Worker
565*993b0882SAndroid Build Coastguard Worker  // Configuration for mapping annotations to action suggestions.
566*993b0882SAndroid Build Coastguard Worker  annotation_actions_spec:AnnotationActionsSpec;
567*993b0882SAndroid Build Coastguard Worker
568*993b0882SAndroid Build Coastguard Worker  // Configuration for rules.
569*993b0882SAndroid Build Coastguard Worker  rules:RulesModel;
570*993b0882SAndroid Build Coastguard Worker
571*993b0882SAndroid Build Coastguard Worker  // Configuration for intent generation on Android.
572*993b0882SAndroid Build Coastguard Worker  android_intent_options:IntentFactoryModel;
573*993b0882SAndroid Build Coastguard Worker
574*993b0882SAndroid Build Coastguard Worker  // Model resources.
575*993b0882SAndroid Build Coastguard Worker  resources:ResourcePool;
576*993b0882SAndroid Build Coastguard Worker
577*993b0882SAndroid Build Coastguard Worker  // Schema data for handling entity data.
578*993b0882SAndroid Build Coastguard Worker  actions_entity_data_schema:[ubyte];
579*993b0882SAndroid Build Coastguard Worker
580*993b0882SAndroid Build Coastguard Worker  // Action ranking options.
581*993b0882SAndroid Build Coastguard Worker  ranking_options:RankingOptions;
582*993b0882SAndroid Build Coastguard Worker
583*993b0882SAndroid Build Coastguard Worker  // Lua based actions.
584*993b0882SAndroid Build Coastguard Worker  lua_actions_script:string (shared);
585*993b0882SAndroid Build Coastguard Worker
586*993b0882SAndroid Build Coastguard Worker  compressed_lua_actions_script:CompressedBuffer;
587*993b0882SAndroid Build Coastguard Worker
588*993b0882SAndroid Build Coastguard Worker  // Low confidence classifiers.
589*993b0882SAndroid Build Coastguard Worker  low_confidence_rules:RulesModel;
590*993b0882SAndroid Build Coastguard Worker
591*993b0882SAndroid Build Coastguard Worker  low_confidence_ngram_model:NGramLinearRegressionModel;
592*993b0882SAndroid Build Coastguard Worker
593*993b0882SAndroid Build Coastguard Worker  // Feature processor options.
594*993b0882SAndroid Build Coastguard Worker  feature_processor_options:ActionsTokenFeatureProcessorOptions;
595*993b0882SAndroid Build Coastguard Worker
596*993b0882SAndroid Build Coastguard Worker  low_confidence_tflite_model:TFLiteSensitiveClassifierConfig;
597*993b0882SAndroid Build Coastguard Worker}
598*993b0882SAndroid Build Coastguard Worker
599*993b0882SAndroid Build Coastguard Workerroot_type libtextclassifier3.ActionsModel;
600