Coding agent with a memory of all things
eukhe docs local-models.md

Local models #

eukhe can run small models on your computer for titles, judgments, translation, speech and dictation. eukhe does not download them automatically:

eukhe tiny-models                       # list models and their state
eukhe tiny-models download lfm2.5-230m  # download one model, or all
eukhe translate de hello                # translate text to German
eukhe say "hello" [--out a.wav]         # speak text, or write a WAV file
eukhe transcribe a.wav                  # write the text of a WAV file

The models are lfm2.5-230m and lfm2.5-350m (text), whisper-base and whisper-small (speech to text), and kokoro (text to speech). They go in ~/.eukhe/models/tiny/. The download checks the size and the sha256 of each file. The models need ONNX Runtime 1.24 or newer. The Nix package sets ORT_DYLIB_PATH to the nixpkgs library; your own ORT_DYLIB_PATH wins.

Each task has a role. A role uses its model, then its fallback list. It uses the first model that is available: a local model must be installed, and a provider model must be the session's model. If no model is available, the task fails.

Role Task Default order
tiny Session titles local/lfm2.5-230m, local/lfm2.5-350m, the session's model
judge Typed judgments Same as tiny
translate Translation Same as tiny
speech Text to speech local/kokoro
dictation Speech to text local/whisper-base, local/whisper-small
Key Default Effect
modelRoles.<role> none The model of the role: local/<id> or provider/model
retry.fallbackChains.<role> default order List of models after modelRoles.<role>; [] uses only modelRoles.<role>
tts.localVoice af_heart Voice of eukhe say; --voice overrides it
stt.enabled false Dictation into the editor with the dictation role
providers.tinyRuntimeLibrary none Path of the ONNX Runtime library; none uses ORT_DYLIB_PATH (global only)

For dictation, set stt.enabled true, then bind action app.stt.pushToTalk (hold the key) or action app.stt.toggle in binds.cfg. Both are not bound by default. Recording uses the first of pw-record, parec and arecord on PATH (macOS: sox, then ffmpeg).