fix: 支持零价系统渠道模型分发 (#303)

* docs(spec): 模型计费 - 记录零价免费模型设计

* fix(billing): 模型定价 - 支持零价免费模型

* fix(config): 系统模型目录 - 支持零价模型
This commit is contained in:
ahyang
2026-08-24 21:32:56 +08:00
committed by GitHub
parent 76035451f1
commit a23e399ccf
8 changed files with 79 additions and 28 deletions

View File

@@ -0,0 +1,10 @@
# 待测试清单
## 零价免费模型
1. 管理员设置启用系统渠道模型的按次价格为 `0` 后,普通用户刷新设置即可看到并成功创建任务。
2. 前台逻辑模型使用统一按次价格 `0` 后,普通用户可见并能成功创建任务。
3. 零价任务完成后,账单状态为已结算,用户可用积分和预留积分均不变化。
4. 零价 Token 任务在上游未返回 usage 时仍能以 `0` 结算;正价 Token 任务继续依赖 usage 结算。
5. 管理端提交任一负价格仍会被拒绝。
6. 未勾选价格已配置的默认零价模型仍不会向普通用户公开。

View File

@@ -0,0 +1,42 @@
# 零价免费模型设计
## 目标
管理员将系统渠道价格档或前台逻辑模型统一价格设为 `0` 时,该模型表示免费且可用。普通用户可以看到并创建对应任务,系统不扣减积分。
## 范围
- 系统渠道模型的固定按次、按秒和 Token 价格档允许零价。
- 前台逻辑模型的统一价格允许零价。
- 前台逻辑模型跟随渠道定价时,零价系统渠道线路仍可参与可用性和规格匹配。
- 任务继续经过现有鉴权、并发、频率、配额、审计、账单创建和结算流程,金额为 `0`。
## 非目标
- 不新增“免费”开关或数据库字段。
- 不改变负价格的校验规则。
- 不放宽管理员权限、渠道启用状态、模型启用状态或能力/规格匹配规则。
## 语义与数据流
价格有效性从“正数才有效”改为“非负数有效”。零价与正价一样进入公开模型目录;负数继续被管理端请求校验拒绝。
系统渠道目录会保留零价启用价格档,并将具有匹配有效价格档的模型标记为可用。普通用户前端继续只合并 `available=true` 的模型,因此无需为零价添加单独的客户端分支。
逻辑模型沿用现有路由可用性判断。统一定价为零时通过价格校验;跟随渠道价格时,零价渠道 SKU 可以匹配请求规格。
零价任务仍建立金额为 `0` 的账单订单和用量记录。积分余额、预留积分和退款金额保持不变,从而保留任务审计与运营统计,同时不绕过现有资源保护。
## 实现边界
- `backend/internal/service/price_validation.go` 统一价格有效性的判断。
- 既有系统目录、逻辑模型目录和任务创建链路复用该判断,不新增平行免费路径。
- 如零价订单在预扣或结算的数据库约束中不成立,仅在账单协调边界补足零金额分支,保持正价订单行为不变。
## 测试
- 零价固定按次、按秒和 Token 价格档通过有效性校验;负价格仍被拒绝。
- 启用的零价系统渠道模型出现在公开目录中并标记为可用。
- 零价系统渠道任务选择通过价格校验。
- 统一定价为零的前台逻辑模型可用。
- 零价账单不改变用户的可用或预留积分,并可以正常结算。