Restructuring STT

This commit is contained in:
2026-09-22 11:16:17 +03:30
parent 4b335aa7ff
commit dac0454e69
+35 -11
View File
@@ -51,21 +51,36 @@ def _stt_service() -> WhisperSTTService:
device = _env("STT_DEVICE", "cpu") or "cpu" device = _env("STT_DEVICE", "cpu") or "cpu"
compute = _env("STT_COMPUTE_TYPE", "int8") or "int8" compute = _env("STT_COMPUTE_TYPE", "int8") or "int8"
prompt = _env(
"STT_PROMPT",
"یادداشت و مکالمهٔ فروش به زبان فارسی. اسامی مشتریان و اصطلاحات کسب‌وکار را دقیق بنویس.",
)
try: try:
# Settings fields differ by Pipecat version — keep to model + language only
settings_kwargs: dict = {"model": _model_name()}
try:
settings_kwargs["language"] = Language.FA
settings = WhisperSTTService.Settings(**settings_kwargs)
except TypeError:
settings_kwargs.pop("language", None)
settings = WhisperSTTService.Settings(**settings_kwargs)
_stt = WhisperSTTService( _stt = WhisperSTTService(
device=device, device=device,
compute_type=compute, compute_type=compute,
settings=WhisperSTTService.Settings( settings=settings,
model=_model_name(),
language=Language.FA,
initial_prompt=prompt or None,
),
) )
except TypeError:
# Older constructor: model=/language= kwargs instead of settings=
try:
_stt = WhisperSTTService(
model=_model_name(),
device=device,
compute_type=compute,
language=Language.FA,
)
except Exception as exc:
raise HTTPException(
status_code=503,
detail=f"بارگذاری مدل Whisper محلی ناموفق بود: {exc}",
) from exc
except Exception as exc: except Exception as exc:
raise HTTPException( raise HTTPException(
status_code=503, status_code=503,
@@ -178,11 +193,20 @@ def _transcribe_local(wav_bytes: bytes) -> str:
audio, rate = _wav_to_float32(dst.read_bytes()) audio, rate = _wav_to_float32(dst.read_bytes())
settings = getattr(service, "_settings", None) settings = getattr(service, "_settings", None)
language = getattr(settings, "language", Language.FA) language = getattr(settings, "language", None) or Language.FA
lang_code = getattr(language, "value", language) if language is not None else "fa" lang_code = getattr(language, "value", language) if language is not None else "fa"
if isinstance(lang_code, str) and "-" in lang_code: if isinstance(lang_code, str) and "-" in lang_code:
lang_code = lang_code.split("-")[0] lang_code = lang_code.split("-")[0]
initial_prompt = getattr(settings, "initial_prompt", None) # Language enum may be "fa" or "FA" or full name — faster-whisper wants ISO code
if isinstance(lang_code, str):
lang_code = lang_code.lower()
if lang_code in ("persian", "farsi"):
lang_code = "fa"
initial_prompt = _env(
"STT_PROMPT",
"یادداشت و مکالمهٔ فروش به زبان فارسی. اسامی مشتریان و اصطلاحات کسب‌وکار را دقیق بنویس.",
) or None
segments, _info = model.transcribe( segments, _info = model.transcribe(
audio, audio,