chromium/chromeos/services/machine_learning/public/mojom/tensor.mojom

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

// Datatypes used in the Machine Learning API.
// This module is derived from the Feature proto definition of TensorFlow.
// See /tensorflow/core/example/feature.proto in the TensorFlow code.

// NOTE: This mojom exists in two places and must be kept in sync:
//       Chromium:  //chromeos/services/machine_learning/public/mojom/
//       Chrome OS: src/platform2/ml/mojom/
//       Note: Other repos downstream of Chromium might also use this mojom.
// Example: A backwards-compatible mojom change (and corresponding
// implementation change) can be made in Chrome OS first, then replicated to the
// clients (Chromium, other downstream repos) later.
// Use //chromeos/services/machine_learning/public/mojom/roll_mojoms.sh to help
// replicate Chrome OS-side changes over to Chromium.

module chromeos.machine_learning.mojom;

[Stable]
struct StringList {
  array<string> value;
};

[Stable]
struct FloatList {
  array<double> value;
};

[Stable]
struct Int64List {
  array<int64> value;
};

// The union of all supported tensor types. Supporting a new type comprises the
// following:
//  - Adding a new struct above (e.g. BoolList),
//  - Adding this new struct to the union below,
//  - Adding template specializations for the new type to
//    platform2/ml/tensor_view.{h,cc}.
//  - Updating platform2/ml/graph_executor_impl.cc to use a TensorView of the
//    new type.
//
// TODO(chromium:836098): add new types (e.g. uint8, bool) as they become
//                        useful.
[Stable]
union ValueList {
  StringList string_list;
  FloatList float_list;
  Int64List int64_list;
};

// A Tensor is a multi-dimensional array with dimensions `shape`, flattened into
// the one-dimensional array `data`.
// It is used for both the inputs (in the form of a map<string, Tensor>) and
// outputs (in the form of an array<Tensor>) of ML inference.
[Stable]
struct Tensor {
  ValueList data;

  // Each integer is the size of that dimension.
  Int64List shape;
};