Python performance baseline #9

Closed
opened 2026-11-05 15:23:11 +00:00 by xavierk · 1 comment
Owner

Part of #1

Question

Measure the current Python app on the target machine: idle RAM, dictation wake latency, and transcription speed on the RTX 2050. Record the numbers later budget decisions depend on.

Part of #1 ## Question Measure the current Python app on the target machine: idle RAM, dictation wake latency, and transcription speed on the RTX 2050. Record the numbers later budget decisions depend on.
xavierk added the wayfinder:task label 2026-11-05 15:23:11 +00:00
xavierk self-assigned this 2026-11-05 16:11:49 +00:00
Author
Owner

Resolution: performance baseline protocol locked, host facts recorded

Decision. Later budget work uses three metrics measured exactly this way on the target machine, with the default dictation model from the RTX 2050 CUDA model fit decision (large-v3-turbo-q8_0, ~874 MB): (1) idle tray RSS twice — model unloaded (after the 300 s keep-alive idle unload) and model loaded; (2) dictation wake latency from D-Bus toggle/hotkey to capture start (start-sound path); (3) transcription speed as real-time factor on a fixed 30 s 16 kHz sample, per backend (CUDA/Vulkan/CPU). The protocol is the baseline; the full loaded-model numbers are still to be taken on an installed build using the commands below.

What was actually observed this session (target machine the acceptance machine, Void Linux, niri): GeForce RTX 2050 4 GB, driver 595.112.07, CUDA 13.2, ~60 MiB GPU in use at rest; AMD Ryzen 5 7535HS (12 threads); 14 GiB RAM; system Python 3.14.8 with distro gi importable; vocalinux.version 0.18.5 imports in ~48 ms; numpy/pywhispercpp absent and no venv/ installed, so model-loaded RSS and transcription RTF could not be measured without an install (deliberately not done: this map is planning-only).

Rationale and evidence. Installing the toolchain and downloading the ~874 MB model inside this planning session would be implementation, not a decision, and the map Notes forbid it. The code read supports the three metric definitions: src/vocalinux/model_keepalive.py (DEFAULT_IDLE_TIMEOUT_SECONDS = 300, unload-when-idle semantics), src/vocalinux/speech_recognition/recognition_manager.py (whisper_cpp engine dispatch through pywhispercpp.model.Model, start/stop sound and capture paths), src/vocalinux/utils/whispercpp_model_info.py (large-v3-turbo-q8_0 spec and default pick), src/vocalinux/version.py (0.18.5). No GLOSSARY.md or docs/adr/ changes: no new domain term was settled.

Provenance. Decided by agent under the user's explicit delegation for this run (orchestrator decision-maker mode); the human did not personally state these numbers.

Consequences / re-run commands for the missing numbers. After ./install.sh --dev on this machine: (a) idle RSS via /usr/bin/ps -o rss= -p <tray-pid> before and after first dictation and after 300 s idle; (b) wake latency from vocalinux --debug toggle-to-capture log delta; (c) RTF by transcribing the fixed 30 s sample with the default model on each backend and dividing wall time by 30. Budget tickets cite this protocol.

## Resolution: performance baseline protocol locked, host facts recorded **Decision.** Later budget work uses three metrics measured exactly this way on the target machine, with the default dictation model from the RTX 2050 CUDA model fit decision (large-v3-turbo-q8_0, ~874 MB): (1) idle tray RSS twice — model unloaded (after the 300 s keep-alive idle unload) and model loaded; (2) dictation wake latency from D-Bus toggle/hotkey to capture start (start-sound path); (3) transcription speed as real-time factor on a fixed 30 s 16 kHz sample, per backend (CUDA/Vulkan/CPU). The protocol is the baseline; the full loaded-model numbers are still to be taken on an installed build using the commands below. **What was actually observed this session (target machine the acceptance machine, Void Linux, niri):** GeForce RTX 2050 4 GB, driver 595.112.07, CUDA 13.2, ~60 MiB GPU in use at rest; AMD Ryzen 5 7535HS (12 threads); 14 GiB RAM; system Python 3.14.8 with distro `gi` importable; `vocalinux.version` 0.18.5 imports in ~48 ms; `numpy`/`pywhispercpp` absent and no `venv/` installed, so model-loaded RSS and transcription RTF could not be measured without an install (deliberately not done: this map is planning-only). **Rationale and evidence.** Installing the toolchain and downloading the ~874 MB model inside this planning session would be implementation, not a decision, and the map Notes forbid it. The code read supports the three metric definitions: `src/vocalinux/model_keepalive.py` (`DEFAULT_IDLE_TIMEOUT_SECONDS = 300`, unload-when-idle semantics), `src/vocalinux/speech_recognition/recognition_manager.py` (whisper_cpp engine dispatch through `pywhispercpp.model.Model`, start/stop sound and capture paths), `src/vocalinux/utils/whispercpp_model_info.py` (large-v3-turbo-q8_0 spec and default pick), `src/vocalinux/version.py` (0.18.5). No GLOSSARY.md or docs/adr/ changes: no new domain term was settled. **Provenance.** Decided by agent under the user's explicit delegation for this run (orchestrator decision-maker mode); the human did not personally state these numbers. **Consequences / re-run commands for the missing numbers.** After `./install.sh --dev` on this machine: (a) idle RSS via `/usr/bin/ps -o rss= -p <tray-pid>` before and after first dictation and after 300 s idle; (b) wake latency from `vocalinux --debug` toggle-to-capture log delta; (c) RTF by transcribing the fixed 30 s sample with the default model on each backend and dividing wall time by 30. Budget tickets cite this protocol.
Sign in to join this conversation.