| // Copyright 2023 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | edition = "2023"; | 
 |  | 
 | package optimization_guide.proto; | 
 |  | 
 | option optimize_for = LITE_RUNTIME; | 
 | option java_package = "org.chromium.components.optimization_guide.proto"; | 
 | option java_outer_classname = "AutofillFieldClassificationModelMetadata"; | 
 |  | 
 | message AutofillFieldClassificationEncodingParameters { | 
 |   // Per-field features that can be included in the model input. | 
 |   enum AutofillFieldClassificationFeature { | 
 |     // Don't use. | 
 |     FEATURE_UNKNOWN = 0; | 
 |  | 
 |     // The label of the field. | 
 |     FEATURE_LABEL = 1; | 
 |  | 
 |     // The placeholder in the field. | 
 |     FEATURE_PLACEHOLDER = 2; | 
 |  | 
 |     // The autocomplete attribute of the field. | 
 |     FEATURE_AUTOCOMPLETE = 3; | 
 |  | 
 |     // The id attribute of the field. | 
 |     FEATURE_ID = 4; | 
 |  | 
 |     // The name attribute of the field (not FormFieldData::name() which falls | 
 |     // back to the id attribute if the name attribute does not exist). | 
 |     FEATURE_NAME = 5; | 
 |  | 
 |     // The form control type attribute of the field. | 
 |     FEATURE_TYPE = 6; | 
 |   } | 
 |  | 
 |   // Per-form features that can be included in the model input. | 
 |   enum AutofillFieldClassificationFormLevelFeature { | 
 |     // Don't use. | 
 |     FORM_FEATURE_UNKNOWN = 0; | 
 |  | 
 |     // The titles of <button> and <submit> elements in a form containing the | 
 |     // field. | 
 |     FEATURE_FORM_BUTTON_TITLES = 1; | 
 |  | 
 |     // The id attribute of a form containing the field. | 
 |     FEATURE_FORM_ID = 2; | 
 |  | 
 |     // The name attribute of a form containing the field. | 
 |     FEATURE_FORM_NAME = 3; | 
 |  | 
 |     // The URL path of the frame containing the field. | 
 |     FEATURE_FRAME_URL_PATH = 4; | 
 |   } | 
 |  | 
 |   // Maximum number of form fields for which the model can predict types. | 
 |   // When calling the executor with a larger form, predictions are only returned | 
 |   // for the first `maximum_number_of_fields` many fields. | 
 |   int32 maximum_number_of_fields = 1 [features.field_presence = IMPLICIT]; | 
 |  | 
 |   // Max tokens per field per feature. | 
 |   int32 max_tokens_per_feature = 2 [features.field_presence = IMPLICIT]; | 
 |  | 
 |   // The per-field features provided to the model in the order they are | 
 |   // presented to the model. | 
 |   repeated AutofillFieldClassificationFeature features = 3; | 
 |  | 
 |   // Pre-processing of feature strings: | 
 |   // labels, name, id attributes, etc. are preprocessed by the following steps: | 
 |  | 
 |   // Split a camelCase or UpperCamelCase string into separate words with | 
 |   // spaces in between. | 
 |   bool split_on_camel_case = 4 [features.field_presence = IMPLICIT]; | 
 |  | 
 |   // If true, map the string to lowercase. | 
 |   bool lowercase = 5 [features.field_presence = IMPLICIT]; | 
 |  | 
 |   // Replace all characters listed in `replace_chars_with_whitespace` with a | 
 |   // single space. If empty, this step is skipped. | 
 |   string replace_chars_with_whitespace = 6 [features.field_presence = IMPLICIT]; | 
 |  | 
 |   // Replace all characters listed in `remove_chars` with the empty string. | 
 |   // If empty, this step is skipped. | 
 |   string remove_chars = 7 [features.field_presence = IMPLICIT]; | 
 |  | 
 |   // The per-form features provided to the model in the order they are presented | 
 |   // to the model. | 
 |   repeated AutofillFieldClassificationFormLevelFeature form_features = 8; | 
 | } | 
 |  | 
 | message AutofillFieldClassificationPostprocessingParameters { | 
 |   // If set, types are only assigned to fields that have predictions | 
 |   // with at least the specified minimum confidence. | 
 |   float confidence_threshold_per_field = 1; | 
 |  | 
 |   // If set, the model returns predictions only if *all* fields have predictions | 
 |   // with at least the specified minimum confidence. | 
 |   float confidence_threshold_to_disable_all_predictions = 2; | 
 |  | 
 |   // If true, the model is not allowed to return the same prediction for | 
 |   // multiple fields in the form. | 
 |   bool disallow_same_type_predictions = 3; | 
 | } | 
 |  | 
 | // Metadata for OPTIMIZATION_TARGET_AUTOFILL_FIELD_CLASSIFICATION. | 
 | message AutofillFieldClassificationModelMetadata { | 
 |   // The dictionary used for vectorization of the input labels. The strings | 
 |   // are mapped to integers in the order that they are present in the repeated | 
 |   // field. Index 0 of `input_token` maps to integer 2, since 0 is reserved for | 
 |   // padding and 1 is reserved for unknown tokens. | 
 |   repeated string input_token = 1; | 
 |  | 
 |   // The mapping from the model's outputs to the (integer representation of) the | 
 |   // corresponding `autofill::FieldType`. | 
 |   repeated fixed32 output_type = 2; | 
 |  | 
 |   // Deprecated in M132. | 
 |   reserved 3; | 
 |  | 
 |   // The version of the input, based on which the relevant model | 
 |   // version will be used from server. | 
 |   int64 input_version = 4; | 
 |  | 
 |   // Encoding parameters, used for input versions >= 3. | 
 |   AutofillFieldClassificationEncodingParameters encoding_parameters = 5; | 
 |  | 
 |   // Output processing parameters. | 
 |   AutofillFieldClassificationPostprocessingParameters | 
 |       postprocessing_parameters = 6; | 
 | } |