# JARVIS verde — lo que se cambio en la configuracion de Hermes Agent. # # ── OJO: esto NO se copia encima de ~/.hermes/config.yaml ────────────────── # # El instalador genera alli un fichero de 1890 lineas (121 activas) con toda # su documentacion dentro. Machacarlo con estas 30 lineas funcionaria —lo que # falte cae a los valores de hermes_cli/config_defaults.py— pero se perderia # esa documentacion y el siguiente `hermes update` no tendria con que comparar. # # Asi que alli se editaron SOLO los bloques de abajo, en su sitio, y este # fichero es el registro de que se toco y por que. La copia intacta del # instalador quedo en ~/.hermes/config.yaml.recien-instalado. # # ── Y una trampa que casi cuela ──────────────────────────────────────────── # # Ese config.yaml declara `provider` y `base_url` DOS VECES dentro de `model:`. # En YAML gana la ultima. Poner Ollama en la primera dejaba el fichero con # buena pinta y el trafico saliendo por OpenRouter. Hay que PARSEARLO, no # leerlo: # # python3 -c "import yaml;print(yaml.safe_load(open('~/.hermes/config.yaml'))['model'])" # # NADA de lo de abajo saca datos de la maquina. Comprobado pieza a pieza: el # modelo es Ollama en 127.0.0.1, la voz es Piper local, el oido es whisper # local y la memoria es un SQLite en ~/.hermes. Cero claves, cero cuentas. # ── El cerebro ───────────────────────────────────────────────────────────── # # CORREGIDO EL 16 DE AGOSTO. Aqui ponia :4b-jarvis, el mismo modelo del naranja, # con el argumento de que Ollama sirve una sola copia a los dos y asi los dos # carriles caben en la GPU. El argumento era bueno y la conclusion imposible: # # 1. El prompt fijo de Hermes son ~20.500 tokens y el naranja va con # num_ctx 4096. No es que rinda mal: no entra la pregunta. # 2. Hermes RECHAZA cualquier modelo por debajo de 64.000 tokens de contexto # (MINIMUM_CONTEXT_LENGTH en agent/model_metadata.py). Tope duro. # # Asi que el verde necesita modelo propio, y a 65536 no caben las 32 capas en # 4 GB: van 16, el resto a la CPU. Los dos carriles ya NO comparten copia # cargada — abrir los dos a la vez no cabe. Se abre uno u otro. # # context_length aqui es obligatorio: sin el, Hermes se cree lo que dice # /api/show, que son 262144 (el maximo del modelo) y no lo configurado. model: default: "qwen3.5:4b-verde" provider: "custom" base_url: "http://127.0.0.1:11434/v1" context_length: 65536 # ── Desde donde mira ─────────────────────────────────────────────────────── # # Este bloque se añadio el 16 de agosto y arregla un fallo que NO parecia de # rutas. De fabrica `cwd: "."`, que la documentacion describe como "el # directorio desde el que lanzas hermes". No lo es: el agente arrancaba # siempre en $HOME por mucho `cd` que se hiciera delante, y `--in DIR` se # ignora en el modo de una sola pregunta (-z sale por _run_and_exit_oneshot y # nunca llega a cmd_chat, que es donde vive esa bandera). # # El sintoma: se pide "lee verde/README.md y resumelo" y contesta un resumen # impecable del README de Gitleaks, que es el que hay en $HOME. Sin un # solo error por ningun lado. Ver NOTAS.md. # # Con la raiz en $HOME ademas se ahoga: un search_files de "*.md" devolvia # sobre todo site-packages de los venv. terminal: cwd: "$HOME/COFRE/CODERS/JARVIS" # Ollama no pide clave. Si al arrancar Hermes insiste en una, la guia oficial # dice que vale cualquier cosa ("no-key"). No se pone aqui para que el .env # siga sin una sola credencial. Ver NOTAS.md. # ── Telemetria ───────────────────────────────────────────────────────────── # Hermes dice no recoger nada. Se apaga igualmente, que es gratis. telemetry: shared_metrics: enabled: false # ── El oido ──────────────────────────────────────────────────────────────── # # faster-whisper local. `small` porque es lo que usa el naranja y comparar dos # carriles con modelos de escucha distintos no mediria el harness, mediria el # modelo. # # unload_after_idle_seconds es el ajuste que importa en esta maquina: whisper # pide 839 MiB en el pico de una transcripcion y la tarjeta son 4096. Soltarlo # a los 5 minutos de silencio devuelve ese hueco al modelo. Cuesta una recarga # en la siguiente frase; a cambio, no compite con el cerebro estando parado. stt: enabled: true provider: "local" local: model: "small" language: "es" unload_after_idle_seconds: 300 # ── La boca ──────────────────────────────────────────────────────────────── # # NO se usa el proveedor `piper` de Hermes, y el motivo no es capricho. # # El `piper` de serie se descarga sus propias voces de OHF-Voice/piper1-gpl y # no sabe bajar el tono. Sonaria distinto al naranja, y entonces comparar las # voces de los dos carriles no diria nada de nada. # # En su lugar se usa el proveedor por COMANDO (`type: command`), que existe en # el codigo (tools/tts_tool.py, bloque "Custom command providers") aunque no # este en la web. Eso permite llamar al mismo config/jarvis-piper.sh que usa el # naranja: mismo binario Piper 1.2.0 (MIT), mismo modelo .onnx, mismo trato de # audio. El verde suena EXACTAMENTE igual que el naranja. # # El adaptador voz-verde.sh existe porque las interfaces no encajan: Hermes # pasa un fichero con el texto y jarvis-piper.sh espera el texto como # argumento. Ver la cabecera de voz-verde.sh. tts: provider: "jarvis-piper" providers: jarvis-piper: type: command command: "$HOME/COFRE/CODERS/JARVIS/verde/voz-verde.sh {output_path} {input_path}" output_format: wav # La referencia de fabrica, por si algun dia se quiere oir que da Hermes sin # tocarlo. NO se activa: edge es un servicio de Microsoft y le manda el texto # de cada respuesta. Seria la unica pieza no libre del carril. # provider: "edge" # ── Memoria ──────────────────────────────────────────────────────────────── # # La que trae Hermes: SQLite con FTS5 en ~/.hermes. Local y sin instalar nada. # Es el sustituto de Honcho (el "Hancho AI" del video), que es AGPL y se puede # autoalojar, pero cuyo razonamiento exige clave de Gemini, Anthropic u OpenAI # y sacaria las conversaciones de la maquina. # # La memoria de CONOCIMIENTO va aparte, en verde/boveda/, como ficheros de # contexto. Ver boveda/README.md.