| 68 | return options; |
| 69 | } |
| 70 | |
| 71 | HeartMuLaGenerationOptions generation_options_from_request(const runtime::TaskRequest & request) { |
| 72 | HeartMuLaGenerationOptions options; |
| 73 | if (const auto value = runtime::parse_positive_finite_float_option(request.options, {"duration_sec"})) { |
| 74 | options.duration_seconds = *value; |
| 75 | } |
| 76 | if (const auto value = runtime::parse_positive_finite_float_option(request.options, {"temperature"})) { |
| 77 | options.temperature = *value; |
| 78 | } |
| 79 | options.top_k = runtime::parse_positive_i64_option(request.options, {"top_k"}, options.top_k); |
| 80 | if (const auto value = runtime::parse_positive_finite_float_option(request.options, {"guidance_scale"})) { |
| 81 | options.guidance_scale = *value; |
| 82 | } |
| 83 | if (const auto value = runtime::parse_positive_finite_float_option(request.options, {"codec_duration_sec"})) { |
| 84 | options.codec_duration = *value; |
| 85 | } |
| 86 | options.num_inference_steps = runtime::parse_positive_i64_option( |
| 87 | request.options, |
| 88 | {"num_inference_steps"}, |
| 89 | options.num_inference_steps); |
| 90 | if (const auto value = runtime::parse_positive_finite_float_option( |
| 91 | request.options, |
| 92 | {"codec_guidance_scale"})) { |
| 93 | options.codec_guidance_scale = *value; |
| 94 | } |
| 95 | if (const auto value = runtime::find_option(request.options, {"infinite_mode"})) { |
| 96 | options.infinite_mode = runtime::parse_bool_option(*value, "infinite_mode"); |
| 97 | } |
| 98 | if (const auto value = engine::text::parse_text_chunk_size_override(request.options)) { |
| 99 | options.text_chunk_size = *value; |
| 100 | } |
| 101 | options.infinite_chunk_audio_length_ms = runtime::parse_positive_i64_option( |
| 102 | request.options, |
| 103 | {"infinite_chunk_audio_duration_ms"}, |
| 104 | options.infinite_chunk_audio_length_ms); |
| 105 | return options; |
| 106 | } |
| 107 | |
| 108 | runtime::TaskRequest normalize_request_options(runtime::TaskRequest request) { |
| 109 | request.options = runtime::apply_option_v1_compatibility( |
| 110 | std::move(request.options), |
| 111 | { |
| 112 | {"duration_seconds", "duration_sec"}, |
| 113 | {"codec_duration", "codec_duration_sec"}, |
| 114 | {"infinite_chunk_audio_length_ms", "infinite_chunk_audio_duration_ms"}, |
| 115 | }, |
| 116 | "HeartMuLa", |
| 117 | "request"); |
| 118 | return request; |
| 119 | } |
| 120 | |
| 121 | std::unique_ptr<runtime::IVoiceTaskSession> create_heartmula_session( |
| 122 | const runtime::TaskSpec & task, |
| 123 | const runtime::SessionOptions & options, |
| 124 | std::shared_ptr<const HeartMuLaAssets> assets, |
| 125 | std::shared_ptr<const engine::model_spec::ModelContract> contract) { |
| 126 | return std::make_unique<HeartMuLaSession>( |
| 127 | task, |
no test coverage detected