# 📦 @goodandready/dsh-voice

Потоковая диктовка без задержек и мультиязычный голосовой ввод для DeepSeek Harness

npm version license DSH Plugin Node version

Все проекты автора

🇬🇧 English🇷🇺 Русский🇨🇳 中文说明

--- ## ⚡ Обзор **`dsh-voice`** добавляет полноценные голосовые возможности в веб-интерфейс **DeepSeek Harness**. Будь то непрерывная диктовка с нарезкой фраз по естественным паузам или голосовые сообщения с удобными жестами Push-to-Talk (мышь и клавиатура) — `dsh-voice` гарантирует сохранность каждой записи благодаря **автоматическим цепочкам отказоустойчивости**. ```mermaid graph LR subgraph Client [Браузер Web UI] Mic[🎙️ Микрофон диктовки] -->|Нарезка фраз VAD| Stream[Аудио-чанки] Wave[🌊 Голосовое сообщение] -->|Зажатие / Отпускание| PTT[Push-to-Talk] end subgraph Host [Бэкенд DSH Host] Stream --> FFMPEG[Транскодер ffmpeg 16кГц] PTT --> FFMPEG FFMPEG --> Chain{Цепочка фолбеков} Chain -->|1-й приоритет| P1[Deepgram / Nova-2] Chain -.->|При лимитах / 429| P2[Groq / Whisper Turbo] Chain -.->|При сбое| P3[Локальный whisper.cpp] end subgraph Output [Результат] P1 --> Composer[💬 Строка ввода чата] P2 --> Composer P3 --> Composer end style Client fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4 style Host fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4 style Output fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4 ``` --- ## ✨ Ключевые возможности * 🎙️ **Потоковая диктовка с VAD**: аудиопоток режется по естественным паузам речи (`vadSilenceMs`, по умолчанию 700 мс) и мгновенно печатается в поле ввода. * 🌊 **Голосовые заметки с окном отмены**: запишите законченную мысль — сообщение автоматически уйдёт агенту по истечении таймера (`autoSendMs`, по умолчанию 4000 мс). * 🎮 **Тактильный Push-to-Talk**: * **Мышь**: зажмите кнопку волны — запись идёт пока кнопка зажата; отпускание отправляет, увод курсора отменяет запись. * **Клавиатура**: зажмите Ctrl для записи без мыши; нажмите Esc для отмены. * ⚡ **Субтитры браузера в реальном времени (`browser`)**: локальное распознавание Chrome Web Speech API без отправки звука на сервер с плавающими субтитрами. * 🛡️ **Надёжные цепочки фолбеков**: при исчерпании квоты или ошибке 429 плагин мгновенно обращается к следующему провайдеру в списке. * 🧠 **Контекстный словарь (Context Glossary)**: автоматическое извлечение переменных и технических терминов из черновика композера для точного распознавания редких слов и кода. * 🎵 **Встроенный аудиоплеер**: предпросмотр и воспроизведение записанного голосового сообщения в чате и доке перед отправкой или для переслушивания. * 🔇 **Аппаратное шумоподавление**: переключатель в настройках для включения/выключения браузерного шумоподавления, эхоподавления и АРУ. * 📊 **Дашборд задержки и здоровья провайдеров**: мониторинг скорости ответа (мс), процента успешных транскрипций и ошибок в реальном времени. * 🔒 **Безопасность API-ключей**: ключи читаются на сервере через `ctx.credentials` и никогда не попадают в браузер клиента. * 🖥️ **Автозапуск локального whisper.cpp**: управление жизненным циклом `whisper-server` с авто-конвертацией через `ffmpeg`. * ⚡ **SenseVoice-ONNX / Sherpa-ONNX** *(0.8.11)*: сверхбыстрый (~50–100мс) неавторегрессивный локальный STT с автоматической очисткой тегов эмоций/событий. Поддержка Sherpa-ONNX HTTP и OpenAI-совместимых эндпоинтов. * 🌐 **Потоковое аудио в реальном времени** *(0.8.11)*: низколатентный WebSocket-мост (`/dsh-voice/realtime`) для OpenAI Realtime API или локального Sherpa-ONNX. API-ключи остаются на хосте. * 🌊 **Анимированные визуализаторы Liquid Wave и Dynamic Orb** *(0.8.12)*: живая интерактивная анимация звуковой волны в полоске записи с откликом на громкость микрофона. Выбор стиля: текучая волна, пульсирующая сфера, классические столбики или выключен. --- ## 🎮 4 способа голосового ввода | Режим | Жест / Активация | Поведение | |---|---|---| | **Диктовка** | Клик 🎙️ Микрофон | Речь режется по паузам (`vadSilenceMs`) и вставляется прямо в строку ввода | | **Голосовое сообщение** | Клик 🌊 Волна | Запись до нажатия стоп, затем отправка с окном отмены (`autoSendMs`) | | **PTT Мышью** | Зажатие 🌊 Волна | Запись пока зажата кнопка; отпускание отправляет, увод мыши сбрасывает | | **PTT Клавиатурой** | Зажатие Ctrl | Запись без мыши; отпускание отправляет, нажатие Esc отменяет | > [!TIP] > Клавиатурную клавишу можно легко переопределить в настройках (`hotkey`: `Control`, `Alt`, `Shift` или любой код клавиши). --- ## 🛠️ Матрица поддерживаемых провайдеров | Ключ | Сервис | Модель по умолчанию | Переменная секрета | Особенности | |---|---|---|---|---| | `browser` | Web Speech API | Нативная в браузере | *Не требуется* | Нулевая задержка, живые субтитры в Chrome | | `deepgram` | Deepgram API | `nova-2` | `DEEPGRAM_API_KEY` | Сверхбыстрая облачная транскрипция | | `groq` | Groq Whisper | `whisper-large-v3-turbo` | `GROQ_API_KEY` | Мгновенная скорость генерации | | `hf` | HuggingFace Inference | `openai/whisper-large-v3` | `HF_TOKEN` | Высокоточный облачный Whisper | | `local-whisper` | Локальный whisper.cpp | из параметров сервера | *Не требуется* | 100% приватность, оффлайн, без интернета | | `sensevoice` | SenseVoice-ONNX / Sherpa-ONNX | `SenseVoiceSmall` | *Не требуется* | Сверхбыстрый (~50мс) локальный неавторегрессивный STT | ### 🚀 Готовые пресеты (Plug & Play) Достаточно указать имя в цепочке и добавить API-ключ: * `openai` (`whisper-1`) → `OPENAI_API_KEY` * `siliconflow` (`SenseVoiceSmall`) → `SILICONFLOW_API_KEY` * `mistral` (`voxtral-mini-latest`) → `MISTRAL_API_KEY` * `openrouter` (`google/gemini-2.5-flash`) → `OPENROUTER_API_KEY` * `deepinfra` (`whisper-large-v3-turbo`) → `DEEPINFRA_API_KEY` * `fireworks` (`whisper-v3-turbo`) → `FIREWORKS_API_KEY` --- ## 📦 Быстрая установка ```bash dsh plugin --profile web add @goodandready/dsh-voice ``` > [!IMPORTANT] > Перезапустите Web UI после установки (`systemctl --user restart dsh-web`) и обновите страницу в браузере. --- ## ⚙️ Настройка конфигурации Откройте **Настройки → Плагины → Настройки плагинов → Голос** в Web UI: ```yaml - id: dsh-voice config: dictation: language: ru vadSilenceMs: 700 chain: - provider: deepgram - provider: groq - provider: local-whisper message: language: ru autoSendMs: 4000 chain: - provider: openai - provider: local-whisper hotkey: Control autoStart: true whisperModel: /models/ggml-medium-q8_0.bin ``` --- ## 🤖 Инструмент агента и HTTP API ### Инструмент агента (`transcribe_audio`) Регистрирует `transcribe_audio(file_path, language?)` в `ctx.tools`, позволяя агентам распознавать аудиофайлы, интервью и записи с диска. ### Внутренние HTTP эндпоинты * `POST /dsh-voice/transcribe` — `{ dataBase64, mimeType, mode }` → `{ ok, text, provider, tookMs }` * `POST /dsh-voice/polish` — `{ text }` → `{ ok, text }` * `GET /dsh-voice/status` — состояние демонов, цепочки, конфигурация SenseVoice и реалтайма. * `GET /dsh-voice/realtime` — **WebSocket upgrade** для низколатентного аудио-стриминга (OpenAI Realtime API / Sherpa-ONNX). Принимает бинарные аудио-чанки, возвращает JSON-дельты текста. --- ## 📄 Лицензия MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)