JARVIS/install.sh
sito 8e4bc8ad94 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.
2026-08-16 15:34:37 +02:00

65 lines
2.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# Instalador del nucleo de JARVIS. Prepara el entorno de Python, el modelo de
# Ollama y comprueba los servicios externos. No descarga modelos pesados ni
# toca el sistema sin avisar.
set -uo pipefail
AQUI=$(cd -P "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)
cd "$AQUI"
ok() { printf ' \033[32mok\033[0m %s\n' "$*"; }
falta(){ printf ' \033[33mfalta\033[0m %s\n' "$*"; }
malo() { printf ' \033[31mERROR\033[0m %s\n' "$*"; }
echo "JARVIS — instalacion"
echo
# ── 1. Servicios externos (los instala el usuario; aqui solo se comprueban) ──
echo "1. Servicios externos"
command -v python3 >/dev/null && ok "python3 $(python3 -V 2>&1 | awk '{print $2}')" \
|| { malo "python3 no esta"; exit 1; }
command -v ollama >/dev/null && ok "ollama" \
|| falta "ollama — instalalo desde https://ollama.com (es el cerebro)"
command -v whisper-server >/dev/null && ok "whisper-server (STT)" \
|| falta "whisper.cpp con CUDA — compilalo; ver config/README_whisper_gpu.md"
command -v piper >/dev/null && ok "piper (TTS)" \
|| falta "piper — https://github.com/rhasspy/piper (la voz)"
echo
# ── 2. Entorno de Python del nucleo ─────────────────────────────────────────
echo "2. Entorno de Python"
if [ ! -d nucleo/venv ]; then
python3 -m venv nucleo/venv && ok "creado nucleo/venv"
else
ok "nucleo/venv ya existe"
fi
nucleo/venv/bin/pip install -q --upgrade pip >/dev/null 2>&1
if nucleo/venv/bin/pip install -q -r requirements.txt; then
ok "dependencias instaladas"
else
malo "fallo instalando dependencias (ver requirements.txt)"; exit 1
fi
echo
# ── 3. El modelo de Ollama ──────────────────────────────────────────────────
echo "3. El modelo"
if command -v ollama >/dev/null; then
if ollama list 2>/dev/null | grep -q '^qwen3.5:4b-jarvis'; then
ok "qwen3.5:4b-jarvis ya existe"
else
echo " creando qwen3.5:4b-jarvis (necesita qwen3.5:4b en Ollama)..."
if ollama create qwen3.5:4b-jarvis -f config/qwen3.5-4b-jarvis.Modelfile 2>/dev/null; then
ok "modelo creado"
else
falta "no se pudo crear; baja el base con: ollama pull qwen3.5:4b"
fi
fi
else
falta "sin ollama no hay modelo; instalalo y re-ejecuta"
fi
echo
# ── 4. Siguiente paso ───────────────────────────────────────────────────────
echo "Hecho. Para arrancar:"
echo " ./nucleo/saber/indexa.py # (opcional) indexa tus apuntes para el RAG"
echo " ./nucleo/arranca.sh # el asistente y el panel en 127.0.0.1"