diff options
| author | elvis <elvis@claros.ar> | 2026-09-06 19:21:16 -0300 |
|---|---|---|
| committer | elvis <elvis@claros.ar> | 2026-09-06 19:23:37 -0300 |
| commit | f8f98e83481e7376a235fb305a095552433f79ab (patch) | |
| tree | 6d0ecddb26bef8430a086431de40f8ce9b1039e6 /vendor/patches/qwentts.cpp.patch | |
| download | asist-p-f8f98e83481e7376a235fb305a095552433f79ab.tar.gz asist-p-f8f98e83481e7376a235fb305a095552433f79ab.zip | |
Local voice assistant on top of Canary, llama.cpp and qwentts
Pipeline en Rust de hilos y canales que une los tres motores: el micrófono
alimenta un segmentador con VAD, las intervenciones cerradas van al
reconocedor, la transcripción al modelo y cada frase que este cierra sale
hacia el sintetizador sin esperar al resto de la respuesta.
Dos reglas sostienen el diseño: ninguna etapa bloquea a la anterior —quien va
sobrado descarta trabajo en lugar de acumular retraso— y todo lo que viaja por
los canales lleva el turno al que pertenece, así que interrumpir es subir el
contador y levantar dos banderas de cancelación.
Seis crates: core (configuración, eventos, HTTP, telemetría, herramientas),
audio (cpal, VAD, anillo de reproducción), asr, llm, tts y app (supervisor de
procesos y orquestador). Los motores van como submódulos fijados a un commit,
con los cambios locales en vendor/patches.
Midiendo el pipeline aparecieron tres cuellos de botella de configuración que
valieron más que cualquier cambio de código, todos documentados en
docs/RENDIMIENTO.md:
- tts-server decodificaba el audio en bloques de 24 s, de modo que el modo
«streaming» llegaba de una pieza: 4948 ms -> 585 ms hasta el primer audio.
- La plantilla de chat del modelo abre <think> y no lo cierra nunca, sin
variable que lo apague: 8630 ms -> 413 ms hasta el primer token, con una
copia de la plantilla que deja el bloque cerrado de entrada.
- Cualquier indicación de estilo junto a la guía de herramientas hace que este
modelo de 2B deje de llamarlas y se invente el dato (8/8 aciertos con la
guía sola, 0/8 con la persona de asistente de voz). El turno alterna ahora
entre dos instrucciones de sistema.
La ejecución de órdenes del sistema queda implementada y apagada, tras cuatro
barreras: lista blanca sobre el ejecutable, rutas rechazadas, sin shell que
interprete metacaracteres y plazo máximo.
68 pruebas unitarias sin modelos, más seis de integración que se saltan solas
si no hay servidores y se turnan la GPU: en paralelo, los dos servidores no
caben en 4 GB y miden contención en vez de latencia.
Claude-Session: https://claude.ai/code/session_01FNxz5cSdQSscJH9H7b8uGU
Diffstat (limited to 'vendor/patches/qwentts.cpp.patch')
| -rw-r--r-- | vendor/patches/qwentts.cpp.patch | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/vendor/patches/qwentts.cpp.patch b/vendor/patches/qwentts.cpp.patch new file mode 100644 index 0000000..fea7dec --- /dev/null +++ b/vendor/patches/qwentts.cpp.patch @@ -0,0 +1,41 @@ +diff --git a/buildall.sh b/buildall.sh +index 8ce58a6..a461d07 100755 +--- a/buildall.sh ++++ b/buildall.sh +@@ -4,7 +4,15 @@ rm -rf build + mkdir build + cd build + +-export PATH=/usr/local/cuda/bin:$PATH ++# Find nvcc: honor CUDACXX/PATH, then fall back to common install locations ++NVCC="${CUDACXX:-$(command -v nvcc)}" ++if [ -z "$NVCC" ]; then ++ for c in /opt/cuda/bin/nvcc /usr/local/cuda/bin/nvcc; do ++ [ -x "$c" ] && NVCC="$c" && break ++ done ++fi ++# Make sure the detected CUDA bin dir is on PATH for the rest of the toolkit ++[ -n "$NVCC" ] && export PATH="$(dirname "$NVCC"):$PATH" + +-cmake .. -DGGML_CPU_ALL_VARIANTS=ON -DGGML_CUDA=ON -DGGML_VULKAN=ON -DGGML_BACKEND_DL=ON ++cmake .. -DGGML_CPU_ALL_VARIANTS=ON -DGGML_CUDA=ON -DGGML_VULKAN=ON -DGGML_BACKEND_DL=ON ${NVCC:+-DCMAKE_CUDA_COMPILER="$NVCC"} + cmake --build . --config Release -j "$(nproc)" +diff --git a/buildcuda.sh b/buildcuda.sh +index 67f711f..242bb39 100755 +--- a/buildcuda.sh ++++ b/buildcuda.sh +@@ -4,5 +4,13 @@ rm -rf build + mkdir build + cd build + +-cmake .. -DGGML_CUDA=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc ++# Find nvcc: honor CUDACXX/PATH, then fall back to common install locations ++NVCC="${CUDACXX:-$(command -v nvcc)}" ++if [ -z "$NVCC" ]; then ++ for c in /opt/cuda/bin/nvcc /usr/local/cuda/bin/nvcc; do ++ [ -x "$c" ] && NVCC="$c" && break ++ done ++fi ++ ++cmake .. -DGGML_CUDA=ON ${NVCC:+-DCMAKE_CUDA_COMPILER="$NVCC"} + cmake --build . --config Release -j "$(nproc)" |