syntax = "proto3";
package visualdl;

message Record {

  message Image {
    bytes encoded_image_string = 4;
  }

  message Text {
    string encoded_text_string = 1;
  }

  message Audio {
    float sample_rate = 1;
    int64 num_channels = 2;
    int64 length_frames = 3;
    bytes encoded_audio_string = 4;
    string content_type = 5;
  }

  message Embedding {
    repeated string label = 1;
    repeated float vectors = 2;
  }

  message Embeddings {
    repeated Embedding embeddings = 1;
    repeated string label_meta = 2;
  }

  message bytes_embeddings {
    bytes encoded_labels = 1;
    bytes encoded_vectors = 2;
  }

  message Histogram {
    repeated double hist = 1 [packed = true];
    repeated double bin_edges = 2 [packed = true];
  }

  message PRCurve {
    repeated int64 TP = 1 [packed = true];
    repeated int64 FP = 2 [packed = true];
    repeated int64 TN = 3 [packed = true];
    repeated int64 FN = 4 [packed = true];
    repeated double precision = 5;
    repeated double recall = 6;
  }
  
  message ROC_Curve {
    repeated int64 TP = 1 [packed = true];
    repeated int64 FP = 2 [packed = true];
    repeated int64 TN = 3 [packed = true];
    repeated int64 FN = 4 [packed = true];
    repeated double tpr = 5;
    repeated double fpr = 6;
  }

  message HParam {
    message HparamInfo {
      oneof type {
          int64 int_value = 1;
          double float_value = 2;
          string string_value = 3;
      };
      string name = 4;
    }
    repeated HparamInfo hparamInfos = 1;
    repeated HparamInfo metricInfos = 2;
    string name = 3;
  }

  message MetaData {
    string display_name = 1;
  }

  message Value {
    int64 id = 1;
    string tag = 2;
    int64 timestamp = 3;
    oneof one_value {
      float value = 4;
      Image image = 5;
      Audio audio = 6;
      Embeddings embeddings = 7;
      Histogram histogram = 8;
      PRCurve pr_curve = 9;
      MetaData meta_data = 10;
      ROC_Curve roc_curve = 11;
      Text text = 12;
      HParam hparam = 13;
    }
  }

  repeated Value values = 1;
  //RecordMetaData meta_data = 2;
}