opencode-voice-dictation/docs/decisions/0007-pr-46-empty-whisper-prompt.md
2026-08-04 12:09:19 +00:00

48 lines
No EOL
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADR 0007: Empty whisperPrompt default (PR #46)
- **Date**: 2026-08-04
- **PR**: 46
- **Issue**: #46
## Статус
Accepted.
## Контекст
PR #43 добавил `DEFAULTS.whisperPrompt` — 107-символьный английский список терминов (`opencode, voice, dictation, transcribe, command, terminal, commit, branch, pull, push, merge, issue, prompt`). Целью было biasing-смещение модели в сторону технической терминологии userscript-а.
Документация Groq для параметра `prompt` (Whisper API) явно указывает: «Use the same language as the language of the audio file». Параметр `prompt` — это не системный промпт, а seed-контекст для декодера: модель стремится продолжить стиль и язык промпта в транскрипции.
Практический баг: английский промпт + русский аудио = модель уводит транскрипт в английский. Особенно заметно на `whisper-large-v3-turbo` (turbo более чувствителен к prompt biasing). Пользователь подтвердил: `language=ru` + turbo всё равно возвращает английский текст, потому что английский промпт перебивает явный `language` параметр.
## Решение
**`DEFAULTS.whisperPrompt = ""` (пустая строка).**
Поле `whisperPrompt` в `AppConfig` остаётся. Menu command `Set Whisper Prompt` (`registerMenuCommands`) остаётся — пользователи с узкопрофильной терминологией (медицина, право, конкретный стек) могут задать свой промпт на нужном языке. Меняется только default: пустая строка вместо английского biasing-промпта.
## Последствия
- `buildFormData` в `src/transcribe.ts` использует falsy-check `if (config.whisperPrompt)` — пустая строка не отправляет поле `prompt` в Groq API вообще. Модель работает в чистом auto-detect режиме без prompt biasing.
- Обратная совместимость: существующие юзеры, установившие скрипт в версии 1.0.4 (PR #43) и не менявшие `whisperPrompt` через меню, имеют в `GM_getValue("whisperPrompt")` старое 107-символьное значение — оно сохранится и продолжит отправляться. Новый default применяется только к свежим установкам и к юзерам, очистившим поле через `Set Whisper Prompt`.
- README обновлён секцией troubleshooting «Wrong Language» (EN+RU) — инструкция очистить Whisper Prompt через меню.
- Версия bumped 1.0.4 → 1.0.5 (vite.config.ts + package.json).
## Альтернативы
### 1. Двуязычный промпт (английский + русский термины)
- **Плюс**: biasing в обе стороны.
- **Минус**: усложнение. Промпт нужно поддерживать при добавлении новых языков (сейчас `language` поддерживает `ru`/`en`/`auto`). При `auto` модель может растеряться от двуязычного промпта. Отвергнуто.
### 2. Смена модели на turbo по умолчанию
- **Плюс**: turbo быстрее.
- **Минус**: баг был в промпте, не в модели. `whisper-large-v3` лучше для русского (точность выше, turbo оптимизирован под английский). Смена модели не решила бы проблему английского biasing-а. Отвергнуто.
## Источники
- `src/config.ts``DEFAULTS.whisperPrompt` до/после
- `src/transcribe.ts``buildFormData` falsy-check `if (config.whisperPrompt)`
- Groq Whisper API docs — `prompt` parameter: «Use the same language as the language of the audio file»
- PR #43 — добавление `DEFAULTS.whisperPrompt` (107 символов)
- Issue: #46