Оценка разделения больше не роняет задачу, журнал доступен через API
Полный трейс показал настоящую причину сбоя: падало не распознавание, а метрика separation_quality из 0.5.0 - она скармливала модели отпечатков реплики целиком, и на 190-секундной та не выдержала. Теперь берётся кусок из середины реплики, а сбой оценки лишь обнуляет её, не трогая расшифровку. Добавлен /v1/logs: последние записи журнала с фильтром по уровню, чтобы разбирать сбои без копирования консоли вручную. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f2f266ba1c
commit
710fc8b90b
@@ -281,3 +281,39 @@ class TestSpawnSafety:
|
||||
|
||||
assert main.store is None
|
||||
assert not (tmp_path / "data" / "jobs.db").exists()
|
||||
|
||||
|
||||
class TestSeparationNeverBreaksJob:
|
||||
"""Оценка разделения вспомогательная и не должна ронять расшифровку."""
|
||||
|
||||
def test_embedding_uses_short_piece(self):
|
||||
"""Длинный фрагмент модель отпечатков не переваривает."""
|
||||
from app.pipeline import EMBED_SEC
|
||||
|
||||
assert EMBED_SEC <= 10
|
||||
|
||||
def test_failure_in_quality_does_not_break_transcribe(self, tmp_path, monkeypatch):
|
||||
import sys
|
||||
import types
|
||||
|
||||
import numpy as np
|
||||
|
||||
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)
|
||||
p._asr = types.SimpleNamespace(recognize=lambda *a, **k: "текст")
|
||||
monkeypatch.setattr(p, "warmup", lambda: None)
|
||||
monkeypatch.setattr(p, "_reload_replacements", lambda: None)
|
||||
monkeypatch.setattr(p, "_diarizer", lambda n: types.SimpleNamespace(
|
||||
process=lambda s: types.SimpleNamespace(
|
||||
sort_by_start_time=lambda: [types.SimpleNamespace(start=0.0, end=2.0, speaker=0)])))
|
||||
monkeypatch.setattr(p, "_separation_quality",
|
||||
lambda *a: (_ for _ in ()).throw(RuntimeError("модель упала")))
|
||||
monkeypatch.setattr("app.pipeline.read_wav", lambda _: np.zeros(16000 * 3, dtype=np.float32))
|
||||
|
||||
result = p.transcribe(tmp_path / "any.wav")
|
||||
assert result["stats"]["separation_quality"] == 0.0
|
||||
assert result["turns"] # расшифровка на месте
|
||||
|
||||
Reference in New Issue
Block a user