blob: 96bcc2c7d9e7eeab65a30a9170a19e359c64233f [file] [log] [blame]
// 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.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
option java_package = "org.chromium.components.optimization_guide.proto";
option java_outer_classname = "ModelExecutionProto";
package optimization_guide.proto;
import "components/optimization_guide/proto/model_execution.proto";
import "components/optimization_guide/proto/substitution.proto";
message TextSafetyModelMetadata {
// The number of categories the model is expected to output.
optional uint32 num_output_categories = 1;
// The set of feature configurations used to determine whether the text is
// safe.
repeated FeatureTextSafetyConfiguration feature_text_safety_configurations =
2;
}
enum CheckInputType {
CHECK_INPUT_TYPE_UNSPECIFIED = 0;
CHECK_INPUT_TYPE_REQUEST = 1;
CHECK_INPUT_TYPE_RESPONSE = 2;
}
message CheckInput {
// Which message to use as input.
optional CheckInputType input_type = 1;
// Concatenated template for converting the message to input chunks.
repeated SubstitutedString templates = 2;
}
message SafetyCategoryThreshold {
// Label for the category. E.g. 'TOXICITY', 'SEXUAL', 'HEALTH', etc.
optional string category_label = 1;
// Index of the category from the output (scores) of the text safety model.
optional uint32 output_index = 2;
// Threshold for the category, scores >= to the threshold will be filtered.
optional float threshold = 3;
}
message LanguageCheck {
// Requires one of the allowed languages was detected with at least this level
// of confidence. If this value is 0 or unset, language results will be
// ignored.
optional double confidence_threshold = 1;
// An alternative threshold used when checking incomplete model output.
// If unspecified, the same threshold is used for all checks.
optional double partial_threshold = 2;
}
message RequestSafetyCheck {
// How to generate input for the text safety check from the request message.
repeated SubstitutedString input_template = 1;
// The set of thresholds to apply per category, overriding those in the
// parent.
repeated SafetyCategoryThreshold safety_category_thresholds = 2;
// Whether to only perform the allowed language check.
optional bool check_language_only = 3;
// Whether to ignore the language result of the safety check.
// Exclusive with "check_language_only" and "language_check".
optional bool ignore_language_result = 4;
// Specify a requirement on the output language.
// If neither "language_check" nor "ignore_language_result" is specified, the
// language will be checked with a default threshold.
optional LanguageCheck language_check = 5;
}
message PartialOutputChecks {
// The minimum number of tokens required to evaluate partial output safety.
optional uint32 minimum_tokens = 1;
// The minimum number of tokens required between partial outputs.
optional uint32 token_interval = 2;
}
message RawOutputCheck {
// How to generate input for the text safety check.
// Should be written against a google.protobuf.StringValue proto with the raw
// output.
repeated SubstitutedString input_template = 1;
// Specify a requirement on the output language.
// If unspecified, the language will be checked with a default threshold.
optional LanguageCheck language_check = 2;
}
message ResponseSafetyCheck {
// How to generate input for the text safety check based on the request and
// response.
repeated CheckInput inputs = 1;
// The set of thresholds to apply per category, overriding those in the
// parent.
repeated SafetyCategoryThreshold safety_category_thresholds = 2;
// Whether to ignore the language result of the safety check.
optional bool ignore_language_result = 3;
// Specify a requirement on the output language.
// If neither "language_check" nor "ignore_language_result" is specified, the
// language will be checked with a default threshold.
optional LanguageCheck language_check = 4;
}
message FeatureTextSafetyConfiguration {
// The feature this configuration pertains to.
optional ModelExecutionFeature feature = 1;
// The default set of thresholds to apply per category.
repeated SafetyCategoryThreshold safety_category_thresholds = 2;
// The set of languages allowed for text safety evaluation. If empty, no
// language constraints are enforced.
repeated string allowed_languages = 3;
// Safety checks to run on the feature request message.
repeated RequestSafetyCheck request_check = 4;
// Configures when and how partial outputs are checked.
// If unspecified, all partial outputs are suppressed, and only completed
// outputs will be checked / returned to the feature code.
optional PartialOutputChecks partial_output_checks = 8;
// Configures the checks to run on raw model output.
optional RawOutputCheck raw_output_check = 5;
// Configures check that run on parsed model output, with request as context.
repeated ResponseSafetyCheck response_check = 6;
// When enabled, the unsafe text does not cancel a pending response, but
// instead just doesn't send it until it is safe again. If the text is still
// unsafe on complete, then it cancels the pending response.
optional bool only_cancel_unsafe_response_on_complete = 7;
}