// // 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;