llama.cpp服务器新增实时转写API,WebSocket握手纳入API key校验
llama.cpp发布b11780版本,其server组件加入实时转写API。提交说明称,新接口按GA Realtime规范定义会话结构,并修补了实时槽位占用、会话创建时序和WebSocket鉴权等问题。
llama.cpp发布b11780版本,server组件新增实时转写API(PR #30636)。发布说明同时提供macOS、Linux、Windows、Android等平台的多份预编译包。
实时转写会话按GA规范定义
提交说明称session对象遵循GA Realtime schema:type为transcription,输入格式、转写模型、轮次检测和噪声降低放在audio.input下。速率保持为模型采样率,提交说明写明这是客户端“目前”必须发送的速率。
- 该PR描述中先加入实时转写API,随后删除了transcription_sessions。
- 文档随此次改动一并加入。
WebSocket鉴权与会话生命周期修复
提交说明称,API key中间件现在能在WebSocket握手阶段拦截请求:httplib在升级前执行预路由处理器,因此鉴权失败会像其他路由一样返回 401。这一拦截覆盖router proxy,其子进程不带key运行;接受的key形式与HTTP相同,包括Bearer、原始key和X-Api-Key。
提交说明还记录了几处时序与槽位问题。等待音频的实时槽位处于GENERATING但没有内容可解码,原先会落入prompt循环并占用slot_batched,导致更高槽位上的请求因任务类型无法can_batch_with而在整个会话中饿死。提交说明称实时槽位没有prompt,循环只设置一次并始终跳过。
- 音频流原在prompt循环中创建,会跳过无法与正在生成槽位批处理的槽位;session.created又在任务提交前发出,导致早期追加失败、读取端退出,socket保持打开且槽位被占至HTTP超时。
- 现在槽位在启动时建立自己的流,并用begin结果发出信号;session.created等待该信号;读取端停止会关闭socket,会话随之结束。
input_audio_buffer.committed的条目命名
提交说明称,按Realtime规范,committed事件的item_id是由已提交音频生成的条目,previous_item_id是在它之前提交的条目,首个为null。committed现在先于补全该条目的转为文字事件发出,两者连同条目切换在同一把锁下发出,避免增量事件落在中间。