root
db1cb7182d
refactor(billing)!: 计费全部沉入插件,内核零 billing 代码;规则由插件自持
按维护者要求(issue #1 回复方向):内核不处理任何 billing 特有逻辑;插件有完整
OS 权限,自己保存配置文件。据此不再保留任何"内核 ↔ billing 插件"的专用对接。
- `internal/billing`(Go 编译器 + 测试):删除;
- `internal/core` 的 billing 接口/降级应用/规则加载:删除(含 `billingPath`);
- `internal/gateway` 的 `/api/plugins/billing/rules` 端点与测试:删除;
- `config` 的 `BillingDSL/Profile/Rule/Token/Peak/LongContext` 与校验、
`billing:`/`billing_file:` 配置段:删除。系统配置里不再有 billing 段。
内核只保留所有插件通用的能力:加载 .lua、插件状态持久化、插件目录
(`__llmsproxy_plugin_dir`)、`plugin.http` 路由、插件可用的 io/os。
- 规则文件移到**插件自己的目录**:`<plugin_dir>/billing.json`,由插件用 io 自己
读写(tmp + rename 原子替换);加载插件时自己读文件并编译;
- 规则以**源名** `source` 为键(`url:"*"` 仅表示全局模型价目表):URL→源名映射
属于内核配置,插件不为它和内核对接;编辑页在浏览器里取 `/api/sources` 选源名;
- 规则编辑 API 改为插件自己的 `/api/plugins/http/billing/rules`
(GET/PUT/POST/DELETE,roles=admin),写盘也在插件内完成;
- 计费账目仍在插件状态文件(内核通用持久化)`<plugin_dir>/.billing.state.json`;
- `priceFor` 落地 profile 级 `default` 策略与显式 `mode=unpriced` 的优先级。
生产已迁移:`config.yaml` 的 `billing:` 规则转为 `plugins/billing.json`(按源名
重写),并从系统配置中移除;规则文件与系统配置从此各自独立保存。
- `internal/lua/billing_rules_test.go`:插件自写 billing.json 并重启恢复、
free/subscription/token/通配符编译语义、1e6+1e6 token = 0.75 端到端、
非法规则被拒且不覆盖旧文件、reasoning/long_context/peak;
- `internal/lua/billing_test.go`:profile default 策略三态 + 显式 unpriced 优先;
- `internal/lua/billing_ui_test.go`:规则编辑页仍挂在 billing 页内、列宽/列数守卫。
(cherry picked from commit 7941b4110a)
2026-10-20 19:09:22 +08:00
..
2026-10-19 22:35:47 +08:00
2026-10-20 19:09:22 +08:00
2026-10-16 20:47:50 +08:00
2026-10-15 20:31:45 +08:00
2026-10-16 14:52:13 +08:00
2026-10-15 20:31:45 +08:00
2026-10-14 16:52:58 +08:00
2026-10-20 08:27:41 +08:00
2026-10-14 16:52:58 +08:00
2026-10-20 08:27:41 +08:00
2026-10-06 15:02:42 +08:00
2026-10-12 16:37:23 +08:00
2026-10-11 09:23:34 +08:00
2026-10-11 09:23:34 +08:00
2026-10-17 00:01:33 +08:00
2026-10-02 12:41:35 +08:00
2026-10-20 19:09:22 +08:00
2026-10-20 19:09:22 +08:00
2026-10-20 19:09:22 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-12 12:32:10 +08:00
2026-10-14 16:52:58 +08:00
2026-10-02 10:45:20 +08:00
2026-10-14 16:52:58 +08:00
2026-10-02 14:07:44 +08:00
2026-10-13 06:57:28 +08:00
2026-10-13 06:57:28 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-04 14:50:46 +08:00
2026-10-11 09:35:32 +08:00
2026-10-05 08:17:57 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 13:25:11 +08:00
2026-10-11 10:03:43 +08:00
2026-10-12 12:32:10 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-05 08:17:57 +08:00
2026-10-05 08:17:57 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 09:35:32 +08:00
2026-10-11 09:35:32 +08:00
2026-10-15 15:02:04 +08:00
2026-10-13 06:57:28 +08:00
2026-10-13 06:57:28 +08:00
2026-10-19 13:43:27 +08:00
2026-10-13 06:57:28 +08:00
2026-10-16 00:56:35 +08:00
2026-10-14 16:52:58 +08:00
2026-10-16 00:56:35 +08:00
2026-10-11 20:50:52 +08:00
2026-10-07 17:37:22 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 13:25:11 +08:00
2026-10-15 22:43:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-11 09:35:32 +08:00
2026-10-04 14:50:46 +08:00
2026-10-14 16:52:58 +08:00
2026-10-16 00:56:35 +08:00
2026-10-07 17:37:22 +08:00
2026-10-11 09:35:32 +08:00
2026-10-12 12:32:10 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-12 16:32:30 +08:00
2026-10-14 16:52:58 +08:00
2026-10-11 08:17:56 +08:00
2026-10-11 09:35:32 +08:00
2026-10-19 22:35:47 +08:00
2026-10-12 19:07:17 +08:00
2026-10-19 22:35:47 +08:00