File size: 1,047 Bytes
74bb5fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# models/asr_whisper.py
from faster_whisper import WhisperModel
from utils.config import get_settings

_asr_singleton = None

class WhisperASR:
    def __init__(self):
        s = get_settings()
        # faster-whisper supports: 'cpu' or 'cuda' (no 'mps')
        requested = (s.ASR_DEVICE or "cpu").lower()
        device = "cpu" if requested not in ("cpu", "cuda") else requested
        if requested == "mps":
            print("[ASR] 'mps' not supported by faster-whisper; falling back to CPU.")
        compute_type = "int8" if device == "cpu" else "float16"
        self.model = WhisperModel("tiny", device=device, compute_type=compute_type)

    def transcribe(self, path: str) -> dict:
        segments, info = self.model.transcribe(path, beam_size=1, language="en")
        text = " ".join(seg.text.strip() for seg in segments)
        return {"text": text, "language": info.language, "segments": []}

def get_asr():
    global _asr_singleton
    if _asr_singleton is None:
        _asr_singleton = WhisperASR()
    return _asr_singleton