mimo-mcp v0.1.4 Release Notes
本版以 ASR 语音能力的全面重做为核心:语音转写从"一直 404、从未真正工作"到真正可用,并新增长音频自动分段、本地离线说话人分离、字幕导出;同时大幅提升前端流式任务的稳健性(切走切回不再白跑),并完成一轮工程精简(死代码清理、公共模块抽取、文档对齐)。
✨ 新功能
语音转写终于真正可用,并扩展为三种模式
- 修复 ASR 端点:MiMo v2.5-asr 实际走 OpenAI 兼容的
/chat/completions(音频以 base64input_audiodata 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.py与tests/test_live.py。均为外部不可见的内部代码,行为不变。 - 后端抽取公共模块:新增
src/mimo_mcp/api/_media.py(合并 asr/vision 的 ffprobe 探针与 tts/voice_clone 的音频 DataURL 编码)、webui/backend/sse.py的sse_event统一 SSE 帧格式。逻辑等价,后端 7 项测试通过。 - 前端抽取公共模块:新增
lib/sse.ts(consumeSSE统一四处 SSE 流解析)、lib/history.ts(createHistory统一 localStorage 历史读写)、通用CopyButton组件、lib/utils.ts的formatClock;api.ts收敛约 186 行重复逻辑。纯重构,外观与交互不变。 - MCP 工具同步精简:
server.py的mimo.asr移除with_timestamps/prompt,只保留audio_path/audio_url/language,工具描述与 INSTRUCTIONS 同步更新为"返回纯文本"。
📖 文档
- 删除两份过程性文档
docs/api-research.md与docs/启动说明.md,有效结论分别并入 USAGE 附录「API 实测备注」(伪流式 / speed-style 实测无效 / format 矩阵 / 视频输入约束)和 README 启动章节(脚本→底层命令对照表、健康检查、停止方式)。 - README / USAGE / PRD 同步 ASR 真实现状:走
/chat/completions的input_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-onnx、soundfile。