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).
This commit is contained in:
parent
b1f8118272
commit
1e3e5ca20d
32 changed files with 3697 additions and 161 deletions
51
verde/voz-verde.sh
Executable file
51
verde/voz-verde.sh
Executable file
|
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env bash
|
||||
# Adaptador entre el TTS por comando de Hermes y la voz que ya usa el naranja.
|
||||
#
|
||||
# voz-verde.sh <salida.wav> <fichero-con-el-texto>
|
||||
#
|
||||
# ── Por que existe este fichero ─────────────────────────────────────────────
|
||||
#
|
||||
# Hermes tiene un proveedor de TTS por comando (`type: command`) que NO esta
|
||||
# documentado en su web pero si en el codigo: tools/tts_tool.py, el bloque
|
||||
# "Custom command providers". Eso es lo que permite que el verde hable con la
|
||||
# MISMA voz que el naranja en vez de con la que Piper se descargue por su
|
||||
# cuenta — y sin esa igualdad, comparar los dos carriles no diria nada.
|
||||
#
|
||||
# Las interfaces no encajan directamente y por eso hay adaptador:
|
||||
#
|
||||
# jarvis-piper.sh espera <salida.wav> <texto como argumento>
|
||||
# Hermes entrega {output_path} y {input_path}, un FICHERO con el texto
|
||||
#
|
||||
# Hermes ejecuta con shell=True, asi que un "$(cat ...)" en la plantilla habria
|
||||
# funcionado. No se hace por dos motivos: _run_command_tts llama a
|
||||
# hermes_subprocess_env(inherit_credentials=False), que LIMPIA el entorno, de
|
||||
# modo que JARVIS_PIPER_VOZ y JARVIS_PIPER_TONO no llegarian; y una plantilla
|
||||
# con comillas anidadas dentro de un YAML es justo el sitio donde un fallo no
|
||||
# se ve hasta que suena mal.
|
||||
#
|
||||
# ── Que voz, y por que esta ────────────────────────────────────────────────
|
||||
#
|
||||
# davefx a tono 1.0, que es lo que tiene puesto el naranja HOY en
|
||||
# nucleo/boca/voz.py (POR_DEFECTO = "davefx", JARVIS_PIPER_TONO = "1.0").
|
||||
#
|
||||
# OJO: el README describe sharvard + 0.86 = 106 Hz como "la puesta". Eso era el
|
||||
# JARVIS sobre Newelle. El nucleo cambio a davefx "porque se eligio a oido". El
|
||||
# verde copia al NUCLEO, que es contra quien se va a comparar, no al README.
|
||||
set -uo pipefail
|
||||
|
||||
RAIZ=$(cd -P "$(dirname "${BASH_SOURCE[0]:-$0}")/.." && pwd)
|
||||
|
||||
SALIDA=${1:-}
|
||||
ENTRADA=${2:-}
|
||||
|
||||
[ -n "$SALIDA" ] || { echo "falta el fichero de salida" >&2; exit 1; }
|
||||
[ -f "$ENTRADA" ] || { echo "no esta el fichero de texto: $ENTRADA" >&2; exit 1; }
|
||||
|
||||
TEXTO=$(cat "$ENTRADA")
|
||||
[ -n "$TEXTO" ] || { echo "el fichero de texto esta vacio" >&2; exit 1; }
|
||||
|
||||
# Las variables se ponen aqui porque Hermes limpia el entorno antes de llamar.
|
||||
export JARVIS_PIPER_VOZ=${JARVIS_PIPER_VOZ:-es_ES-davefx-medium}
|
||||
export JARVIS_PIPER_TONO=${JARVIS_PIPER_TONO:-1.0}
|
||||
|
||||
exec "$RAIZ/config/jarvis-piper.sh" "$SALIDA" "$TEXTO"
|
||||
Loading…
Add table
Add a link
Reference in a new issue