| 250 | } |
| 251 | |
| 252 | std::vector<float> decoder_prefill_input( |
| 253 | const HeartMuLaBackboneHidden & last_hidden, |
| 254 | const HeartMuLaMergedEmbeddings & c0_embedding) { |
| 255 | if (last_hidden.dims <= 0 || c0_embedding.dims != last_hidden.dims || c0_embedding.steps != 1) { |
| 256 | throw std::runtime_error("HeartMuLa decoder prefill embedding shape mismatch"); |
| 257 | } |
| 258 | const int64_t batch = c0_embedding.batch_size; |
| 259 | std::vector<float> out(static_cast<size_t>(batch * 2 * last_hidden.dims), 0.0F); |
| 260 | for (int64_t b = 0; b < batch; ++b) { |
| 261 | const size_t hidden_src = static_cast<size_t>(b * last_hidden.dims); |
| 262 | const size_t c0_src = static_cast<size_t>(b * last_hidden.dims); |
| 263 | const size_t dst0 = static_cast<size_t>((b * 2) * last_hidden.dims); |
| 264 | const size_t dst1 = static_cast<size_t>((b * 2 + 1) * last_hidden.dims); |
| 265 | std::copy( |
| 266 | last_hidden.values.begin() + static_cast<std::ptrdiff_t>(hidden_src), |
| 267 | last_hidden.values.begin() + static_cast<std::ptrdiff_t>(hidden_src + last_hidden.dims), |
| 268 | out.begin() + static_cast<std::ptrdiff_t>(dst0)); |
| 269 | std::copy( |
| 270 | c0_embedding.values.begin() + static_cast<std::ptrdiff_t>(c0_src), |
| 271 | c0_embedding.values.begin() + static_cast<std::ptrdiff_t>(c0_src + last_hidden.dims), |
| 272 | out.begin() + static_cast<std::ptrdiff_t>(dst1)); |
| 273 | } |
| 274 | return out; |
| 275 | } |
| 276 | |
| 277 | std::vector<int32_t> generate_frame_from_backbone( |
| 278 | const HeartMuLaBackboneResult & backbone_result, |
no test coverage detected