pub fn absorb_q(
cfg: &Glm5NextDsaConfig,
q_b: &[f32],
kv_b: &[f32],
full_heads: usize,
) -> Result<Vec<f32>>Expand description
2026-09-25: q_absorb[h*kvl + c][k] = Σ_r kv_b[h*(nope+vd) + r][c] · q_b[h*nope + r][k]
over all full_heads heads, computed on the host.
q_b_proj has qk_head_dim rows per head (256 on GLM-5.3) and kv_b_proj has
qk_nope_head_dim + v_head_dim (512); the element-count checks refuse either tensor at
the other’s width. NoPE only: a nonzero qk_rope_head_dim is refused.