#!/usr/bin/env python3 """Обёртка: faster-whisper в системном python3 (в venv харнеса его нет). stdin: JSON {"audio_b64": "...", "filename": "..."} stdout: JSON {"text": "..."} или {"error": "..."} """ import base64 import json import sys import os def main(): req = json.load(sys.stdin) try: import tempfile from faster_whisper import WhisperModel model = WhisperModel("large-v3-turbo", device="cpu", compute_type="int8", cpu_threads=8) ext = os.path.splitext(req.get("filename") or "audio.ogg")[1] or ".ogg" with tempfile.NamedTemporaryFile(suffix=ext, delete=False) as tmp: tmp.write(base64.b64decode(req["audio_b64"])) tmp_path = tmp.name try: segments, info = model.transcribe( tmp_path, language="ru", beam_size=5, vad_filter=True) text = " ".join(s.text.strip() for s in segments if s.text and s.text.strip()).strip() print(json.dumps({"text": text, "language": info.language}, ensure_ascii=False)) finally: os.unlink(tmp_path) except Exception as e: print(json.dumps({"error": str(e)[:500]}, ensure_ascii=False)) sys.exit(1) if __name__ == "__main__": main()