Skip to content

前置插件依赖(requires_plugins) ​

当一个插件需要另一个插件先装好才能工作时(典型:你的 ASR / MT 插件要靠另一个插件 提供 llama-server.exe 这类推理运行时),在 mod.json 声明依赖。


声明 ​

json
{
  "id": "web.yourname.amd_hy_mt",
  "type": "mt",
  "requires_plugins": [
    {
      "id": "workshop.amd_llama",
      "min_version": "1.0.0",
      "reason": "提供 llama.cpp 运行时(llama-server.exe)"
    }
  ]
}
字段必填说明
id是前置插件的 mod id;最多 8 条(超出丢弃)
min_version否要求的最低版本(semver)
reason否一句话说明为什么需要它(会显示给用户)

简写:整条只写 id 时可写成字符串 —— "requires_plugins": ["workshop.amd_llama"]。

允许依赖官方 id(如 community.mt.haidass_143m),不受「保留段」规则限制。 重复 id 会去重。


宿主行为 ​

时机行为
启动扫描依赖未就位(未安装 / 未启用 / 版本过低)→ 强制停用该插件(状态残留的兜底)
启用开关拒绝启用 + 浮层提示(含插件名、缺什么、怎么处理)
选为 ASR/MT/TTS 引擎拒绝(与启用同一道门禁)
启动同传就绪检查报 missing_dependency → 阻断 + 明确提示(不会只报"未找到 xxx 运行时")
扩展工坊卡片显示「需要前置插件:…」+ 一键 安装 / 启用 / 更新(只缺一个时)

宿主不会自动安装前置插件(含代码的插件不允许静默安装)——用户点一下「安装」才会从当前渠道的 工坊下载。


怎么在前置插件的目录里取文件(重要) ​

❌ 不要硬编码兄弟目录名:从工坊安装时,目录名 = 插件 id (<数据目录>/workshop/workshop.amd_llama),而你手放进 extensions/ 的可能是下划线写法 (extensions/workshop_amd_llama)。按 id 查才两边都对。

python
from pathlib import Path


def _locate_llama_server(self):
    # ✅ 推荐:宿主 API
    dep_dir = self.host.plugin_dir("workshop.amd_llama")     # 未安装返回 ""
    if dep_dir:
        exe = Path(dep_dir) / "llama" / "llama-server.exe"
        if exe.exists():
            return exe

    # 备选:自己遍历(每项都带 source_path)
    for m in self.host.list_installed_plugins():
        if m.get("id") == "workshop.amd_llama":
            exe = Path(m["source_path"]) / "llama" / "llama-server.exe"
            if exe.exists():
                return exe
    return None

配套建议:check_ready() 里找不到运行时就返回 (False, "model_not_ready", "需要先安装「llama 运行时」插件") —— 用户在启动前就能看到人话提示。

相关 API:host.plugin_dir(id) / host.has_plugin(id) / host.list_installed_plugins(type_filter), 见 会话与宿主状态。


与 requires_runtime 的关系 ​

如果依赖的东西是几十 MB 的原生运行库,不要用「插件依赖插件」这条路,改用 宿主运行库(requires_runtime):宿主自带下载/校验/解压,插件只声明要哪个。

依赖链也生效:A requires_plugins B 且 B requires_runtime llama_runtime, 运行库没装时 A 同样被挡住,提示「需要前置插件:B 缺运行库:llama.cpp 运行库(未下载)」。


相关 ​

TransBox - 赋能全人类无界限跨语言交流