JARVIS/verde/pruebas/05_cabe.sh
sito 1e3e5ca20d carril verde (Hermes Agent): documentacion, panel, voz local y RAG
Rama JARVIS-GREEN, independiente de master (el nucleo naranja queda intacto).

- README propio del carril verde con diagrama de arquitectura y capturas del panel.
- verde/: arranque, panel web, puente de voz (escucha local con faster-whisper +
  habla con la voz del naranja), pruebas (07 voz, 08 escucha), config y notas.
- Integracion RAG: nucleo/saber/busca_cli.py + skill buscar-en-apuntes, para que
  el agente consulte el mismo indice que el nucleo.
- Todo local (127.0.0.1); sin datos personales (rutas y modelo de GPU scrubeados).
2026-08-18 11:26:42 +02:00

92 lines
3.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# ¿Cabe la pregunta? El bloqueo que paro el primer arranque.
#
# No es que qwen3.5:4b rindiera mal: es que el prompt fijo de Hermes —26 KB de
# sistema + 56 KB de esquemas de 19 herramientas— son ~20.500 tokens contra los
# 4.096 de num_ctx del naranja. Cinco veces por encima. Con eso, la pregunta del
# usuario ni entra.
#
# DOS TRAMPAS que esta prueba evita, las dos costaron tiempo:
#
# 1. El directorio desde el que se lanza CAMBIA el prompt de sistema. Desde
# ~/.hermes/hermes-agent son 55.261 B en vez de 26.281: se cuela el AGENTS.md
# de 81 KB del propio repo de Hermes como fichero de contexto. Por eso aqui
# se hace cd a la raiz del proyecto, que es lo que hace verde-launcher.sh.
#
# 2. El contexto que se compara es el del MODELFILE, no el de /api/show. Ollama
# reporta ahi 262144, el maximo del modelo, no lo configurado.
cd "$(dirname "$0")" && . ./comun.sh
titulo "El prompt fijo, medido"
SALIDA=$TMP/prompt-size.txt
( cd "$RAIZ" && timeout 180 hermes prompt-size ) > "$SALIDA" 2>&1
if [ $? -ne 0 ] || ! grep -q 'System prompt total' "$SALIDA"; then
echo " $(rojo FALLO) 'hermes prompt-size' no dio una medida"
sed 's/^/ /' "$SALIDA" | head -5
exit 1
fi
# Se parsea con python y no con awk por el awk de Debian: mawk no admite el
# match() de tres argumentos de gawk y devolveria vacio en silencio, que en una
# resta da un numero plausible y equivocado.
#
# " System prompt total : 26,278 B (25.7 KB, 26,148 chars)"
# " Tool schemas : 55,978 B (54.7 KB, 19 tools)"
leer=$(python3 - "$SALIDA" <<'PY'
import re, sys
texto = open(sys.argv[1]).read()
def bytes_de(etiqueta):
m = re.search(re.escape(etiqueta) + r'\s*:\s*([\d,]+)\s*B', texto)
return int(m.group(1).replace(',', '')) if m else 0
herr = re.search(r'([\d,]+)\s+tools', texto)
print(bytes_de('System prompt total'), bytes_de('Tool schemas'),
herr.group(1).replace(',', '') if herr else '?')
PY
)
read -r SISTEMA ESQUEMAS HERRAM <<<"$leer"
if [ "${SISTEMA:-0}" -eq 0 ] || [ "${ESQUEMAS:-0}" -eq 0 ]; then
echo " $(rojo FALLO) no pude leer las cifras de 'hermes prompt-size'"
sed 's/^/ /' "$SALIDA" | head -8
exit 1
fi
FIJO=$((SISTEMA + ESQUEMAS))
# ~4 B por token en castellano y JSON. Es la misma regla con la que se dimensiono
# el modelo verde; sirve para decidir, no para presumir de precision.
TOKENS=$((FIJO / 4))
nota "sistema $SISTEMA B"
nota "esquemas $ESQUEMAS B ($HERRAM herramientas)"
nota "fijo $FIJO B ~ $TOKENS tokens"
titulo "Contra el contexto configurado"
CTX=$(parametro "$MODELO" num_ctx)
nota "num_ctx del Modelfile: $CTX"
menor_que "el prompt fijo cabe en el contexto" "$TOKENS" "$CTX"
# Que quepa no basta: si no sobra sitio, Hermes comprime el historial en cuanto
# empiece la conversacion y el agente se olvida de lo que acaba de hacer. El
# suelo son los 2000 que usa arrancar.sh para avisar.
HUECO=$((CTX - TOKENS))
nota "quedan ~$HUECO tokens para la conversacion"
mayor_que "queda sitio para conversar" "$HUECO" 2000
# El otro tope, el escondido: 300 tokens de num_predict cortan el JSON de una
# tool call por la mitad. El naranja lo hereda del modelo base y es correcto
# para el —respuestas habladas cortas—, pero aqui seria un fallo silencioso.
mayor_que "la respuesta no se corta a media llamada" \
"$(parametro "$MODELO" num_predict)" 1024
titulo "De donde viene el numero"
nota "medido con cd a $RAIZ"
nota "desde ~/.hermes/hermes-agent saldrian ~30 KB mas (su AGENTS.md de 81 KB)"
resumen