Conversation
…est features This commit adds several major features: **Local Transcription with WhisperKit** - Add LocalTranscriptionService using WhisperKit for on-device transcription - Add ModelManager for downloading and managing local Whisper models - Add TranscriptionRouter to switch between API and local transcription - Support for multiple model sizes (tiny, base, small, large-v3-turbo) - Model download progress tracking with success/failure alerts - Sandboxed model storage in Documents directory **Voice Isolation** - Add voiceIsolationEnabled setting (enabled by default) - Enable Apple's voice processing on AVAudioInputNode - Reduces background noise and isolates speech at hardware level **Microphone Test Feature** - Add AudioSampler for recording short audio clips (up to 10 seconds) - Playback recorded audio to verify microphone quality - Real-time audio level meter during recording - Respects voice isolation setting for accurate testing **Other Changes** - Rename TranscriptionResult to TranscriptionOutput to avoid WhisperKit collision - Add transcription source and model tracking in history - Update settings UI with model selection and voice isolation toggle 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add @preconcurrency import to ModelManager.swift to handle WhisperKit's non-Sendable types. This was passing on local Swift 6.2.3 but failing on CI's Swift 6.1.2 (Xcode 16.4) due to stricter concurrency checking. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8c64059 to
1f608f4
Compare
- Add @preconcurrency import to ModelManager.swift for WhisperKit - Add "CI Environment & Reproducing CI Failures" section to CLAUDE.md - Use swift-actions/setup-swift@v2 with Swift 6.2 to match local dev - Document how to reproduce CI issues locally Using setup-swift action ensures CI uses Swift 6.2 to match local development environment. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1f608f4 to
c32beb7
Compare
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.
Summary
Changes
Local Transcription
LocalTranscriptionService- WhisperKit integration with actor-based thread safetyModelManager- Download, delete, and manage local Whisper modelsTranscriptionRouter- Routes between API and local transcription based on settingsVoice Isolation
voiceIsolationEnabledconfiguration settingAudioCaptureService(dictation) andAudioSampler(test)Microphone Test
AudioSampler- Record up to 10 seconds, playback to verify qualityOther
TranscriptionResult→TranscriptionOutputto avoid WhisperKit type collisionTest plan
🤖 Generated with Claude Code