// Contains features required for Ranker model inference and training.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package assist_ranker;

message ExamplePreprocessorConfig {
  // A list of features names for which you want to do special handling if
  // the feature is missing in the RankerExample.
  repeated string missing_features = 1;

  // Boundaries to bucketize a feature.
  message Boundaries { repeated float boundaries = 1; }

  // A map of feature_name to boundaries for bucketizing this feature.
  map<string, Boundaries> bucketizers = 2;

  // A map from feature_fullnames to indices for vectorizing a RankerExample.
  // A feature fullname is defined as:
  //   (1) feature_name if it's bool_value, int64_value or float_value.
  //   (2) a combination of feature_name and feature_value if it's string_value
  //       or i-th element of a string_list.
  map<string, int32> feature_indices = 3;

  // A map from feature name to a float value to normalize the original value.
  // The new feature value is set as float_value of
  // GetFeatureValueAsFloat(feature) / normalizers[feature_name]
  // The specified feature must be convertible to float (e.g. int32 or float).
  map<string, float> normalizers = 4;

  // Features inside this list will be converted to string_value. bool_value,
  // int32_value will be converted by base::IntToString; string_value will be
  // kept as original; fails for other feature_types.
  repeated string convert_to_string_features = 5;
}
