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).
49 lines
1.5 KiB
Python
Executable file
49 lines
1.5 KiB
Python
Executable file
#!/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())
|