/************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/

import "job.proto";
import "common.proto";

message EmbeddingProto {
  optional int32 word_dim = 1;
  optional int32 vocab_size = 2;
}

message LossProto {
  optional int32 nclass = 1;
  optional int32 vocab_size = 2;
}

message DataProto {
  required string path = 1;
  optional int32 max_window = 2;
  optional string backend = 3 [default = "kvfile"];
}

extend singa.LayerProto {
  optional EmbeddingProto embedding_conf = 101;
  optional LossProto loss_conf = 102;
  optional DataProto data_conf = 103;
}

message WordRecord {
  optional string word = 1;
  optional int32 word_index = 2;
  optional int32 class_index = 3;
  optional int32 class_start = 4;
  optional int32 class_end = 5;
}
