llama.cpp b11828修改实时API:按已提交音频解码完成度触发完成信号
该版本把实时API的“完成”触发条件从流是否暂时无数据,改为按已提交音频对应的行号是否全部解码来决定;发布说明称旧做法会让后续追加的音频混入已提交条目。
llama.cpp发布b11828版本,其server组件的实时API改为在“已提交音频对应的行全部解码完成”之后才发送complete,替代此前以流暂时无数据来判断完成的计时做法。相关改动对应PR #30994,发布说明标注共同作者为Pascal。
完成信号不再依赖“流跑空”
发布说明描述旧逻辑的问题:完成由stream runs dry触发,而这是一个计时代理。由此产生的三种情况是:尾部排空期间追加的音频会泄漏进已提交条目;排空前的最后一次提交会把两个条目合并;连续提交会塌缩成一个。
新逻辑在刷新音频时记录结束行号,并按行号顺序完成提交。
- mtmd_audio_stream_flush() 记录本次刷新音频结束处的行数,接口为mtmd_audio_stream_get_n_rows_flushed;同时对照当前已产出的行数mtmd_audio_stream_get_n_rows。
- slot维护一个由这些结束行组成的FIFO。
- 每个提交要等到它结束行之前的所有行都解码完毕才被完成。
同批发布的平台构建
发布页面同时列出b11828的多平台预编译产物,覆盖macOS、iOS、Linux、Android和Windows,并包含CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL以及Snapdragon的CPU/Adreno GPU/Hexagon NPU等变体。发布说明中标注为DISABLED的项目包括macOS Apple Silicon的KleidiAI版本与openEuler构建。