#include #include #include "model_definition.h" const std::vector& fibo2_definitions(); const std::vector& sd3_definitions(); const std::vector& pid_definitions(); const std::vector& ideogram4_definitions(); const std::vector& krea2_definitions(); const std::vector& flux_definitions(); const std::vector& flux3_definitions(); const std::vector& flux2_definitions(); const std::vector& ltxav_definitions(); const std::vector& minimax_h3_definitions(); const std::vector& hunyuan_video_definitions(); const std::vector& wan_definitions(); const std::vector& lingbot_video_definitions(); const std::vector& qwen_image_definitions(); const std::vector& pixart_definitions(); const std::vector& mage_flow_definitions(); const std::vector& longcat_definitions(); const std::vector& hidream_o1_definitions(); const std::vector& minit2i_definitions(); const std::vector& sensenova_u1_definitions(); const std::vector& anima_definitions(); const std::vector& ming_image_definitions(); const std::vector& z_image_definitions(); const std::vector& z_image_l2p_definitions(); const std::vector& llada_image_definitions(); const std::vector& boogu_image_definitions(); const std::vector& ernie_image_definitions(); const std::vector& lens_definitions(); const std::vector& iris_definitions(); const std::vector& sd_definitions(); const std::vector& moss_image_definitions(); static const std::array& model_definitions() { static const auto definitions = [] { std::array result{}; auto append = [&](const std::vector& family) { for (const auto& definition : family) { if (definition.version < 0 || definition.version >= VERSION_COUNT || result[definition.version]) { throw std::logic_error("duplicate or invalid model registration"); } result[definition.version] = &definition; } }; append(fibo2_definitions()); append(sd3_definitions()); append(pid_definitions()); append(ideogram4_definitions()); append(krea2_definitions()); append(flux_definitions()); append(flux3_definitions()); append(flux2_definitions()); append(ltxav_definitions()); append(minimax_h3_definitions()); append(hunyuan_video_definitions()); append(wan_definitions()); append(lingbot_video_definitions()); append(qwen_image_definitions()); append(pixart_definitions()); append(mage_flow_definitions()); append(longcat_definitions()); append(hidream_o1_definitions()); append(minit2i_definitions()); append(sensenova_u1_definitions()); append(anima_definitions()); append(ming_image_definitions()); append(z_image_definitions()); append(z_image_l2p_definitions()); append(llada_image_definitions()); append(boogu_image_definitions()); append(ernie_image_definitions()); append(lens_definitions()); append(iris_definitions()); append(sd_definitions()); append(moss_image_definitions()); for (const auto* definition : result) { if (!definition) throw std::logic_error("missing model registration"); } return result; }(); return definitions; } const ModelDefinition* find_model_definition(SDVersion version) { if (version < 0 || version >= VERSION_COUNT) return nullptr; return model_definitions()[version]; } const ModelTraits* find_model_traits(SDVersion version) { const auto* definition = find_model_definition(version); return definition ? &definition->traits : nullptr; } const char* sd_version_name(SDVersion version) { const auto* definition = find_model_definition(version); return definition ? definition->name : "Unknown"; }