Text-to-Speech
Transformers
ONNX
GGUF
Chinese
English
voice-dialogue
speech-recognition
large-language-model
asr
tts
llm
chinese
english
real-time
conversational
Instructions to use MoYoYoTech/VoiceDialogue with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use MoYoYoTech/VoiceDialogue with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="MoYoYoTech/VoiceDialogue")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("MoYoYoTech/VoiceDialogue", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use MoYoYoTech/VoiceDialogue with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: llama cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: llama cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: ./llama-cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf MoYoYoTech/VoiceDialogue:Q6_K # Run inference directly in the terminal: ./build/bin/llama-cli -hf MoYoYoTech/VoiceDialogue:Q6_K
Use Docker
docker model run hf.co/MoYoYoTech/VoiceDialogue:Q6_K
- LM Studio
- Jan
- Ollama
How to use MoYoYoTech/VoiceDialogue with Ollama:
ollama run hf.co/MoYoYoTech/VoiceDialogue:Q6_K
- Unsloth Desktop
- Pi
How to use MoYoYoTech/VoiceDialogue with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "MoYoYoTech/VoiceDialogue:Q6_K" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use MoYoYoTech/VoiceDialogue with Docker Model Runner:
docker model run hf.co/MoYoYoTech/VoiceDialogue:Q6_K
- Lemonade
How to use MoYoYoTech/VoiceDialogue with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull MoYoYoTech/VoiceDialogue:Q6_K
Run and chat with the model
lemonade run user.VoiceDialogue-Q6_K
List all available models
lemonade list
- Hermes Agent
How to use MoYoYoTech/VoiceDialogue with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default MoYoYoTech/VoiceDialogue:Q6_K
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use MoYoYoTech/VoiceDialogue with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf MoYoYoTech/VoiceDialogue:Q6_K
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "MoYoYoTech/VoiceDialogue:Q6_K" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Commit History
-
Bundle Qwen3-ASR weights in packaged app; slim PyInstaller assets
hzeng412 +1: Claude Fable 5- qwen.py resolves model from env var > bundled assets dir > HF download - PyInstaller hook: include assets/models/asr/qwen3-asr-1.7b, exclude legacy funasr/whisper models and superseded TTS .bin weights (weights are not committed; copy to assets/models/asr/qwen3-asr-1.7b before packaging) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>2e4bd5d
-
ASR: use auto language detection to reject non-speech (fixes hallucination)
hzeng412 +1: Claude Fable 5Forcing a language makes Qwen3-ASR output transcription text unconditionally, so silence/noise segments that slip through VAD produce hallucinated words (FunASR/Whisper do this on every such segment). In auto mode the model returns an empty string for non-speech, which the pipeline already drops. Verified: silence, low and medium noise -> '' ; zh/en speech unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>21dbad4
-
Make Qwen3-ASR the default on main; bump to 1.2.0
hzeng412 +1: Claude Fable 5- pyproject/uv.lock: add qwen-asr, transformers 4.57.6, fastapi 0.136.3 (torch stays 2.3.1) so a fresh clone + uv sync just works - TTS weights: auto-convert .bin -> safetensors on first launch (required by transformers >= 4.56 on torch < 2.6) - ASR manager falls back to funasr/whisper if qwen-asr is unavailable - README: Qwen3-ASR description, first-launch download note, v1.2.0 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>3c70498 -
Add audio output device (speaker) selection
hzeng412 +1: Claude Fable 5- devices.py: enumerate output devices, default lookup, validation - player.py: PyAudio playback path for an explicit output device with sample-rate fallback (soxr resample); default device keeps playsound - AudioPlayerService reads the saved output index per sentence, so a settings change applies to the next utterance without restart - API: /system/audio-devices now includes output devices; POST /system/audio-output-device persists immediately; /system/start accepts output_device_index - UI: speaker select in settings (main tab), persisted in store, sent on start Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>a3bf559 -
Show the active ASR engine in the UI
hzeng412 +1: Claude Fable 5- New GET /api/v1/system/asr-engine returns language mappings + display name - Welcome page: glass chip left of the settings button with the engine name - About tab: ASR model line and repo links now reflect the running engine (Qwen3-ASR-1.7B vs FunASR Paraformer + Whisper medium) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>c3f5082 -
Fix websocket route registration for starlette >= 1.0
hzeng412 +1: Claude Fable 5add_websocket_route was removed; the ws APIRouter already declares its full path, so include_router is the correct registration. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>a17b420 -
ASR: add Qwen3-ASR engine, default zh/en to it on this branch
hzeng412 +1: Claude Fable 5- New QwenASRClient (Qwen/Qwen3-ASR-1.7B via qwen-asr, transformers backend, MPS bf16) - Language mapping zh/en -> qwen; VOICE_DIALOGUE_ASR=legacy restores funasr/whisper - ASRService now passes session language to transcribe() Requires: uv pip install qwen-asr (upgrades transformers to 4.57) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>417ffa1
-
Add external mic array support, UI i18n, glass settings redesign, and fixes
hzeng412 +1: Claude Opus 4.8 (1M context)Backend: - Audio: input-device selection + multichannel downmix/resample to 16k mono (devices.py, pyaudio_capture.py); facade routes default-device to native macOS AEC, external device to PyAudio (capture/__init__.py) - API: GET /system/audio-devices, input_device_index in /system/start with persistence (audio_config.py); default system/ASR language set to Chinese (lifespan.py) - CLI: --input-device and --list-audio-devices Frontend: - vue-i18n setup (en/zh), default UI + ASR language Chinese - Unified tabbed Settings dialog (Main/Language/Prompt) replacing scattered modals; fixed-height tabs; mic + interface/recognition language icons - Liquid-glass styling (frosted modal, glass buttons, smooth ant-fade open with backdrop-blur background) - Wider caption area; unified bottom action-button height across Welcome and Home Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>afd6c89
-
refactor(core): Architecturally decouple Audio, ASR, and TTS modules
liumaolinThis major refactoring decouples core functionalities from the services layer, establishing clearer architectural boundaries and improving modularity. The changes adhere to the principles of Separation of Concerns and single-responsibility, making the system more maintainable and extensible. Key changes include: 1. **Decoupled Audio Subsystem (Strategy Pattern)**: - The monolithic `AudioCapture` class has been split into multiple, single-responsibility components within the `audio/` directory. - `base_capture.py` introduces an abstract base class for all capture strategies. - `pyaudio_capture.py` and `aec_capture.py` provide concrete implementations for standard and echo-cancelled audio capture. - The main `capture.py` now acts as a Facade, selecting the appropriate capture strategy at runtime, hiding implementation details from the rest of the application. 2. **Introduced PlayerService to Separate Concerns**: - Resolved a reverse dependency where `audio/player…60f8238
-
简化LLM模型路径管理。
liumaolin2baeba2
-
为LLMResponseGenerator类添加TaskStatusMixin混入,以增强任务有效性检查功能,确保在生成回答时任务状态的有效性。
liumaolind205383
-
更新音频任务处理逻辑,使用模型副本替代原始任务对象,以确保数据一致性和完整性。
liumaolin2c7e742 -
重构处理LLM生成chunk内容的方法,以提高文本生成的准确性。
liumaoline3d17e2 -
去除对 LLM 输出的处理
liumaolin08fc60d
-
更新LLM模型参数,调整top_p值为0.8,并添加max_tokens参数,设置为32768。
liumaolinc531bfc -
更新用户配置文件,修复logger导入路径以确保正确加载日志记录功能。
liumaolinbbf79f2
-
添加获取TTS模型参考音频的API路由,支持通过模型ID获取音频文件。
liumaolin226effc
-
更新API文档
liumaolin5258538 -
缓存user_prompts以提高性能
liumaolind12af4f -
调整prompt的逻辑,确保展示的提示词中不包含/no_think指令
liumaolin22a06c4 -
添加设置相关的API路由
liumaolin- 支持用户自定义提示词的获取、更新和重置功能 - 同时更新应用数据存储路径的获取逻辑。15ab478 -
调整LLM prompt的存放位置
liumaolin310c0ba -
增强任务有效性检查,添加日志记录以便于调试。
liumaolinb7ae839 -
在生成TTS音频时始终记录生成信息。
liumaolin3a6b6fc -
在`SpeechStateMonitor`类的初始化过程中调用该方法,确保在创建新语音任务时中断任务ID被正确重置。
liumaolin259c23b
-
修复`PerformanceLogMixin`中的音频记录逻辑
liumaolin- 将`sf.write`方法中的音频源从`voice_task.audio`更改为`voice_task.user_voice`,确保正确记录用户的声音。 - 在`ASRWorker`类中,恢复`log_task_user_question`方法的调用,以记录用户提问。9bda9f9 -
修复`PerformanceLogMixin`中的调试模式检查逻辑
liumaolin- 修改`log_task_performance`和`log_task_user_question`方法中的调试模式检查,确保在非调试模式下也能正确记录任务性能信息。8486c53 -
增强性能日志记录功能,新增用户问题日志记录方法
liumaolin- 在`PerformanceLogMixin`中添加`log_task_user_question`方法,用于记录用户提问的音频。 - 在`ASRWorker`类中集成该方法,以便在处理语音任务时记录用户问题。 - 移除`AudioStreamPlayer`类中的调试模式检查,确保性能日志始终记录音频播放任务。7cddb77 -
Revise `ACTIVE_FRAME_THRESHOLD` from 0.32s to 0.1s
liumaolind662661
-
更新MoYoYo语音模型配置,修改文本分割方法并新增角色模型
liumaolin- 将多个角色的`text_split_method`从"cut3"修改为"cut0",以优化文本处理。 - 调整部分角色的优先级,以确保正确排序。46eb532 -
更新MoYoYo语音模型配置,新增优先级字段
liumaolin- 在`moyoyo.py`中为多个角色模型添加`priority`字段,以便于根据优先级进行排序。 - 修改`TTSConfigRegistry`类中的排序逻辑,确保根据角色优先级进行正确排序。 - 更新`MoYoYoTTSConfig`类,添加优先级属性以支持新功能。efefd3d -
新增Mixin类以增强语音任务处理功能
liumaolin- 添加`TaskStatusMixin`、`HistoryMixin`和`PerformanceLogMixin`类,提供语音任务状态检查、聊天历史更新和性能日志记录功能。 - 在`TTSAudioGenerator`和`AudioStreamPlayer`类中集成新混入类,优化任务处理逻辑。 - 更新`utils.py`,新增音频帧归一化和时长计算功能。2ebe57f -
添加MoYoYo语音模型“白岩松”及相关文件
liumaolin- 新增GPT权重文件`bys_best_gpt.ckpt`、SoVITS权重文件`bys_best_sovits.pth`和参考音频文件`bys_ref.wav`。 - 更新`moyoyo.py`配置,包含新模型的文件路径和推理参数设置。d74bcbf
-
重构`is_task_interrupted`方法以检查语音任务中断状态
liumaolin- 添加`is_task_interrupted`方法,简化语音任务中断检查逻辑,提高代码可读性。 - 更新相关逻辑以使用新方法替代原有的中断检查方式。02c321c
-
Add `has_no_words` check to skip punctuation-only TTS tasks and enhance debug logs
liumaolin- Implement `has_no_words` method to detect and skip text containing only punctuation or symbols. - Log TTS generation process when `is_debug_mode` is enabled for easier debugging.b636027 -
Refactor SpeechMonitor to use active audio frame duration instead of count
liumaolin- Replace `active_audio_frame_count` with `active_audio_frame_duration` for more precise threshold control. - Adjust `ACTIVE_FRAME_THRESHOLD` and associated calculations to use duration-based logic.15891ec -
Add TTS generation error handling and `is_task_interrupted` helper function
liumaolin- Log errors during TTS audio generation to improve debugging. - Abstract task interruption check into `is_task_interrupted` method for better readability and reuse.5ecb408 -
Optimize VAD logic by replacing `np.max(probs)` with `any(prob >= threshold)` for improved readability and efficiency.
liumaolin9273b76
-
Increase audio capture chunk size to 1024 in `capture.py` for smoother streaming
liumaolin095cfb6 -
Remove `speech_monitor` dependency from `asr_worker` service definition.
liumaolin5cf0dbe -
Add echo cancellation and VAD toggle support in service factories and routes
liumaolin- Extend `create_audio_capture` and `create_speech_monitor` methods to include `enable_echo_cancellation` and `enable_vad` options. - Update service definitions and health checks to pass configuration dynamically. - Add `SystemStartRequest` schema to support echo cancellation toggle during system startup. - Adjust `_start_system_background` logic to initialize services based on the new toggles.2ecfa8f
-
Fix help text for `--disable-echo-cancellation` to clarify the default behavior is not disabled
liumaolind846f85 -
Refactor threading in `launcher.py` to standardize worker initialization, enforce daemon mode, and improve naming consistency.
liumaolin7d8046a -
Handle overflow errors in audio capture by adding `exception_on_overflow=False` and skip processing when no data is available.
liumaolin5f9eaee -
Add `--disable-echo-cancellation` CLI option and update audio pipeline to support toggling echo cancellation and VAD
liumaolin4e071d3 -
Integrate `SileroVAD` into `SpeechMonitor` for optional voice activity detection. Add `_detect_speech()` method and update queue handling logic. Implement `SileroVAD` as a singleton for efficient model management.
liumaolin4e2e3d8 -
Increase queue timeout in audio and text processing services for smoother task handling
liumaolinb446464 -
Refactor audio processing pipeline to normalize data in `SpeechMonitor` and streamline queuing in `AudioCapture`
liumaolin57b0084 -
Update `AudioCapture` to support both PyAudio and macOS native AEC+VAD libraries
liumaolin- Add PyAudio-based standard audio capture as an option. - Enable runtime switching between PyAudio and macOS native libraries based on echo cancellation settings. - Refactor capture methods for better modularity and maintainability.99e8988 -
Refactor to replace `EchoCancellingAudioCapture` with `AudioCapture` across the codebase for improved clarity and flexibility
liumaolin7437d6d