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).
62 lines
2.8 KiB
Bash
Executable file
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
|