carril azul (Newelle): documentacion, diagrama y captura
Rama JARVIS-BLUE, independiente de master. Documenta el primer carril de JARVIS, montado sobre Newelle (GNOME, GPL) y hoy congelado en favor del nucleo naranja. - README propio del carril azul con diagrama de arquitectura y captura del interfaz. - azul/docs/: el grafico (tema azul) y la captura de Newelle. - Explica el stack, lo que JARVIS puso encima y por que se congelo.
This commit is contained in:
parent
b1f8118272
commit
38a8daf9ab
3 changed files with 119 additions and 168 deletions
198
README.md
198
README.md
|
|
@ -1,184 +1,46 @@
|
|||
# JARVIS
|
||||
# JARVIS-AZUL 🔵
|
||||
|
||||
Asistente de voz **100 % local** para Linux. Ni el micrófono, ni las
|
||||
conversaciones, ni el modelo salen de la máquina. Sin cuentas, sin claves, sin
|
||||
nube. Núcleo propio, en castellano, que corre en **cualquier Linux** —de un
|
||||
portátil modesto a una torre— y aprovecha la GPU si la hay, o la CPU si no.
|
||||
El **primer** carril de JARVIS, montado sobre **[Newelle](https://github.com/qwersyk/Newelle)** (el asistente de escritorio para GNOME, GPL). Hoy está **congelado**: sirvió para arrancar rápido y aprender qué se quería, y esas lecciones dieron pie al núcleo naranja. Esta rama lo documenta; el `master` es el núcleo naranja.
|
||||
|
||||

|
||||

|
||||

|
||||
-76B900)
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||

|
||||
## Para qué sirvió
|
||||
|
||||

|
||||
JARVIS tiene tres carriles: **azul** (Newelle, este, congelado), **naranja** (el núcleo propio) y **verde** (Hermes Agent). El azul fue el punto de partida: en vez de escribir un asistente desde cero, se cogió Newelle —una app de GNOME que ya trae chat con LLM local, RAG de documentos, memoria, TTS, búsqueda web y extensiones— y se le puso encima la identidad de JARVIS.
|
||||
|
||||
*El panel: telemetría del sistema, el reactor, lo que oye y hace, el catálogo de
|
||||
acciones, y las métricas de rendimiento del propio asistente. Hay un
|
||||
[vídeo de ejemplo](docs/demo.webm) (47 s) en `docs/`.*
|
||||
Fue la forma más rápida de tener algo que funcionara y, sobre todo, de **descubrir qué faltaba**. Lo que se aprendió aquí es lo que define hoy al naranja.
|
||||
|
||||
## El interfaz
|
||||
|
||||

|
||||
|
||||
*El interfaz de Newelle, base del carril azul. JARVIS lo corría **en local** con Ollama (no con el proveedor que aparece de ejemplo en la captura).*
|
||||
|
||||
## El stack
|
||||
|
||||
| Capa | Pieza | Papel |
|
||||
|---|---|---|
|
||||
| Oír | whisper.cpp | STT en castellano (GPU si hay, si no CPU) |
|
||||
| Pensar | Ollama · `qwen3.5:4b` | el cerebro, con tool-calling |
|
||||
| Saber | model2vec + búsqueda híbrida | RAG sobre los apuntes del usuario |
|
||||
| Hablar | Piper (o voz clonada con XTTS) | TTS local |
|
||||
| Cara | panel web · WebSocket · Canvas | el HUD, con el reactor y las métricas |
|
||||
| Manos | catálogo de acciones + shell | lo que ejecuta en la máquina |
|
||||
| Capa | Pieza | Licencia | ¿Nube? |
|
||||
|---|---|---|---|
|
||||
| Front-end | Newelle (GNOME, Flatpak) | GPL | no |
|
||||
| Cerebro | Ollama · modelo `qwen` local | Apache-2.0 | **no** — `127.0.0.1` |
|
||||
| Hablar | Piper (voz clonada) | MIT | **no** |
|
||||
| Oír | Whisper local | MIT | **no** |
|
||||
| Saber | Documentos locales de Newelle (RAG) | — | **no** |
|
||||
|
||||
Todo corre en `127.0.0.1`. No hay ninguna llamada a la nube en el uso normal; lo
|
||||
único que puede salir es una búsqueda web si el modelo decide usarla, y se avisa.
|
||||
## Lo que JARVIS le puso encima
|
||||
|
||||
## Portabilidad
|
||||
Newelle es genérico; JARVIS lo personalizó (los ficheros viven en `config/` del núcleo):
|
||||
|
||||
Diseñado para correr en **cualquier Linux**, no en un equipo concreto:
|
||||
- **Persona y prompt** propios (`set_persona.py`).
|
||||
- **Voz** por Piper, la misma cadena de audio que usa el naranja (`jarvis-piper.sh`, `jarvis-voz.sh`).
|
||||
- **Modelo** local afinado (`qwen3.5-4b-jarvis.Modelfile`, `apuntar_modelo_jarvis.py`).
|
||||
- **Herramientas** propias.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Distro | cualquiera. `install.sh` detecta apt / dnf / pacman / zypper |
|
||||
| GPU | **opcional**. Ollama reparte el modelo entre GPU y CPU solo: va con NVIDIA (CUDA), AMD (ROCm) o **solo CPU**. Ningún parámetro está atado a una tarjeta |
|
||||
| Escritorio | GNOME, KDE, lo que sea. Las acciones de **ventanas** necesitan X11 + `xdotool`; en Wayland esas órdenes se desactivan solas y el resto funciona igual |
|
||||
| Audio | PipeWire, PulseAudio o ALSA. El micro prueba `pw-record`, `parec` y `arecord`, la primera que haya; la voz prueba `paplay`, `pw-play` y `aplay` |
|
||||
| whisper | el binario se toma del build local o del `PATH`. Los modelos se buscan solos, o los fijas con `JARVIS_WHISPER_MODELOS=/ruta` |
|
||||
## Por qué se congeló
|
||||
|
||||
**Requisito real:** que quepa el modelo. `qwen3.5:4b` va cómodo desde ~4 GB de
|
||||
VRAM; con menos, usa un modelo más pequeño (`qwen3.5:2b`) o tira de CPU (hay RAM
|
||||
de sobra). whisper.cpp se compila para tu plataforma —CUDA, ROCm, Metal o CPU—;
|
||||
la guía está en [`config/README_whisper_gpu.md`](config/README_whisper_gpu.md).
|
||||
Newelle es potente, pero va empaquetado como **Flatpak sobre GNOME**, y ese sandbox limita lo que el asistente puede tocar en la máquina. Se quería más: **control total del núcleo** —latencia baja, acciones rápidas que no pasan por el modelo, un HUD propio, root gestionado a demanda—. Nada de eso encajaba bien dentro de la app de escritorio de otro.
|
||||
|
||||
### Ajuste en tarjetas pequeñas (4 GB)
|
||||
Así que el azul se congeló y nació el **carril naranja**, un núcleo escrito a medida. El azul se queda como referencia y como reconocimiento: fue el que enseñó el camino.
|
||||
|
||||
Solo si vas MUY justo de VRAM y el cerebro y whisper se pelean por ella: fijar
|
||||
`num_gpu 24` en el `Modelfile` reserva sitio a whisper. Está explicado en los
|
||||
comentarios del propio `Modelfile`. En una torre con una tarjeta normal **no
|
||||
hace falta tocar nada**.
|
||||
---
|
||||
|
||||
## Instalación
|
||||
|
||||
Necesita, en la máquina: [Ollama](https://ollama.com), whisper.cpp (compilado
|
||||
para tu plataforma, ver [`config/README_whisper_gpu.md`](config/README_whisper_gpu.md))
|
||||
y [Piper](https://github.com/rhasspy/piper).
|
||||
|
||||
```bash
|
||||
git clone https://gitea.laenre.net/hacklab/JARVIS.git
|
||||
cd JARVIS
|
||||
./install.sh # comprueba servicios, crea el venv y el modelo de Ollama
|
||||
```
|
||||
|
||||
`install.sh` no descarga modelos pesados ni toca el sistema sin avisar: solo
|
||||
prepara el entorno de Python y crea `qwen3.5:4b-jarvis` a partir del `Modelfile`.
|
||||
|
||||
Después:
|
||||
|
||||
```bash
|
||||
./nucleo/saber/indexa.py # (opcional) indexa tus apuntes para el RAG
|
||||
./nucleo/arranca.sh # el asistente y el panel, en 127.0.0.1
|
||||
```
|
||||
|
||||
El RAG funciona nada más clonar: el repo trae un índice público pre-construido, así
|
||||
que no hace falta indexar para que sepa de metodología, comandos y herramientas.
|
||||
|
||||
### Comprobar el RAG
|
||||
|
||||
Si la búsqueda de conocimiento no responde bien, este diagnóstico revisa la cadena
|
||||
entera y marca en verde/rojo cada eslabón —dependencias, índice, embedder,
|
||||
búsqueda y Ollama— con una línea de qué hacer si algo falla:
|
||||
|
||||
```bash
|
||||
./probar_rag.sh # comprobaciones rápidas
|
||||
./probar_rag.sh --eval # además mide la calidad de recuperación (hit@k)
|
||||
./probar_rag.sh --verboso # enseña el primer resultado de cada búsqueda
|
||||
```
|
||||
|
||||
No necesita nada arrancado y sale con código distinto de cero si hay algún fallo
|
||||
duro, así que sirve también para CI.
|
||||
|
||||
## Qué le puedes pedir
|
||||
|
||||
Habla en castellano, natural. **150 acciones** en el catálogo, agrupadas:
|
||||
|
||||
| Grupo | Nº | Ejemplos |
|
||||
|---|---|---|
|
||||
| sistema | 59 | "cuánto espacio queda", "la memoria", "la carga de CPU", "la temperatura" |
|
||||
| firefox | 54 | "abre el Gmail", "abre YouTube", "abre el GitHub", "abre Maps" |
|
||||
| ventanas | 12 | "manda la ventana a la izquierda", "maximiza", "centra la ventana" |
|
||||
| ficheros | 11 | "busca un fichero llamado…", "lee el fichero…", "cuánto ocupa la carpeta…" |
|
||||
| pentest | 8 | "escanea la red", "los puertos del host…", "resuelve el dominio…", "el whois de…" |
|
||||
| oasis | 6 | "está corriendo Oasis", "cuántas conexiones tiene" |
|
||||
|
||||
Si lo que pides no está en el catálogo, el modelo lo resuelve con un **comando de
|
||||
shell** (de solo lectura por defecto). Y si pregunta *cómo* se hace algo técnico,
|
||||
puede **buscar en tus apuntes** (RAG) antes de responder.
|
||||
|
||||
El RAG es lo que hace que el asistente dé el comando que **tú ya has probado** en
|
||||
vez de inventarse los flags. Y no es un adorno: medido sobre un conjunto de
|
||||
preguntas de pentesting, la recuperación sube de **hit@1 48 % → 82 %** y
|
||||
**hit@5 77 % → 95 %**. El método, el pipeline y esos números están en
|
||||
[docs/rag.md](docs/rag.md).
|
||||
|
||||
Y **JARVIS elige su propio cerebro**: si una pregunta es más dura de lo normal
|
||||
puede cambiar a un modelo más potente (`elegir_modelo`), y volver al rápido para
|
||||
lo simple. Dile "usa un modelo más potente" o fija uno con `JARVIS_MODELO`.
|
||||
|
||||
## Órdenes con root — importante
|
||||
|
||||
Algunas órdenes que gestionan el sistema (instalar un paquete, reiniciar un
|
||||
servicio, montar un disco) necesitan `sudo`. Conviene saber cómo se maneja,
|
||||
porque es donde un asistente de voz puede hacer daño:
|
||||
|
||||
- **No pide la contraseña al arrancar.** Molestar de entrada echa para atrás, y
|
||||
la mayoría de lo que se le pide no necesita root. Arranca y funciona sin nada.
|
||||
- **Se pide solo cuando hace falta, y una vez.** La primera vez que una orden
|
||||
necesita `sudo`, aparece un diálogo pidiendo tu contraseña. La tecleas, la
|
||||
repites, y a partir de ahí el permiso queda abierto para la sesión.
|
||||
- **Caduca a los 15 minutos** de inactividad, y al cerrar el panel. No es un
|
||||
"root para siempre".
|
||||
- La contraseña **nunca se escribe en disco**: vive solo en la memoria del
|
||||
proceso mientras dura la sesión, y se pasa a `sudo -S` por la entrada estándar.
|
||||
- **La voz no puede autoaprobar root.** El permiso de sesión ahorra re-teclear
|
||||
la contraseña, nunca salta el pedirla la primera vez.
|
||||
|
||||
Si prefieres el modo seguro (bloquear el panel y pedir la contraseña al abrir,
|
||||
para que nadie que pase por delante dé órdenes), arranca con `--candado`.
|
||||
|
||||
## Privacidad
|
||||
|
||||
Es la premisa, y se verifica. Ver [PRIVACIDAD.md](PRIVACIDAD.md). Este
|
||||
repositorio **no incluye** los apuntes indexados ni el diario de conversación:
|
||||
son del usuario, y el `.gitignore` los bloquea.
|
||||
|
||||
## Estructura
|
||||
|
||||
```
|
||||
nucleo/ el asistente (oido, cerebro, boca, manos, cara, saber)
|
||||
config/ configuración: modelo, voz, whisper
|
||||
voz/ clonado de voz con XTTS y caché de frases
|
||||
entrena/ fine-tuning con QLoRA
|
||||
install.sh el instalador
|
||||
```
|
||||
|
||||
## Estado y limitaciones
|
||||
|
||||
Proyecto en desarrollo. En el radar: acabar de generalizar los scripts de `voz/`
|
||||
(algunos aún asumen la disposición del autor), las acciones de ventanas sobre
|
||||
**Wayland** (hoy solo X11), y el fine-tuning de `entrena/`, pendiente de un
|
||||
ajuste para modelos multimodales.
|
||||
|
||||
## Contribuir
|
||||
|
||||
Se agradecen los commits: es software libre y hay mucho por hacer. Las ideas
|
||||
acotadas están en [ROADMAP.md](ROADMAP.md) (más gestores de ventanas, más
|
||||
acciones, probar otros modelos, el RAG...) y cómo empezar en
|
||||
[CONTRIBUTING.md](CONTRIBUTING.md). No hay que compilar nada: es Python, bash y
|
||||
una página web.
|
||||
|
||||
## Licencia
|
||||
|
||||
[GPL-3.0](LICENSE). Software libre y copyleft: si lo modificas y lo distribuyes,
|
||||
el resultado sigue siendo libre.
|
||||
Newelle es de [@qwersyk](https://github.com/qwersyk/Newelle) (GPL). Este carril es esa base con la capa de JARVIS encima. Para el núcleo actual, ver la rama `master`; para el banco de pruebas agéntico, la rama `JARVIS-GREEN`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue