🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

本地推理服务管理 Ansonfishing/dsh-model-manager

DeepSeek Harness
Ansonfishing63 天前有提交已提供中文文档扫描:含敏感能力

登记本地推理服务,校验显存并一键测速对比 tok/s

28.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Ansonfishing/dsh-model-manager
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/07·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 63 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 35 处,展示前 35 条)
  • 执行外部命令来自配置/变量
    index.js:150
    const child = spawn(exe, args, {
  • 写入本地文件
    index.js:160
    appendFileSync(logPath, c);
  • 读取本地文件
    index.js:548
    Object.assign({}, p, { modelMissing: typeof p.modelPath === "string" && p.modelPath ? !existsSync(p.modelPath) : false })
  • 读取本地文件
    index.js:641
    if (!existsSync(p)) {
  • 读取本地文件
    index.js:650
    const lines = readFileSync(p, "utf8")
  • 发起网络请求
    lib/client.js:1328
    const res = await fetch(path, { headers: { [CLIENT_HEADER]: CLIENT_VALUE } });
  • 发起网络请求
    lib/client.js:1334
    const res = await fetch(path, {
  • 写入剪贴板
    lib/client.js:1735
    navigator.clipboard.writeText(txt).then(done).catch(() => fallbackCopy(txt, done));
  • 写入本地文件
    lib/store.js:23
    mkdirSync(home, { recursive: true });
  • 写入本地文件
    lib/store.js:24
    mkdirSync(join(home, "servers"), { recursive: true });
  • 读取本地文件
    lib/store.js:31
    if (!existsSync(p)) return fallback;
  • 读取本地文件
    lib/store.js:32
    const raw = readFileSync(p, "utf8");
  • 写入本地文件
    lib/store.js:42
    mkdirSync(dirname(p), { recursive: true });
  • 写入本地文件
    lib/store.js:44
    writeFileSync(tmp, JSON.stringify(value, null, 2), "utf8");
  • 写入本地文件
    lib/store.js:45
    renameSync(tmp, p);
  • 写入本地文件
    lib/store.js:50
    mkdirSync(dirname(p), { recursive: true });
  • 读取本地文件
    lib/store.js:61
    if (!existsSync(p)) return [];
  • 读取本地文件
    lib/store.js:62
    return readFileSync(p, "utf8")
  • 发起网络请求
    lib/lifecycle.js:21
    const fetchImpl = deps.fetchFn || ((url, opts = {}) => fetch(url, { signal: AbortSignal.timeout(2500), ...opts }));
  • 执行外部命令来自配置/变量
    lib/lifecycle.js:24
    execFileSync(argv[0], argv.slice(1), { stdio: "ignore", timeout: 15000 });
  • 执行外部命令来自配置/变量
    lib/lifecycle.js:26
    const spawnImpl = deps.spawnFn || ((exe, args, opts) => spawn(exe, args, { ...opts, stdio: "ignore" }));
  • 读取本地文件
    lib/lifecycle.js:29
    try { return readFileSync(join(home, "servers", `${port}.log`), "utf8"); } catch { return ""; }
  • 读取本地文件
    lib/lifecycle.js:246
    if (path && !existsSync(path)) {
  • 执行外部命令来自配置/变量
    lib/lifecycle.js:267
    const out = execFileSync(argv[0], argv.slice(1), { encoding: "utf8", timeout: 20000, stdio: ["ignore", "pipe", "ignore"] });
  • 发起网络请求
    lib/lifecycle.js:305
    res = await fetch(`${base}/v1/chat/completions`, {
  • 写入本地文件
    lib/lifecycle.js:566
    writeFileSync(join(home, "servers", `${port}.pid`), String(pid));
  • 读取本地文件
    lib/gpu.js:26
    if (!existsSync(p)) return {};
  • 读取本地文件
    lib/gpu.js:28
    const v = JSON.parse(readFileSync(p, "utf8"));
  • 执行外部命令来自配置/变量
    lib/gpu.js:80
    return execFileSync(argv[0], argv.slice(1), {
  • 读取本地文件
    build/build-client.cjs:7
    const html = fs.readFileSync(path.join(ROOT, "mockup-v3.html"), "utf8");
  • 读取本地文件
    build/build-client.cjs:133
    let tpl = fs.readFileSync(path.join(__dirname, "client-template.js"), "utf8");
  • 写入本地文件
    build/build-client.cjs:136
    fs.writeFileSync(path.join(ROOT, "lib", "client.js"), tpl);
  • 发起网络请求
    build/client-template.js:630
    const res = await fetch(path, { headers: { [CLIENT_HEADER]: CLIENT_VALUE } });
  • 发起网络请求
    build/client-template.js:636
    const res = await fetch(path, {
  • 写入剪贴板
    build/client-template.js:1016
    navigator.clipboard.writeText(txt).then(done).catch(() => fallbackCopy(txt, done));
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 登记本地推理服务
  • 显存校验
  • tok/s基准测试

在 DSH 里管理本地 LLM 推理服务:GPU 注册表、参数配置档、显存校验,以及 llama.cpp、SGLang、vLLM 的 tok/s 基准测试

README

由 DeepSeek 最新模型翻译生成
dsh-model-manager 语言 / Language: | English 本地 LLM 推理服务的「总控台」——DSH(DeepSeek Harness)插件。 面板截图 为什么 本地同时跑几个推理服务(llama.cpp / SGLang / vLLM)时,参数散落在终端历史和笔记本里:这个模型该配哪套 -c / -np?显存到底够不够?哪个框架在这张卡上能起? 装好本插件,这些答案都在一个面板里: - 之前:翻终端历史、手动算 KV、等 OOM 才知道配置超了; - 之后:服务注册表一眼看清谁在哪张卡上跑,参数 Profile 保存前就校验显存,一键测速对比 tok/s。 快速开始 前提:DSH(带 web)+ pnpm;GPU 检测需要 python3(缺失时自动回退 nvidia-smi)。 cd ~/.dsh/profiles/web # 你的 DSH web profile 目录 pnpm add github:Ansonfishing/dsh-model-manager 然后在 package.json 的 dsh.profile.bundles 数组里加上 "dsh-model-manager",重启 dsh。会话视图出现「模型管理」tab,就好了。
展开完整文档(README 剩余 1 节)
dsh-model-manager

语言 / Language: | English

本地 LLM 推理服务的「总控台」——DSH(DeepSeek Harness)插件。

面板截图

为什么

本地同时跑几个推理服务(llama.cpp / SGLang / vLLM)时,参数散落在终端历史和笔记本里:这个模型该配哪套 -c / -np?显存到底够不够?哪个框架在这张卡上能起?

装好本插件,这些答案都在一个面板里:

- 之前:翻终端历史、手动算 KV、等 OOM 才知道配置超了;
- 之后:服务注册表一眼看清谁在哪张卡上跑,参数 Profile 保存前就校验显存,一键测速对比 tok/s。

快速开始

前提:DSH(带 web)+ pnpm;GPU 检测需要 python3(缺失时自动回退 nvidia-smi)。

cd ~/.dsh/profiles/web # 你的 DSH web profile 目录
pnpm add github:Ansonfishing/dsh-model-manager

然后在 package.json 的 dsh.profile.bundles 数组里加上 "dsh-model-manager",重启 dsh。会话视图出现「模型管理」tab,就好了。

功能

- 服务注册表——登记本地推理服务(端口、框架、模型、GPU),健康检查实时显示,一键停止。
- 参数 Profile——每个「模型 × 框架 × GPU」组合的命名参数版本(llama.cpp / SGLang / vLLM)。参数表按 9 个逻辑组固定排序(模型→上下文→KV→投机解码→采样→性能→并行→服务→其他);同模型×同框架的不同量化按参数并集展示、行位对齐,本版本未设的参数以灰行标注「其他量化:值」,量化间差异一眼可见。推荐值走「同量化实跑值 → 同模型兄弟量化 → 官方最佳实践」三级溯源链,每格标注来源,无依据不臆造。
- GPU 检测——自动枚举显卡(libcuda 主源,nvidia-smi 回退);卡编号 = CUDA_VISIBLE_DEVICES 值。
- 显存校验——保存 Profile 时按 -c / -np 估算 KV 占用,超出目标卡容量立刻 warning。
- 一键测速——对已运行服务发固定 prompt(非流式 256 token),记录 tok/s;另有满上下文热测速(先校验实际可用上下文 ≥ 目标,再流式 warmup + 测量,记 TTFB / prefill / decode)。
- 安全红线——绝不 pkill;停止外部服务需显式 force + 面板两次点击二次确认;11437(DSH 自身推理端口)停止时额外提示「将中断当前会话」。

不用装 DSH,先看看面板?

clone 本仓库,浏览器直接打开 test/harness/index.html——零依赖渲染 harness,用 mock 数据渲染完整面板,?chrome=0 隐藏 harness 顶栏。

本地 GPU 表(可选)

仓库不内置任何显卡映射。想让面板显示卡名和显存容量,创建 ~/.dsh/model-manager/builtin-gpus.local.json:

{
"0": { "name": "RTX 4090", "memGb": 24 },
"1": { "name": "RTX 6000 Ada", "memGb": 48 }
}

没有这个文件时面板回退为 "GPU 0 / GPU 1",显存校验自动跳过。

开发

npm test # node --test test/.test.mjs
node build/build-client.cjs # 从 mockup-v3.html 重新构建 lib/client.js

本地开发:clone 后在 profile 里用 pnpm add link:../path/to/dsh-model-manager。客户端改动浏览器 F5 即可;Node 侧(index.js / lib/.js)改动需重启 dsh。

常见问题

- 面板显示 "GPU 0 / GPU 1" 而不是卡名? 缺 ~/.dsh/model-manager/builtin-gpus.local.json 且 nvidia-smi 未探测到卡。显存校验会自动跳过(不会误报,不影响其它功能)。放一个本地 GPU 表即可显示真实卡名与容量,见上文「本地 GPU 表」。
- GPU 检测一直失败? 首选 libcuda/python3,缺失时回退 nvidia-smi;两者都没有时面板顶部会给出 lastError 原文,按它排查即可。
- 点「停止」没反应 / 需要再点一次? 停止外部(非本插件托管)服务需要显式 force + 两次点击二次确认;这是红线,不是 bug。托管服务(本插件 spawn 的)一次即可。11437 停止时额外提示「将中断当前会话」。
- 托管启动报「port 已被注册表占用」? 该端口已有登记条目。先停掉原服务,或换一个端口;死托管记录(记录 pid 已亡)会在启动时自动清理。
- SGLang / vLLM 启动报 flashinfer 版本不一致? 插件对这两个框架已默认跳过 cubin 版本检查(与手动启动命令一致);若仍失败,请对齐 flashinfer-python 与 flashinfer-cubin 的 pip 版本。
- 端口 11436 / 11437 是什么? 只是双卡场景下的默认端口建议(卡0=11436、卡1=11437),不是硬编码保留,可以随意改。

架构简述

| 层 | 文件 | 职责 |
| 入口 | index.js | 注册 14 个工具 + 17 个同源路由 |
| 生命周期 | lib/lifecycle.js | 注册表 CRUD、健康探测、托管启动/停止 |
| 安全 | lib/safety.js | 停止策略(fuser/kill)、保护端口 |
| 校验 | lib/validate.js | launchCommand 解析 + 规则引擎 |
| GPU | lib/gpu.js | 检测 + 本地 GPU 表加载 |
| 适配 | lib/adapters/*.js | llama / sglang / vllm 命令拼装 |
| 客户端 | lib/client.js | React 单文件组件(由 mockup 构建) |

许可证

MIT © Ansonfishing
预览分享卡片长什么样 ↓Ansonfishing/dsh-model-manager
分享 · DeepSeek Harness Hub
Ansonfishing/dsh-model-manager

登记本地推理服务,校验显存并一键测速对比 tok/s

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部