## Что сделано
- EN и RU секции «Custom STT Endpoint» обновлены: nginx-конфиг заменён
на pass-through вариант без префикса:
```nginx
location / {
proxy_pass https://api.groq.com:443;
proxy_set_header Host api.groq.com;
}
```
- Пример endpoint теперь
`https://your-domain.com/openai/v1/audio/transcriptions` (без `/groq`) —
совпадает с реальной настройкой сервера (whisper.slaid098.dev).
- Добавлена заметка в обе секции: префикс пути не нужен, если домен
выделен только под Groq; `/groq`-вариант остаётся валидным для
мульти-прокси доменов (`location /groq/` с trailing slash срезает
префикс).
## Почему
README описывал конфиг с префиксом `/groq`, который не совпадает с
реальной настройкой. `proxy_pass` без trailing slash передаёт URI как
есть, поэтому на выделенном домене префикс лишний и только усложняет
настройку. Документация должна совпадать с реальным рабочим сервером.
## Watch out
- Только README.md (EN + RU секции). Код, тесты, версия не тронуты —
bump не требуется по AGENTS.md.
## Pending
—
Closes #48
Closes #48
---------
Co-authored-by: opencode-agent <agent@opencode.local>
|
||
|---|---|---|
| .github | ||
| assets | ||
| docs | ||
| src | ||
| tests | ||
| .gitignore | ||
| .nvmrc | ||
| AGENTS.md | ||
| biome.json | ||
| knip.json | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vite-env.d.ts | ||
| vite.config.ts | ||
| vitest.config.ts | ||
🚀 opencode-voice-dictation
Voice dictation for OpenCode web — mic button via Whisper (Groq API)
Голосовой ввод для OpenCode web — кнопка микрофона через Whisper (Groq API)
🇺🇸 English
❓ Why
Needed a way to dictate to agents from a phone. Stock Android voice input doesn't cut it. OpenCode web had no built-in voice.
✅ What
A Tampermonkey/Violentmonkey userscript — a mic button in the OpenCode web UI. Language selection, auto-submit after dictation. Whisper via Groq API (requires your own key).
Features
| Feature | Description |
|---|---|
| 🎤 Mic button | Click 🎤 in the input area, speak — text inserts into the prompt |
| 🌍 Language | ru, en, or auto-detect |
| ⚡ Auto-submit | Sends transcription to the agent after dictation (toggleable) |
| 🧠 Whisper (Groq) | whisper-large-v3 / whisper-large-v3-turbo via Groq API |
| 📱 Mobile via Firefox | Firefox supports extensions; mobile Chrome doesn't |
| ✅ Tested on 1.18.8 | Older versions via fallback selectors; needs "New UI" toggle |
| 🔄 Auto-update | Updates itself via @updateURL — no manual reinstall |
| ⌨️ Ctrl+Space | Desktop hotkey to start/stop recording |
⚡ Quick Start
- Install Tampermonkey
- Get a key at console.groq.com/keys
- Open the script install link — it installs into Tampermonkey
- Tampermonkey menu → Set Groq API Key → paste
gsk_...
🌐 Custom STT Endpoint
Groq may block direct requests from some networks. Point the script at your own nginx proxy:
- Deploy an nginx reverse proxy that forwards to
api.groq.com:location / { proxy_pass https://api.groq.com:443; proxy_set_header Host api.groq.com; } - Tampermonkey menu → Set STT Endpoint → paste
https://your-domain.com/openai/v1/audio/transcriptions - Requests now go through your proxy. The userscript metadata uses
@connect *, so any domain is allowed.
A path prefix is not needed if the domain is dedicated to Groq. The /groq variant stays valid for multi-proxy domains — location /groq/ with a trailing slash strips the prefix.
🌡️ Temperature
Whisper may hallucinate on silence/noise. Set Temperature (default 0 = deterministic, range 0–1) reduces hallucinations.
🌐 Wrong Language (English instead of Russian)
If the model returns English text for Russian audio, clear the Whisper Prompt:
- Open Tampermonkey/Violentmonkey menu → Set Whisper Prompt
- Leave the field empty (delete all text)
- Confirm
The prompt biases the model toward the prompt's language. An English prompt with Russian audio causes the model to output English. The prompt should match the audio language (or be empty for auto-detect).
🇷🇺 Русский
❓ Зачем
Нужен был способ диктовать агентам с телефона. Стандартный Android-ввод не удовлетворяет. Встроенного голоса в OpenCode web не было.
✅ Что
Скрипт для Tampermonkey/Violentmonkey — кнопка микрофона в веб-интерфейсе OpenCode. Выбор языка, автоотправка после диктовки. Whisper через Groq API (нужен свой ключ).
Фичи
| Фича | Описание |
|---|---|
| 🎤 Микрофон | Нажми 🎤 в поле ввода, говори — текст вставится в промт |
| 🌍 Язык | ru, en или автоопределение |
| ⚡ Автоотправка | Отправляет транскрипцию агенту после диктовки (опционально) |
| 🧠 Whisper (Groq) | whisper-large-v3 / whisper-large-v3-turbo через Groq API |
| 📱 Мобайл через Firefox | Firefox поддерживает расширения; mobile Chrome — нет |
| ✅ Проверено на 1.18.8 | Старые версии через fallback-селекторы; нужен «New UI» |
| 🔄 Автообновление | Обновляется сам через @updateURL — без ручной переустановки |
| ⌨️ Ctrl+Space | Горячая клавиша на десктопе |
⚡ Быстрый старт
- Установи Tampermonkey
- Получи ключ на console.groq.com/keys
- Открой ссылку установки скрипта — скрипт установится в Tampermonkey
- Меню Tampermonkey → Set Groq API Key → вставь
gsk_...
🌐 Кастомный STT endpoint
Groq может блокировать прямые запросы из некоторых сетей. Направь скрипт на свой nginx-прокси:
- Разверни nginx reverse proxy, который форвардит на
api.groq.com:location / { proxy_pass https://api.groq.com:443; proxy_set_header Host api.groq.com; } - Меню Tampermonkey → Set STT Endpoint → вставь
https://your-domain.com/openai/v1/audio/transcriptions - Запросы пойдут через твой прокси. Метаблок юзерскрипта использует
@connect *, поэтому разрешён любой домен.
Префикс пути не нужен, если домен выделен только под Groq. /groq-вариант остаётся валидным для мульти-прокси доменов — location /groq/ с trailing slash срезает префикс.
🌡️ Temperature
Whisper может галлюцинировать на тишине/шуме. Set Temperature (по умолчанию 0 = детерминированный вывод, диапазон 0–1) снижает галлюцинации.
🌐 Неправильный язык (английский вместо русского)
Если модель возвращает английский текст для русской речи, очистите Whisper Prompt:
- Откройте меню Tampermonkey/Violentmonkey → Set Whisper Prompt
- Оставьте поле пустым (удалите весь текст)
- Подтвердите
Промпт смещает модель к языку промпта. Английский промпт с русским аудио заставляет модель выводить английский. Промпт должен совпадать с языком аудио (или быть пустым для автоопределения).
