Add ivrit.ai Hebrew model (Whisper Large v3 Turbo)#415
Conversation
Adds whisperIvritV3Turbo, a Hebrew-specialized Whisper model from ivrit-ai/whisper-large-v3-turbo-ggml, as a first-class speech model. - Routes through the existing SwiftWhisper path (ggml format, no new engine) - Surfaces as the recommended engine when Hebrew is selected - Forces Hebrew decode language so whisper.cpp does not auto-detect on short or accented audio - Per-model download URL so the model loads from the ivrit.ai HF repo, decoupled from the local cache filename Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7d647c116c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| @testable import FluidVoice_Debug | ||
|
|
||
| final class IvritHebrewModelTests: XCTestCase { |
There was a problem hiding this comment.
Add this test file to the Xcode test target
This new test class is never compiled or run by the configured test scheme: I checked Fluid.xcodeproj/project.pbxproj, and the FluidDictationIntegrationTests PBXSourcesBuildPhase still lists only AudioFixtureLoader.swift and DictationE2ETests.swift, with no file reference/build file for IvritHebrewModelTests.swift. Because this repo's test target is manually enumerated rather than file-system-synchronized, the ivrit routing/metadata checks added here provide no CI coverage until the file is added to the target.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Good catch — fixed in 39232b7. Added IvritHebrewModelTests.swift to the FluidDictationIntegrationTests target (file reference + build file + group membership + Sources build phase), mirroring DictationE2ETests.swift, so the routing/metadata checks are now compiled and run by the test scheme.
The new test file existed on disk but was not referenced in project.pbxproj, so the manually-enumerated FluidDictationIntegrationTests target never compiled it (no CI coverage). Add the file reference, build file, group membership, and sources build-phase entry, mirroring DictationE2ETests.swift. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
What
Adds
whisperIvritV3Turbo, a Hebrew-specialized Whisper model fromivrit-ai/whisper-large-v3-turbo-ggml(1.62 GB), as a first-class speech model.Hebrew currently only routes to Nemotron (experimental), generic Whisper (auto-detect), and Apple Speech. This adds a Hebrew-tuned model that is far stronger on Hebrew and on mixed Hebrew-English speech (it is fine-tuned on real Israeli speech, which is full of English loanwords).
How
WhisperProvider(SwiftWhisper / whisper.cpp). Model→provider routing already falls through to Whisper, so noASRServicechanges were needed.VoiceEngineLanguageCataloglists it first forhe.whisper.params.language = .hebrewafter load so whisper.cpp does not auto-detect on short/accented audio. (Side note: the provider previously never set a language at all, leaving SwiftWhisper's.autodefault — this PR only forces it for this language-specialized model.)SpeechModel.whisperDownloadURLso this model loads from the ivrit.ai HF repo, with the remote filename (ggml-model.bin) decoupled from the local cache filename (ggml-ivrit-v3-turbo.bin).Files
SettingsStore.swift— new enum case + metadata +whisperDownloadURL/forcedWhisperLanguageCodeWhisperProvider.swift— per-model download URL, size-integrity floor, language forcingVoiceEngineLanguageCatalog.swift— Hebrew → ivrit route (first)WelcomeView.swift— onboarding subtitleTests/…/IvritHebrewModelTests.swift— routing + metadata testsTesting
content-length 1,624,555,275).switchoverSpeechModel.🤖 Generated with Claude Code