JARVIS/verde/pruebas/02_modelo.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

62 lines
2.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# Los dos modelos: que el verde tenga lo suyo y que el naranja siga intacto.
#
# La segunda mitad importa tanto como la primera. El verde es un banco de
# pruebas y el naranja es lo que el usuario usa a diario: si tocar uno estropea
# el otro, el experimento sale caro. Los cuatro parametros del naranja
# (num_ctx 4096, num_gpu 24, num_predict 300, temperature 0.4) estan medidos y
# elegidos —el num_gpu 24 deja 1540 MiB para whisper— asi que se comprueban uno
# a uno y no "existe el modelo".
#
# Se pregunta a ollama, no al .Modelfile del repo: arrancar.sh RECREA el verde
# mientras busca el techo de contexto, asi que el fichero es la intencion y
# ollama es lo que se va a cargar de verdad.
cd "$(dirname "$0")" && . ./comun.sh
titulo "El verde"
if ! ollama list 2>/dev/null | grep -q "^$MODELO"; then
echo " $(rojo FALLO) no existe $MODELO"
echo " $(gris "creado por: verde/arrancar.sh, o a mano con qwen3.5-4b-verde.Modelfile")"
exit 1
fi
echo " $(verde OK) $MODELO existe"; _ok=$((_ok + 1))
CTX=$(parametro "$MODELO" num_ctx)
nota "num_ctx $CTX"
# El suelo NO lo pone la tarjeta ni el tamaño del prompt: lo pone Hermes, que
# rechaza de plano cualquier modelo por debajo de 64.000 tokens
# (agent/model_metadata.py:405, comprobado en agent/agent_init.py:2656).
#
# Esta comprobacion existe porque el carril se dimensiono entero para 24576
# —lo maximo que cabia en la GPU con las 32 capas dentro— y ese numero, que
# era correcto en todo lo demas, es rechazado antes de la primera frase. En
# frio no se veia: solo salta al abrir Hermes.
mayor_que "num_ctx llega al suelo de 64k que exige Hermes" "$CTX" 63999
# 300 tokens —lo que hereda el naranja del modelo base— cortan el JSON de una
# tool call por la mitad. Es el tope escondido que casi hace concluir que el 4B
# no sabe llamar herramientas.
mayor_que "num_predict da para una tool call entera" \
"$(parametro "$MODELO" num_predict)" 1024
# Emitir JSON no es escribir prosa: temperatura baja.
menor_que "temperature baja para emitir JSON" \
"$(parametro "$MODELO" temperature)" 0.5
titulo "El naranja, sin tocar"
comprueba "num_ctx del naranja" "$(parametro "$NARANJA" num_ctx)" "4096"
comprueba "num_gpu del naranja" "$(parametro "$NARANJA" num_gpu)" "24"
comprueba "num_predict del naranja" "$(parametro "$NARANJA" num_predict)" "300"
comprueba "temperature del naranja" "$(parametro "$NARANJA" temperature)" "0.4"
# Los dos salen del mismo blob de pesos: si dejaran de compartirlo, alguien
# habria bajado un modelo distinto y las comparaciones no valdrian.
BLOB_V=$(ollama show --modelfile "$MODELO" 2>/dev/null | awk '$1=="FROM"{print $2; exit}')
BLOB_N=$(ollama show --modelfile "$NARANJA" 2>/dev/null | awk '$1=="FROM"{print $2; exit}')
comprueba "los dos carriles usan los mismos pesos" "$BLOB_V" "$BLOB_N"
resumen