Skip to content

Add optional Orukeet Core ML preview with verified Hugging Face install - #980

Open
Nathan-Roll1 wants to merge 6 commits into
altic-dev:mainfrom
Nathan-Roll1:codex/orukeet-coreml
Open

Nathan-Roll1 wants to merge 6 commits into
altic-dev:mainfrom
Nathan-Roll1:codex/orukeet-coreml

Conversation

@Nathan-Roll1

@Nathan-Roll1 Nathan-Roll1 commented Sep 17, 2026

Copy link
Copy Markdown

Description

Adds an optional Orukeet Core ML preview in the model selector. Installation consumes the pinned Hugging Face manifest, verifies the archive's SHA-256 and byte count, and compiles its portable models on the Mac. Hugging Face counts the manifest download normally. Loading and transcription use the separate local Orukeet cache.

The preview reuses FluidVoice's existing transcription provider. Its speed and accuracy remain unrated; model defaults are unchanged.

Type of Change

  • ✨ New feature

Related Issue or Discussion

Proposal: #981. Maintainer acceptance is pending.

Testing

  • Tested on Intel Mac
  • Tested on Apple Silicon Mac
  • Tested on macOS version: 26.4.1, Apple M5 Max (built app GUI, file transcription and runtime/installer harness)
  • Ran linter locally: swiftlint --strict --config .swiftlint.yml Sources Tests Package.swift
  • Ran formatter locally: swiftformat --config .swiftformat Sources
  • Ran tests locally: exact model-store source typechecked with MainActor default isolation. The actual pinned archive passed checksum, fresh Core ML compilation and installation checks. Using FluidVoice's exact pinned FluidAudio fork (3fd63887) and matching auxiliary dependency revisions, English, German and French recordings each produced identical text over three runs (nine decodes); one-second silence returned empty text on three runs. Corrupt archives, cancellation, and a failed final move preserved the previous valid cache. Removing the encoder made the installation incomplete and loading failed locally. Throttled local HTTP transfers delivered intermediate progress with and without Content-Length; HTTP failure, interruption and cancellation left no retained temporary files.

The full Xcode 26.6 app build and focused XCTest run passed at f7c3c8c: two tests passed, two fixture-dependent tests skipped, zero failures. The regression file is now registered in the Xcode test target. The skipped model/HTTP cases were exercised by the local harness above.

Screenshots / Video

The actual built app completed a fresh Hugging Face download with visible progress, installed and activated Orukeet, and transcribed the English recording through File Transcription with the expected text. These are captures from that app; the following commit only adds screenshots.

Orukeet installed and active

Completed local file transcription

Preview and download progress

Orukeet preview

Actual download progress

  • No UI/visual changes; screenshots/video are not applicable.

Notes

The optional preview keeps CC BY-SA 4.0 weight licensing and Oruk/NVIDIA attribution. It uses the baseline Core ML profile, which preserves the joint outputs expected by the existing runtime. Custom vocabulary boosting remains unavailable for this preview.

The standalone upstream Package.swift points at a missing Sources/FluidVoice directory; the full build used the app's Xcode project. GUI checks used an ad-hoc signed debug build with onboarding preconfigured; microphone and Accessibility permissions were not granted, so live microphone/global typing is outside these checks. The CI archive's duplicated CTranscribe framework aliases were verified byte-identical and restored to standard symlinks for local signing; executable code was unchanged.

@github-actions github-actions Bot added needs PR template Pull request is missing required template content. needs screenshots Pull request needs screenshot or video evidence. labels Sep 17, 2026
@github-actions

github-actions Bot commented Sep 17, 2026

Copy link
Copy Markdown

The PR Policy check is blocking this PR because required template information is missing.

Please update the PR description with:

  • Screenshots / Video

Visual files detected:

  • .github/screenshots/orukeet-active.png
  • .github/screenshots/orukeet-download.png
  • .github/screenshots/orukeet-preview.png
  • .github/screenshots/orukeet-transcription.png
  • Sources/Fluid/Persistence/SettingsStore.swift
  • Sources/Fluid/UI/AISettings/VoiceEngineSettingsViewModel.swift
  • Sources/Fluid/UI/AISettingsView+SpeechRecognition.swift
  • Sources/Fluid/UI/AISettingsView.swift
  • Sources/Fluid/UI/WelcomeView.swift

Screenshots or video are required for UI, UX, settings, onboarding, overlay, menu bar, or visual behavior changes. If this PR has no visual changes, check the no-visual-change box in the template.

If this remains incomplete for 48 hours after opening, the PR may be closed.

@greptile-apps

greptile-apps Bot commented Sep 17, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

The PR appears safe to merge, with no outstanding correctness, security, or repository-rule violations identified.

Summary

Adds an optional Apple Silicon Orukeet Core ML speech-recognition preview.

  • Downloads a pinned Hugging Face manifest and model archive with incremental progress reporting.
  • Verifies the archive byte count and SHA-256 before compiling and atomically installing Core ML models.
  • Routes Orukeet through the existing FluidAudio transcription provider without custom vocabulary boosting.
  • Adds model-selection, provider-filtering, onboarding, and installation regression coverage.

Reviews (5) · Last reviewed commit: "Recheck PR policy with completed GUI evi..."

Comment thread Sources/Fluid/Services/OrukeetModelStore.swift Outdated
@github-actions github-actions Bot removed needs PR template Pull request is missing required template content. needs screenshots Pull request needs screenshot or video evidence. labels Sep 17, 2026
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.

1 participant