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

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

option java_outer_classname = "HistoryQueryProto";

// 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.

// Protos for the AiData representing the flow where Chrome sends the user query
// to the server, the server returns an embedding and the client computes a
// ranking of the documents.

message HistoryQueryLoggingData {
  HistoryQueryRequest request = 1 [features = { field_presence: EXPLICIT }];

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

  HistoryQueryQuality quality = 3 [features = { field_presence: EXPLICIT }];

  reserved 4, 5;
}

// Next ID: 2
message HistoryQueryRequest {
  reserved 1;
}

// Next ID: 3
message HistoryQueryResponse {
  reserved 1, 2;
}

// Next Id: 11
message HistoryQueryQuality {
  // The history search query entered by the user.
  string query = 4 [features = { field_presence: IMPLICIT }];

  // The embedding of the history search query.
  Embedding query_embedding = 5 [features = { field_presence: EXPLICIT }];

  // The version of the embedding model used to compute the query and document
  // embeddings.
  int64 embedding_model_version = 6 [features = { field_presence: IMPLICIT }];

  // The top N (N=3 as of 2024-03-28) documents shown to the user after their
  // query. Uses the same order they were shown to the user.
  repeated DocumentShown top_documents_shown = 1;

  // The number of characters the user entered during this UI interaction.
  // This should be the length of the query plus the number of characters that
  // were edited.
  uint32 num_entered_characters = 2 [features = { field_presence: IMPLICIT }];

  // The UI surface the user was on when making this query.
  UiSurface ui_surface = 3 [features = { field_presence: IMPLICIT }];

  // If specified, this is the number of days of history the user requested
  // to search. For example, search may be narrowed to yesterday or last week.
  // If absent, all available history is used for search.
  uint32 num_days = 7 [features = { field_presence: EXPLICIT }];

  UserFeedback user_feedback = 8 [features = { field_presence: IMPLICIT }];

  // The session id of the user query. Use this to join with HistoryAnswer
  // protos from the same session.
  string session_id = 9 [features = { field_presence: IMPLICIT }];

  // The final model status of the query. Used to determine if the query result
  // is successful/accepted or not.
  FinalModelStatus final_model_status = 10 [features = { field_presence: IMPLICIT }];
}

// Next ID: 7
message DocumentShown {
  // The full URL of the document shown to the user.
  string url = 2 [features = { field_presence: IMPLICIT }];

  repeated PassageData passages = 3;

  // Whether the user clicked the shown document.
  bool was_clicked = 4 [features = { field_presence: IMPLICIT }];

  // Best score from passages, replicated for convenient summary.
  float best_embedding_score = 5 [features = { field_presence: IMPLICIT }];

  // Total score for the document including best passage embedding score
  // plus any holistic (across all passages) text search score boost.
  // Also here for convenience as it can in theory be computed from passages.
  float total_document_score = 6 [features = { field_presence: IMPLICIT }];

  reserved 1;
}

// Next ID: 4
message PassageData {
  // The embedding for this passage.
  Embedding embedding = 1 [features = { field_presence: EXPLICIT }];

  // The text of the passage.
  string text = 2 [features = { field_presence: IMPLICIT }];

  // How the passage was scored against the query.
  float score = 3 [features = { field_presence: IMPLICIT }];
}

// Next ID: 4
enum UiSurface {
  UI_SURFACE_UNSPECIFIED = 0;

  UI_SURFACE_HISTORY_PAGE = 1;

  UI_SURFACE_OMNIBOX_HISTORY_SCOPE = 2;

  UI_SURFACE_SIDE_PANEL = 3;
}
