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