| // |
| // Copyright (C) 2018 The Android Open Source Project |
| // |
| // Licensed 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. |
| // |
| |
| // Flatbuffer schema for SAFT models. |
| // |
| // For info on flatbuffers, see http://go/flatbuffers and |
| // http://google.github.io/flatbuffers/, including info on writing schemas: |
| // http://google.github.io/flatbuffers/flatbuffers_guide_writing_schema.html |
| |
| namespace libtextclassifier3.saft_fbs; |
| |
| // SM stands for Saft Model. The next two digits are meant to identify |
| // incompatible versions. Ideally, we'll never have to go beyond 00. |
| file_identifier "SM00"; |
| |
| // Extension stands for Saft Model in FlatBuffer format. |
| file_extension "smfb"; |
| |
| table ModelParameter { |
| // Parameter name. |
| name:string; |
| |
| // Parameter value. |
| value:string; |
| } |
| |
| // Input for a SAFT model. Inputs usually provide extra resources: e.g., the |
| // parameters for a Neurosis FFNN with embeddings, or a word cluster structure, |
| // etc. |
| table ModelInput { |
| // Name of this input. Different input of the same model should have |
| // different names, such that we can non-ambiguously look them up. |
| name:string; |
| |
| // General description of the type of this input. Required to parse the |
| // content of this input (see |data| below). If |data| is a flatbuffer, use |
| // "flatbuffer". If |data| is a proto, use "proto". Otherwise, use your best |
| // judgment: use something human-readable, and look around to make sure you |
| // don't invent a new name for something that already exists. |
| type:string; |
| |
| // More specific information about the type of this input. E.g., if |type| is |
| // "flatbuffer", this should be the name of the root_type we should parse from |
| // the input bytes., e.g., "EmbeddingNetwork". If |type| is proto, this |
| // should be the name of the proto serialized as |data|, e.g., |
| // "EmbeddingNetworkProto". |
| sub_type:string; |
| |
| // The content of this input. With a generous alignment, such that we can |
| // accommodate mmap-friendly data structures. E.g., the word clusters used by |
| // the Translate team require 8-byte alignment. |
| data:[ubyte] (force_align: 16); |
| } |
| |
| // A Saft model. A list of parameters with model settings (e.g., the |
| // specification of the features to use) and a list of inputs. |
| table Model { |
| parameters:[ModelParameter]; |
| inputs:[ModelInput]; |
| |
| // Crc32 checksum of all parameters and inputs (including the bytes of the |
| // inputs). Used to check that the model has not been corrupted. |
| crc32:uint32; |
| } |
| |
| root_type Model; |