Spaces:
Running
Running
// Copyright 2019 The Chromium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
syntax = "proto2"; | |
option optimize_for = LITE_RUNTIME; | |
option java_package = "org.chromium.components.optimization_guide.proto"; | |
option java_outer_classname = "ModelsProto"; | |
package optimization_guide.proto; | |
import "common_types.proto"; | |
// A generic handle for any type of model. | |
message Model { | |
reserved 3, 4; | |
oneof model { | |
DecisionTree decision_tree = 1; | |
Ensemble ensemble = 2; | |
// When passed from the server, this is the URL that the model can be | |
// downloaded from. When used internally within Chrome, this contains the | |
// absolute file path where the model file is saved on disk. | |
string download_url = 5; | |
} | |
// The tag number is high to allow models to be added and an uncommon number | |
// in case the proto this is generated from adds a similar functionality. | |
optional DoubleValue threshold = 123; | |
} | |
// An ensemble prediction model consisting of an ordered sequence of models. | |
// This message can be used to express bagged or boosted models. | |
message Ensemble { | |
reserved 2, 3, 4; | |
message Member { optional Model submodel = 1; } | |
// The tag number is set by the proto this is generated from and cannot be | |
// changed. | |
repeated Member members = 100; | |
} | |
// A decision tree model with its weight for use if included in an ensemble. | |
message DecisionTree { | |
reserved 2; | |
repeated TreeNode nodes = 1; | |
optional float weight = 3; | |
} | |
// A node of a decision tree that is a binary deicison or a leaf. | |
message TreeNode { | |
reserved 6, 7; | |
// Following fields are provided for convenience and better readability. | |
// Filling them in is not required. | |
optional Int32Value node_id = 1; | |
optional Int32Value depth = 2; | |
optional Int32Value subtree_size = 3; | |
oneof node_type { | |
BinaryNode binary_node = 4; | |
Leaf leaf = 5; | |
} | |
} | |
// A tree node that contains an inequality test that during evaluation | |
// determines whether to continue the left or right child. | |
message BinaryNode { | |
reserved 3, 5; | |
optional Int32Value left_child_id = 1; | |
optional Int32Value right_child_id = 2; | |
enum Direction { | |
LEFT = 0; | |
RIGHT = 1; | |
} | |
// When a datapoint satisfies the test, it should be propagated to the left | |
// child. | |
optional InequalityTest inequality_left_child_test = 4; | |
} | |
// Vector of values for use within Models. | |
message Vector { | |
repeated Value value = 1; | |
} | |
// A leaf node of a decision tree. | |
message Leaf { | |
reserved 2, 3; | |
optional Vector vector = 1; | |
} | |
// The ID for the features used during evaluation of a Model. | |
message FeatureId { | |
reserved 2; | |
optional StringValue id = 1; | |
} | |
// The set of inequality operations supported by binary nodes for | |
// decision tree models. | |
message InequalityTest { | |
reserved 4; | |
// When the feature is missing, the test's outcome is undefined. | |
optional FeatureId feature_id = 1; | |
enum Type { | |
LESS_OR_EQUAL = 0; | |
LESS_THAN = 1; | |
GREATER_OR_EQUAL = 2; | |
GREATER_THAN = 3; | |
}; | |
optional Type type = 2; | |
optional Value threshold = 3; | |
} | |
// Represents a single value of any type, e.g. 5 or "abc". | |
message Value { | |
reserved 5; | |
oneof value { | |
float float_value = 1; | |
double double_value = 2; | |
int32 int32_value = 3; | |
int64 int64_value = 4; | |
} | |
} | |
// Wrapper message for `int32`. | |
// | |
// The JSON representation for `Int32Value` is JSON number. | |
message Int32Value { | |
// The int32 value. | |
optional int32 value = 1; | |
} | |
// Wrapper message for `string`. | |
// | |
// The JSON representation for `StringValue` is JSON string. | |
message StringValue { | |
// The string value. | |
optional string value = 1; | |
} | |
// Wrapper message for `double`. | |
// | |
// The JSON representation for `DoubleValue` is JSON number. | |
message DoubleValue { | |
// The double value. | |
optional double value = 1; | |
} | |
// Requests prediction models to be used for a set of optimization targets. | |
message GetModelsRequest { | |
reserved 2; | |
// Information about the requested models. | |
repeated ModelInfo requested_models = 1; | |
// Context in which this request is made. | |
// | |
// If the context matches one that requires more urgency (i.e. | |
// CONTEXT_PAGE_NAVIGATION), then no model updates will be returned for the | |
// requested models. | |
optional RequestContext request_context = 3; | |
// The field trials that are currently active when this request is made. | |
repeated FieldTrial active_field_trials = 4; | |
// The locale to associate with this request. | |
// | |
// It is the IETF language tag, defined in BCP 47. The region subtag is not | |
// included when it adds no distinguishing information to the language tag | |
// (e.g. both "en-US" and "fr" are correct here). | |
optional string locale = 5; | |
} | |
// Response to the GetModels request. | |
message GetModelsResponse { | |
// The models to be used during prediction for the requested optimization | |
// targets. | |
repeated PredictionModel models = 1; | |
// A set of model features and their values for the hosts contained in the | |
// request to be expected to be consulted with during prediction. | |
// | |
// It is not guaranteed that this set will contain an entry for every | |
// requested host. | |
repeated HostModelFeatures host_model_features = 2; | |
} | |
// Holds the prediction model for a particular optimization target. | |
message PredictionModel { | |
// Information about the model. | |
optional ModelInfo model_info = 1; | |
// The model to evaluate for the attached model information. | |
// | |
// This will only be set if the model that the client claims it has is stale. | |
// It is also guaranteed that the value populated as part of this field is one | |
// that the client claims to support based on the request's client model | |
// capabilities. | |
optional Model model = 2; | |
} | |
message AdditionalModelFile { | |
// When sent by the server, this contains the basenames of the additional | |
// files that should be kept and sent to this model's consumers. When used | |
// only locally within Chrome, the full path is given. | |
optional string file_path = 1; | |
} | |
// Metadata for a prediction model for a specific optimization target. | |
// | |
// Next ID: 8 | |
message ModelInfo { | |
reserved 3; | |
// The optimization target for which the model predicts. | |
optional OptimizationTarget optimization_target = 1; | |
// The version of the model, which is specific to the optimization target. | |
optional int64 version = 2; | |
// The set of model types the requesting client can use to make predictions. | |
repeated ModelType supported_model_types = 4; | |
// The set of host model features that are referenced by the model. | |
// | |
// Note that this should only be populated if part of the response. | |
repeated string supported_host_model_features = 5; | |
// Additional files required by this model version. | |
// | |
// If populated, these files are included in the downloaded archive for this | |
// model and should be passed along to the consumer. | |
// | |
// This does not need to be sent to the server in the request for an update to | |
// this model. The server will ignore this if sent. | |
repeated AdditionalModelFile additional_files = 7; | |
// Mechanism used for model owners to attach metadata to the request or | |
// response. | |
// | |
// In practice, we expect this to be used as a way to negotiate capabilities. | |
// The client can provide the model features they can evaluate if this field | |
// is part of the request, and the server can provide the model features that | |
// are actually present in the model. | |
optional Any model_metadata = 6; | |
} | |
// The scenarios for which the optimization guide has models for. | |
enum OptimizationTarget { | |
OPTIMIZATION_TARGET_UNKNOWN = 0; | |
// Should only be applied when the page load is predicted to be painful. | |
OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD = 1; | |
// Target for supplying the language detection model via the model downloader. | |
OPTIMIZATION_TARGET_LANGUAGE_DETECTION = 2; | |
// Target for determining topics present on a page. | |
OPTIMIZATION_TARGET_PAGE_TOPICS = 3; | |
// Target for segmentation: New tab page user. | |
OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB = 4; | |
// Target for segmentation: Share user. | |
OPTIMIZATION_TARGET_SEGMENTATION_SHARE = 5; | |
// Target for segmentation: Voice user. | |
OPTIMIZATION_TARGET_SEGMENTATION_VOICE = 6; | |
// Target for model validation. | |
OPTIMIZATION_TARGET_MODEL_VALIDATION = 7; | |
// Target for determining entities present on a page. | |
OPTIMIZATION_TARGET_PAGE_ENTITIES = 8; | |
} | |
// The types of models that can be evaluated. | |
enum ModelType { | |
MODEL_TYPE_UNKNOWN = 0; | |
// A decision tree. | |
MODEL_TYPE_DECISION_TREE = 1; | |
// A model using only operations that are supported by TensorflowLite 2.3.0. | |
MODEL_TYPE_TFLITE_2_3_0 = 2; | |
// A model using only operations that are supported by TensorflowLite 2.3.0 | |
// with updated FULLY_CONNECTED and BATCH_MUL versions for quantized models. | |
MODEL_TYPE_TFLITE_2_3_0_1 = 3; | |
} | |
// A set of model features and the host that it applies to. | |
message HostModelFeatures { | |
// The host that the features should be applied for. | |
optional string host = 1; | |
// The set of features and their values that apply to the host. | |
repeated ModelFeature model_features = 2; | |
} | |
// Information about a feature that is potentially referenced in a model. | |
message ModelFeature { | |
// The name of the feature to match if encountered in a model. | |
optional string feature_name = 1; | |
// The value of the feature to be used during prediction. | |
oneof feature_value { | |
double double_value = 2; | |
int64 int64_value = 3; | |
} | |
} |