Files
wangjia 25acf9db6e feat(eval): ASR 模型评估框架
横向对比云端 gummy 与本地开源模型(faster-whisper/SenseVoice/Paraformer),
重点覆盖中英混说,产出准确率(CER/WER/MER)/速度(延迟/RTF)/资源(cpu/mem/模型大小)
对比报告。公共集(ASCEND/AISHELL/LibriSpeech)统一走 HF 适配器 + 自定义 JSONL manifest。
gummy 引擎对照 server/internal/asr/gummy.go 协议移植。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 11:25:04 +08:00

46 lines
1.5 KiB
Python

"""引擎注册表:config.yaml 里的 type 映射到具体引擎类(懒加载,避免未装的重依赖被导入)。"""
from __future__ import annotations
from .base import Engine, Transcript
def build_engine(cfg: dict) -> Engine:
"""按 config 的单个 engine 条目构造引擎实例。"""
etype = cfg["type"]
name = cfg.get("name", etype)
if etype == "gummy":
from .gummy import GummyEngine
return GummyEngine(
name=name,
api_key=cfg["api_key"],
model=cfg.get("model", "gummy-realtime-v1"),
cost_per_min=cfg.get("cost_per_min"),
realtime_factor=cfg.get("realtime_factor", 2.0),
)
if etype == "whisper":
from .whisper import WhisperEngine
return WhisperEngine(
name=name,
model_size=cfg.get("model_size", "small"),
device=cfg.get("device", "cpu"),
compute_type=cfg.get("compute_type", "int8"),
model_dir=cfg.get("model_dir"),
)
if etype == "sensevoice":
from .funasr import SenseVoiceEngine
return SenseVoiceEngine(name=name, device=cfg.get("device", "cpu"), model_dir=cfg.get("model_dir"))
if etype == "funasr":
from .funasr import ParaformerEngine
return ParaformerEngine(name=name, device=cfg.get("device", "cpu"), model_dir=cfg.get("model_dir"))
raise ValueError(f"未知引擎类型: {etype}")
__all__ = ["Engine", "Transcript", "build_engine"]