Wanbinyu/dsh-billing

Local per-model cost, token usage, and session quota plugin for DeepSeek Harness

项目介绍Project Overview

dsh-billing 是面向 DeepSeek Harness 的社区计费与额度插件,按 provider/model 汇总 token 费用,输出 billing session projection;Web 费用条展示本轮/会话费用、额度进度与未定价模型。可安装的社区 bundle 同时导出 host 与 Web 客户端,无需额外发布内部包。配置项支持 CNY 等多币种与每会话额度阈值。当模型缺价时仅统计 token 并进入 unpricedModels,quota.estimated 置为 true,不能视为完整账单。

dsh-billing is a community plugin for DeepSeek Harness that aggregates token costs by provider and model and exposes a billing session projection, with a per-session quota option. The community bundle ships both the host package and the Web UI extension, so installing from GitHub does not require publishing the internal packages. The Web cost bar shows per-turn and per-session totals, quota progress, and unpriced-model notices. Caveat: costs are local reference values, not invoices or hard rate limits, and unpriced models leave quota marked as estimated.

或使用命令行安装(适合开发者)Or use CLI install (for developers)

命令行安装CLI Install

dsh plugin --profile web add https://github.com/Wanbinyu/dsh-billing/releases/download/v0.6.3/dsh-billing-community-bundle-0.6.3.tgz

Wanbinyu/dsh-billing 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-billing

简体中文 | English

面向 DeepSeek Harness 的会话计费与额度插件。

[!NOTE] 这是独立的社区项目,不属于 DeepSeek Harness 官方发行版。费用是本地参考值,不是账单,也不会自动阻止模型调用。

包含组件

作用
dsh-billing 按 provider/model 统计 token 费用,生成 billing session projection,并支持每会话额度。
dsh-client-ui-billing 在 Web composer dock 显示本轮/会话费用、额度进度、未定价模型提示和模型明细。
dsh-billing-community-bundle 将上面两个包和 cordis.patch.yml 组合成可安装的 DSH bundle。

host 侧负责计价和 projection,浏览器侧从 host 已计算的 projection 渲染界面。可安装的根 bundle 同时导出 host 与 Web client 入口,因此从 GitHub 安装不依赖另外发布两个内部包。相同模型 ID 在不同 provider 下会分开统计,例如 deepseek/deepseek-v4-flashopenrouter/deepseek-v4-flash

v0.6.3 已使用 DeepSeek Harness 0.1.1-rc.2 完成类型、测试、完整构建和打包验证,并保留 0.1.0-rc.6rc.80.1.1-rc.1 的兼容分支。

作为 bundle 安装

仓库根目录的 bundle 包含 dsh.bundle 声明和两个运行时包。安装到 web profile:

dsh plugin --profile web add https://github.com/Wanbinyu/dsh-billing/releases/download/v0.6.3/dsh-billing-community-bundle-0.6.3.tgz

安装后重启 dsh。bundle 通过一个 billing 配置条目同时启用 host projection 和 Web 费用条,价格优先使用配置,其次使用内置 USD 模型目录。

手动安装

宿主项目需要自己控制组合层时,可以安装两个包:

npm install ./packages/dsh-billing ./packages/dsh-client-ui-billing

然后在 profile 的 cordis.patch.yml 中加入:

- insert:
    - id: billing
      name: dsh-billing
      config: {}
    - id: ui-billing
      name: dsh-client-ui-billing

配置价格和额度

DeepSeek 官方示例价格使用 CNY 每 100 万 token:缓存命中 0.02、缓存未命中输入 1、输出 2。实际价格请按你的合同配置;DeepSeek 的峰谷价格可能变化。

- id: billing
  config:
    models:
      deepseek/deepseek-v4-flash:
        input: 1
        output: 2
        cacheRead: 0.02
        cacheWrite: 0
    currency: CNY
    quota:
      limit: 5

价格键优先使用精确的 provider/model,例如 openrouter/deepseek-v4-flash;只写模型 ID(例如 deepseek-v4-flash)仍然有效,并作为所有 provider 的兼容回退。如果在 bundle 已插入后修改 billing 行,Harness 的 patch 会替换整段 config,因此需要保留所有希望继续使用的配置字段。

内置目录只使用 USD。使用 CNY 或其他货币时,请为每个模型显式配置价格;没有价格的模型仍会统计 token,但会进入 unpricedModels。它们不会伪造费用,quota.estimated 会变为 true,表示额度进度只包含已知价格,不能当作完整账单。

Projection

interface BillingProjection {
  currency: string
  totalCost: number
  models: { provider: string; model: string; cost: number; uncachedInputTokens: number;
            outputTokens: number; cacheReadTokens: number;
            cacheWriteTokens: number }[]
  unpricedModels: string[]
  latestTurn?: { turn: number; cost: number; uncachedInputTokens: number;
                 outputTokens: number; cacheReadTokens: number;
                 cacheWriteTokens: number; unpricedModels: string[] }
  quota?: { limit: number; used: number; remaining: number; percent: number; estimated: boolean }
}

usage 采用 request/header 对 step 进行归属;同一 (turn, step) 的后续样本会同时替换会话累计和本轮数据中的早期样本,避免重复计费;没有前置 header 的 usage 会放入保留的 (unknown) bucket。latestTurn 在首次收到 usage 后出现,供客户端显示最近一轮的费用和 Token 明细。

Web 费用条同时显示“本轮”和“会话”金额。鼠标悬停可查看本轮输入、输出、缓存命中/写入 Token 以及分模型费用;额度达到 50%、80% 和 100% 时会逐级增强提示颜色。

开发与验证

host 配置、projection 去重、额度状态和 Web BillingBar 服务端渲染输出均有自动化测试;真实 Harness Web 安装与视口组合仍按发布检查表手动验证。运行完整验证:

npm run build
npm run verify

内置目录通过以下脚本从 pi-ai model catalog 生成:

node packages/dsh-billing/scripts/generate-catalog.mjs

当前限制

  • 费用是本地参考值,不是发票或强制限流依据。
  • quota 目前按 session 计算,部署级预算暂未实现。
  • 兼容 DeepSeek Harness 0.1.0-rc.6rc.80.1.1-rc.1rc.2;开发依赖固定在 0.1.1-rc.2

链接

许可证

MIT。

上一个 Prev dsh-context-lens 下一个 Next dsh-default-workspace-plugin