Commit Graph
3939 Commits
Author SHA1 Message Date
hrz 5b0de039c9 让 CI 真正跑起三类测试并修掉挡路的测试缺陷 (#3475)
* 让 CI 真正跑起三类测试并修掉挡路的测试缺陷

之前 CI 只跑了一小部分,Java 那边的测试被 pom 里的开关整个跳过了。
这条把它打开,并补上 MySQL、Redis 两个容器,Java、契约、Python 三类
测试都在 CI 里真跑起来。

另外修了两个挡路的地方:一条 Java 用例单跑会因为实体信息没注册而报错,
现在自己注册;Python 的假网络层把整个 httpx 类换掉了,第三方库拼请求
时报错,改成只换发请求那一步。

* 给 runner 补上 libopus,修掉音频用例报错

opuslib_next 是 ctypes 绑定,真正编解码靠系统里的 libopus。runner 上默认
没有,import 失败后测试里换上的是自己写的桩,桩里的编码器只有构造方法,
一调就报错。正式镜像里是装了这个库的,CI 少了这一步。

顺手把桩的报错改成一句人话,别再让人对着缺方法的报错猜根因。

* 本地没起库也能构建,CI 里集成测试不许跳过

三个要连 MySQL 和 Redis 的集成测试加了守卫:依赖连不上就整类跳过,日志写明缺什么,构建照样是绿的;CI 上依赖不通就直接失败。另外加了一个门禁检查脚本和 CI 步骤,盯住这三个类有没有真跑,守卫哪天手滑把它们全跳过了,CI 必须变红。README 里补了本地怎么起依赖、怎么只编译不跑测试。
2026-11-03 17:44:29 +08:00
wengzh 4e1405a6f6 Merge pull request #3537 from xinnan-tech/py-test-tool
Py test tool
2026-11-03 15:03:17 +08:00
Sakura-RanChen f9138e65b7 update: 使用专用线程池避免阻塞默认池 2026-11-03 10:43:53 +08:00
Bao1573 9b8a9b585d fix(tools): 服务端插件的同步函数放线程池,不阻塞事件循环 (#3528)
ServerPluginExecutor.execute 在事件循环上被 await,而 hass_state、天气等插件用 requests 同步阻塞,工具执行期间整个循环停转、正在发的音频节拍也停。同步函数改用 run_in_executor 放到线程池;async def 插件照常 await;传参规则不变。附测试。
2026-11-02 15:29:34 +08:00
欣南科技 92337881a7 Merge pull request #3531 from xinnan-tech/fix/readme-asr-bailian-lmstudio
Fix/readme asr bailian lmstudio
2026-11-01 07:38:49 +08:00
欣南科技 a93b71f9e7 Merge branch 'main' into fix/readme-asr-bailian-lmstudio 2026-11-01 07:38:36 +08:00
hrz 325f52469a 设备呼叫文档改对热词字段的位置 (#3509)
* 设备呼叫文档改对热词字段的位置

热词文件名称是语音识别供应器的字段,文档里写成配到语音合成上,用户照着在语音合成里找根本找不到;同一句 AEC 提示连写三遍,只留一条。

* 设备呼叫文档改对热词配置的供应器名称

把接口类型改成供应器,列出还有热词文件名称的两条模型,补上点确认保存和改完要重连设备。

* 设备呼叫文档里热词字段的说法改准

「这一项」读起来像供应器下拉的子项,实际是弹窗调用信息区域里独立的一个输入框,两处都改成照实说。

* Clarify AEC functionality requirement in guide

Added repeated instruction for enabling AEC functionality during firmware compilation.
2026-11-01 07:10:28 +08:00
hrz 3230a69c99 Merge pull request #3515 from shinjiyu/fix/config-provider-copy-accuracy
fix(config): 纠正供应器占位文案与 PaddleSpeech 协议说明
2026-11-01 06:56:22 +08:00
shinjiyu 1ac4c09946 fix(config): 按审核意见补齐占位文案与 PaddleSpeech 协议收敛
- AliLLM 占位改为「你的阿里云百炼API密钥」;ASR 段「语音合成」改为「语音识别」;XunfeiSparkLLM 占位改为 api_key
- PaddleSpeech:启动时校验 protocol;代码兜底 URL 与 config 对齐为本机;智控台新增 changeset 去掉 http 选项
2026-10-30 20:55:56 +08:00
wengzh 1a095d5bed Merge pull request #3523 from xinnan-tech/py-test-fix
Py test fix
2026-10-29 14:20:59 +08:00
Sakura-RanChen 01289b8fd4 仅保留mcp2.x行为 2026-10-29 14:17:38 +08:00
shinjiyuandshinjiyu ef2fcdbcb1 fix(server_mcp): read Tool.input_schema for mcp 2.3.0 (#3522)
mcp==2.3.0 Tool stores the JSON Schema on input_schema (alias
inputSchema). Accessing tool.inputSchema raises AttributeError and
aborts server_mcp init after a successful tools/list.

Use getattr fallback so function-calling conversion works.

Closes #3521

Co-authored-by: shinjiyu <shinjiyu@users.noreply.github.com>
2026-10-29 14:08:44 +08:00
hrz 942ac2fe12 通讯录没起名时不再取对方设备的名字 (#3473)
* 别把对方给设备起的名字抄进自己的通讯录

通讯录里没起名的时候,以前会跑去设备表查目标设备的名字。那是设备主人在智控台上自己起的,
直接抄进调用方的通讯录,等于把别人的昵称漏了出去。现在改成一律用 MAC 尾号称呼,
只有目标是自己那台设备时,才用自己设备表里的名字。补了单测,覆盖对方已起名、目标是自己、
显式起名、目标没登记这几种情况。

* 取自己的设备名改用不会撞行的查法

设备表里同一个 MAC 可能有两行只差大小写,一次只准取一条的查法撞上就抛异常,保存通讯录整个接口带崩。改成按归属查的那一种,按 id 取第一条。

补齐自己那台设备在设备表里没起名时退回尾号称呼的用例,另有几条用例的名字跟实际测的东西对不上,一并改掉。
2026-10-29 11:56:48 +08:00
wengzh 4dbed0ab1d Merge pull request #3520 from xinnan-tech/py-test-weather
fix: harden weather and news plugins (#3465)
2026-10-29 10:10:50 +08:00
Jacobandhrz 15d9b0fba1 fix: harden weather and news plugins (#3465)
* fix: harden weather and news plugins

* 修掉天气新闻插件的三处鲁棒性缺陷

城市查询不再写死国内范围,境外城市也能查到。实时天气和七天预报要都拿到才走 JSON,缺一个就整体退回网页路径,不产出残缺报告。网页抓取加上跟随跳转,旧链接的 302 也能拿到内容。城市查不到时不再让用户去核对地名,多数情况是密钥失效。报告补上气压和降水量。新闻 URL 拼接抽成纯函数,配了 23 项单测。

---------

Co-authored-by: hrz <1710360675@qq.com>
2026-10-29 09:46:01 +08:00
wengzh 8c5330f742 Merge pull request #3516 from xinnan-tech/py-test-think
Py test think
2026-10-28 16:38:12 +08:00
Sakura-RanChen 549261fdff PR 提供的keep 逃生门要求用户自行发现问题、了解该魔法值并手改 configJson,对普通用户不可达。
调整LLM thinking 域名禁用规则支持按模型名豁免(避免 MaaS glm-5.3 被注入参数后 400)
2026-10-28 16:18:58 +08:00
2cb0562ade feat(llm): 华为云 MaaS 思考强度实例级配置 + 管理台 select 字段类型 (#3446)
- openai provider: THINKING_DISABLED_DOMAINS 补 modelarts-maas.com
- openai provider: 实例配置支持可选 thinking 字段(off/low/medium/high/keep),
  实例值优先于域名默认表; keep=完全直通(适配强制思考且拒绝该参数的模型, 如 MaaS glm-5.3)
- manager-web: 模型配置表单渲染器支持 select 字段类型(el-select + field.options)
  (ModelEditDialog / AddModelDialog 两处渲染点与类型映射)

Co-authored-by: SecInsight <secinsight@users.noreply.github.com>
Co-authored-by: Sakura-RanChen <1908198662@qq.com>
2026-10-28 15:20:28 +08:00
shinjiyu ccc77799d9 fix(config): 纠正 AliLLM 占位文案与 PaddleSpeech 协议说明
- AliLLM 的 api_key 占位误写成 deepseek,照抄会把错误 key 填进百炼(#3495)
- PaddleSpeechTTS 实际只实现 websocket,去掉 config/报错里对 http 的承诺(#3503)
2026-10-28 06:02:21 +08:00
hrz d9c2e8c5d9 德语版README把MCP接入点改用Zugriffspunkt (#3511)
Endpunkt说的是终端点,这里是访问点,术语换过来跟英文版一致。
2026-10-27 21:18:24 +08:00
hrz 1a675e4d6b 部署文档改准:示例配置、镜像架构和日志样例 (#3507)
* 部署文档改准:示例配置、镜像架构和日志样例

最简配置示例里选中的模型改成仓库默认那个;镜像架构那句改成同时提供两种架构;升级步骤去掉单模块没有的 web 容器;compose 文件名、章节编号、配置路径和日志版本号一并改对。

* 部署文档的启动日志样例改成实际模块串

全局日志器拿不到各模块的名字,样例里那串缩写换成实际输出的样子。

* 部署文档的升级步骤编号改对并补全日志样例

升级那几步改成4开头,删掉单模块用不到的web镜像,样例补上视觉分析接口那行,分隔符也对齐实际输出。

* 部署文档里配置说明的路径改成仓库链接

按 docker 方式部署的人,xiaozhi-server 目录下并没有 config.yaml,这句路径换成能点开的仓库链接,两种方式都用得上。
2026-10-27 21:13:05 +08:00
hrz 40a7ed0391 三份译文里的术语跟本文件其它地方对齐 (#3506)
德语版把回答速度统一成反应速度,英语版和葡语版把 MCP 接入点统一成本文件其它地方用的说法。
2026-10-27 21:10:55 +08:00
hrz 62e316f298 把 README 的错字修正和品牌名统一带到 main (#3504)
* 修中文 README 的四处错字并统一品牌名写法

中文 README 自己有四处错:括号不配对、该写客户端的地方写成了客户、提示语用逗号收尾、OpenAI 写成了小写。葡语版和越南语版跟着源文一起小写的几处也改了。

* 把中文源的括号和越南语版的句号改对

中文源文 Memory 那行第 3 格还是全角括号,改成半角,
跟另外五版一样。越南语版提示语那行还是逗号收尾,改成句号。
2026-10-27 21:09:57 +08:00
hrz 76cef92cb2 修正性能测试和声纹识别两份文档里跟代码对不上的十二处 (#3502)
* 修正两份操作文档里跟代码对不上的地方

性能测试那份把配置路径写错、没提要先装依赖,步骤里少了非流式语音合成,流式语音合成要配哪些供应器也没写;声纹识别那份的重启命令指向两个不同的编排文件,有两句话连写三遍,编号也乱了,示例漏了相似度阈值。逐条改到跟代码一致。

* 把性能测试文档的说明改得跟代码一致

供应器表里两家的写法与代码相反,改成如实描述;步骤清单补回流式语音识别;
示例里的视觉模型段改成能跑通的形态;声纹文档两个重复的标题改掉一个。

* 性能测试文档的说法跟Linkerai跳过行为对齐

它没配就整项跳过,不再算进报错后跳过那一类。与#3510的行为对齐。

* 性能测试文档改对缺供应器时的记法

不是跳过,是报错后记成失败,结果表里多一行。带守卫的那几家才是整项跳过。

* 强调易错处
2026-10-27 21:09:09 +08:00
hrz 826c25d3e5 修正 PaddleSpeech 部署文档里对不上代码的四处 (#3501)
* 修正 PaddleSpeech 部署文档里对不上的地方

示例配置里写了 provider 根本不读的那项采样率,还说 http 协议能自动选,其实只实现了 websocket;代码那一节是空的;启动命令没说在哪个目录跑,配置文件的路径只给了 Windows 写法。逐条改到跟代码一致。

* 补上 PaddleSpeech 部署文档的配置目录和环境说明

配置文件那节改成新建,写明 data 目录被 gitignore 忽略,要先建出来。
数字人页面的启动命令改成从仓库根目录算,另开一个终端。
代码块围栏换成 bash,另补一段说明小智服务用哪个 Python 环境,
以及数字人页面那套依赖在哪。

* PaddleSpeech 部署文档修四处会照抄失败的地方

启动命令的围栏改成 bash;建 data 目录那条标明在仓库根目录执行;启动服务那段不再重复 cd;数字人那节补一句 numpy 的依赖来自哪两个文件。

* 修正conda环境名
2026-10-27 21:05:07 +08:00
hrz f1965167cc 性能测试跳过未配置的Linkerai语音合成 (#3510)
配置里没有这个供应器时整项跳过,不再报一条测试失败。
2026-10-27 15:35:38 +08:00
wengzh 6c352e5978 Merge pull request #3436 from xinnan-tech/perf/hello-handshake-fast
hello 握手首屏响应从 4s 降到 200ms
2026-10-27 14:34:13 +08:00
Sakura-RanChen 032f6f1582 fix: 修复唤醒流程错误阻塞事件接收循环 2026-10-27 10:36:35 +08:00
hrz a377d89dcd 补齐德语版平台表里漏掉的四个供应器 (#3500)
德语版把火山和阿里拆得比中文细,拆的时候漏了同族的另一个:LLM 少火山网关,TTS 少火山网关和百炼,ASR 少豆包流式 V2。补上,名字按德语版自己的写法。
2026-10-26 22:47:47 +08:00
hrz d35b9f8b00 修中文 README 的四处错字并统一品牌名写法 (#3498)
中文 README 自己有四处错:括号不配对、该写客户端的地方写成了客户、提示语用逗号收尾、OpenAI 写成了小写。葡语版和越南语版跟着源文一起小写的几处也改了。
2026-10-26 22:30:14 +08:00
hrz d687121e99 把四份 README 里图片的说明文字译成本地语言 (#3497)
en、de、pt_BR、vi 四份里 15 条演示图的说明文字和架构图那句还是中文,这轮全部译成本地语言,越南语版的校徽说明、葡语版声纹那句也一起改掉。图片路径一个字没动。
2026-10-26 22:29:27 +08:00
hrz badf6fe3d0 按中文源文补齐四份 README 的描述和术语 (#3494)
横向扫尾清单里的几处:star-history 图表代码还是旧的,换成中文那版;
德语版开头少了知识库这一项;英德葡三版的意图识别行丢了外挂大模型和
自主函数调用这两层说法;越南语版首屏把声纹写成语音识别,
部署表的特点列和版本比较基准也写窄了。
2026-10-26 22:28:49 +08:00
hrz adb4a15f2d 同步西语版 README 与中文源文的平台清单和说明 (#3492)
* 同步西语版 README 与中文源文的平台清单和说明

西语版落后中文源文一整轮:平台表少了 CustomTTS、SherpaParaformerASR、VoskASR 这些,
旧的 GizwitsTTS、ACGNTTS 还在,Index-TTS、PaddleSpeech 的键名也旧了。
部署表里那组核数和内存全库查不到出处,按中文删掉;界面语种、插件加载、
测试工具和声纹说明那段一并对齐。中文源文和其它四个语言版没动。

* 把音频交互测试工具的用法改成指向 README

原来在用法里内嵌装依赖的命令,句子太长。改成指向 main/digital-human 的 README,
依赖怎么装、模型从哪来,那份 README 里都写了。

* 补上意图识别行里外挂的大模型这一层

中文源文写的是支持外挂的大模型意图识别,西语版只写了模型本身,
把可以外挂这层意思漏了。补上。
2026-10-26 22:27:32 +08:00
hrz a5f9a782d6 补齐五份 README 的供应器清单和音频测试工具用法 (#3491)
* 补上阿里百炼和 LM Studio 并统一越南语品牌写法

ASR 那行中文只写阿里云,配置里阿里系有三条,另外四份也按各自写法补上百炼。LM Studio 走的是 openai 接口,仓里没有独立的供应器,所以并进 openai 那一行,免费平台那列不动。越南语版三处 iFlytek 统一成官方写法 iFLYTEK。

* 补上音频交互测试工具的前置步骤

digital-human 的说明里要求先装 wakeword 依赖再启动,README 里原来只写了启动命令,照着做会缺依赖。五个语言版的用法都补上这一步。

* 把性能测试脚本的提示写清文档在仓库根

脚本是在 main/xiaozhi-server 下执行的,那儿没有 docs 目录,文档在仓库根,原来的提示照字面找不到文件。

* 统一德语版百炼流式语音识别的写法

同一份文件里 LLM 那行写的是 Alibaba Bailian,语音识别这行写成了 Aliyun Bailian,
同一家供应商两种拼法。改成跟 LLM 那行一样。

* 把音频交互测试工具的用法改成指向 README

原来在用法里内嵌装依赖的命令,句子太长。改成指向 main/digital-human 的 README,
依赖怎么装、模型从哪来,那份 README 里都写了。
2026-10-26 22:26:15 +08:00
hrz 7ab4cc5c90 把音频交互测试工具的用法改成指向 README
原来在用法里内嵌装依赖的命令,句子太长。改成指向 main/digital-human 的 README,
依赖怎么装、模型从哪来,那份 README 里都写了。
2026-10-26 21:13:51 +08:00
hrz 9c4790c8d0 统一德语版百炼流式语音识别的写法
同一份文件里 LLM 那行写的是 Alibaba Bailian,语音识别这行写成了 Aliyun Bailian,
同一家供应商两种拼法。改成跟 LLM 那行一样。
2026-10-26 19:00:26 +08:00
hrz 4fd51c6f7f 把性能测试脚本的提示写清文档在仓库根
脚本是在 main/xiaozhi-server 下执行的,那儿没有 docs 目录,文档在仓库根,原来的提示照字面找不到文件。
2026-10-26 18:46:47 +08:00
hrz e7e0a886bf 补上音频交互测试工具的前置步骤
digital-human 的说明里要求先装 wakeword 依赖再启动,README 里原来只写了启动命令,照着做会缺依赖。五个语言版的用法都补上这一步。
2026-10-26 18:46:40 +08:00
hrz 3ff080bb0d 补上阿里百炼和 LM Studio 并统一越南语品牌写法
ASR 那行中文只写阿里云,配置里阿里系有三条,另外四份也按各自写法补上百炼。LM Studio 走的是 openai 接口,仓里没有独立的供应器,所以并进 openai 那一行,免费平台那列不动。越南语版三处 iFlytek 统一成官方写法 iFLYTEK。
2026-10-26 18:46:37 +08:00
hrz ca8ff121d4 按代码实际情况修正五份 README 的平台清单和说明 (#3489)
* 修正 README 里过时的平台清单和漏掉的供应器

删掉服务端已经不存在的 GizwitsTTS、ACGNTTS、灵犀流式TTS,补上漏写的 CustomTTS、GroqASR、Qwen3ASRFlash 等。声纹一栏改成真正的 voiceprint-api 服务。管理后台的界面语种、插件的加载时机、部署表里的配置要求、音频测试工具的前置步骤,都按代码里的实际情况改写。

* 改掉性能测试脚本里写错的文档路径

脚本启动时提示的 doc/performance_testerer.md 找不到,真实文件是 docs/performance_tester.md。

* 把离线模型补进免费平台列并撤掉音频工具那处改动

两个离线模型走的是本机,不消耗付费接口,和列里已有的本地模型一样,所以补进免费平台列。音频交互测试工具要装 wakeword 依赖这一条,和另一处改同一张表的改动挨着,两边同时开必冲突,先从这次改动里拿掉,等那边合上再单独提。
2026-10-26 18:37:15 +08:00
hrz 9f63b255fb 修好四个语言版 README 里的图片路径 (#3488)
这四个文件在 docs/readme 目录下,图片却写成 docs/images/demoN.png,浏览器按 docs/readme 去找,全是 404。改成 ../images/demoN.png,跟西语版和其他图片的写法一致。四个文件各 15 处,只动路径,别的没碰。
2026-10-26 18:36:39 +08:00
hrz 9d34360a2c 把 README 里核心模块那一行改成不写数量 (#3487)
* 把 README 里核心模块的数量改成四个

模型响应测试工具那一行列了 ASR、LLM、VLLM、TTS 四个模块,却写着三个核心模块。中文源文和 en、de、pt_BR、vi 四个语言版统一改成四个,每份只动表示数量的那个词。

* 把核心模块那一行改成不写数量

先改成四个之后发现还是会错:performance_tester 目录下实际有六个脚本,脚本数还会随供应器增加,写死数量早晚再错一次。最终去掉数量词,改成「等核心模块」,五个语言版同步。
2026-10-26 18:35:27 +08:00
hrz 2f18e2ee0a Merge pull request #3486 from beeman/beeman/translate-readme
Add Spanish translation of README
2026-10-26 18:34:51 +08:00
hrz fd05dd5159 把西语 README 里核心模块的数量改成四个
模型响应测试工具那一行列了 ASR、LLM、VLLM、TTS 四个模块,却写着三个核心模块,这里改成四个。只动表示数量的那个词,句子的其余部分不动。
2026-10-26 17:38:20 +08:00
Sakura-RanChen 82d2acc78c - audio_to_data 缓存键加入文件 mtime:regen 覆写 wav 后旧缓存自动失效,
并在 regen 后预编码新文件,唤醒回复不再播旧音频且延迟收益保留
- enhanced_prompt 缓存键补上 emoji_enabled 与 prompt 哈希:
  同设备不同客户端(ESP32/digital-human)不再互相污染,改配置即时生效
- 删除 initialize 响应后的 tools/list 兜底补发:id=2 同连接复用
  违反 JSON-RPC 与设备端严格递增约定(#3461/#3485),且兜不住任何场景
2026-10-26 17:09:09 +08:00
Sakura-RanChen 77be288c8e Merge branch 'perf/hello-handshake-fast' of https://github.com/xinnan-tech/xiaozhi-esp32-server into perf/hello-handshake-fast
# Conflicts:
#	main/xiaozhi-server/requirements.txt
2026-10-26 17:04:54 +08:00
hrz ba22f5b765 把西语 README 里重复的一句改回中文
上一版把研发团队那一行的中文也译成了西语,于是两行说的是同一件事。仓库里另外四个语言版本都是本地语言一行加中文原句一行,这里改回中文行,跟它们保持一致,也去掉了重复。
2026-10-26 16:45:22 +08:00
hrz 0492dc5924 del:移除测试项 2026-10-26 16:36:46 +08:00
hrz ffd4ab74d7 修正西语 README 的术语和措辞
按评审意见改掉两处必改:HomeAssistant 不再拆成两个词,警告里的担保对象改回第三方服务商。另外统一了配置方案的说法,补上收费和大模型这两层意思,把 RAG 改成 Rag,漏译的那行中文也译了。只动这一个文件。
2026-10-26 16:26:44 +08:00
wengzh f0ebebfa85 Merge pull request #3485 from xinnan-tech/py-test-tool
Py test tool
2026-10-26 15:15:04 +08:00