Portabilidad (el repo estaba escrito como si solo sirviera para el portatil del autor): - num_gpu ya NO se fija en los Modelfile: Ollama reparte las capas segun la VRAM, asi el modelo va igual en GPU pequeña, grande o CPU. Se documenta cuando conviene fijarlo (solo tarjetas de 4 GB muy justas). - install.sh detecta el gestor de paquetes (apt/dnf/pacman/zypper) y la GPU (NVIDIA/AMD/ninguna), sin asumir Debian ni CUDA. - README reescrito: el hardware es una REFERENCIA (lo probado), no un requisito. Nueva seccion de portabilidad: cualquier distro, cualquier escritorio (ventanas necesitan X11+xdotool, degradan solas en Wayland), GPU opcional. - Eliminado config/jarvis-herramientas.json: llevaba rutas personales. Licencia: GPL-3.0 (copyleft). docs/stack.svg: diagrama del stack (oir-pensar-hacer-hablar), reemplaza el ASCII en el README. Anadido que el RAG sube la recuperacion de 48 a 82% (hit@1) medido.
79 lines
3.4 KiB
Bash
Executable file
79 lines
3.4 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
|
|
|
|
# ── Detectar el entorno (para no asumir Debian ni NVIDIA) ───────────────────
|
|
for g in apt dnf pacman zypper; do command -v "$g" >/dev/null && { PKG=$g; break; }; done
|
|
: "${PKG:=desconocido}"
|
|
|
|
if command -v nvidia-smi >/dev/null 2>&1; then GPU="NVIDIA (CUDA)"
|
|
elif command -v rocminfo >/dev/null 2>&1; then GPU="AMD (ROCm)"
|
|
else GPU="ninguna → CPU"; fi
|
|
|
|
echo "0. Entorno"
|
|
ok "gestor de paquetes: $PKG"
|
|
ok "GPU detectada: $GPU"
|
|
[ "$GPU" = "ninguna → CPU" ] && echo " (sin GPU va igual, mas lento; considera qwen3.5:2b)"
|
|
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 (instalalo con tu gestor: $PKG)"; 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 para tu plataforma ($GPU) — 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"
|