wengzh
4f6e9ec6b1
Merge pull request #3544 from xinnan-tech/py-hass-devices
...
Py hass devices
2026-11-05 16:37:11 +08:00
Sakura-RanChen
9f5f520576
fix: 修复ha读取异常
2026-11-05 15:36:04 +08:00
Bao1573
70f1a7bfd8
fix(hass): devices 写成列表时也能拼进提示词 ( #3541 )
...
config.yaml 示例和手机端智控台给的 devices 是列表,append_devices_to_prompt 却按字符串直接拼,每次连接都报 can only concatenate str (not "list") to str,设备清单进不了提示词,模型只能猜 entity_id。列表按每项一行拼,字符串原样用,其它当空。附测试。
2026-11-05 11:50:39 +08:00
wengzh
e61f5aee28
Merge pull request #3543 from xinnan-tech/py-tool-cache
...
fix: prevent tool description cache mutation (#3540 )
2026-11-05 10:41:46 +08:00
koala553
c59b29c723
fix: prevent tool description cache mutation ( #3540 )
2026-11-05 10:10:17 +08:00
wengzh
c8e60d1325
Merge pull request #3539 from xinnan-tech/py-Outcrawl
...
Py outcrawl
2026-11-04 11:38:20 +08:00
Sakura-RanChen
6589f7f481
调整为code判断
2026-11-04 11:26:20 +08:00
Nirupam Bhowmick
7d9f47b0d1
feat(web_search): 新增Outcrawl搜索源 ( #3538 )
2026-11-04 10:22:41 +08:00
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
shinjiyu and shinjiyu
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
Jacob and hrz
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