browsing-topics / models.proto
dejanseo's picture
Upload 18 files
f4a0f22 verified
// 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;
}
}