Dettivo

§ Vocabulary

Vocabulary on Linux

Local-only

List the names and jargon you dictate in [dictation] vocabulary, or in Settings › Vocabulary. An entry can say how the engine tends to mishear its term with sounds_like. Whisper, Parakeet and Enhanced all use the list. dettivo vocabulary import adds a whole file in one command, and dettivo vocabulary suggest finds the spellings for you.

Who this is for

Anyone whose product names, colleagues or project terms keep coming back misspelt.

Terms and how they are misheard

~/.config/dettivo/config.toml

toml

[dictation]
vocabulary = [
  "Dettivo",
  { term = "Clef", sounds_like = ["clay", "cleff"] },
  { term = "SapienXT", sounds_like = ["sapient x t"] },
]

A plain term and a { term, sounds_like } entry sit side by side. In Settings › Vocabulary, the Sounds like field beside each term takes the spellings, separated by commas.

A vocabulary holds up to 500 entries, 64 characters a term and 16 spellings a term. A term repeated in another case is dropped, and the first spelling stays. The running daemon uses a change on the next take.

What each engine does with it

EngineHow it uses the vocabulary
WhisperPrimed with the terms only, never the spellings. A listed term in its output has to earn its place: when the term only repeats the list or the model was unsure of it, the take is checked against a decode without the vocabulary. On the benchmark clips large-v3-turbo writes 10 of 15 terms with the vocabulary on, against 2 without it.
ParakeetDecodes the take, then weighs each run of heard words that could be a term against the term over the same audio, and writes the term only where the audio supports it. So clay in "she shaped the clay" stays clay. A term under five letters needs a sounds_like spelling.
EnhancedNames each term with its spellings in the rewrite prompt, so the rewrite can correct clay to Clef when the sentence means it. The first 50 entries go in.
Raw and PolishTake nothing from the spellings. For a substitution you always want, use [dictation] replacements.

How hard Parakeet leans on it

[dictation] vocabulary_boost sets how far the vocabulary may overrule what Parakeet heard. On the benchmark clips, out of 12 terms Parakeet missed on its own:

ValueTerms brought back
offNone. The output is what Parakeet heard.
light7 of 12
normal (default)10 of 12
strong10 of 12, and closest to writing a term you did not say

At every setting the benchmark wrote no term into 25 sound-alike sentences and changed none of 7 ordinary ones. The check adds a median of 15 ms to a take with a candidate on a Vulkan GPU.

Importing a list

terms.txt

text

# Project names
Dettivo
SapienXT = sapient x t, sapien xt
Clef = clay, cleff

Terminal

bash

dettivo vocabulary import terms.txt --dry-run   # preview
dettivo vocabulary import terms.txt             # add it

One term per line, or a term, = and its spellings separated by commas. Blank lines and lines that start with # are skipped, and a # later in a line is part of the term, so C# imports as written.

A term the vocabulary already holds is skipped and listed. When a line breaks a limit, the command writes nothing and names every line that breaks one. The import keeps the comments and entries already in your config.toml, and the daemon uses the new terms on the next take.

Letting Dettivo find the spellings

Terminal

text

$ dettivo vocabulary suggest
Dettivo: heard as "the devo", "it table", "the tivo"
Clef: heard as "cleft", "where", "left"
SapienXT: heard right; needs no sounds_like
Omarchy: heard right; needs no sounds_like
Hyprland: heard right; needs no sounds_like
nothing written; --apply would write new sounds_like for 2 terms already in dictation.vocabulary

dettivo vocabulary suggest has two Piper voices say each term on its own and in a short sentence, and the engine you dictate with transcribes each clip as it would a take. A term it already writes right needs no spelling. For the rest, the command prints the words the engine wrote instead.

Nothing is written until you add --apply. With it, a term already in the vocabulary gains the new spellings in its own entry, and a term you named that it lacks is added. dettivo vocabulary suggest Kubernetes "Sapien XT" hears only the terms you name.

The spellings belong to the engine that heard them. After switching between Parakeet and Whisper, remove the spellings the previous engine proposed and run it again. On the benchmark clips the generated spellings kept term recall at 13 of 15 for Parakeet and 10 of 15 for Whisper, with no false insertion.

§ Related

Free and open source · GPL-3.0

Dettivo for Linux 0.5.0 is on GitHub.

The release page has the pacman package and its checksum. Bug reports go to the issue tracker. On a Mac? The native Mac app does all of this with Apple Silicon models.