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

syntax = "proto3";

package ml;

// GPU delegate APIs.
enum TfliteGpuDelegateApi {
  // Unspecified.
  GPU_DELEGATE_API_UNKNOWN = 0;

  // OpenGL
  GPU_DELEGATE_API_OPENGL = 1;

  // OpenCL
  GPU_DELEGATE_API_OPENCL = 2;
}

// TfliteBenchmarkConfig contains configurations used for tflite benchmarking.
message TfliteBenchmarkConfig {
  // The path on the device to load the tflite_model.
  string tflite_model_filepath = 1;
  // The path on the device to load the expected input output.
  string input_output_filepath = 2;
  // number of times to test each input file
  int32 num_runs = 3;
  // delegate to gpu
  bool use_gpu = 4;
  // Specific backend to use when delegating to GPU.
  TfliteGpuDelegateApi gpu_delegate_api = 5;
}

// FlatBufferModelSpecProto contains full information of a tflite model.
message FlatBufferModelSpecProto {
  // The content of the flatbuffer of the model.
  bytes model_string = 1;

  // tflite node specification need to reconstruct the tensor.
  message NodeSpec {
    // The index of this node in the tflite interpreter.
    int32 index = 1;
    // The dims for re-constructing the tensor shape.
    repeated int32 dims = 2;
  }
  // As accepted by the constructor of ModelImpl.
  map<string, NodeSpec> required_inputs = 2;
  map<string, NodeSpec> required_outputs = 3;
}

// ExpectedInputOutput contains input and expected_output for benchmarking.
message ExpectedInputOutput {
  // A copy of tensorflow Example definition is defined here temporarily, this
  // should be replaced by tensorflow::Example when it is available.
  message Example {
    // Containers to hold repeated fundamental values.
    message BytesList {
      repeated bytes value = 1;
    }
    message FloatList {
      repeated float value = 1 [packed = true];
    }
    message Int64List {
      repeated int64 value = 1 [packed = true];
    }

    // Containers for the data type.
    message Feature {
      // Each feature can be exactly one kind.
      oneof kind {
        BytesList bytes_list = 1;
        FloatList float_list = 2;
        Int64List int64_list = 3;
      }
    }

    message Features {
      // Map from feature name to feature.
      map<string, Feature> feature = 1;
    }
    Features features = 1;
  }

  // Input Example to test.
  Example input = 1;
  // Expected output.
  Example expected_output = 2;
}
