| 204 | return nullptr; |
| 205 | } |
| 206 | |
| 207 | RegistryConfig load_registry_config(const std::filesystem::path & path) { |
| 208 | const auto config = engine::io::load_config_map(path); |
| 209 | RegistryConfig registry_config; |
| 210 | if (const auto it = config.find("families"); it != config.end()) { |
| 211 | registry_config.enabled_families = split_csv(it->second); |
| 212 | } else if (const auto it = config.find("loaders"); it != config.end()) { |
| 213 | registry_config.enabled_families = split_csv(it->second); |
| 214 | } |
| 215 | return registry_config; |
| 216 | } |
| 217 | |
| 218 | ModelRegistry make_registry_from_config( |
| 219 | const RegistryConfig & config, |
| 220 | const std::vector<std::shared_ptr<IVoiceModelLoader>> & available_loaders) { |
| 221 | ModelRegistry registry; |
| 222 | if (config.enabled_families.empty()) { |
| 223 | return registry; |
| 224 | } |
| 225 | |
| 226 | for (const auto & family : config.enabled_families) { |
| 227 | auto it = std::find_if( |
| 228 | available_loaders.begin(), |
| 229 | available_loaders.end(), |
| 230 | [&](const std::shared_ptr<IVoiceModelLoader> & loader) { |
| 231 | return loader != nullptr && loader->family() == family; |
| 232 | }); |
| 233 | if (it == available_loaders.end()) { |
| 234 | throw std::runtime_error("registry config requested unknown loader family: " + family); |
| 235 | } |
| 236 | registry.register_loader(*it); |
| 237 | } |
| 238 | return registry; |
| 239 | } |
| 240 | |
| 241 | ModelRegistry make_default_registry(const std::optional<std::filesystem::path> & config_path) { |
| 242 | const std::vector<std::shared_ptr<IVoiceModelLoader>> available_loaders = { |
| 243 | // Development registry entries from Share/AudioCPP that are not present in this release tree yet: |
| 244 | // engine::models::kokoro_tts::make_kokoro_tts_loader(), |
| 245 | // engine::models::higgs_tts::make_higgs_tts_loader(), |
| 246 | // engine::models::parakeet_tdt::make_parakeet_tdt_loader(), |
| 247 | engine::models::ace_step::make_ace_step_loader(), |
| 248 | engine::models::demucs::make_htdemucs_loader(), |
| 249 | engine::models::roformer::make_mel_band_roformer_loader(), |
| 250 | engine::models::omnivoice::make_omnivoice_loader(), |
no test coverage detected