Restructuring STT
This commit is contained in:
+35
-11
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user