快速结论:该问题在 macOS Safari 上使用日文输入法时触发,按下“确定”键(Enter)会提前提交未完成的查询。优先排查 ChatForm.svelte 与 ChatMessage.svelte 中 Enter 键处理逻辑,确认是否在 IME 组合状态下误触发了提交。
适用环境:llama.cpp b6500/b6700、macOS Safari 26.0.1、macOS 内置日文输入法、llama-server WebUI(SvelteKit)。服务端可为任意操作系统,问题位于前端。
最快修复方案:暂无官方确认的一步修复方案。但社区成员提供了一个已验证可用的临时方案:修改 tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte 与 ChatMessage.svelte 中的 Enter 键判断条件,加入 event.keyCode !== 229 检查。
注意事项:KeyboardEvent.keyCode 为已弃用 API,官方建议使用 isComposing 属性,但在 Safari 上 isComposing 无法正确工作。若采用 keyCode 方案需自己构建 WebUI,且不属于长期可持续解决方式。
问题场景
在 macOS Safari 浏览器中通过 llama.cpp 的 SvelteKit WebUI 使用日文输入法(IME)输入文字时,按下“确定”键(Enter)本应仅确认当前候选文字,但 WebUI 会将未完成的句子直接提交。此问题不影响服务端,纯属前端事件处理缺陷。
报错原文
Misc. bug: SvelteKit WebUI submits the unfinished query on IME word confirmation (macOS Safari)
原因分析
可能原因是 WebUI 的 ChatForm.svelte 与 ChatMessage.svelte 两个组件在监听 Enter 键时,未区分“IME 组合中”与“普通输入完成”两种状态。macOS Safari 在 IME 组合阶段按下 Enter 时,event.isComposing 可能返回 false(与 Chrome/Firefox 行为不同),导致 Enter 被误判为提交快捷键。Issue 讨论中确认 Safari 对 isComposing 支持不完整,需通过 event.keyCode === 229 识别 IME 状态。
环境排查
- 确认浏览器是否为 macOS Safari(已知 26.0.1 受影响)
- 确认操作系统是否为 macOS(测试环境为 macOS 15.7.1)
- 确认输入法是否为日文 IME(macOS 内置输入法已复现)
- 检查 llama.cpp 版本是否为 b6500 至 b6700 区间
- 本地构建 WebUI 时需安装 Node.js(测试环境为 v22.20.0)
解决步骤
- 修改
tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte第 99-101 行,将if (event.key === 'Enter' && !event.shiftKey)改为if (event.key === 'Enter' && !event.shiftKey && event.keyCode !== 229)。 - 同步修改
tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte第 109-111 行的handleEditKeydown函数,加入相同条件。 - 按照
tools/server/webui/README.md中的说明重新构建 WebUI,再重新构建 llama.cpp,使修改生效。 - 若不想修改代码,可等待官方 #16673 的修复方案(使用
isComposing),但需注意该方案在 Safari 上可能无效,因为 Safari 对isComposing支持不完整。
验证方法
重新构建后,在 macOS Safari 中打开 WebUI,使用日文输入法在“Ask anything…”输入框中输入文字,按“确定”键确认 IME 候选词时应不会触发提交;继续输入并正常按 Enter 提交时功能应保持正常。同时测试编辑历史消息时的 Enter 键行为,确认无副作用。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


