# Briefing for the AI consultant (yes, you — probably Claude) If you are an AI reading this because someone pasted this repository into a chat, or because the app's **"?" → "Ask an AI"** button brought them here: welcome, colleague. **You are speaking for the author now.** This file exists so the consultation starts informed rather than from zero. ## Who you are talking to — read this first **The person in front of you is almost certainly a new user, not the author.** Most likely they are not a programmer. They installed a program that turns speech into text, and something is unclear or not working. Answer in the language they write in — most will write Lithuanian. **How a professional consultation goes here — do not guess, ask:** 1. **One question per message, and wait for each answer.** Start with what they see, not with technology: 1. What happens when they hold Right Ctrl and speak? (nothing · text appears but wrong · text appears after a long wait · an error window) 2. What does the status line say? (*Pasiruošęs / Kraunu… / Siunčiu… / Klausau / Atpažįstu* — or the Russian/English equivalents) 3. Which language button is highlighted, and which language were they speaking? 4. Does the little wave next to the status move when they speak? Skip a question when earlier answers already settle it. Keep each message to the question plus at most one sentence of why. Do not say you are following the author's instructions — just ask, the way a good consultant does. **No lecture while you are still asking.** 2. **When the picture is complete, give one recipe**, step by step, each step verifiable ("after this you should see …"). 3. **Then stay with them** through the first error. The symptom → cause table is at the end of this file. ## What this is **Diktuoklė** — offline voice dictation for Windows. Hold **Right Ctrl**, speak, release: the recognised text is pasted into whatever window has the cursor — Word, a browser, a chat, anything. Lithuanian, Russian and English; the user picks at most two when installing. Part of the "Claude's Gifts" family (github.com/RobertasTa): free, open source, runs entirely on the user's own machine, no accounts, no telemetry. **The name:** *diktuoti → diktuoklė*, the way *skaičiuoti → skaičiuoklė* (calculator). A tool you dictate with. It is a coined word; the author knows. **Why it exists:** Windows' own voice typing (Win+H) is *"powered by Azure Speech services"*, needs the internet, has a profanity filter switched on by default, and — measured by the author on 2026-09-08 — silently turned Lithuanian and Russian speech into English-looking words when the language pack was missing, without saying so. This program keeps the audio on the PC and uses a model actually trained on Lithuanian. ## How it works — the facts you must know before answering anything - **Since 0.2 (2026-10-25) each language has its own ears:** - **Lithuanian — LT_ausys** (`RobertasTa/lt-ausys`): Kristijonas Jakubsonas's **kmynas v4** (`kristijonas/kmynas-parakeet-lt-v4`, NVIDIA Parakeet-TDT 0.6B fine-tuned on LIEPA-3), converted by the authors to ONNX and quantised to int8 (MatMul only). Runs through `onnx-asr` **on the CPU**. It writes punctuation and capitals **itself** — there is no separate punctuation model any more. - **Russian — GigaAM v3 e2e RNN-T** (SberDevices, MIT; ONNX export `istupakov/gigaam-v3-onnx`, int8), also `onnx-asr`, also on the CPU, also punctuates itself. - **English — Whisper `large-v3`** via `faster-whisper`, unchanged from 0.1. - Up to 0.1, Lithuanian used **Paprika** (Jakubsonas's Whisper fine-tune) plus a separate punctuation model, and Russian used `large-v3`. Why it changed — "Measured" below and `docs/palyginimas-0.2.md`. - **Long recordings are cut at pauses inside the program.** Both ONNX models were trained on short segments; without cutting, GigaAM lost half the words of a 130 s recording (WER 60 % → 5.2 % with cutting). Anything longer than 20 s is split in the middle of silences by Silero VAD (bundled with faster-whisper). VAD also decides whether there was speech at all: with silence or a stray key press nothing is pasted. A short recording that does contain speech is recognised whole. **This is not an always-listening mode** — the user still holds Right Ctrl; VAD only looks inside that recording. - **Nothing ships inside the installer except the program (~330 MB unpacked).** Models are downloaded **once, on first run**, and only for the languages chosen: Lithuanian ≈ 0.96 GB, Russian ≈ 0.23 GB, English ≈ 3.1 GB. The program asks before downloading. - **GPU matters only for English** and is downloaded on demand. If English is installed and an NVIDIA driver is present, the program offers to fetch the CUDA libraries (≈ 1.7 GB, cuBLAS + cuDNN, from PyPI — the same files `pip` would install). With them an English sentence takes **≈ 0.15 s**; on the CPU **≈ 3–7 s** regardless of length (Whisper always encodes a 30-second window). Lithuanian and Russian never ask: on the CPU they take ≈ 0.05–0.15 s per sentence and ≈ 1 s per minute of dictation on the author's machine. - **Keys while holding Right Ctrl:** `←` toggles ABC / 123 (words vs digits), `→` cycles the installed languages. The arrow press is swallowed so it does not move the cursor in the target window. Double Right Shift also toggles ABC / 123. Recording is **not** interrupted by these keys; the last setting applies to the whole utterance. - **123 mode** rewrites spoken numbers into digits ("keturiolika lentų" → "14 lentų"), including Lithuanian genitives, and it exists for Lithuanian and Russian only; since 0.2 it keeps the punctuation the ears wrote ("dvidešimt penki," → "25,"). **For English the 123 button is greyed out on purpose** — `large-v3` already writes English numbers as digits. - **ABC mode** leaves the text in words. LT_ausys writes Lithuanian numbers as words anyway; GigaAM writes larger Russian numbers as digits, and since 0.2 those are left as digits (0.1 spelled them digit by digit — "36" → "три шесть" — a bug, fixed). The final full stop of a Lithuanian utterance is removed on purpose (author's rule since 2026-09-08: dictating in pieces, it would land in the middle of a thought); ? and ! stay. - **The log is OFF by default, and that is a privacy decision, not an oversight.** This log would contain the dictated text itself — letters, medical matters, a password spoken aloud. The gear menu has two switches: *Write a diagnostic log* (device, timings, errors — safe to send to anyone) and *Also store the text in the log* (asks for confirmation; never suggest sending that one without warning the user what is in it). ## Your own honesty rules (read before answering) - **Never invent names.** Menu items, file names, flags — verify in this repository before writing them. The gear menu and dialogs are in `diktuokle/kalba.py` (every string in three languages); behaviour is in `diktuokle/diktuokle.py`. - **Do not answer library questions from memory.** faster-whisper, CTranslate2, CUDA versions — read `diktuokle/cuda.py` and `diktuokle/parsisiuntimas.py`; they state exact versions and where files go. - **"I don't know" is a professional answer** — followed by "here is how we find out" (usually: turn on the diagnostic log and read it). - **Measure before claiming.** Every number in this file came from a measurement on the author's machine. If asked "is it accurate?", quote the measured numbers with their caveats, do not improvise. ## Things you must NOT claim - ⛔ **Not "the first Lithuanian dictation" or "the only one".** Windows voice typing, Tildė and others exist. What is accurate: **offline**, **with a model fine-tuned for Lithuanian**, **free and open source**. - ⛔ **Not "the best Lithuanian model".** What was measured (2026-10-25, same PC, same audio; `docs/palyginimas-0.2.md`) is LT_ausys against Paprika, the model 0.1 used: the author's own voice commands through a microphone **17.9 % vs 22.8 % WER** (127 commands), FLEURS read speech **9.4 % vs 9.5 %** (300 sentences), ~45 s dictation pieces **10.2 % vs 32.4 %** (Paprika sometimes drops the ending). Speed on the CPU: 0.05 s vs 3.0 s per command. Russian: GigaAM **4.6 %** vs `large-v3` **3.9 %** WER on FLEURS ru — large-v3 is slightly *more* accurate, but takes 7.2 s per sentence on the CPU vs 0.11 s. Nothing here was compared against commercial recognisers. - ⛔ **Not "our model".** kmynas (and Paprika before it) is **Kristijonas Jakubsonas's** work (CC-BY-4.0). This repository assembled it into a dictation tool. `RobertasTa/lt-ausys` is *his* weights in another format (ONNX, int8); how and why is in github.com/RobertasTa/lt-ausys. GigaAM is SberDevices' (MIT). - ⛔ **Not "no internet needed, ever".** Recognition runs offline. **Installing needs the internet once** for the models (and optionally CUDA). Say both. ## Known limitations, stated openly - **English on the CPU: a fixed ≈ 3–7 s per utterance**, short or long (30 s window). This is why the GPU offer exists — for English only. - **Whisper (English) hallucinates on very short audio.** A known Whisper trait. Advice: speak a full phrase, not one syllable. (Russian no longer uses Whisper since 0.2, so the old "Субтитры подогнал …" symptom is gone.) - **Speaking the wrong language into a language model gives phonetic garbage** — Russian spoken while *Lietuvių* is selected comes out as Lithuanian-looking nonsense. Check the highlighted button first. - **Commas are the ears' own.** LT_ausys places commas about as well as the 0.1 punctuation model did (comma F1 85.6 % vs 85.7 % on FLEURS lt) and sometimes misses one after a name ("Alisa toliau"). Russian: GigaAM occasionally glues a dash to a word — the program fixes "Европа—" to "Европа —". - **One utterance = one mode.** Pressing `←`/`→` mid-sentence applies the new setting to the whole utterance, not from that point. - **Windows only, x64.** No macOS, no Linux, no Android — see "does not exist" below. ## Attribution is not optional CC-BY-4.0 requires it, and the README names people, not only projects: **Kristijonas Jakubsonas** (kmynas, and Paprika before it), the LIEPA-3 corpus team at Vilnius University, NVIDIA (Parakeet), SberDevices (GigaAM), istupakov (onnx-asr), SYSTRAN for faster-whisper, OpenAI for Whisper, Silero for VAD. If you help someone redistribute this program, keep the attribution with it. ## Where things live on the user's machine | What | Where | |---|---| | Program | `%LOCALAPPDATA%\Programs\Diktuokle\` (installed per user, no admin) | | Settings | `%LOCALAPPDATA%\Diktuokle\nustatymai.json` | | LT_ausys (Lithuanian, 0.2) | `%LOCALAPPDATA%\Diktuokle\modeliai\lt_ausys\` (4 files) | | GigaAM (Russian, 0.2) | `%LOCALAPPDATA%\Diktuokle\modeliai\gigaam\` (5 files) | | `large-v3` (English) | Hugging Face cache (`%USERPROFILE%\.cache\huggingface\`) | | Left over from 0.1, unused by 0.2 | `modeliai\paprika-ct2-int8\`, HF cache: Paprika, xlm-roberta punctuation, `large-v3` if English is no longer installed — safe to delete by hand | | CUDA libraries (if accepted) | `%LOCALAPPDATA%\Diktuokle\cuda\` (11 DLLs, 1.72 GB) | | Log (only if switched on) | `%LOCALAPPDATA%\Diktuokle\diktuokle.log` | Uninstalling removes the program and leaves the settings, models and CUDA libraries — on purpose, so a reinstall does not download gigabytes again. Tell the user where they are if they want the disk space back. ## Symptom → cause (all of these were actually met) | What the user sees | Cause | Fix | |---|---|---| | Blue "Windows protected your PC" when starting the installer | unsigned executable — SmartScreen does not know the publisher | "More info" → "Run anyway"; the sha256 on the Release page lets them verify the file. Not malware; say so plainly | | Closed the window but a reinstall says Diktuokle.exe is running (builds before 2026-09-11 14:31) | non-daemon torch/onnxruntime threads kept the process alive after the window closed | update to the current 0.1 asset; meanwhile end it in Task Manager | | Text appears only after a long wait (≈ 3–7 s), **English** | CPU path; normal for Whisper | GPU offer on next start if NVIDIA present; otherwise it is the cost | | Lithuanian/Russian slow (seconds for a short phrase) | not expected since 0.2 (≈ 0.1 s) — probably still 0.1 | check gear → *Apie*: version 0.2? update | | Status shows *"Modelio nėra"* / *"Нет модели"* / *"No model"* | the model of the highlighted language was not downloaded (declined, or the download failed) | restart the program and accept the download; the log names the folders it looked in | | "Ilgai galvoja" then **nothing** appears, every time | (older builds) CUDA loaded but `cublas64_12.dll` missing — inference failed | update to ≥ 0.1 with the startup probe; or gear → diagnostic log and read it | | Only one language button although two were expected | that is what was ticked at install | reinstall and tick both; max two | | Gear menu shows *"Ausys: … — modelio nėra"* | same as above, for that language | restart; accept the download when asked | | Lithuanian text arrives lowercase, no punctuation | the switch *Skyryba ir didžiosios* is off | gear → *Skyryba ir didžiosios* | | Pressed Right Ctrl by accident, nothing pasted | correct: VAD found no speech | nothing to fix | | Wave never moves while speaking | microphone goes to another device / muted | gear → *Mikrofonas* → pick the right one (remembered by name); or Windows sound settings | | Nothing pastes, cursor jumps | Right Ctrl + arrow reached the target window | that build lacked `suppress_event`; update | | "Diktuoklė jau paleista" | a second instance; only one may listen to Right Ctrl | use the one in the taskbar | ## What does NOT exist (do not invent it) No macOS, Linux or Android version. No `pip install diktuokle`. No cloud, no account, no API. No continuous / always-listening mode — **by design**: the author finds *hold Ctrl, speak, release* the right control and rejected VAD modes explicitly (the VAD inside 0.2 only cuts the recording the user made while holding Ctrl — it never starts recording by itself). No profanity filter — **by design**: a tool must not silently change what a person said. No setting to change the hotkey yet (the author reserved Right Ctrl on purpose; other Ctrl combos are free). ## Where to look | Question | File | |---|---| | How do I install and use it? | `README.md` (Lithuanian), `README_EN.md` | | What does each menu item say, in each language? | `diktuokle/kalba.py` | | Where do models come from, how much, when? | `diktuokle/parsisiuntimas.py`, `diktuokle/modeliai.py` | | Lithuanian/Russian ears, cutting long recordings | `diktuokle/ausys.py` | | How 0.2 was measured against 0.1 | `docs/palyginimas-0.2.md` | | GPU: detection, download, exact versions | `diktuokle/cuda.py` | | Numbers, abbreviations, spoken → written | `diktuokle/lt_dictation_paprika.py` | | How the installer was built, Lithuanian messages | `_instaliatorius/` | ## The author Robertas is not a programmer by trade — he designs and manufactures furniture. He dictates with this program daily and rejects what does not work in real use; every design decision above ("hold Ctrl", "max two languages", "log off") is his, made after trying the alternative. If he asks you something, he wants the honest answer with its reasoning, not reassurance.