| 227 | return core::ensure_backend_addressable_layout(ctx, value); |
| 228 | } |
| 229 | |
| 230 | core::TensorValue zero_masked_query_rows( |
| 231 | core::ModuleBuildContext & ctx, |
| 232 | const core::TensorValue & input, |
| 233 | const core::TensorValue & query_mask) { |
| 234 | core::validate_shape( |
| 235 | query_mask, |
| 236 | core::TensorShape::from_dims({input.shape.dims[0], input.shape.dims[1], 1, 1}), |
| 237 | "query_mask"); |
| 238 | const auto mask = core::wrap_tensor(ggml_repeat(ctx.ggml, query_mask.tensor, input.tensor), input.shape, GGML_TYPE_F32); |
| 239 | return core::wrap_tensor(ggml_mul(ctx.ggml, input.tensor, mask.tensor), input.shape, GGML_TYPE_F32); |
| 240 | } |
| 241 | |
| 242 | ggml_type planner_phase2_activation_type(core::BackendType backend_type) { |
no test coverage detected