olenji.

Published application 1.0.2 · Versioned documentation · Markdown source

Speech models and translation providers

Reviewed 25 October 2026. Olenji has two separate model interfaces: managed local speech recognition and configured text-translation endpoints. An existing agent can also write its own Turkish or other translations against exact source revisions.

What the FluidVoice comparison covers

The current FluidVoice speech selection source exposes 17 selectable ASR identities. Its 25 October change adds Qwen3 ASR 1.7B through transcribe.cpp, using the same Q8_0 GGUF already catalogued in Olenji. Its 19 enum cases also include the older disabled Qwen Core ML preview and a hidden Nemotron alias; these do not add selectable models. The dated audit records all seventeen mappings, source hashes and publisher identities. The previous audit retains the historical sixteen-model result.

Olenji provides all 17 installation/adapter paths, plus 12 other transcription identities and one speaker-embedding model. The thirteen exact Hugging Face selections were rechecked against current public publisher metadata: their revisions and selected file identities still match the shipped catalog. The Mini/Pico feed is byte-identical to the previously signature-verified sequence 1 envelope with no macOS overrides, leaving the pinned 1.1.1 archives selected. This is source and artifact-identity coverage; native execution remains a separate claim.

The exact Apple/Core ML identities require their documented Mac architecture, operating system, locale assets and build toolchain. A portable conversion has its own ID. It does not replace an unavailable exact selection. See MODEL_SUPPORT.md and NATIVE_PORTABILITY.md, including the native Windows ARM64 Faster Whisper restriction, Intel Mac runtime limits, and pending native host checks. Live recognition currently uses buffered utterances even where the underlying model supports native streaming.

FluidVoice's README separately describes Fluid Intelligence as a privately maintained enhancement runtime. Olenji does not claim to download or run that private runtime. Optional cloud text models are also separate from the seventeen local ASR selections.

Agent-commanded speech acquisition

The CLI and MCP use the same model manager and durable installation jobs:

olenji --json models plan-install faster-whisper.tiny
olenji --json models install faster-whisper.tiny --wait
olenji --json models verify faster-whisper.tiny
olenji --json models inspect faster-whisper.tiny
olenji --json models parity

MCP exposes olenji_plan_install, olenji_install_model, olenji_job and olenji_model_parity. An agent must inspect the returned job result: a completed profile can still contain platform exclusions, and a ready installation has not necessarily completed inference. Explicit model IDs are never substituted. Ordinary recognition does not silently install missing weights or runtimes.

The generic fluidvoice, fluidvoice-parity and fluidvoice-exact profiles contain the current seventeen identities. The historical fluidvoice-2026-10-22 profile remains fixed at the original sixteen. models parity requires all seventeen current identities to be installed, runtime-ready and inference-validated before reporting complete parity.

The 24 October acquisition pass used those actual CLI paths in a fresh Linux x86-64 workspace. Faster Whisper Tiny downloaded 78,203,619 selected bytes, and WeSpeaker downloaded 26,534,365 bytes. Both jobs completed; explicit integrity verification passed; each managed runtime became ready. Those acquisition results are recorded separately from subsequent audio inference. WeSpeaker's release lacks a publisher digest, so its recorded local SHA-256 provides later integrity checking rather than publisher-authenticated provenance.

Translation endpoint contract

Configure an OpenAI-compatible chat endpoint and a model ID that the provider actually serves. Olenji sends the selected model unchanged, supplies a source-aligned translation request and validates the returned source IDs before saving text. It uses provider/model sampling defaults; it does not impose a temperature that some compatible model families reject.

Configured API paths are preserved. Trailing slashes are normalized, and only a URL with no path receives the conventional /v1 prefix:

Configured URL Requested endpoint
https://provider.example https://provider.example/v1/chat/completions
https://provider.example/v1/ https://provider.example/v1/chat/completions
https://generativelanguage.googleapis.com/v1beta/openai/ https://generativelanguage.googleapis.com/v1beta/openai/chat/completions
https://provider.example/tenant/acme/api/ https://provider.example/tenant/acme/api/chat/completions
https://provider.example/chat/completions https://provider.example/chat/completions

Google documents its literal /v1beta/openai/chat/completions route in Gemini OpenAI compatibility. Anthropic documents its compatible /v1 base and model-specific temperature limitations in OpenAI SDK compatibility. These are request-format references, not evidence that a paid request was executed in this environment.

FluidVoice's public provider repository lists OpenAI, Anthropic, xAI, Groq, Cerebras, Google, OpenRouter, Ollama and LM Studio. Olenji accepts a configured compatible URL/model instead of freezing these providers' changing model lists into the speech catalog. Provider access, model availability, additional authentication requirements and valid JSON response behavior still depend on the selected service. A model hosted by a provider is not downloaded by models install; local Ollama or LM Studio models are prepared by their own serving application.

For example, after obtaining a provider key through the provider's normal process:

olenji providers add gemini \
  --base-url https://generativelanguage.googleapis.com/v1beta/openai/ \
  --model YOUR_GEMINI_MODEL \
  --api-key-env GEMINI_API_KEY

olenji sessions configure SESSION_ID --metadata '{"local_only":false}'
olenji --json translate SESSION_ID --provider gemini --to tr --wait

The explicit session configuration above permits remote processing. A session remains local-only by default. For local translation, configure a loopback server such as http://127.0.0.1:11434/v1; for agent-produced translation, use translations put or olenji_write_translations without configuring a provider.

Credentials remain associated with their configured endpoint. Translation cannot override that endpoint while retaining its key, redirects are disabled, remote providers require HTTPS, and local-only policy is checked before each remote batch. Provider responses cannot overwrite human translations or silently attach text to a newer source revision. The external agent's own processing policies remain outside Olenji's local process boundary.

Verification scope

The provider regression uses the real configuration, translation request builder and SQLite persistence, replacing only external HTTP transport with a controlled response. Seven URL forms cover bare origins, versioned bases, Google's prefix, a custom prefix, complete endpoints and trailing slashes. Each case checks the literal destination, selected model, credential boundary, absence of a forced temperature, saved Turkish text, source revision 2 and an unchanged human translation. The cases failed on the previous request builder and pass after the fix.

The focused 71-case run also covers existing local-only checks, credential isolation, cancellation, source changes and concurrent human edits. The evidence and JUnit report bind those results to source hashes. These are controlled protocol and persistence tests; they make no claim about paid provider availability, translation quality, Apple inference, Windows execution or physical microphone capture.