JARVIS: asistente de voz local para Linux
Nucleo propio: oye con whisper.cpp, piensa con un modelo de Ollama, habla con Piper, y hace RAG sobre los apuntes del usuario. 100% local, sin cuentas ni claves. Escrito bajo una restriccion dura, 4 GB de VRAM: el cerebro y whisper comparten tarjeta y solo caben porque estan dimensionados para ello. El RAG usa embeddings estaticos con busqueda hibrida; la voz clonada se sirve de una cache de frases. Incluye instalador (install.sh), requisitos, y documentacion del stack, del manejo de root y de las acciones. Los apuntes indexados y el diario NO se incluyen: son privados y el .gitignore los bloquea.
This commit is contained in:
commit
8e4bc8ad94
125 changed files with 25033 additions and 0 deletions
51
PRIVACIDAD.md
Normal file
51
PRIVACIDAD.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Privacidad
|
||||
|
||||
La premisa del proyecto es que nada sale de la máquina. No es un eslogan: se
|
||||
verifica, y este documento dice qué es local, qué podría salir y qué se ha
|
||||
dejado deliberadamente fuera de este repositorio.
|
||||
|
||||
## Qué es local
|
||||
|
||||
| Pieza | Dónde corre |
|
||||
|---|---|
|
||||
| Cerebro (modelo) | Ollama en `127.0.0.1:11434` |
|
||||
| Escucha (STT) | whisper.cpp, en la propia máquina |
|
||||
| Voz (TTS) | Piper / XTTS, en la propia máquina |
|
||||
| Memoria de conversación | ficheros locales |
|
||||
| RAG | índice local sobre apuntes locales |
|
||||
|
||||
Ninguna de estas piezas necesita una cuenta ni una clave. El asistente funciona
|
||||
con la máquina desconectada de internet.
|
||||
|
||||
## Qué puede salir, y no es un fallo
|
||||
|
||||
- **La búsqueda web**, solo si el modelo decide usarla para una pregunta que lo
|
||||
pide. Es una herramienta que se invoca, no una fuga de fondo, y se avisa.
|
||||
|
||||
Fuera de eso, no hay tráfico saliente durante el uso normal.
|
||||
|
||||
## Qué NO está en este repositorio, a propósito
|
||||
|
||||
Este código es público; los datos del usuario no. El `.gitignore` bloquea, y
|
||||
nunca se deben añadir:
|
||||
|
||||
- **`nucleo/datos/saber.jsonl`** y sus derivados (`cosecha.jsonl`,
|
||||
`sintesis.jsonl`): contienen el TEXTO de los apuntes indexados. Publicarlos
|
||||
publicaría los apuntes.
|
||||
- **`nucleo/datos/diario.jsonl`**: es lo que el usuario le ha dicho al asistente
|
||||
por voz.
|
||||
- **`voz/ref/`** y las cachés de audio: la voz de referencia y las frases
|
||||
sintetizadas son personales.
|
||||
- **Entornos, modelos y datasets**: se reconstruyen; no son código.
|
||||
|
||||
Lo único de `nucleo/datos/` que sí va es `acciones.json` (el catálogo de lo que
|
||||
el asistente sabe hacer) y su generador: definen capacidades, no datos.
|
||||
|
||||
## Cómo comprobarlo
|
||||
|
||||
- Que nada nuestro escuche fuera de loopback:
|
||||
`ss -ltnp | grep -vE '127\.0\.0\.1|\[::1\]'`
|
||||
- Que el cerebro apunta a local: revisar el endpoint en `nucleo/cerebro/`.
|
||||
- Que no hay claves en el repo: no hay ningún fichero de credenciales; el
|
||||
manejador de sudo (`nucleo/manos/sudo_root.py`) guarda la contraseña solo en
|
||||
memoria durante la sesión y la borra al terminar.
|
||||
Loading…
Add table
Add a link
Reference in a new issue