jev-filter

本地统计与看板

English

Jev Filter 支持本地数值账本和只读浏览器看板。配置后启用,不改变筛选结果、不缓存推理,也不额外运行主模型。

# 示例单价,请替换成核实过的美元/百万 token 单价。
jev-filter stats configure --model YOUR_MODEL --counter bytes \
  --input-rate 10 --jev-input-rate 0.042 --jev-output-rate 0 \
  --price-source "已核实的价格来源" --price-date 2026-09-23
jev-filter stats report
jev-filter stats dashboard
# 导出独立 HTML 快照,不覆盖已有文件:
jev-filter stats dashboard --html usage.html

看板输出带访问令牌的 127.0.0.1 地址,启动后自动用默认浏览器打开,按 Ctrl-C 停止服务。服务器/CI 可传 --no-open;打开浏览器失败也会保留终端链接和服务。不指定 --port 时先尝试 8765,被占用则自动选择空闲端口。显式指定的端口冲突返回 PortInUse;--port 0 总是选择空闲端口。可手动刷新、按模型、UTC 日期和计数方式筛选,以及导出当前筛选的全部 JSON。卡片、图表和明细采用同一筛选范围;表格显示最近 100 条。无需前端构建、外部脚本或云服务。

指标定义

目标模型来自本地配置,不会自动识别 Codex 或 Claude Code 的实际模型;更换计价目标时重新配置。每条记录保留当时的价格、日期和来源,后续配置不重算历史。未计算主模型缓存折扣、输出费用变化、税费及订阅额度。

计数方式

模式 行为
bytes 离线 UTF-8 字节数除以 4 向上取整,属于粗估,不是模型分词。
tiktoken 按受支持的模型映射在本地计数;需要 Python .[stats] 或包含该依赖的原生包。
openai 显式启用官方输入计数接口,通过 OPENAI_API_KEY 将比较的两份文本发给 OpenAI。
anthropic 显式启用官方消息计数接口,通过 ANTHROPIC_API_KEY 将两份文本发给 Anthropic。
python -m pip install 'jev-filter[stats]'
jev-filter stats configure --model gpt-5.4 --counter tiktoken --input-rate YOUR_RATE

未知模型映射会使配置失败,不会静默套用其他模型的编码。显式传 --encoding o200k_base 可选择代理编码估算,但不证明目标模型使用该编码。tiktoken 首次使用可能下载公开编码数据,后续读取本地编码数据;这不是语义结果缓存。原生构建包含 tokenizer 依赖。

官方计数模式每次比较顺序调用两次接口,不生成答案、不跟随重定向、不自动重试,会增加网络耗时。缺少 Key、接口错误和计数缺失保留未知,不影响原工具返回。配置文件不保存密钥,仅对允许对应供应商接收的内容启用在线计数。

官方接口计算的是独立消息中的文本,不是完整 Agent 请求。Claude 官方说明预估与实际用量可能略有差异;完整任务的实际节省仍需配对基线和主模型 usage。参考 OpenAI 计数文档 与 Claude 计数文档。

覆盖与存储

配置后自动记录 CLI 的 search、query、exec、code-search、locate、triage 和 batch。直接调用 Python helper、read/list、仅规划的调用及统计边界前的错误不在覆盖内。不会自动补记历史节省。

默认目录 ~/.local/share/jev-filter/stats,可用 JEV_STATS_DIR 更改。SQLite 只保存数值、模型/工具名、状态和价格元数据,不保存源码、查询、客户消息、原文档案路径或凭据。事务写入、私有权限;统计故障不会重试原工具。导出的 HTML/JSON 含这些统计信息,应作为私有数据保管。

jev-filter stats report --model YOUR_MODEL --since 2026-09-01 --until 2026-09-30
jev-filter stats disable                 # 保留历史,停止后续记录
JEV_STATS_DISABLED=1 jev-filter ...      # 跳过本次统计

本地 tokenizer、在线计数适配和看板有隔离测试;回归测试不会使用开发者的真实账本或在线计数配置。