dsh-cost-meter
开发工具 活跃维护

dsh-cost-meter

Sttrevens/dsh-cost-meter

token用量与可自定义定价表计算美元花费,在dsh Web界面展示会话总花费、单消息底部花费徽章,悬浮即可查看细分费用明细,无需手动核算对话成本。

2
Stars 标星
0
Forks 分支
2
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
22 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:Sttrevens/dsh-cost-meter
git clone https://github.com/Sttrevens/dsh-cost-meter.git
git clone git@github.com:Sttrevens/dsh-cost-meter.git
README.md main

@steven-wu/dsh-cost-meter

Out-of-tree dsh plugin that
shows a live USD cost badge for the open conversation in the Web UI.

It is a dual-face dsh.client package:

  • Host half (lib/index.js) registers a sessionCost projection on the
    session-projection seam. The fold tracks the current provider/model from
    request/header events and accumulates cost from the provider-reported usage
    buckets (uncached input / output / cache-read / cache-write), reusing
    token-meter's "replace the same (turn, step) sample instead of
    double-counting" rule. The view exposes the whole-session totals plus a
    byTurn map keyed by turn number.
  • Client half (lib/client.js) registers a badge into the
    conversation.chat.assistant-actions slot — the action row at the end of each
    assistant message, alongside the turn's time/duration info. Each badge shows
    that turn's cost; hovering opens a tooltip with the per-bucket breakdown
    (input / output / cache-read / cache-write) plus the session total.

Pricing table

Pricing is USD per million tokens, keyed by provider/model:

{
  "per": 1000000,
  "currency": "USD",
  "default": { "input": 0.6525, "output": 1.9575, "cacheRead": 0.02175, "cacheWrite": 0 },
  "models": {
    "deepseek-official/deepseek-v4-pro":   { "input": 0.6525, "output": 1.9575,  "cacheRead": 0.02175, "cacheWrite": 0 },
    "deepseek-official/deepseek-v4-flash": { "input": 0.2175, "output": 0.6525,  "cacheRead": 0.00725, "cacheWrite": 0 }
  }
}

The plugin reads ~/.dsh/cost-pricing.json on boot (override the path with the
DSH_COST_PRICING env var or the row's config.pricingPath). On first run it
writes the default table to that path; edit it and restart dsh web to apply
changes. A model without a models entry falls back to default (zero cost
when no default is present).

Install

The package declares a dsh.bundle manifest, so dsh plugin add installs it
and adds it to the profile's bundle layers automatically — no manual patch
edit:

dsh plugin --profile web add @steven-wu/dsh-cost-meter
# restart the web profile, then refresh the page

For a local checkout during development:

dsh plugin --profile web add file:/path/to/dsh-cost-meter

Notes:

  • @deepseek-ai/dsh-* are declared as peerDependencies (resolved from the
    harness), never as dependencies — installing them into a profile shadows the
    harness copy and can pull a stale dist-tag.
  • The Settings "Plugins" panel is read-only (inventory + config cards); install
    happens only through dsh plugin --profile … add.
  • Purely-cordis mounting (a cordis.patch.yml insert row) also works — the
    shipped cordis.patch.yml holds that row for either path.

The sessionCost projection is delivered through the same seam as
tokenUsage / sessionStats, so it also appears in every projection carrier
(history tail page, session/projection push frames) without extra wiring.