| 105 | } |
| 106 | |
| 107 | engine::models::vibevoice::VibeVoiceRequest make_request( |
| 108 | const engine::io::json::Value & object, |
| 109 | const engine::models::vibevoice::VibeVoiceAssets & assets, |
| 110 | const std::string & prompt_noise_file, |
| 111 | const std::string & noise_file) { |
| 112 | engine::models::vibevoice::VibeVoiceRequest request; |
| 113 | request.text = required_string(object, "text"); |
| 114 | request.generation.ddpm_inference_steps = assets.config.diffusion_head.ddpm_num_inference_steps; |
| 115 | request.generation.max_new_tokens = |
| 116 | engine::io::json::optional_i64(object, "max_new_tokens", request.generation.max_new_tokens); |
| 117 | request.generation.max_length_times = |
| 118 | engine::io::json::optional_f32(object, "max_length_times", request.generation.max_length_times); |
| 119 | request.generation.ddpm_inference_steps = |
| 120 | engine::io::json::optional_i64(object, "ddpm_steps", request.generation.ddpm_inference_steps); |
| 121 | request.generation.cfg_scale = |
| 122 | engine::io::json::optional_f32(object, "cfg_scale", request.generation.cfg_scale); |
| 123 | request.generation.do_sample = |
| 124 | engine::io::json::optional_bool(object, "do_sample", request.generation.do_sample); |
| 125 | request.generation.temperature = |
| 126 | engine::io::json::optional_f32(object, "temperature", request.generation.temperature); |
| 127 | request.generation.top_k = |
| 128 | engine::io::json::optional_i64(object, "top_k", request.generation.top_k); |
| 129 | request.generation.top_p = |
| 130 | engine::io::json::optional_f32(object, "top_p", request.generation.top_p); |
| 131 | request.generation.seed = |
| 132 | static_cast<uint32_t>(engine::io::json::optional_i64(object, "seed", request.generation.seed)); |
| 133 | request.generation.prompt_noise_file = prompt_noise_file.empty() |
| 134 | ? optional_string(object, "prompt_noise_file") |
| 135 | : prompt_noise_file; |
| 136 | request.generation.diffusion_noise_file = noise_file.empty() |
| 137 | ? optional_string(object, "diffusion_noise_file") |
| 138 | : noise_file; |
| 139 | if (request.generation.max_new_tokens < 0) { |
| 140 | throw std::runtime_error("VibeVoice warmbench max_new_tokens must be non-negative"); |
| 141 | } |
| 142 | if (request.generation.max_length_times <= 0.0F) { |
| 143 | throw std::runtime_error("VibeVoice warmbench max_length_times must be positive"); |
| 144 | } |
| 145 | if (request.generation.ddpm_inference_steps <= 0) { |
| 146 | throw std::runtime_error("VibeVoice warmbench ddpm_steps must be positive"); |
| 147 | } |
| 148 | if (request.generation.cfg_scale < 0.0F) { |
| 149 | throw std::runtime_error("VibeVoice warmbench cfg_scale must be non-negative"); |
| 150 | } |
| 151 | if (request.generation.temperature <= 0.0F) { |
| 152 | throw std::runtime_error("VibeVoice warmbench temperature must be positive"); |
| 153 | } |
| 154 | if (request.generation.top_k < 0) { |
| 155 | throw std::runtime_error("VibeVoice warmbench top_k must be non-negative"); |
| 156 | } |
| 157 | if (request.generation.top_p <= 0.0F || request.generation.top_p > 1.0F) { |
| 158 | throw std::runtime_error("VibeVoice warmbench top_p must be in (0, 1]"); |
| 159 | } |
| 160 | for (const auto & path : required_string_array(object, "voice_samples")) { |
| 161 | request.speakers.push_back(engine::models::vibevoice::VibeVoiceSpeakerPrompt{read_audio_buffer(path)}); |
| 162 | } |
| 163 | return request; |
| 164 | } |
no test coverage detected