Bundle
dsh-api-cost
DeepSeek Harness 插件:实时显示本会话 API 用量开销,按 provider token 用量 × 可配置费率计价,输入栏上方成本条。Real-time per-session API cost meter for DeepSeek Harness: prices provider-reported token usage with configurable rates and shows a live cost chip above the composer.
- Source
- CCCq-C
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 14 days ago
Readme
# dsh-api-cost
English | [中文](README.zh.md)
A Host + Web Client plugin for [deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)
(`dsh`): shows the **real-time per-session API cost** — the provider-reported
token usage (uncached input / cache-hit input / output) priced with a
configurable per-model rate table, rendered as a live chip above the composer.
Installable via `dsh plugin add`.
## Features
- **`apiCost` session projection** (host half): a pure fold over the session
log that prices each provider usage sample at the model's rate, so streaming
usage chunks update the cost live and the finalized `assistant/message` never
double-counts.
- **Composer-dock chip** (browser half): `API cost $0.0023 1.2K + 3.4K tok`,
updating in real time; hover shows a per-bucket breakdown (input / cache hit /
cache write / output, plus the model id).
- **Configurable pricing**: USD per one million tokens; unknown models fall back
to a default rate table, and per-model overrides ride the plugin row's
`config` (see [Configuration](#configuration)).
- **Bilingual UI** (中文 / English), following the host locale.
- **Self-contained**: no host-repository changes — the in-package
`cordis.patch.yml` inserts its own row as a bundle layer.
## Installation
```sh
dsh plugin --profile web add dsh-api-cost
```
The installer adds the package to the web profile's dependencies and bundle
list; after restarting `dsh web`, the loader applies the in-package
`cordis.patch.yml` automatically. Then open any session and send a message —
the cost chip appears above the composer and ticks up as tokens stream.
Manual install (same mechanism, bypassing the installer): edit
`$DSH_HOME/profiles/web/package.json` — add `"dsh-api-cost": "<version>"` to
`dependencies` and `"dsh-api-cost"` to the `dsh.profile.bundles` array — then
run `pnpm install` in that directory and restart.
Peer dependencies are the official `@deepseek-ai/*` packages (`^0.1.0-rc.6`)
plus `react`, all provided by the host.
## Configuration
The plugin ships usable defaults and has no `Config` schema: override pricing by
setting `config` on the `api-cost` row in the profile's `cordis.patch.yml`
(e.g. `$DSH_HOME/profiles/web/cordis.patch.yml`):
```yaml
- id: api-cost
config:
currency: USD
# fallback rates for unknown models (USD per 1M tokens)
rates:
input: 0.27
cacheRead: 0.07
cacheWrite: 0.27
output: 1.1
# per-model overrides (partial objects merge over `rates`)
models:
deepseek-chat:
input: 0.27
cacheRead: 0.07
cacheWrite: 0.27
output: 1.1
deepseek-reasoner:
input: 0.55
cacheRead: 0.14
cacheWrite: 0.55
output: 2.19
deepseek-v4-pro:
input: 0.27
cacheRead: 0.07
cacheWrite: 0.27
output: 1.1
deepseek-v4-flash:
input: 0.14
cacheRead: 0.03
cacheWrite: 0.14
output: 0.55
```
Billing buckets follow the harness `TokenUsage` convention (disjoint counts):
DeepSeek's `prompt_tokens` already includes cache hits, and the official
adapter subtracts `cacheReadTokens` out of `inputTokens`, so:
| bucket | meaning | rate |
|---|---|---|
| `inputTokens` | cache-miss input | `input` |
| `cacheReadTokens` | cache-hit input | `cacheRead` |
| `cacheWriteTokens` | cache write (not reported by DeepSeek) | `cacheWrite` |
| `outputTokens` | output | `output` |
> `deepseek-v4-pro` / `deepseek-v4-flash` defaults are placeholders — update
> them once official pricing is published.
## Projection
The `apiCost` session projection exposes:
| field | meaning |
|---|---|
| `cost` | total cost (currency units) |
| `inputCost` / `cacheReadCost` / `cacheWriteCost` / `outputCost` | per-bucket cost |
| `inputTokens` / `cacheReadTokens` / `cacheWriteTokens` / `outputTokens` | per-bucket tokens |
| `model` / `provider` | current route (last-wins) |
| `currency` | currency code |
## Known Limitations
- **Estimate, not a bill**: cost is computed from the local session log and may
differ from the official invoice (provider-side caching, price changes,
model renames). The rate table is the single source of truth — keep it
current.
- **Model-switch granularity**: each usage sample is priced at the route that
was current when it was reported, so switching models mid-session prices
later steps at the new model's rate.
- **Subagents** have their own session ids and are not aggregated into the
parent session's chip.
## License
[MIT](LICENSE)
Install
dsh plugin --profile web add github:CCCq-C/dsh-api-cost
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-api-cost from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.