Skip to content
dsh.fish
Bundle

dsh-better-model-select

DSH plugin: exposes per-provider balance / coding-plan usage (5h window + weekly) in a status bar pinned to the native session-stats row.

Source
sxy-kumako
License
MIT
Updated
Updated 6 days ago

Readme

# dsh-better-model-select

DSH (DeepSeek Harness) 插件:模型列表跟随各 provider 的 API 实时更新 + 把各 provider 的实时用量显示在原生会话统计行下方。

## 模型列表同步(model sync)

DSH 内置的模型发现对 pi-ai 目录里已有的 provider(GLM Coding、MiniMax 等)会直接返回打包时的静态目录,
**从不请求远端接口** —— 新发布的模型(如 GLM 新版本)要等 pi-ai 升级才会出现。本插件补上这一环:

- 每 30 分钟(含启动时)读取 `llm-pi-ai.providers` 下配置的每条路由;
- 用该路由的凭据(`apiKeyEnv` → DSH 凭据库 / 环境变量)请求 provider 的模型列表接口
  (OpenAI 兼容 `GET {baseURL}/models`;Anthropic 兼容 `GET {baseURL}/v1/models`);
- 合并远端列表与已安装目录:目录已有的模型保持原样(裸 `{id}` 条目,解析时自动继承目录完整定义),
  远端新增的模型按同家族目录模型生成完整条目(上下文窗口、输入模态、wire compat、推理能力),
  用户手写的条目永远优先、不会被删;
- 结果写入该路由的 `models` 设置列表。llm-pi-ai 在每次设置提交时重新物化路由,
  **模型选择器实时生效 —— 无需代理、无需改 baseURL、无需重启**。

一次失败的远端请求不会写任何东西。写入被 llm-pi-ai 校验拒绝时仅记日志、保留原值。

## 用量徽标(quota badges)

- **GLM Coding / MiniMax Coding**:5h 窗口 + 周窗口剩余量
- **DeepSeek / OpenRouter / Kimi**:现金余额

颜色按剩余量染色:>30% 绿 / ≤30% 橙 / ≤10% 红。数据经 loopback RPC 通道
`/dsh-better-model-select`(endpoint `quota`,可 `force`;`syncModels` 可手动触发一轮同步)
由宿主半侧拉取,key 通过 DSH 凭据库(`apiKeyEnv` 引用名)解析,不会落日志。

> 历史版本曾内置一个 127.0.0.1:9999 的 OpenAI 兼容转发代理;该实现已移除,
> provider 请求走 DSH(pi-ai)原生直连。

## 安装

```bash
cd ~/.dsh/profiles/<你的 profile>          # 例如 desktop 或 web
rm -rf node_modules/dsh-better-model-select   # 更新时先删旧副本(不要原地覆盖)
cp -R ~/.dsh/plugins/dsh-better-model-select node_modules/
```

重启 DSH Desktop。

## 文件

- `index.js` — 宿主半侧:模型同步循环 + quota RPC 通道
- `lib/sync.js` — 远端列表拉取、目录合并、settings 写入
- `lib/catalog.js` — 定位并读取已安装 pi-ai 的模型目录(模板来源)
- `lib/adapters.js` — 各 provider 用量接口适配表
- `lib/credentials.js` — 凭据解析(DSH 凭据库 → 环境变量)
- `client.js` — Web 半侧:状态条挂载到原生统计行下方
- `test/sync.test.mjs` — 离线冒烟:真实拉取两个 provider 的列表、校验写入 patch、幂等性

Install

dsh plugin --profile web add github:sxy-kumako/dsh-better-model-select

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source