Commit 8bd1122
Feature/voice proactive chat (Project-N-E-K-O#614)
* feat: voice mode proactive chat via pre-recorded audio injection
语音模式下通过预录音频触发 AI 主动搭话,绕过 Qwen realtime API 不支持
文本注入的限制。同时处理 idle timeout 断连问题。
- 实现 stream_proactive():1600B/chunk, 0.025s, 2x实时投递,VAD中断保护
- 前端移除 isRecording 阻断,语音模式走简化路径
- /api/proactive_chat 新增 voice mode 快速路径
- 识别 too long without operation 错误 + 6语言 i18n
- 10个预录音频文件(5语言 × vision/general)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: voice proactive 三项修正
1. 语音模式不用退避,固定间隔。连续5轮无回复则停止,用户说话重置计数
2. 英文 general 音频改为 "Hmm... hmm... hmm...",更长更容易触发 VAD
3. vision 模式:音频注入中间穿插 input_image_buffer.append,
缓存最新截图(_latest_image_b64),在 chunk 中间点注入
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: voice proactive 无回复上限 5→10 次(防忘关麦经费爆炸)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: enhance interaction handling with screen bounds update and optimized hover detection
- Added a method to update screen space bounding box for hover detection and mouse penetration checks in MMDCore.
- Improved mouse hover handling in MMDInteraction to reduce high-frequency hit tests, using cached screen bounds for cursor updates.
This change aims to enhance performance and user experience during interactions.
* Potential fix for pull request finding 'Unused import'
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
* fix: reviewer findings — voice proactive 路径隔离 + WAV校验 + Gemini兼容 + hover cursor
- deliver_text_proactively 恢复原逻辑(语音模式跳过),新增独立
trigger_voice_proactive_nudge() 专用于 voice chat proactive
- _load_proactive_audio 加 PCM16/mono/16kHz 格式校验
- has_vision 改用 _proactive_image_consumed 消费标记替代 magic string
- stream_proactive 加 Gemini 分支(send_realtime_input)
- generate_proactive_audio.py 空音频 fail-fast + WAV 格式校验
- mmd-interaction.js hover handler locked 时重置 cursor
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: voice proactive 间隔改为 turn-end 驱动 + vision 注入覆盖全后端
- 语音模式 proactive 定时器改为 AI turn end 后再调度,避免 AI 说话中被打断
- _proactive_image_consumed 只在 nudge 完整成功后标记,abort 不消费
- has_vision / can_inject_image 分离:非原生视觉后端选 vision 音频但不注入原图
- 截图注入补齐 GPT (conversation.item.create) 和 lanlan.app+free 分支
- _supports_native_image 限定 can_inject_image,step/lanlan.tech+free 走文字注释
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: update core model for Qwen-Omni API provider
- Changed core_model from "qwen3.5-omni-plus-realtime-2026-03-15" to "qwen3-omni-flash-realtime" for improved functionality.
* fix: stream_proactive 快照防并发误消费 + 非原生视觉后端注入文字描述
- snapshot_image_b64 快照:循环中用快照发送,consumed 标记前比较
共享值是否仍等于快照,避免 stream_image() 并发更新时误消费新帧
- 非原生视觉后端(step/lanlan.tech+free)在音频注入前先发送
_image_description 文字描述,让模型有视觉上下文
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Hongzhi Wen <cartabio.coder1@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>1 parent 76ba05c commit 8bd1122
31 files changed
Lines changed: 740 additions & 28 deletions
File tree
- config
- main_logic
- main_routers
- scripts
- static
- locales
- proactive_audio
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
654 | 654 | | |
655 | 655 | | |
656 | 656 | | |
657 | | - | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
658 | 667 | | |
659 | 668 | | |
660 | 669 | | |
| |||
1867 | 1876 | | |
1868 | 1877 | | |
1869 | 1878 | | |
| 1879 | + | |
| 1880 | + | |
| 1881 | + | |
| 1882 | + | |
| 1883 | + | |
| 1884 | + | |
| 1885 | + | |
| 1886 | + | |
| 1887 | + | |
| 1888 | + | |
| 1889 | + | |
| 1890 | + | |
| 1891 | + | |
| 1892 | + | |
| 1893 | + | |
| 1894 | + | |
| 1895 | + | |
| 1896 | + | |
| 1897 | + | |
| 1898 | + | |
| 1899 | + | |
| 1900 | + | |
| 1901 | + | |
| 1902 | + | |
| 1903 | + | |
| 1904 | + | |
| 1905 | + | |
1870 | 1906 | | |
1871 | 1907 | | |
1872 | 1908 | | |
| |||
0 commit comments