Hugging Face 的 `generate()` 函数存在一个 bug,当 `past_key_values` 是外部构建的 `DynamicCache` 时会导致输出不正确。此问题影响 SnapKV、H2O 和 KIVI 等 KV 缓存压缩方法,这些方法从预填充数据重建缓存。根本原因是未能传播位置上下文,导致 Qwen3-VL-8B 上的准确率下降 10.7 个百分点。
- 添加 `DynamicCache.from_kv_tensors()` 类方法,以正确内部状态安全地重建缓存。
- 在生成期间要求显式传入 `attention_mask` 和 `position_ids` 以恢复基线质量。
- 新方法通过可选参数 `num_hidden_layers` 预分配内部列表以保持向后兼容。
此修复确保 KV 压缩工作流通过正确处理序列长度和注意力掩码来产生可靠的输出。