// 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";

package optimization_guide.proto;

import "components/optimization_guide/proto/common_types.proto";

option optimize_for = LITE_RUNTIME;
option java_package = "org.chromium.components.optimization_guide.proto";
option java_outer_classname = "ModelExecutionProto";

message ExecuteRequest {
  reserved 3;

  // The feature that this execution request is for.
  optional ModelExecutionFeature feature = 1;

  // The metadata associated with this request used to understand how to
  // execute the necessary feature models.
  optional Any request_metadata = 2;
}

// PrivateExecuteRequest is the request for PaicMessage.
message PrivateExecuteRequest {
  // The execute request.
  optional ExecuteRequest request = 1;
  // The list of variations.
  repeated int32 variations = 2;
}

message ExecuteResponse {
  reserved 3;

  optional int64 model_version = 1;

  oneof response {
    // The metadata for the response returned for the feature.
    Any response_metadata = 2;
    ErrorResponse error_response = 5;
  }

  optional string server_execution_id = 4;
}

message ErrorResponse {
  optional ErrorState error_state = 1;
}

// Possible failure modes of the service
enum ErrorState {
  ERROR_STATE_UNSPECIFIED = 0;
  ERROR_STATE_INTERNAL_SERVER_ERROR_RETRY = 1;
  ERROR_STATE_INTERNAL_SERVER_ERROR_NO_RETRY = 2;
  ERROR_STATE_UNSUPPORTED_LANGUAGE = 3;
  ERROR_STATE_FILTERED = 4;
  ERROR_STATE_REQUEST_THROTTLED = 5;
  ERROR_STATE_DISABLED = 6;
  ERROR_STATE_REQUEST_DISABLED = 7;
  ERROR_STATE_QUOTA_EXCEEDED = 8;
}

enum ModelExecutionFeature {
  reserved 2, 9, 10, 11, 16, 19, 21, 22, 25;

  MODEL_EXECUTION_FEATURE_UNSPECIFIED = 0;
  MODEL_EXECUTION_FEATURE_COMPOSE = 1;
  MODEL_EXECUTION_FEATURE_WALLPAPER_SEARCH = 3;
  // This test feature cannot be used for launch but can be used for
  // prototyping. Please reach out to optimization_guide OWNERS when looking to
  // use this enum or want to go beyond prototyping.
  MODEL_EXECUTION_FEATURE_TEST = 4;
  // This feature does not map to a user-visible feature that is being
  // launched, but instead is an internal detail to support other model
  // execution features.
  MODEL_EXECUTION_FEATURE_TEXT_SAFETY = 5;
  MODEL_EXECUTION_FEATURE_PROMPT_API = 6;
  MODEL_EXECUTION_FEATURE_HISTORY_SEARCH = 7;
  MODEL_EXECUTION_FEATURE_SUMMARIZE = 8;
  MODEL_EXECUTION_FEATURE_HISTORY_QUERY_INTENT = 12;
  MODEL_EXECUTION_FEATURE_BLING_PROTOTYPING = 13;
  MODEL_EXECUTION_FEATURE_PASSWORD_CHANGE_SUBMISSION = 14;
  MODEL_EXECUTION_FEATURE_SCAM_DETECTION = 15;
  MODEL_EXECUTION_FEATURE_PERMISSIONS_AI = 17;
  MODEL_EXECUTION_FEATURE_WRITING_ASSISTANCE_API = 18;
  MODEL_EXECUTION_FEATURE_FORMS_CLASSIFICATIONS = 20;
  MODEL_EXECUTION_FEATURE_ENHANCED_CALENDAR = 23;
  MODEL_EXECUTION_FEATURE_ZERO_STATE_SUGGESTIONS = 24;
  MODEL_EXECUTION_FEATURE_PROOFREADER_API = 26;
  MODEL_EXECUTION_FEATURE_AMOUNT_EXTRACTION = 27;
  MODEL_EXECUTION_FEATURE_WALLETABLE_PASS_EXTRACTION = 28;
  MODEL_EXECUTION_FEATURE_ON_DEVICE_SPEECH_RECOGNITION = 29;
  MODEL_EXECUTION_FEATURE_IOS_SMART_TAB_GROUPING = 30;
  MODEL_EXECUTION_FEATURE_SKILLS = 31;
  MODEL_EXECUTION_FEATURE_GEMINI_ANTISCAM_PROTECTION = 32;
  MODEL_EXECUTION_FEATURE_CLASSIFIER = 33;
  MODEL_EXECUTION_FEATURE_CONTENT_ANNOTATION = 34;
  MODEL_EXECUTION_FEATURE_FINDS = 35;
  MODEL_EXECUTION_FEATURE_ANNOTATION_REDUCER_ONE_P_RESOLVER = 36;
  MODEL_EXECUTION_FEATURE_ANNOTATION_REDUCER_QUERY_CLASSIFIER = 37;
  MODEL_EXECUTION_FEATURE_CONTEXTUAL_CUEING = 38;
  MODEL_EXECUTION_FEATURE_ON_DEVICE_SPEECH_RECOGNITION_TINY_GEMMA = 39;
  MODEL_EXECUTION_FEATURE_UPDATER_CHAT = 40;
  MODEL_EXECUTION_FEATURE_CARD_RECOMMENDATIONS = 42;
  MODEL_EXECUTION_FEATURE_READ_ALOUD_SYNTHESIZE = 43;
  MODEL_EXECUTION_FEATURE_READ_ALOUD_GENERATE_TEXT = 44;
  MODEL_EXECUTION_FEATURE_CONTEXT_HUB = 45;
}
