| 20 | } |
| 21 | |
| 22 | ServerModelConfig::VoicePreset parse_voice_preset( |
| 23 | const std::filesystem::path & base, |
| 24 | const engine::io::json::Value & value, |
| 25 | const std::string & context) { |
| 26 | if (!value.is_object()) { |
| 27 | throw std::runtime_error(context + " must be an object"); |
| 28 | } |
| 29 | ServerModelConfig::VoicePreset preset; |
| 30 | if (const auto * voice_id = value.find("voice_id")) { |
| 31 | preset.voice_id = voice_id->as_string(); |
| 32 | } |
| 33 | if (const auto * voice_ref = value.find("voice_ref")) { |
| 34 | preset.voice_ref = resolve_path(base, voice_ref->as_string()); |
| 35 | } |
| 36 | if (const auto * reference_text = value.find("reference_text")) { |
| 37 | preset.reference_text = reference_text->as_string(); |
| 38 | } |
| 39 | if (!preset.voice_id.has_value() && !preset.voice_ref.has_value() && !preset.reference_text.has_value()) { |
| 40 | throw std::runtime_error(context + " must set voice_id, voice_ref, or reference_text"); |
| 41 | } |
| 42 | return preset; |
| 43 | } |
| 44 | |
| 45 | } // namespace |
| 46 |
no test coverage detected