25acf9db6e
横向对比云端 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>
46 lines
1.5 KiB
Python
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"]
|