llama.cpp b11828修改实时API:按已提交音频解码完成度触发完成信号
该版本把实时API的“完成”触发条件从流是否暂时无数据,改为按已提交音频对应的行号是否全部解码来决定;发布说明称旧做法会让后续追加的音频混入已提交条目。
AI解读:llama.cpp发布b11828,主要变更是server的realtime API:在每个提交音频的末尾行全部解码后再发送complete。
发布说明称,旧实现以“流暂时没有数据”作为完成的计时代理,会产生三类问题:尾部排空时追加的音频泄漏进已提交条目、排空前的最后一次提交与前一提交合并、连续提交被合并成一个。
新做法由mtmd_audio_stream_flush() 记录本次刷新音频结束处的行数(mtmd_audio_stream_get_n_rows_flushed),同时对照已产出的行数(mtmd_audio_stream_get_n_rows);slot维护这些结束行的FIFO,逐行解码到该行后才完成对应提交。
该PR编号为 #30994,发布说明标注共同作者为Pascal;改动范围限于server实时API的提交完成判定。
同一发布页列出macOS、Linux、Windows、Android等平台的预编译包,其中macOS Apple Silicon的KleidiAI版本和openEuler相关构建标注为DISABLED。
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构建。