Skip to content

API 模块

src/lab/api/ — HTTP 路由、外部服务客户端、业务逻辑封装。

目录结构

api/
├── types.py             # 内部类型定义
├── routes/              # FastAPI 路由(协议层)
│   ├── asr_sherpa.py    # /asr/sherpa — Sherpa-ONNX Paraformer 识别 + VAD
│   ├── asr_qwen.py      # /asr/qwen-asr — Qwen3-ASR OpenVINO 识别
│   ├── asr_reload.py    # /asr/reload、/asr/sherpa/reload — ASR 热重载
│   ├── asr_shared.py    # 共享工具(文件上传暂存、路径处理)
│   ├── deeplx.py        # /translate — DeepLX 翻译代理
│   ├── faster_qwen_tts.py  # /tts/qwen-tts — Qwen-TTS 合成
│   ├── genie_tts.py    # /tts/genie-tts — Genie-TTS 合成
│   ├── gsv_lite.py     # /tts/gsv-lite — GSV-Lite 合成
│   └── vtuber.py        # /client-ws — VTuber WebSocket 入口
├── logic/               # 业务逻辑与模型封装
│   ├── sherpa_asr.py    # Sherpa-ONNX 引擎单例管理(加载 / 热重载 / 推理封装)
│   ├── qwen_asr.py      # Qwen3-ASR 引擎单例管理(加载 / 热重载 / 推理封装)
│   └── faster_qwen_tts.py  # Qwen-TTS 合成逻辑(单次 / 流式)
└── clients/             # 外部服务客户端
    ├── base_client_interface.py  # BaseRequest / BaseResponse / BaseClientInterface
    ├── asr_client.py        # ASRClient
    ├── genie_tts_client.py  # GenieTTSClient
    ├── gsv_lite_client.py   # GSVLiteClient
    ├── deeplx_client.py     # DeepLXClient
    ├── reload_client.py     # ReloadClient(模型热重载)
    └── vad_client.py        # VADClient

职责划分

Routes — 协议层

路由只负责 HTTP 协议处理(参数解析、响应格式化),业务逻辑委托给 logic/

路由前缀功能
asr_sherpa.py/asr/sherpaSherpa-ONNX Paraformer 语音识别(transcribe + VAD)
asr_qwen.py/asr/qwen-asrQwen3-ASR OpenVINO 识别(0.6B / 1.7B 各自一个端点)
asr_reload.py/asrASR 热重载(/reload 全量 + /sherpa/reload 单独)
asr_shared.py上传文件暂存到缓存目录,file_default 依赖注入
deeplx.py/translate/deeplxDeepLX 翻译代理(调用外部服务)
llm_translate.py/translate/llm本地 LLM 翻译(Qwen2.5-0.5B Q8 GGUF,llama-cpp-python)
faster_qwen_tts.py/tts/qwen-ttsQwen-TTS 语音合成(非流式 + SSE 流式)
genie_tts.py/tts/genie-ttsGenie-TTS 语音合成(POST → WAV)
gsv_lite.py/tts/gsv-liteGSV-Lite 语音合成(POST → WAV)
vtuber.py/client-wsOpen-LLM-VTuber WebSocket 连接管理

Logic — 模型封装

每个文件对应一套引擎,同时包含单例管理和推理封装,职责内聚:

文件内容
logic/sherpa_asr.pyload_sherpa_asr / reload_sherpa_asr / sherpa_asr_audio / sherpa_vad_audio。启动时预加载 Paraformer + Silero VAD,热重载先 reset 再重新加载。
logic/qwen_asr.pyload_qwen_asr_engine / reload_qwen_asr_engine / qwen_asr_transcribe / preload_configured_qwen_asr_engines。支持多模型并发(0.6B / 1.7B 各自独立单例)。normalize_qwen_model_name 处理路由层传入的各种别名。
logic/faster_qwen_tts.pyQwen-TTS 合成逻辑(单次 / 流式)
logic/llm_translate.pyLLMTranslateEngine 加载/卸载/路径解析
logic/translate.pyTranslateEngineRouter:按 translate_provider 路由到 DeepLX 或本地 LLM

Sherpa-ONNX 与 Qwen3-ASR 完全解耦,server.py 启动时各自按 [package] flag 独立预加载,互不干扰。

Clients — 外部服务封装

所有 Client 继承 BaseClientInterface,统一了请求/响应模型和日志。用于从 conversations/ 等内部模块调用 TTS、ASR 等服务。

与其他模块的关系

  • server.py[package] 开关挂载路由:sherpa_routerqwen_asr_routerasr_reload_routerdeeplx_routerllm_translate_routerllm_translate=true)、qwen_tts_routervtuber_router
  • conversations/ 通过 Clients 调用 TTS / 翻译
  • agent/ 不直接依赖 api/,而是通过 conversations 层间接使用

魔女の实验室