| 45 | throw std::runtime_error("--batch-merge-audio must be none or concat"); |
| 46 | } |
| 47 | |
| 48 | AppBatchResult run_offline_batch( |
| 49 | engine::runtime::IVoiceTaskSession & session, |
| 50 | engine::runtime::IOfflineVoiceTaskSession & offline, |
| 51 | const AppBatchRequest & batch, |
| 52 | AudioMergeMode audio_merge_mode, |
| 53 | const std::function<void(size_t, const AppRequestResult &)> & on_result) { |
| 54 | if (batch.requests.empty()) { |
| 55 | throw std::runtime_error("offline batch requires at least one request"); |
| 56 | } |
| 57 | using Clock = std::chrono::steady_clock; |
| 58 | const auto to_ms = [](Clock::duration d) { |
| 59 | return std::chrono::duration<double, std::milli>(d).count(); |
| 60 | }; |
| 61 | const auto session_start = Clock::now(); |
| 62 | |
| 63 | const auto prepare_start = Clock::now(); |
| 64 | session.prepare(engine::runtime::build_preparation_request(batch.requests.front().request)); |
| 65 | AppBatchResult out; |
| 66 | out.prepare_ms = to_ms(Clock::now() - prepare_start); |
| 67 | out.results.reserve(batch.requests.size()); |
| 68 | for (const auto & item : batch.requests) { |
| 69 | const auto run_start = Clock::now(); |
| 70 | auto result = offline.run(item.request); |
| 71 | const double wall_ms = to_ms(Clock::now() - run_start); |
| 72 | out.results.push_back(AppRequestResult{ |
| 73 | item.id, |
| 74 | std::move(result), |
| 75 | wall_ms, |
no test coverage detected