feat: Meeting Domain prompt support for Whisper (vocabulary hints via initial_prompt)#475
Open
Polsemaker wants to merge 3 commits into
Open
feat: Meeting Domain prompt support for Whisper (vocabulary hints via initial_prompt)#475Polsemaker wants to merge 3 commits into
Polsemaker wants to merge 3 commits into
Conversation
Adds a new meeting_domain module that loads vocabulary hint files from ~/Library/Application Support/com.meetily.ai/domains/ (or ~/.meetily/domains/ as fallback) and forwards them as initial_prompt to whisper-rs. This biases the decoder toward custom vocabulary (proper nouns, client names, jargon) without changing default behavior when no domain is selected. - New meeting_domain module with file CRUD, name validation, and ~1000-char truncation (whisper.cpp's ~224 token cap) - Global MEETING_DOMAIN state + Tauri commands mirroring LANGUAGE_PREFERENCE - initial_prompt threaded through transcribe_audio / transcribe_audio_with_confidence at all whisper call sites (live worker, standalone command, parallel processor, audio import, retranscription) - Unit tests for validation, listing, save/delete, and truncation Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a Meeting Domain dropdown to the Transcript Settings tab and a "Domain" button next to the existing Language button in the transcript header so users can switch vocabulary hints during an active recording. - MeetingDomainSettings: dropdown + Manage… dialog (list, edit, delete, open folder), char counter, refresh button - ConfigContext: selectedDomain state with localStorage persistence and mount-time sync to Rust (mirrors selectedLanguage pattern). Switched TranscriptModelProps/SelectedDevices to type-only imports so the heavy TranscriptSettings module isn't pulled into the layout chunk - Wires meetingDomainSettings modal into useModalState / SettingsModals - Renders Domain button only when provider is localWhisper (Parakeet doesn't support initial_prompt) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Enhance dialog now exposes a Meeting Domain dropdown alongside Language and Model. It defaults to the currently selected global domain but can be overridden (including to "None") for a single retranscription, so users can test different vocabulary hints without changing their global setting. - start_retranscription_command accepts an explicit meeting_domain parameter that bypasses the global current_meeting_domain_prompt() lookup - Dialog only shows the dropdown for Whisper (Parakeet ignores initial_prompt) - Domain list is fetched once when the dialog opens Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds a "Meeting Domain" feature that lets users provide vocabulary hints (custom names, jargon, technical terms) to bias Whisper transcription via its
initial_promptparameter.Domains are plain-text files in
~/Library/Application Support/com.meetily.ai/domains/(falls back to~/.meetily/domains/). When a domain is active, its contents are forwarded asinitial_promptto whisper-rs at every transcription call site. No domain selected → unchanged behavior.UX surfaces:
initial_prompt)Implementation notes:
frontend/src-tauri/src/meeting_domain/mod.rs(file CRUD, name validation, ~1000-char / ~224-token truncation matching whisper.cpp's hard limit)MEETING_DOMAINstate mirrors the existingLANGUAGE_PREFERENCEpattern; Tauri commands surface get/set/list/save/delete to the frontendinitial_promptis threaded throughtranscribe_audio/transcribe_audio_with_confidenceso every whisper invocation receives the same hint (live worker, standalone command, parallel processor, audio import, retranscription)ConfigContextpersistsselectedDomainto localStorage and syncs to Rust on mount, mirroringselectedLanguageRelated Issue
Fixes #474
Type of Change
Testing
meeting_domain::testscovering name validation, listing, save/delete round-trip, and truncation)cargo test meeting_domain— 7/7 passcargo build— clean (warnings are pre-existing in unrelated files)tsc --noEmit— 0 errorsDocumentation
Checklist
Screenshots
Settings → Transcription → Meeting Domain (with Manage dialog)
Transcript header — Domain button next to Language
Retranscribe dialog — per-retranscription Meeting Domain override
Additional Notes
initial_promptis enforced with a graceful truncation + log warning, matching whisper.cpp's hard limit.