refactor(backend): 启动环境初始化与资源项目化(零跨项目依赖)
- main.py:uv run main.py 一键启动——读取 backend/.env、TORCH_HOME/NLTK_DATA 指向项目内缓存、certifi SSL + NO_PROXY 网络直连、默认开启 s2s,启动横幅 - vendor/:补丁后 s2s 云化栈移入项目(backend/vendor/s2s-cloud),pyproject sources 改相对路径 - .gitignore:忽略 .torch-cache / nltk_data 缓存 - AGENTS.md:进程管理铁律(AI 不启动/重启服务,由用户操作)
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import pytest
|
||||
|
||||
from speech_to_speech.STT import parakeet_tdt_handler
|
||||
from speech_to_speech.STT.parakeet_tdt_handler import ParakeetTDTSTTHandler
|
||||
|
||||
|
||||
def test_build_lingua_detector_preloads_language_models(monkeypatch):
|
||||
if not parakeet_tdt_handler.LINGUA_AVAILABLE:
|
||||
pytest.skip("lingua-language-detector is not installed")
|
||||
|
||||
calls = []
|
||||
detector = object()
|
||||
|
||||
class Builder:
|
||||
def with_preloaded_language_models(self):
|
||||
calls.append("preload")
|
||||
return self
|
||||
|
||||
def build(self):
|
||||
calls.append("build")
|
||||
return detector
|
||||
|
||||
class BuilderFactory:
|
||||
@staticmethod
|
||||
def from_languages(*languages):
|
||||
calls.append(("languages", languages))
|
||||
return Builder()
|
||||
|
||||
monkeypatch.setattr(parakeet_tdt_handler, "LanguageDetectorBuilder", BuilderFactory)
|
||||
|
||||
assert parakeet_tdt_handler._build_lingua_detector() is detector
|
||||
assert calls == [("languages", tuple(parakeet_tdt_handler._lingua_languages)), "preload", "build"]
|
||||
|
||||
|
||||
def test_detect_language_from_short_text_returns_none_without_querying_detector(monkeypatch):
|
||||
handler = object.__new__(ParakeetTDTSTTHandler)
|
||||
|
||||
class ExplodingDetector:
|
||||
def detect_language_of(self, text):
|
||||
raise AssertionError("short text should not invoke lingua")
|
||||
|
||||
monkeypatch.setattr(parakeet_tdt_handler, "LINGUA_AVAILABLE", True)
|
||||
monkeypatch.setattr(parakeet_tdt_handler, "_lingua_detector", ExplodingDetector(), raising=False)
|
||||
|
||||
assert handler._detect_language_from_text("Okay.") is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"text",
|
||||
[
|
||||
"Okay, open the door.",
|
||||
"Okay, try that again.",
|
||||
"Open the door, please.",
|
||||
],
|
||||
)
|
||||
def test_detect_language_from_short_english_text_uses_lingua_successfully(text):
|
||||
if not parakeet_tdt_handler.LINGUA_AVAILABLE:
|
||||
pytest.skip("lingua-language-detector is not installed")
|
||||
|
||||
handler = object.__new__(ParakeetTDTSTTHandler)
|
||||
|
||||
assert len(text) >= 20
|
||||
assert handler._detect_language_from_text(text) == "en"
|
||||
|
||||
|
||||
def test_detect_language_from_long_norwegian_text_maps_nb_to_no():
|
||||
if not parakeet_tdt_handler.LINGUA_AVAILABLE:
|
||||
pytest.skip("lingua-language-detector is not installed")
|
||||
|
||||
handler = object.__new__(ParakeetTDTSTTHandler)
|
||||
text = (
|
||||
"Jeg heter Øyvind og bor i Trondheim. Denne teksten er lang nok til å teste "
|
||||
"om språkdetektoren virkelig klarer å skille norsk bokmål fra dansk og svensk "
|
||||
"i et realistisk avsnitt med vanlige ord og tegn."
|
||||
)
|
||||
|
||||
assert handler._detect_language_from_text(text) == "no"
|
||||
Reference in New Issue
Block a user