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
49
verde/escucha_transcribe.py
Executable file
49
verde/escucha_transcribe.py
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Transcribe un WAV a texto con faster-whisper local. Nada sale de la maquina.
|
||||
|
||||
escucha_transcribe.py fichero.wav
|
||||
|
||||
Es la mitad "oido" del puente de voz del verde: el TUI de Hermes no tiene micro,
|
||||
asi que grabamos aparte (escucha-verde.sh) y transcribimos aqui, en local, con el
|
||||
mismo faster-whisper 'small' en espanol que usa el STT de Hermes. En CPU a
|
||||
proposito: el 4B ocupa la tarjeta y el margen de VRAM es de 223 MiB; whisper en
|
||||
CPU tarda un par de segundos mas y no arriesga un out-of-memory.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
MODELO = os.environ.get("VERDE_WHISPER_MODELO", "small")
|
||||
IDIOMA = os.environ.get("VERDE_WHISPER_IDIOMA", "es")
|
||||
|
||||
_modelo = None
|
||||
|
||||
|
||||
def carga():
|
||||
global _modelo
|
||||
if _modelo is None:
|
||||
from faster_whisper import WhisperModel
|
||||
# int8 en CPU: rapido y sin tocar la VRAM del modelo del agente.
|
||||
_modelo = WhisperModel(MODELO, device="cpu", compute_type="int8")
|
||||
return _modelo
|
||||
|
||||
|
||||
def transcribe(ruta_wav):
|
||||
m = carga()
|
||||
segmentos, _ = m.transcribe(
|
||||
ruta_wav, language=IDIOMA,
|
||||
vad_filter=True, # el silencio no llega a whisper
|
||||
vad_parameters={"min_silence_duration_ms": 500},
|
||||
)
|
||||
return " ".join(s.text.strip() for s in segmentos).strip()
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2 or not os.path.exists(sys.argv[1]):
|
||||
print("uso: escucha_transcribe.py fichero.wav", file=sys.stderr)
|
||||
return 2
|
||||
print(transcribe(sys.argv[1]))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue