Restructuring STT
This commit is contained in:
+35
-11
@@ -51,21 +51,36 @@ def _stt_service() -> WhisperSTTService:
|
||||
|
||||
device = _env("STT_DEVICE", "cpu") or "cpu"
|
||||
compute = _env("STT_COMPUTE_TYPE", "int8") or "int8"
|
||||
prompt = _env(
|
||||
"STT_PROMPT",
|
||||
"یادداشت و مکالمهٔ فروش به زبان فارسی. اسامی مشتریان و اصطلاحات کسبوکار را دقیق بنویس.",
|
||||
)
|
||||
|
||||
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(
|
||||
device=device,
|
||||
compute_type=compute,
|
||||
settings=WhisperSTTService.Settings(
|
||||
model=_model_name(),
|
||||
language=Language.FA,
|
||||
initial_prompt=prompt or None,
|
||||
),
|
||||
settings=settings,
|
||||
)
|
||||
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:
|
||||
raise HTTPException(
|
||||
status_code=503,
|
||||
@@ -178,11 +193,20 @@ def _transcribe_local(wav_bytes: bytes) -> str:
|
||||
audio, rate = _wav_to_float32(dst.read_bytes())
|
||||
|
||||
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"
|
||||
if isinstance(lang_code, str) and "-" in lang_code:
|
||||
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(
|
||||
audio,
|
||||
|
||||
Reference in New Issue
Block a user