Skip to content

v0.1.4 — ASR 语音能力全面重做 + 流式稳健 + 工程精简

Latest

Choose a tag to compare

@Frank-ay Frank-ay released this 28 Jun 12:13

mimo-mcp v0.1.4 Release Notes

本版以 ASR 语音能力的全面重做为核心:语音转写从"一直 404、从未真正工作"到真正可用,并新增长音频自动分段、本地离线说话人分离、字幕导出;同时大幅提升前端流式任务的稳健性(切走切回不再白跑),并完成一轮工程精简(死代码清理、公共模块抽取、文档对齐)。


✨ 新功能

语音转写终于真正可用,并扩展为三种模式

  • 修复 ASR 端点:MiMo v2.5-asr 实际走 OpenAI 兼容的 /chat/completions(音频以 base64 input_audio data URL 传入),而非旧的 /audio/transcriptions——后者在 MiMo 网关一直返回 404、从未真正工作过。重写后转写文本取自 choices[0].message.content怎么用:Web 控制台「语音转写」页上传 WAV/MP3 即可拿到识别结果。
  • 长音频分段转写:针对会议、播客等长录音,新增 transcribe_chunked,用 ffmpeg 把音频统一切成 16kHz mono 的多段(每段时长 30–240 秒可调,默认 120s),逐段识别再合并文本,单段失败不中断整体。后端 POST /api/asr/chunked 以 SSE 流式返回 plan/segment/summary/done怎么用:选中超约 7MB 的音频时,前端会自动从「单段」建议切到「长音频分段」模式,实时展示每段进度。
  • 本地离线说话人分离(谁在何时说):新增 api/diarization.py,用 sherpa-onnx 在本地离线分离说话人(pyannote segmentation-3.0 分段 + 3dspeaker 中文声纹),时间轴交给本地推断,转写仍由 MiMo 逐段完成。支持自动聚类推断人数或手动指定;diarization 跑在线程池避免阻塞事件循环。结果按说话人着色标注并带时间戳。怎么用:先执行 scripts/download_diarization_models.sh 下载模型,新增依赖 sherpa-onnx、soundfile;前端切到「说话人分离」模式即可。

转写结果一键导出 txt / SRT / JSON

  • 说话人分离结果可导出为 .txt(带「发言人 N + 时间区间」前缀)、.srt(标准字幕时间码 + 说话人标签)、.json(num_speakers/duration/完整 segments)。单段与长音频合并结果支持复制与保存为 .txt。导出在浏览器端用 Blob 生成。

流式任务全局化:切走再切回,进度原样恢复

  • 把 ASR 分段/说话人分离、TTS 批量、Vision 长视频分段这些"边跑边出结果"的任务,从页面组件提到模块级全局 store(taskStore + asr/tts/vision store)。切换左侧导航时任务继续后台运行,切回时实时进度与已出结果完整恢复,不再"一切走就白跑"。

TTS 新增 v2.5 导演模式

  • 文字转语音页补齐 v2.5 的 instructions(导演模式),可用自然语言指令控制语气、情绪、语速、方言等,取代已废弃的 speed/style。单段合成完成会自动播放,并用 playToken 守卫——只在真正合成完成时播一次,切回页面重新挂载不会误重播。

对话沙盒补齐采样参数与思维链

  • Chat 沙盒新增 max_tokens 输入与可折叠的高级采样参数;可展开查看 thinking 模型的思考过程(reasoning_content)并显示字数;底部显示本次 token 用量(入/出/思考)。当预算全用在思考、正文为空时给出明确提示,引导调大 max_tokens 重试。

音色库试听 / 视觉理解选模型 / 音色设计自动润色

  • 音色库页给设计与克隆音色加了内嵌试听播放器(克隆样本仅在创建成功后渲染,避免 404)。
  • 视觉理解页新增模型下拉选择(分段分析固定走 vision+v2.5-pro 综合,不可选)。
  • 音色设计页的试听文本可选「自动润色」——由模型按音色生成贴合文本,无需手填。

🐛 修复

  • 切走再切回后流式内容不再追加:全局 store 订阅从 useSyncExternalStore 改为经典 useState+useEffect,组件重新挂载时立即同步一次,捕获切走期间累积的更新。修复前切回正在跑的流式任务会"像卡住、新分段不再渲染",修复后追加正常。
  • 快速重复提交不再串结果:各 store 引入 taskSeq 任务代号,旧任务被取代后其迟到的回调/then/catch/finally 用 seq 守卫丢弃,避免把已取消任务的 AbortError 或旧结果写回、覆盖新任务状态。
  • ASR 能力边界与 MIME 规范化:模型只产出纯文本,移除了并不被支持的分段时间戳与 prompt 引导;language 收敛为 auto/zh/en(方言靠 auto 自动检测并自动加标点);MIME 变体(audio/x-wav、audio/wave、audio/mp3 等)统一映射,避免服务端误判 .wav 为 audio/x-wav 而拒收。

♻️ 重构与清理

  • 移除失效的 TTS speed 参数:实测确认 MiMo v2.5 不支持 speed(设置后效果反向、不生效),已从 TTSRequest 模型与 mimo_tts 工具签名中彻底移除。想控制语气/风格请改用 instructions(v2.5 导演模式)。
  • 清理死代码与一次性脚本:删除 voice_clone/voice_design 的 stub_record 占位分支、client.chat_stream 流式残桩、storage.save_session 及对应 sessions 表(持久化层从三张表收敛为 voices/audit_log);删除一次性脚本 scripts/debug_auth.pytests/test_live.py。均为外部不可见的内部代码,行为不变。
  • 后端抽取公共模块:新增 src/mimo_mcp/api/_media.py(合并 asr/vision 的 ffprobe 探针与 tts/voice_clone 的音频 DataURL 编码)、webui/backend/sse.pysse_event 统一 SSE 帧格式。逻辑等价,后端 7 项测试通过。
  • 前端抽取公共模块:新增 lib/sse.ts(consumeSSE 统一四处 SSE 流解析)、lib/history.ts(createHistory 统一 localStorage 历史读写)、通用 CopyButton 组件、lib/utils.tsformatClock;api.ts 收敛约 186 行重复逻辑。纯重构,外观与交互不变。
  • MCP 工具同步精简:server.pymimo.asr 移除 with_timestamps/prompt,只保留 audio_path/audio_url/language,工具描述与 INSTRUCTIONS 同步更新为"返回纯文本"。

📖 文档

  • 删除两份过程性文档 docs/api-research.mddocs/启动说明.md,有效结论分别并入 USAGE 附录「API 实测备注」(伪流式 / speed-style 实测无效 / format 矩阵 / 视频输入约束)和 README 启动章节(脚本→底层命令对照表、健康检查、停止方式)。
  • README / USAGE / PRD 同步 ASR 真实现状:走 /chat/completionsinput_audio(base64)、language 支持 auto/zh/en、返回纯文本、长音频自动分段、可选 sherpa-onnx 离线说话人分离、支持导出 txt/SRT/JSON。PRD 顶部新增立项基线声明,提示以代码与 USAGE 为准。

⬆️ 升级说明

版本号 0.1.3 → 0.1.4,无破坏性 API 变更(仅移除了实测无效、从未生效的 TTS speed 参数;如曾传入该字段,改用 instructions 自然语言指令即可)。说话人分离为可选能力,使用前请先运行 scripts/download_diarization_models.sh 并安装新增依赖 sherpa-onnxsoundfile