Skip to content

Add ivrit.ai Hebrew model (Whisper Large v3 Turbo)#415

Open
Nitzan94 wants to merge 2 commits into
altic-dev:mainfrom
Nitzan94:nitzan/hebrew-ivrit-ai-model
Open

Add ivrit.ai Hebrew model (Whisper Large v3 Turbo)#415
Nitzan94 wants to merge 2 commits into
altic-dev:mainfrom
Nitzan94:nitzan/hebrew-ivrit-ai-model

Conversation

@Nitzan94

Copy link
Copy Markdown

What

Adds whisperIvritV3Turbo, a Hebrew-specialized Whisper model from ivrit-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

  • No new engine — it is a ggml model, so it loads through the existing WhisperProvider (SwiftWhisper / whisper.cpp). Model→provider routing already falls through to Whisper, so no ASRService changes were needed.
  • Recommended for HebrewVoiceEngineLanguageCatalog lists it first for he.
  • Forced Hebrew decode — sets whisper.params.language = .hebrew after 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 .auto default — this PR only forces it for this language-specialized model.)
  • Per-model download URL — adds SpeechModel.whisperDownloadURL so 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 / forcedWhisperLanguageCode
  • WhisperProvider.swift — per-model download URL, size-integrity floor, language forcing
  • VoiceEngineLanguageCatalog.swift — Hebrew → ivrit route (first)
  • WelcomeView.swift — onboarding subtitle
  • Tests/…/IvritHebrewModelTests.swift — routing + metadata tests

Testing

  • Added unit tests for catalog routing and model metadata.
  • Verified the download URL resolves to the real file (HTTP 200, content-length 1,624,555,275).
  • Note: I could not run a full Xcode build in my environment — please confirm CI compiles. All new enum cases were cross-checked against every exhaustive switch over SpeechModel.

🤖 Generated with Claude Code

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>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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 {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants