#pragma once #include "engine/community_models/sanotts/config.h" #include "engine/framework/neon/blocks.h" #include #include #include #include namespace engine::core { struct TensorValue; } namespace engine::models::sanotts { struct SanoTtsAffineWeights { std::vector weight; std::vector bias; }; struct SanoTtsNeonWeights { SanoTtsAffineWeights projection; std::vector acoustic_blocks; SanoTtsAffineWeights embedding; SanoTtsAffineWeights input_norm; std::vector decoder_blocks; SanoTtsAffineWeights final_norm; SanoTtsAffineWeights head; }; // Loading, validation and the model-specific acoustic/embedding fold happen here. // The decoder receives typed, bound data and never looks up weight names. using SanoTtsWeightReader = std::function(const std::string &)>; SanoTtsNeonWeights load_sanotts_neon_weights(const SanoTtsConfig &config, const SanoTtsWeightReader &reader, int threads); SanoTtsNeonWeights load_sanotts_neon_weights(const SanoTtsConfig &config, const std::unordered_map &tensors, int threads); } // namespace engine::models::sanotts