#!/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())
