Воркеры грузят модели при первой задаче
Прогрет был только нулевой воркер, остальные получали пустой конвейер и роняли задачу с "модели не загружены". В комментарии было написано, что они греются сами, но кода для этого не было. Заодно отключены ANSI-цвета uvicorn на Windows: консоль их не разбирает и печатала управляющие последовательности как мусор. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
be837bab0b
commit
c1ba61fcd5
@@ -95,3 +95,43 @@ class TestWorkerSettings:
|
||||
config = tmp_path / "config.toml"
|
||||
config.write_text('[processing]\nworkers=3\n', encoding="utf-8")
|
||||
assert load_settings(config).effective_workers() == 3
|
||||
|
||||
|
||||
class TestLazyWarmup:
|
||||
"""Воркеры создаются заранее, а модели грузят при первой своей задаче."""
|
||||
|
||||
def test_transcribe_warms_up_when_needed(self, tmp_path, monkeypatch):
|
||||
import sys
|
||||
import types
|
||||
|
||||
for name in ("sherpa_onnx", "onnx_asr", "onnxruntime"):
|
||||
monkeypatch.setitem(sys.modules, name, types.ModuleType(name))
|
||||
from app.pipeline import Pipeline
|
||||
|
||||
p = Pipeline(models_dir=tmp_path, threads=1,
|
||||
replacements_path=tmp_path / "r.txt", base_dir=tmp_path)
|
||||
called = {"warmup": 0}
|
||||
monkeypatch.setattr(p, "warmup", lambda: called.__setitem__("warmup", 1))
|
||||
# transcribe упадёт дальше на чтении файла, но warmup обязан быть вызван
|
||||
with pytest.raises(Exception):
|
||||
p.transcribe(tmp_path / "нет.wav")
|
||||
assert called["warmup"] == 1
|
||||
|
||||
def test_no_runtime_error_about_warmup(self, tmp_path, monkeypatch):
|
||||
"""Прежде здесь падало «модели не загружены, вызовите warmup()»."""
|
||||
import sys
|
||||
import types
|
||||
|
||||
for name in ("sherpa_onnx", "onnx_asr", "onnxruntime"):
|
||||
monkeypatch.setitem(sys.modules, name, types.ModuleType(name))
|
||||
from app.pipeline import Pipeline
|
||||
|
||||
p = Pipeline(models_dir=tmp_path, threads=1,
|
||||
replacements_path=tmp_path / "r.txt", base_dir=tmp_path)
|
||||
monkeypatch.setattr(p, "warmup", lambda: None)
|
||||
try:
|
||||
p.transcribe(tmp_path / "нет.wav")
|
||||
except RuntimeError as exc:
|
||||
assert "warmup" not in str(exc)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user