# Model support and verification

Version **1.3.0** exposes **38 distinct catalog identities**: 29 transcription models, the existing speaker-embedding model, and eight neural diarization models. The immutable 1.1.0 release retains its original 30 identities. Seventeen ASR identities reproduce the selectable speech models in FluidVoice at commit `0fccdeb014462e6f82889af38c7e9de92d87a130` (25 October 2026). Portable alternatives keep separate IDs so a conversion cannot be mistaken for exact artifact parity.

**Catalog coverage is not installation or a completed parity claim.** `olenji models parity --json` reports installed, runtime-ready, and actually inference-validated counts separately. All seventeen reviewed FluidVoice selections have an installation and adapter path, including the public Pico archive. Mac-specific helpers still require compilation and inference validation on a compatible Mac; this build was developed and exercised on Linux CPU.

The **25 October 2026** comparison found a new selectable **Qwen3 ASR 1.7B Q8_0 GGUF** in FluidVoice. Olenji already contained that exact artifact as `qwen3-asr.1.7b.q8_0`; it now belongs to the current parity profiles. Its publisher revision, filename and 2,185,030,624-byte payload match the previously audited selection. This is distinct from FluidVoice's older disabled Qwen Core ML preview. The current settings enum has nineteen cases; that disabled preview and a hidden Nemotron streaming alias leave seventeen selectable identities. See [the dated coverage evidence](/docs/1.4.0/source/#source-038d198f2b03a663291f) and [FluidVoice's selection logic](https://github.com/altic-dev/FluidVoice/blob/0fccdeb014462e6f82889af38c7e9de92d87a130/Sources/Fluid/Persistence/SettingsStore.swift).

All thirteen exact Hugging Face selections were re-resolved against current publisher metadata: pinned revisions, selected file identities and sizes still match. The current Mini/Pico feed is byte-identical to the previously signature-verified envelope, at sequence 1 with no Mac overrides. The [24 October audit](/docs/1.4.0/source/#source-b8d4ab4ea2fef93572a0) retains its original sixteen-model reference and execution results. This source/metadata refresh did not download weights or execute Qwen 1.7B inference.

Speech recognition, configured text providers and FluidVoice's private Fluid Intelligence enhancement runtime are distinct capabilities. Olenji's parity profile promises the public selectable speech identities. Its configurable translation interface covers compatible endpoints without claiming to download a private enhancement runtime or execute every paid text model. See [provider compatibility](/docs/1.4.0/translation-providers.md).

## Choose for this machine

`olenji models recommend --workload dictation --priority balanced --language en --json`, MCP `olenji_recommend_models` and `POST /api/models/recommend` provide advisory choices from this exact catalog. The report considers the service host, compatible installed engines, language, required word timings and estimated model memory. It separates ready choices from choices needing explicit installation and returns proposed inference settings and execution language. It does not download, change defaults, record or establish an accuracy ranking. See [the agent workflow](/docs/1.4.0/agents.md#choose-for-the-service-computer) and [inference controls](/docs/1.4.0/inference-options.md).

The existing native paths are distinct: Faster Whisper/CTranslate2 supports CPU and compatible NVIDIA CUDA; transcribe.cpp's installed build may provide Metal, Vulkan or CPU; Apple helpers retain their model-specific Core ML/OS requirements. A GPU vendor name or a Core ML compute-unit permission is not proof that inference ran on that processor. Bounded runtime probes establish only their reported capabilities. A CPU recommendation remains useful when usable GPU acceleration is absent or unknown.

`best_fit` and `ready_now` can differ. The latter reranks observed CPU fallbacks when accelerator memory fit is unknown; CUDA/Vulkan choices are not marked ready from device visibility alone. Apple helper file presence never establishes Core ML readiness. Each candidate supplies an installation command and requires a short sample. The static `recommended` profile remains a minimal Tiny/WeSpeaker starter, separate from hardware-aware recommendations.

The dated 25 October comparison above remains unchanged. Newer upstream Fluid Speech Pro and OVE's Parakeet Ultra are not current Olenji catalog identities: the pinned Apple dependency/helper lacks those version contracts. They are not aliases for an existing model. MLX is also a separate runtime; the current transcribe.cpp Metal route can use Apple's GPU without adding it. No catalog or dependency is added merely to claim full hardware utilization.

The audit resolved every one of the **25 Hugging Face artifact selections** to a public immutable revision with publisher LFS SHA-256 or Git blob identity for every selected file. It also downloaded the exact Pico archive through an ordinary public GET and verified its full 161,208,320-byte body, archive SHA-256 and embedded manifest SHA-256. These are artifact checks, not evidence of Apple inference. See [machine-readable catalog audit](/docs/1.4.0/source/#source-8be2b0b4247fbba10339).

The second holistic review pins all 25 Hugging Face selections in the shipped catalog and validates exact inference runtime versions. Apple helpers require Swift 6.2 or newer and build against the bundled reviewed `Package.resolved` using `--force-resolved-versions`. See [the model review](/docs/1.4.0/source/#source-0cce4fa81f53b27097c6) for dependency provenance, local-only inference, repair behavior and the separate Mac validation boundary.

## Speaker detection models

Speaker analysis is selected independently of the ASR model with `--speaker-model ID` and optional `--speaker-preset PRESET`; API/MCP use `speaker_model_id` and `speaker_preset`. Selecting a speaker model enables diarization. Omitted choices preserve the existing `--diarize` WeSpeaker behavior. A preset changes processing settings, not the weight identity or installation.

| Speaker model ID | Supported presets | Current adapter |
|---|---|---|
| `diarization.wespeaker.en` | `default` | Acoustic embeddings and local clustering; file and live |
| `diarization.pyannote.onnx` | `default`, `split`, `merge` | Pyannote segmentation 3.0 plus WeSpeaker embeddings and sherpa clustering; file only |
| `diarization.nemotron-3.onnx` | `default` | Eight-speaker Nemotron 3 activity timeline; file only |
| `diarization.sortformer.v2.onnx` | `default`, `high-context` | Four-speaker Sortformer v2 timeline; file only |
| `diarization.sortformer.v2.1.onnx` | `default`, `fast`, `balanced`, `high-context` | Four-speaker Sortformer v2.1 timeline; file only |
| `diarization.ls-eend.ami.onnx` | `default` | AMI-trained LS-EEND export, four speaker channels; file only |
| `diarization.ls-eend.callhome.onnx` | `default` | CALLHOME-trained LS-EEND export, seven speaker channels; file only |
| `diarization.ls-eend.dihard2.onnx` | `default` | DIHARD II LS-EEND export, ten speaker channels; file only |
| `diarization.ls-eend.dihard3.onnx` | `default` | DIHARD III LS-EEND export, ten speaker channels; file only |

These are portable ONNX counterparts of model families available in OVE, independently implemented from public upstream contracts. They are not OVE's exact Core ML artifacts or its application code. Pyannote-style here means segmentation plus acoustic embeddings and clustering; it does not claim to reproduce the gated pyannote community-1 pipeline. Speaker channels are anonymous estimates, not enrolled people. Overlapping or ambiguous evidence preserves unknown transcript attribution; the adapter does not separate mixed audio into clean voices or invent word alignment.

```sh
olenji models plan-install --profile diarization --json
olenji models inspect diarization.ls-eend.ami.onnx --json
olenji models install diarization.ls-eend.ami.onnx --json
olenji transcribe interview.wav --model faster-whisper.tiny \
  --speaker-model diarization.ls-eend.ami.onnx --json
```

The profile lists all nine optional choices without changing the recommended/live profiles. Planning and ordinary transcription do not install missing weights or runtimes. Install only models needed for the requested task. The eight timeline models reject live starts before opening capture; use WeSpeaker for current live attribution. A timeline recording is limited to one hour of normalized 16 kHz mono audio and 50,000 detected turns; larger inputs require an explicit split. ASR retains its separate bounded-window processing.

New multi-file packs pin immutable publisher revisions, exact filenames, byte sizes and SHA-256 values, and promote only after every component verifies. This includes LS-EEND's required sidecar metadata and both Pyannote/WeSpeaker graphs. The sherpa embedding release and LS sidecar SHA-256 values are reviewed-download hashes, distinguished from publisher LFS digests. Selected data files are downloaded; repository Python/Rust scripts are not executed. Active model pins prevent replacement or removal during analysis.

Pyannote uses the managed sherpa-onnx runtime. Nemotron, Sortformer and LS-EEND use a separate CPU ONNX Runtime environment with pinned NumPy, SOXR, SoundFile and dependencies, independent of global Python packages. Preparing that environment uses only binary wheels from PyPI, bounded installer commands and verified package versions. Standard CPython 3.11–3.14 is supported where reviewed binaries exist; Linux requires glibc 2.28+. Intel macOS uses ORT 1.23.2 and Python 3.11–3.13 on macOS 13+, while other reviewed targets use ORT 1.31.0. Native Windows ARM64 lacks the pinned SOXR wheel and is rejected for this runtime; use x64 Python under emulation or a sherpa speaker route. Free-threaded Python, PyPy and musl Linux are outside this runtime lock. Foreign binary resolution is not native inference validation.

On 1 November 2026, the eight public portable artifacts were explicitly downloaded and verified on Ubuntu in an isolated acceptance cache. All 14 implemented model/preset combinations returned structurally valid timelines on one official four-speaker Chinese fixture. A separate numerical check compared the LS-EEND frontend against the publisher's pinned NumPy 2.2.6 / librosa 0.11.0 / SciPy 1.15.2 functions on 15 speech, silence, short and odd-length inputs. These are development integration checks, not a diarization-error benchmark or a guarantee that the models agree: even this fixture produced different channel counts across models/presets. No accuracy, speed, overlapping-speech recovery or Core ML parity claim follows from returning a valid timeline. Inspect installation readiness separately from an installation's `inference_validated` flag.

Weight terms remain separate: Nemotron 3 uses OpenMDW 1.1; Sortformer v2 uses CC BY 4.0 and v2.1 uses NVIDIA Open Model License. Pyannote segmentation is MIT; WeSpeaker pretrained weights retain their corresponding dataset terms. The LS-EEND ONNX publisher declares MIT; AMI/CALLHOME/DIHARD datasets retain their own terms and are not distributed. See [third-party notices](/docs/1.4.0/third-party-notices.md) and inspect the selected model before downloading or redistributing weights.

## Recorded model execution and current acceptance

The following were actually downloaded, integrity-checked and used to transcribe an 11-second public speech recording on Linux CPU during the earlier model audit. Their reports retain their original implementation identities; they are not fresh executions of every backend after each unrelated change. The current installed-build product journey is listed in [VALIDATION.md](/docs/1.4.0/source/#source-81cf95d5c07b3b7671cd). These are functional integration checks, not comparative accuracy or latency benchmarks.

| Model | Runtime | Observed output | Timing information |
|---|---|---|---|
| `faster-whisper.tiny` | Faster Whisper 1.2.1 / CTranslate2 | Correct expected speech text | Segment plus 22 word timestamps |
| `whisper.tiny.q8_0` | transcribe.cpp 0.4.1, exact 45,981,088-byte GGUF | Correct expected speech text | Native segment bounds |
| `moonshine.streaming-tiny.q8_0` | transcribe.cpp 0.4.1 | Correct expected speech text | Input-clip coverage, explicitly not word alignment |
| `fluid-speech.mini.onnx` | ONNX Runtime, reviewed local TDT adapter | Correct expected speech text | Input-clip coverage, explicitly not word alignment |
| `qwen3-asr.0.6b.q8_0` | transcribe.cpp 0.4.1, exact 850,423,456-byte GGUF | Correct expected speech text with automatic language detection | Input-clip coverage, explicitly not word alignment |

The final model audit reran all five ASR backends after the bounded-window changes. It also transcribed a 132-second repeated-speech fixture through Faster Whisper: recognition crossed multiple windows and preserved global word/segment times through 130.5 seconds. [Recorded real backend checks](/docs/1.4.0/source/#source-2257372a140d3f1c103b) include the observed output and measurements; these single-fixture times are not performance benchmarks.

The original default-wheel check created a separate managed Faster Whisper runtime and used copied verified tiny weights to transcribe the same recording. The audited wheel was installed into another fresh virtual environment outside the source checkout, without inference extras, and used that managed runtime through its updated packaged worker. The wheel's 40-tool MCP interface, modern/legacy protocol negotiation, local API, authentication, browser assets and native source resources were checked independently. No additional model weights were needed for the wheel check.

The WeSpeaker model was separately downloaded and run through Sherpa ONNX, producing 256-dimensional acoustic embeddings. A small fixture of two recordings of voice A and one of voice B clustered the A recordings together (cosine similarity 0.8893) and kept B separate. A combined roughly 23-second A → B → A recording through the full HTTP transcription and diarization path produced two anonymous speaker IDs and reused A's ID when that voice returned; a 0.64-second turn remained unknown. This verifies the acoustic integration on those fixtures, not named identity, general diarization accuracy or separation of overlapping voices.

Other model sizes share implemented adapters but have not each been downloaded and accuracy-tested in this environment. The Swift helpers call the real APIs documented by their pinned dependencies; their compilation, Apple permissions and inference still need Mac hardware. Catalog status says so. GPU acceleration and Windows runtime behavior were not exercised here.

## Exact FluidVoice identities

The platform column below describes the model family route. It is not a promise that every CPU/Python combination on that OS has a compatible runtime. The reviewed binary baseline is standard CPython 3.11–3.14, 64-bit desktop systems and glibc 2.28+ on Linux. Detailed constraints and real execution evidence are in [NATIVE_PORTABILITY.md](/docs/1.4.0/platforms.md).

- Intel macOS Faster Whisper requires macOS 13+ and Python 3.11–3.13 with ONNX Runtime 1.23.2. Portable Fluid Mini ONNX is unavailable on Intel macOS because this older runtime cannot execute its 6-bit operators.
- Native Windows ARM64 Python has no reviewed CTranslate2 wheel. Faster Whisper therefore needs an x64 Python environment; transcribe.cpp has an explicit pinned source-build route with MSVC ARM64 tools. Mini ONNX and WeSpeaker have published ARM64 dependency routes, with native execution still pending.
- Apple Silicon ONNX Runtime 1.31.0 requires macOS 14+. Exact Core ML and Apple speech selections retain their individual OS, toolchain and locale requirements.

The default application dependency lock resolves to binary packages on all six reviewed Windows/macOS/Linux x64/ARM64 targets under Python 3.12. This verifies installable dependency metadata, not native execution on those targets. `runtime_support` in model inspection and planning supplies the actual interpreter-specific answer.

| ID | Artifact / backend | License | Platform |
|---|---|---|---|
| `whisper.tiny.q8_0` | whisper-tiny-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `whisper.base.q8_0` | whisper-base-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `whisper.small.q8_0` | whisper-small-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `whisper.medium.q8_0` | whisper-medium-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `whisper.large-v3-turbo.q8_0` | whisper-large-v3-turbo-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `whisper.large-v3.q8_0` | whisper-large-v3-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `qwen3-asr.1.7b.q8_0` | Qwen3-ASR-1.7B-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `parakeet.tdt-v3.coreml` | FluidInference/parakeet-tdt-0.6b-v3-coreml / apple-coreml | CC-BY-4.0 | darwin-arm64 · macOS 14+ |
| `parakeet.tdt-v2.coreml` | FluidInference/parakeet-tdt-0.6b-v2-coreml / apple-coreml | CC-BY-4.0 | darwin-arm64 · macOS 14+ |
| `fluid-speech.mini.coreml` | fluid-mini / apple-coreml | CC-BY-4.0 | darwin-arm64 · macOS 15+ |
| `fluid-speech.pico.coreml` | Public FluidVoice Pico 1.1.1 archive / apple-coreml | unresolved; see below | darwin-arm64 · macOS 15+ |
| `parakeet.flash.160ms.coreml` | FluidInference/parakeet-realtime-eou-120m-coreml / apple-coreml | NVIDIA-Open-Model-License | darwin-arm64 · macOS 14+ |
| `cohere.transcribe-2026-03.6bit.coreml` | BarathwajAnandan/cohere-transcribe-03-2026-CoreML-6bit / apple-coreml | GPL-3.0 | darwin-arm64 · macOS 15+ |
| `nemotron.3.5.offline.6bit.coreml` | BarathwajAnandan/nemotron-3.5-asr-offline-6bit-CoreML / apple-coreml | OpenMDW-1.1 | darwin-arm64 · macOS 14+ |
| `nemotron.3.5.streaming320.int8.coreml` | BarathwajAnandan/nemotron-3.5-asr-streaming320-int8-CoreML / apple-coreml | OpenMDW-1.1 | darwin-arm64 · macOS 15+ |
| `apple.speech.legacy` | legacy / apple-speech | Apple-OS-terms | darwin · macOS 14+ |
| `apple.speech.analyzer` | analyzer / apple-speech | Apple-OS-terms | darwin-arm64 · macOS 26+ |

## Additional identities

| ID | Artifact / backend | License | Platform |
|---|---|---|---|
| `faster-whisper.tiny` | Systran/faster-whisper-tiny / faster-whisper | MIT | linux, darwin, windows |
| `faster-whisper.base` | Systran/faster-whisper-base / faster-whisper | MIT | linux, darwin, windows |
| `faster-whisper.small` | Systran/faster-whisper-small / faster-whisper | MIT | linux, darwin, windows |
| `faster-whisper.medium` | Systran/faster-whisper-medium / faster-whisper | MIT | linux, darwin, windows |
| `faster-whisper.large-v3-turbo` | mobiuslabsgmbh/faster-whisper-large-v3-turbo / faster-whisper | MIT | linux, darwin, windows |
| `faster-whisper.large-v3` | Systran/faster-whisper-large-v3 / faster-whisper | MIT | linux, darwin, windows |
| `qwen3-asr.0.6b.q8_0` | Qwen3-ASR-0.6B-Q8_0.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `moonshine.streaming-tiny.q8_0` | moonshine-streaming-tiny-Q8_0.gguf / transcribe.cpp | MIT | linux, darwin, windows |
| `moonshine.streaming-small.q8_0` | moonshine-streaming-small-Q8_0.gguf / transcribe.cpp | MIT | linux, darwin, windows |
| `moonshine.streaming-medium.q8_0` | moonshine-streaming-medium-Q8_0.gguf / transcribe.cpp | MIT | linux, darwin, windows |
| `voxtral.realtime-4b.q4_k_m` | Voxtral-Mini-4B-Realtime-2602-Q4_K_M.gguf / transcribe.cpp | Apache-2.0 | linux, darwin, windows |
| `fluid-speech.mini.onnx` | FluidVoice-Labs/fluid-speech-mini-onnx / onnxruntime | CC-BY-4.0 | linux, darwin, windows |
| `diarization.wespeaker.en` | wespeaker_en_voxceleb_resnet34.onnx / sherpa-onnx | Apache-2.0 | linux, darwin, windows |

## Installation and privacy

```sh
olenji models plan-install --profile fluidvoice-parity --compatible-only --json
olenji models install faster-whisper.tiny --json
olenji models install whisper.tiny.q8_0 --json
olenji models install fluid-speech.mini.onnx --json
olenji models install apple.speech.analyzer --language tr-TR --json
olenji models verify faster-whisper.tiny --json
olenji models parity --json
```

`fluidvoice`, `fluidvoice-parity` and `fluidvoice-exact` select the current seventeen identities. The historical `fluidvoice-2026-10-22` profile preserves its original sixteen-model membership; installing it does not establish current parity. The parity report always uses the current reviewed reference and requires successful inference validation for every selection.

Installation uses a managed model directory and isolated runtime environments when the current application environment lacks the backend. No global Python environment is modified. Standard runtime installs require binary distributions, avoiding accidental builds of large inference dependencies. transcribe.cpp explicitly pins both its wrapper and native package to 0.4.1; its separate fallback can build the pinned `4d7c1ccefd39e5a9ea36cca5f8fefc6dcc14b99b` source with Git, CMake and a suitable C++ compiler. Apple helpers use the pinned FluidAudio fork `eb1e6628998e47022799d305b52c2680d3576801` and local Swift developer tools. SpeechAnalyzer needs macOS 26 and Xcode 26 / Swift 6.2.

Downloads resolve an immutable Hugging Face commit and verify available publisher LFS SHA-256 values or repository blob hashes. Each installed file receives a local SHA-256 inventory. Mini and Pico Core ML additionally check FluidVoice's pinned archive byte counts, archive SHA-256 values and extracted manifest SHA-256 values. Core ML allowlists select the exact runtime assets, avoiding unused alternate encoders and duplicate uncompiled models. The WeSpeaker GitHub release has no publisher digest; its manifest says `local-sha256`, which protects subsequent local integrity but is not a publisher-authenticated checksum. Partial HTTP downloads resume with Range requests; changed identities restart, failed hashes never become installed models, and archive extraction rejects path escapes, links and special files. Explicit verification persists corruption status and serializes its manifest updates with installation and removal.

Active inference holds a model lease; long-lived speaker sessions can hold shared pins without serializing separate readers. OS file locks protect these reservations across CLI processes and release them if a process exits. Models in use cannot be removed or replaced, and warm caches are discarded when an idle installation is removed/replaced.

The Mini/Pico version selection is pinned to FluidVoice's reviewed source. The audit verified the official model feed's Ed25519 signature and sequence 1; its Mac entries were empty and the built-in Mac fallback remained 1.1.1. Olenji does not execute a dynamic model feed or trust unreviewed URLs from it. Pico's archive SHA-256 is `542f74f639438bf37ff134a7a75daddb50d301deb87696994e11ff272df21512`; its embedded manifest SHA-256 is `a87ee649edc18aca6d30f251e75237f48c995448b865ffee35ab343ed3e66121`. [Publisher catalog and signing keys](https://github.com/altic-dev/FluidVoice/blob/8976f3aedc4f8fb3499a9a28c15fa29840f2b5f3/Sources/Fluid/Services/CompactSpeechModelReleaseCatalog.swift) and [official Pico archive](https://models.fluidvoice.app/parakeet/fluid-pico/1.1.1/fluid-parakeet-pico-coreml.tar).

Inference receives installed local paths. Hub libraries in managed workers have offline mode enabled; no model or provider is silently substituted. Managed workers disable Hugging Face telemetry and set `ORT_DISABLE_TELEMETRY=1` before optional runtime initialization; the ONNX Runtime API also disables legacy telemetry events. [ONNX Runtime's privacy documentation](https://github.com/microsoft/onnxruntime/blob/main/docs/Privacy.md) explains why setting the environment before initialization matters. The Mini ONNX adapter loads only pinned data/graph assets; it does not execute the model repository's Python script. Its NumPy feature extraction and greedy token/duration decoding implement the publisher's documented graph contract.

Apple Legacy checks on-device eligibility for the requested locale when local-only inference is selected. Network recognition must be explicitly permitted for that session. Apple SpeechAnalyzer prepares missing OS assets through a separate explicit installation operation, and inference fails if the requested locale's assets are missing. Reinstalling an already installed Apple speech identity with a new `--language` prepares that locale and records the requested locales. This history does not guarantee macOS will retain the assets; the helper checks eligibility again at inference. OS speech assets may be retained by macOS after an Olenji catalog installation is removed.

## Language selection

Language choices follow both model coverage and the implemented runtime contract. An explicit unsupported language is rejected before inference, including Turkish with an English-only Moonshine or Fluid Speech model. No model is silently substituted.

| Model family | Input language behavior |
|---|---|
| Whisper / Faster Whisper | Automatic detection or an explicitly supported language |
| Qwen3 ASR / Voxtral | Automatic detection only in the pinned transcribe.cpp adapters; explicit hints return an actionable error |
| Cohere Core ML | Explicit supported language required to construct the decoder prompt |
| Apple Legacy / SpeechAnalyzer | Explicit locale required; actual supported locales and on-device eligibility are checked by the OS |
| English-only models | English or automatic selection; another explicit language is rejected |

Qwen's automatic-only restriction is an adapter limit documented by [transcribe.cpp](https://github.com/handy-computer/transcribe.cpp/blob/4d7c1ccefd39e5a9ea36cca5f8fefc6dcc14b99b/docs/models/qwen3-asr-0.6b.md). Language support describes transcription into the spoken language. Translation into Turkish is a separate provider or agent operation; it does not change an English-only recognizer into a Turkish speech recognizer.

## Live behavior and timestamps

The application live pipeline uses bounded speech utterances and actual interim recognition. Its metadata calls this `buffered` live transcription. Several underlying models also support native streaming, but their upstream capability is not a promise that the current application capture path carries a persistent native stream. The UI receives real partial hypotheses and committed text; no synthetic transcript is used to animate live sessions.

Whisper GGUF currently exposes native segment timestamps through transcribe.cpp; the portable Faster Whisper variants provide word timestamps. Models without alignment emit `timing: clip` with the supplied audio bounds. These bounds describe input coverage and must not be interpreted as accurate individual-word alignment. Speaker analysis is separate: the existing WeSpeaker route clusters embeddings, while the additional models produce speaker-activity timelines. Neither establishes personal identity or adds ASR word alignment.

All file adapters now read normalized audio in windows of at most 60 seconds, rather than loading an entire long recording into a NumPy array. A quiet boundary near the window end reduces the chance of cutting through a word; each sample belongs to exactly one window and segment/word times are offset into the original recording. Native transcribe.cpp windows additionally respect the lower model-specific runtime limit with headroom. Mini ONNX applies its own shorter acoustic windows inside this outer bound. The Apple wrapper invokes the helper separately for each file window, which bounds native audio arrays but currently reloads the model between windows. Boundary context can still affect recognition; this implementation does not claim lossless recognition across arbitrary cuts. Tests check bounded input sizes, sample conservation, actual runtime limits and global timestamp offsets. [Native input-limit contract](https://github.com/handy-computer/transcribe.cpp/blob/4d7c1ccefd39e5a9ea36cca5f8fefc6dcc14b99b/docs/input-limits.md).

## Licenses and attribution

Each installed model retains its own license. Source-code licensing for Olenji does not replace weight licensing. Download availability and redistribution terms are separate metadata.

- **Fluid Speech Mini by FluidVoice**, built on NVIDIA Parakeet v3 and Moondream Parakeet Ultra: CC BY 4.0. Olenji's portable adapter credits the model and public inference reference. The exact Core ML archive and portable ONNX release remain different artifact identities.
- The exact **Cohere Core ML conversion declares GPL-3.0**. This differs from upstream weights; it must not be relabeled Apache-2.0.
- Parakeet v2/v3 use CC BY 4.0, Flash uses NVIDIA Open Model License, and the referenced Nemotron 3.5 releases inherit OpenMDW 1.1 terms.
- Pico is downloadable from FluidVoice's public, publisher-pinned archive. The audited archive contained no separate weight license, so its license remains `unresolved`; Olenji does not bundle or relicense its weights. Its real `.fluidParakeetPico` adapter is provided by the pinned FluidAudio dependency, with no model substitution.
- Apple speech uses OS terms and locale/device eligibility. Models do not ship inside Olenji's source or wheel.

## Primary references

- [Reviewed FluidVoice source](https://github.com/altic-dev/FluidVoice/tree/0fccdeb014462e6f82889af38c7e9de92d87a130)
- [Exact Qwen3 ASR 1.7B Q8_0 artifact](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/tree/0e0a596e3959c3f3f2ab7d443a5b6f0f4a4bba6f)
- [transcribe.cpp 0.4.1 source and model documentation](https://github.com/handy-computer/transcribe.cpp/tree/4d7c1ccefd39e5a9ea36cca5f8fefc6dcc14b99b)
- [Faster Whisper](https://github.com/SYSTRAN/faster-whisper)
- [Pinned FluidAudio dependency](https://github.com/altic-dev/FluidAudio/tree/eb1e6628998e47022799d305b52c2680d3576801)
- [Fluid Speech Mini ONNX graph contract](https://huggingface.co/FluidVoice-Labs/fluid-speech-mini-onnx/tree/fc592620325027419883cf272e70588d8a788c0a)
- [Fluid Speech Mini model family and limitations](https://fluidvoice.com/labs/fluid-speech-mini)
- [NVIDIA Nemotron 3.5 language coverage](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)
- [Apple SpeechTranscriber results](https://developer.apple.com/documentation/speech/speechtranscriber/result)
- [Apple AssetInventory](https://developer.apple.com/documentation/speech/assetinventory)
- [Sherpa ONNX speaker-model release](https://github.com/k2-fsa/sherpa-onnx/releases/tag/speaker-recongition-models)
- [Portable Nemotron/Sortformer converter artifacts](https://huggingface.co/altunenes/parakeet-rs/tree/664cc742197053fa11afd12f5100749fb8000181)
- [NVIDIA Nemotron 3 Diarization](https://huggingface.co/nvidia/Nemotron-3-Diarization)
- [NVIDIA Sortformer v2.1 model and presets](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1)
- [LS-EEND ONNX exports and state/frontend contracts](https://huggingface.co/GradientDescent2718/LS-EEND-ONNX/tree/cc40a1e1242c148fbbc15c132e43b8ac15056e53)
- [Pyannote segmentation export](https://huggingface.co/csukuangfj/sherpa-onnx-pyannote-segmentation-3-0/tree/9403a6902bb58e3d5ae8c7e77c3422de279db2e0)
- [WeSpeaker pretrained-weight terms](https://github.com/wenet-e2e/wespeaker/blob/master/docs/pretrained.md)
