# 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.
