// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

edition = "2023";

package optimization_guide.proto;

import "components/optimization_guide/proto/features/common_quality_data.proto";

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

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

option java_outer_classname = "AtmemQueryAnalyzerProto";

// DO NOT EDIT THIS FILE DIRECTLY!
//
// This file is generated in g3 and then synced to Chrome. Instead, please refer to
// http://go/chrome-mqls-onboarding (Google-internal link), and then changes will
// be synced with Chrome automatically.

// Holds the data for the AtMemory query analyzer feature.
message AtmemQueryAnalyzerLoggingData {
  AtmemQueryAnalyzerRequest request = 1 [features = { field_presence: EXPLICIT }];

  AtmemQueryAnalyzerResponse response = 2 [features = { field_presence: EXPLICIT }];

  ModelExecutionInfo model_execution_info = 3 [features = { field_presence: EXPLICIT }];
}

// Input data for the AtMemory query analyzer feature.
message AtmemQueryAnalyzerRequest {
  string user_query = 1 [features = { field_presence: IMPLICIT }];

  // The URL of the main frame the user was on when they entered the query.
  string url = 2 [features = { field_presence: IMPLICIT }];

  // The title of the main frame the user was on when they entered the query.
  string title = 3 [features = { field_presence: IMPLICIT }];

  // The current relative date in ISO 8601 YYYY-MM-DD format.
  string current_date = 4 [features = { field_presence: IMPLICIT }];
}

// Output data for the AtMemory query analyzer feature.
message AtmemQueryAnalyzerResponse {
  QueryType query_type = 1 [features = { field_presence: IMPLICIT }];

  // // TODO(crbug.com/543716348): Deprecate this field after query analyzer is updated.
  AutofillFetchPlan autofill_fetch_plan = 2 [features = { field_presence: EXPLICIT }];

  // The rewritten query that should be used. If empty, the original
  // query should be used.
  string rewritten_query = 3 [features = { field_presence: IMPLICIT }];

  repeated AutofillFetchPlan autofill_fetch_plans = 4;
}

message AutofillFetchPlan {
  repeated MemoryDataType data_types = 1;

  // TODO(crbug.com/543716348): Deprecate filter_keywords once we migrate to filters.
  repeated string filter_keywords = 2;

  repeated Filter filters = 3;
}

message Filter {
  repeated MemoryDataType data_types = 1;

  StringFilter string_filter = 2 [features = { field_presence: EXPLICIT }];

  TypedValueFilter typed_value_filter = 3 [features = { field_presence: EXPLICIT }];
}

message StringFilter {
  string value = 1 [features = { field_presence: IMPLICIT }];


  StringFilterMode mode = 2 [features = { field_presence: IMPLICIT }];


  enum StringFilterMode {
    STRING_FILTER_MODE_UNSPECIFIED = 0;

    STRING_FILTER_MODE_SUBSTRING = 1;

    STRING_FILTER_MODE_EXACT = 2;

    STRING_FILTER_MODE_FUZZY = 3;
  }
}

message TypedValueFilter {
  TypedValue typed_value = 1 [features = { field_presence: EXPLICIT }];


  FilterOperator filter_operator = 2 [features = { field_presence: IMPLICIT }];


  enum FilterOperator {
    FILTER_OPERATOR_UNSPECIFIED = 0;

    FILTER_OPERATOR_EQUAL = 1;

    FILTER_OPERATOR_NOT_EQUAL = 2;

    FILTER_OPERATOR_LESS_THAN = 3;

    FILTER_OPERATOR_LESS_THAN_OR_EQUAL = 4;

    FILTER_OPERATOR_GREATER_THAN = 5;

    FILTER_OPERATOR_GREATER_THAN_OR_EQUAL = 6;
  }
}

// Strongly-typed representation of an attribute value.
message TypedValue {
  oneof value {
    string country_code = 1;

    Date date = 2;

    DateTime date_time = 3;

    StringList string_list = 4;
  }

  message Date {
    int32 year = 1 [features = { field_presence: IMPLICIT }];

    int32 month = 2 [features = { field_presence: IMPLICIT }];

    int32 day = 3 [features = { field_presence: IMPLICIT }];
  }

  message StringList {
    repeated string values = 1;
  }
}

// Classification status of the user's query.
enum QueryType {
  QUERY_TYPE_UNSPECIFIED = 0;

  QUERY_TYPE_SUPPORTED = 1;

  QUERY_TYPE_UNSUPPORTED = 2;
}

// Memory data types supported by the AtMemory query analyzer.

enum MemoryDataType {
  MEMORY_DATA_TYPE_UNSPECIFIED = 0;

  MEMORY_DATA_TYPE_NAME_FULL = 1;

  MEMORY_DATA_TYPE_ADDRESS_FULL = 2;

  MEMORY_DATA_TYPE_ADDRESS_STREET_ADDRESS = 3;

  MEMORY_DATA_TYPE_ADDRESS_CITY = 4;

  MEMORY_DATA_TYPE_ADDRESS_STATE = 5;

  MEMORY_DATA_TYPE_ADDRESS_ZIP = 6;

  MEMORY_DATA_TYPE_ADDRESS_COUNTRY = 7;

  MEMORY_DATA_TYPE_PHONE = 8;

  MEMORY_DATA_TYPE_EMAIL = 9;

  MEMORY_DATA_TYPE_COMPANY_NAME = 10;

  MEMORY_DATA_TYPE_IBAN = 11;

  MEMORY_DATA_TYPE_IBAN_NICKNAME = 12;

  MEMORY_DATA_TYPE_VEHICLE = 13;

  MEMORY_DATA_TYPE_VEHICLE_MAKE = 14;

  MEMORY_DATA_TYPE_VEHICLE_MODEL = 15;

  MEMORY_DATA_TYPE_VEHICLE_YEAR = 16;

  MEMORY_DATA_TYPE_VEHICLE_OWNER = 17;

  MEMORY_DATA_TYPE_VEHICLE_PLATE_NUMBER = 18;

  MEMORY_DATA_TYPE_VEHICLE_PLATE_STATE = 19;

  MEMORY_DATA_TYPE_VEHICLE_VIN = 20;

  MEMORY_DATA_TYPE_PASSPORT_FULL = 21;

  MEMORY_DATA_TYPE_PASSPORT_NAME = 22;

  MEMORY_DATA_TYPE_PASSPORT_COUNTRY = 23;

  MEMORY_DATA_TYPE_PASSPORT_NUMBER = 24;

  MEMORY_DATA_TYPE_PASSPORT_ISSUE_DATE = 25;

  MEMORY_DATA_TYPE_PASSPORT_EXPIRATION_DATE = 26;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_FULL = 27;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_FLIGHT_NUMBER = 28;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_TICKET_NUMBER = 29;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_CONFIRMATION_CODE = 30;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_PASSENGER_NAME = 31;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_DEPARTURE_AIRPORT = 32;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_ARRIVAL_AIRPORT = 33;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_DEPARTURE_DATE = 34;

  MEMORY_DATA_TYPE_FLIGHT_RESERVATION_ARRIVAL_DATE = 35;

  MEMORY_DATA_TYPE_SHIPMENT_FULL = 36;

  MEMORY_DATA_TYPE_SHIPMENT_TRACKING_NUMBER = 37;

  MEMORY_DATA_TYPE_SHIPMENT_ASSOCIATED_ORDER_ID = 38;

  MEMORY_DATA_TYPE_SHIPMENT_DELIVERY_ADDRESS = 39;

  MEMORY_DATA_TYPE_SHIPMENT_DELIVERY_ZIP_CODE = 40;

  MEMORY_DATA_TYPE_SHIPMENT_CARRIER_NAME = 41;

  MEMORY_DATA_TYPE_SHIPMENT_CARRIER_DOMAIN = 42;

  MEMORY_DATA_TYPE_SHIPMENT_ESTIMATED_DELIVERY_DATE = 43;

  MEMORY_DATA_TYPE_SHIPMENT_SHIP_DATE = 76;

  MEMORY_DATA_TYPE_NATIONAL_ID_CARD_FULL = 44;

  MEMORY_DATA_TYPE_NATIONAL_ID_CARD_NAME = 45;

  MEMORY_DATA_TYPE_NATIONAL_ID_CARD_COUNTRY = 46;

  MEMORY_DATA_TYPE_NATIONAL_ID_CARD_NUMBER = 47;

  MEMORY_DATA_TYPE_NATIONAL_ID_CARD_ISSUE_DATE = 48;

  MEMORY_DATA_TYPE_NATIONAL_ID_CARD_EXPIRATION_DATE = 49;

  MEMORY_DATA_TYPE_REDRESS_NUMBER_FULL = 50;

  MEMORY_DATA_TYPE_REDRESS_NUMBER_NAME = 51;

  MEMORY_DATA_TYPE_REDRESS_NUMBER_NUMBER = 52;

  MEMORY_DATA_TYPE_KNOWN_TRAVELER_NUMBER_FULL = 53;

  MEMORY_DATA_TYPE_KNOWN_TRAVELER_NUMBER_NAME = 54;

  MEMORY_DATA_TYPE_KNOWN_TRAVELER_NUMBER_NUMBER = 55;

  MEMORY_DATA_TYPE_KNOWN_TRAVELER_NUMBER_EXPIRATION_DATE = 56;

  MEMORY_DATA_TYPE_DRIVERS_LICENSE_FULL = 57;

  MEMORY_DATA_TYPE_DRIVERS_LICENSE_NAME = 58;

  MEMORY_DATA_TYPE_DRIVERS_LICENSE_STATE = 59;

  MEMORY_DATA_TYPE_DRIVERS_LICENSE_NUMBER = 60;

  MEMORY_DATA_TYPE_DRIVERS_LICENSE_ISSUE_DATE = 61;

  MEMORY_DATA_TYPE_DRIVERS_LICENSE_EXPIRATION_DATE = 62;

  MEMORY_DATA_TYPE_ORDER_FULL = 63;

  MEMORY_DATA_TYPE_ORDER_ID = 64;

  MEMORY_DATA_TYPE_ORDER_ACCOUNT = 65;

  MEMORY_DATA_TYPE_ORDER_DATE = 66;

  MEMORY_DATA_TYPE_ORDER_MERCHANT_NAME = 67;

  MEMORY_DATA_TYPE_ORDER_MERCHANT_DOMAIN = 68;

  MEMORY_DATA_TYPE_ORDER_PRODUCT_NAMES = 69;

  MEMORY_DATA_TYPE_ORDER_GRAND_TOTAL = 70;

  MEMORY_DATA_TYPE_CREDIT_CARD_NUMBER = 71;

  MEMORY_DATA_TYPE_CREDIT_CARD_EXPIRATION_DATE = 72;

  MEMORY_DATA_TYPE_CREDIT_CARD_SECURITY_CODE = 73;

  MEMORY_DATA_TYPE_CREDIT_CARD_NAME_ON_CARD = 74;

  MEMORY_DATA_TYPE_CREDIT_CARD_NICKNAME = 75;
}
