#!/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