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>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
"""引擎注册表: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"]
|
||||
Reference in New Issue
Block a user